From 21c359f91945ab58d2f420d1ce7e0f472996ab9e Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Wed, 30 Oct 2024 14:41:02 -0400 Subject: [PATCH] Add item animator to chat folders. --- .../ChatFolderMappingModel.kt | 4 ++-- .../ConversationListFragment.java | 22 +++++++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ChatFolderMappingModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ChatFolderMappingModel.kt index 14d3d0e8d0..2285a015f6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ChatFolderMappingModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ChatFolderMappingModel.kt @@ -8,10 +8,10 @@ data class ChatFolderMappingModel( val isSelected: Boolean ) : MappingModel { override fun areItemsTheSame(newItem: ChatFolderMappingModel): Boolean { - return chatFolder == newItem.chatFolder + return chatFolder.id == newItem.chatFolder.id } override fun areContentsTheSame(newItem: ChatFolderMappingModel): Boolean { - return areItemsTheSame(newItem) && isSelected == newItem.isSelected + return chatFolder == newItem.chatFolder && isSelected == newItem.isSelected } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index e989cafe84..9c807bbfc3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -64,6 +64,7 @@ import androidx.core.view.ViewCompat; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.fragment.NavHostFragment; +import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearSmoothScroller; @@ -172,7 +173,6 @@ import org.thoughtcrime.securesms.util.AppStartup; import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.CachedInflater; import org.thoughtcrime.securesms.util.ConversationUtil; -import org.thoughtcrime.securesms.util.RemoteConfig; import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.SignalLocalMetrics; import org.thoughtcrime.securesms.util.SignalProxyUtil; @@ -393,11 +393,12 @@ public class ConversationListFragment extends MainFragment implements ActionMode archiveDecoration = new ConversationListArchiveItemDecoration(new ColorDrawable(getResources().getColor(R.color.conversation_list_archive_background_end))); itemAnimator = new ConversationListItemAnimator(); - chatFolderAdapter = new ChatFolderAdapter(this); + chatFolderAdapter = new ChatFolderAdapter(this); + DefaultItemAnimator chatFolderItemAnimator = getChatFolderItemAnimator(); chatFolderList.setLayoutManager(new LinearLayoutManager(requireActivity(), LinearLayoutManager.HORIZONTAL, false)); chatFolderList.setAdapter(chatFolderAdapter); - chatFolderList.setItemAnimator(null); + chatFolderList.setItemAnimator(chatFolderItemAnimator); list.setLayoutManager(new LinearLayoutManager(requireActivity())); list.setItemAnimator(itemAnimator); @@ -479,6 +480,16 @@ public class ConversationListFragment extends MainFragment implements ActionMode }; } + private @NonNull DefaultItemAnimator getChatFolderItemAnimator() { + int duration = 150; + DefaultItemAnimator animator = new DefaultItemAnimator(); + animator.setAddDuration(duration); + animator.setMoveDuration(duration); + animator.setRemoveDuration(duration); + animator.setChangeDuration(duration); + return animator; + } + @Override public void onDestroyView() { coordinator = null; @@ -1067,10 +1078,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode private void onChatFoldersChanged(List folders) { chatFolderList.setVisibility(folders.size() > 1 && !isArchived() ? View.VISIBLE : View.GONE); - if (chatFolderList.getLayoutManager() != null) { - Parcelable savedState = chatFolderList.getLayoutManager().onSaveInstanceState(); - chatFolderAdapter.submitList(new ArrayList<>(folders), () -> chatFolderList.getLayoutManager().onRestoreInstanceState(savedState)); - } + chatFolderAdapter.submitList(new ArrayList<>(folders)); } private void onMegaphoneChanged(@NonNull Megaphone megaphone) {