From e87b8748c4a6c4239601edb346fbb302fb0a56fd Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 18 Apr 2025 21:47:40 +0200 Subject: [PATCH] fix FAB not shriking --- .../ui/ConversationsOverviewFragment.java | 34 +++++++++++-------- .../ui/ExtendedFabSizeChanger.java | 14 +++++--- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java index 04853ddd2781e49aaac500c8e543921f15953fba..8b1f50a00e705f752fbace9df7fa6a1ec5b0f13e 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java @@ -378,15 +378,17 @@ public class ConversationsOverviewFragment extends XmppFragment { if (this.binding == null) { return null; } - LinearLayoutManager layoutManager = - (LinearLayoutManager) this.binding.list.getLayoutManager(); - int position = layoutManager.findFirstVisibleItemPosition(); - final View view = this.binding.list.getChildAt(0); - if (view != null) { - return new ScrollState(position, view.getTop()); - } else { - return new ScrollState(position, 0); + if (this.binding.list.getLayoutManager() + instanceof LinearLayoutManager linearLayoutManager) { + final int position = linearLayoutManager.findFirstVisibleItemPosition(); + final View view = this.binding.list.getChildAt(0); + if (view != null) { + return new ScrollState(position, view.getTop()); + } else { + return new ScrollState(position, 0); + } } + return null; } @Override @@ -473,18 +475,22 @@ public class ConversationsOverviewFragment extends XmppFragment { } } this.conversationsAdapter.notifyDataSetChanged(); - ScrollState scrollState = pendingScrollState.pop(); + final var scrollState = pendingScrollState.pop(); if (scrollState != null) { setScrollPosition(scrollState); } } - private void setScrollPosition(ScrollState scrollPosition) { - if (scrollPosition != null) { - LinearLayoutManager layoutManager = - (LinearLayoutManager) binding.list.getLayoutManager(); - layoutManager.scrollToPositionWithOffset( + private void setScrollPosition(@NonNull final ScrollState scrollPosition) { + if (binding.list.getLayoutManager() instanceof LinearLayoutManager linearLayoutManager) { + linearLayoutManager.scrollToPositionWithOffset( scrollPosition.position, scrollPosition.offset); + if (scrollPosition.position > 0) { + binding.fab.shrink(); + } else { + binding.fab.extend(); + } + binding.fab.clearAnimation(); } } } diff --git a/src/main/java/eu/siacs/conversations/ui/ExtendedFabSizeChanger.java b/src/main/java/eu/siacs/conversations/ui/ExtendedFabSizeChanger.java index 6c21f1a2d1c327aed2dce19b117fe558530df903..48ada71d9d650699398e782eea0c8dc903bf17e2 100644 --- a/src/main/java/eu/siacs/conversations/ui/ExtendedFabSizeChanger.java +++ b/src/main/java/eu/siacs/conversations/ui/ExtendedFabSizeChanger.java @@ -16,11 +16,15 @@ public class ExtendedFabSizeChanger extends RecyclerView.OnScrollListener { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); - if (RecyclerViews.findFirstVisibleItemPosition(recyclerView) > 0) { - extendedFloatingActionButton.shrink(); - } else { - extendedFloatingActionButton.extend(); - } + final var firstVisibleItem = RecyclerViews.findFirstVisibleItemPosition(recyclerView); + recyclerView.post( + () -> { + if (firstVisibleItem > 0) { + extendedFloatingActionButton.shrink(); + } else { + extendedFloatingActionButton.extend(); + } + }); } public static RecyclerView.OnScrollListener of(final ExtendedFloatingActionButton fab) {