Change summary
src/main/java/eu/siacs/conversations/ui/ConversationsOverviewFragment.java | 34
src/main/java/eu/siacs/conversations/ui/ExtendedFabSizeChanger.java | 14
2 files changed, 29 insertions(+), 19 deletions(-)
Detailed changes
@@ -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();
}
}
}
@@ -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) {