Add item animator to chat folders.

This commit is contained in:
Michelle Tang 2024-10-30 14:41:02 -04:00 committed by GitHub
parent fe40324599
commit 21c359f919
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 9 deletions

View file

@ -8,10 +8,10 @@ data class ChatFolderMappingModel(
val isSelected: Boolean
) : MappingModel<ChatFolderMappingModel> {
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
}
}

View file

@ -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<ChatFolderMappingModel> 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) {