From 8ee9331222698465ab1f944d2d336e7a050f54f4 Mon Sep 17 00:00:00 2001 From: Mygod Date: Sun, 17 Dec 2017 00:21:31 -0800 Subject: [PATCH] Improve performance of reordering profiles --- .../java/com/github/shadowsocks/ProfilesFragment.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt b/mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt index 0bc25758..6a379aa6 100644 --- a/mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt +++ b/mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt @@ -223,6 +223,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { inner class ProfilesAdapter : RecyclerView.Adapter() { internal val profiles = ProfileManager.getAllProfiles()?.toMutableList() ?: mutableListOf() + private val updated = HashSet() init { setHasStableIds(true) // see: http://stackoverflow.com/a/32488059/2245107 @@ -252,13 +253,17 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { next.userOrder = previousOrder previousOrder = order profiles[i] = next - ProfileManager.updateProfile(next) + updated.add(next) } first.userOrder = previousOrder profiles[to] = first - ProfileManager.updateProfile(first) + updated.add(first) notifyItemMoved(from, to) } + fun commitMove() { + updated.forEach { ProfileManager.updateProfile(it) } + updated.clear() + } fun remove(pos: Int) { profiles.removeAt(pos) @@ -347,6 +352,10 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { profilesAdapter.move(viewHolder.adapterPosition, target.adapterPosition) return true } + override fun clearView(recyclerView: RecyclerView?, viewHolder: RecyclerView.ViewHolder?) { + super.clearView(recyclerView, viewHolder) + profilesAdapter.commitMove() + } }).attachToRecyclerView(profilesList) }