Enable change animations in the conversation list.

This commit is contained in:
Greyson Parrelli
2026-02-23 11:44:58 -05:00
committed by Cody Henthorne
parent 58774033b7
commit fadbb0adc5
2 changed files with 39 additions and 3 deletions

View File

@@ -492,7 +492,6 @@ public class ConversationListFragment extends MainFragment implements Conversati
initializeSearchListener(); initializeSearchListener();
initializeFilterListener(); initializeFilterListener();
itemAnimator.disable();
SpoilerAnnotation.resetRevealedSpoilers(); SpoilerAnnotation.resetRevealedSpoilers();
if (mainToolbarViewModel.getState().getValue().getMode() != MainToolbarMode.SEARCH && list.getAdapter() != defaultAdapter) { if (mainToolbarViewModel.getState().getValue().getMode() != MainToolbarMode.SEARCH && list.getAdapter() != defaultAdapter) {
@@ -550,7 +549,6 @@ public class ConversationListFragment extends MainFragment implements Conversati
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
AppForegroundObserver.addListener(appForegroundObserver); AppForegroundObserver.addListener(appForegroundObserver);
itemAnimator.disable();
} }
@Override @Override
@@ -1576,6 +1574,34 @@ public class ConversationListFragment extends MainFragment implements Conversati
chatFolderList.getLayoutManager().startSmoothScroll(smoothScroller); chatFolderList.getLayoutManager().startSmoothScroll(smoothScroller);
} }
// Manage change animations so we don't animate the list when switching folders
itemAnimator.disableChangeAnimations();
defaultAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged() {
defaultAdapter.unregisterAdapterDataObserver(this);
itemAnimator.enableChangeAnimations();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
defaultAdapter.unregisterAdapterDataObserver(this);
itemAnimator.enableChangeAnimations();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
defaultAdapter.unregisterAdapterDataObserver(this);
itemAnimator.enableChangeAnimations();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
defaultAdapter.unregisterAdapterDataObserver(this);
itemAnimator.enableChangeAnimations();
}
});
viewModel.select(chatFolder); viewModel.select(chatFolder);
} }

View File

@@ -16,9 +16,9 @@ public class ConversationListItemAnimator extends DefaultItemAnimator {
private boolean shouldDisable; private boolean shouldDisable;
public ConversationListItemAnimator() { public ConversationListItemAnimator() {
setSupportsChangeAnimations(false);
setMoveDuration(0); setMoveDuration(0);
setAddDuration(0); setAddDuration(0);
setChangeDuration(ANIMATION_DURATION);
} }
@MainThread @MainThread
@@ -32,6 +32,16 @@ public class ConversationListItemAnimator extends DefaultItemAnimator {
setMoveDuration(0); setMoveDuration(0);
} }
@MainThread
public void disableChangeAnimations() {
setChangeDuration(0);
}
@MainThread
public void enableChangeAnimations() {
setChangeDuration(ANIMATION_DURATION);
}
/** /**
* We need to reasonably ensure that the animation has started before we disable things here, so we add a slight delay. * We need to reasonably ensure that the animation has started before we disable things here, so we add a slight delay.