From c8507b52ade7c89821757c62b3fe106b65cbcdff Mon Sep 17 00:00:00 2001 From: ayushbhanu Date: Tue, 29 Nov 2022 22:13:42 +0530 Subject: [PATCH 1/4] Ayush --- .../ui/fragment/ExtendedListFragment.java | 33 +++++++++++++++++-- .../ui/fragment/OCFileListFragment.java | 14 +++++--- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java index 233cc36b6b89..9f0ba5017dee 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -33,6 +33,7 @@ import android.os.Looper; import android.text.TextUtils; import android.util.DisplayMetrics; +import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -161,13 +162,13 @@ public void setLoading(boolean enabled) { public void switchToGridView() { if (!isGridEnabled()) { - getRecyclerView().setLayoutManager(new GridLayoutManager(getContext(), getColumnsCount())); + getRecyclerView().setLayoutManager(new WrapContentGridLayoutManager(getContext(), getColumnsCount())); } } public void switchToListView() { if (isGridEnabled()) { - getRecyclerView().setLayoutManager(new LinearLayoutManager(getContext())); + getRecyclerView().setLayoutManager(new WrapContentLinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false)); } } @@ -699,3 +700,31 @@ protected void setGridSwitchButton() { } } } +class WrapContentLinearLayoutManager extends LinearLayoutManager { + public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { + super(context, orientation, reverseLayout); + } + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { + try { + super.onLayoutChildren(recycler, state); + } catch (IndexOutOfBoundsException e) { + Log.e("TAG", "meet a IOOBE in RecyclerView"); + } + } +} + + +class WrapContentGridLayoutManager extends GridLayoutManager { + public WrapContentGridLayoutManager(Context context, int spanCount) { + super(context, spanCount); + } + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { + try { + super.onLayoutChildren(recycler, state); + } catch (IndexOutOfBoundsException e) { + Log.e("TAG", "meet a IOOBE in RecyclerView"); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index a188cddbfd5f..d8f04c61b234 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -1431,18 +1431,19 @@ public void switchLayoutManager(boolean grid) { if (getRecyclerView().getLayoutManager() != null) { position = ((LinearLayoutManager) getRecyclerView().getLayoutManager()) - .findFirstCompletelyVisibleItemPosition(); + .findFirstCompletelyVisibleItemPosition(); } RecyclerView.LayoutManager layoutManager; if (grid) { - layoutManager = new GridLayoutManager(getContext(), getColumnsCount()); - ((GridLayoutManager) layoutManager).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { + //layoutManager = new GridLayoutManager(getContext(), getColumnsCount()); + layoutManager=new WrapContentGridLayoutManager(getContext(),getColumnsCount()); + ((WrapContentGridLayoutManager) layoutManager).setSpanSizeLookup(new WrapContentGridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { if (position == getAdapter().getItemCount() - 1 || position == 0 && getAdapter().shouldShowHeader()) { - return ((GridLayoutManager) layoutManager).getSpanCount(); + return ((WrapContentGridLayoutManager) layoutManager).getSpanCount(); } else { return 1; } @@ -1450,9 +1451,12 @@ public int getSpanSize(int position) { }); } else { - layoutManager = new LinearLayoutManager(getContext()); + //layoutManager = new LinearLayoutManager(getContext()); + layoutManager=new WrapContentLinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false); } + getRecyclerView().getLayoutManager().removeAllViews(); + // getRecyclerView().getRecycledViewPool().clear(); getRecyclerView().setLayoutManager(layoutManager); getRecyclerView().scrollToPosition(position); getAdapter().setGridView(grid); From 0e56b06d2f2165c23cb4bcca13069a33a2e3d3a2 Mon Sep 17 00:00:00 2001 From: ayushbhanu Date: Tue, 29 Nov 2022 23:28:57 +0530 Subject: [PATCH 2/4] Ayush --- .../android/ui/fragment/ExtendedListFragment.java | 13 +++++++++++++ .../android/ui/fragment/OCFileListFragment.java | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java index 9f0ba5017dee..6ea8e0fe3e1a 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -149,7 +149,9 @@ public class ExtendedListFragment extends Fragment implements private ListFragmentBinding binding; protected void setRecyclerViewAdapter(RecyclerView.Adapter recyclerViewAdapter) { + mRecyclerView.getRecycledViewPool().clear(); mRecyclerView.setAdapter(recyclerViewAdapter); + mRecyclerView.getAdapter().notifyDataSetChanged(); } protected RecyclerView getRecyclerView() { @@ -704,6 +706,11 @@ class WrapContentLinearLayoutManager extends LinearLayoutManager { public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); } + + @Override + public boolean supportsPredictiveItemAnimations() { + return false; + } @Override public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { try { @@ -719,6 +726,12 @@ class WrapContentGridLayoutManager extends GridLayoutManager { public WrapContentGridLayoutManager(Context context, int spanCount) { super(context, spanCount); } + + @Override + public boolean supportsPredictiveItemAnimations() { + return false; + } + @Override public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { try { diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index d8f04c61b234..c376a1b2dcca 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -1456,7 +1456,7 @@ public int getSpanSize(int position) { } getRecyclerView().getLayoutManager().removeAllViews(); - // getRecyclerView().getRecycledViewPool().clear(); + getRecyclerView().getRecycledViewPool().clear(); getRecyclerView().setLayoutManager(layoutManager); getRecyclerView().scrollToPosition(position); getAdapter().setGridView(grid); From a0d1b2d713e6f78f3876b7bb8fd2050215f8060e Mon Sep 17 00:00:00 2001 From: ayushbhanu Date: Tue, 29 Nov 2022 23:30:38 +0530 Subject: [PATCH 3/4] Ayush --- .../com/owncloud/android/ui/fragment/OCFileListFragment.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index c376a1b2dcca..193b3e2091cb 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -1430,8 +1430,7 @@ public void switchLayoutManager(boolean grid) { int position = 0; if (getRecyclerView().getLayoutManager() != null) { - position = ((LinearLayoutManager) getRecyclerView().getLayoutManager()) - .findFirstCompletelyVisibleItemPosition(); + position = ((LinearLayoutManager) getRecyclerView().getLayoutManager()).findFirstCompletelyVisibleItemPosition(); } RecyclerView.LayoutManager layoutManager; From 5feb218555a953262369ba97a393678791e17fe2 Mon Sep 17 00:00:00 2001 From: ayushbhanu Date: Tue, 29 Nov 2022 23:31:36 +0530 Subject: [PATCH 4/4] Ayush --- .../com/owncloud/android/ui/fragment/OCFileListFragment.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index 193b3e2091cb..58a034ceca1d 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -1430,7 +1430,8 @@ public void switchLayoutManager(boolean grid) { int position = 0; if (getRecyclerView().getLayoutManager() != null) { - position = ((LinearLayoutManager) getRecyclerView().getLayoutManager()).findFirstCompletelyVisibleItemPosition(); + position = ((LinearLayoutManager) getRecyclerView().getLayoutManager()) + .findFirstCompletelyVisibleItemPosition(); } RecyclerView.LayoutManager layoutManager;