diff --git a/changelog/unreleased/4884 b/changelog/unreleased/4884 new file mode 100644 index 00000000000..717efb05d44 --- /dev/null +++ b/changelog/unreleased/4884 @@ -0,0 +1,6 @@ +Bugfix: Grid mode after rotation + +Grid mode now recalculates its column count after device rotation, keeping +file tiles in the correct layout for the new orientation. + +https://github.com/owncloud/android/issues/4884 diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/files/filelist/MainFileListFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/files/filelist/MainFileListFragment.kt index cbcc73f3cad..2614384bdca 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/files/filelist/MainFileListFragment.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/files/filelist/MainFileListFragment.kt @@ -335,6 +335,9 @@ class MainFileListFragment : Fragment(), override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) updateConfigDependentSizes() + if (::viewType.isInitialized && viewType == ViewType.VIEW_TYPE_GRID) { + updateRecyclerViewLayoutForCurrentViewType() + } } private fun updateConfigDependentSizes() { @@ -998,17 +1001,30 @@ class MainFileListFragment : Fragment(), } override fun onViewTypeListener(viewType: ViewType) { + this.viewType = viewType binding.optionsLayout.viewTypeSelected = viewType if (viewType == ViewType.VIEW_TYPE_LIST) { mainFileListViewModel.setListModeAsPreferred() - layoutManager.spanCount = 1 } else { mainFileListViewModel.setGridModeAsPreferred() - layoutManager.spanCount = ColumnQuantity(requireContext(), R.layout.grid_item).calculateNoOfColumns() } + updateRecyclerViewLayoutForCurrentViewType() + } + + private fun updateRecyclerViewLayoutForCurrentViewType() { + if (!::layoutManager.isInitialized || !::fileListAdapter.isInitialized) { + return + } + + layoutManager.spanCount = when (viewType) { + ViewType.VIEW_TYPE_LIST -> 1 + ViewType.VIEW_TYPE_GRID -> ColumnQuantity(requireContext(), R.layout.grid_item).calculateNoOfColumns() + } + layoutManager.invalidateSpanAssignments() + binding.recyclerViewMainFileList.requestLayout() fileListAdapter.notifyItemRangeChanged(0, fileListAdapter.itemCount) } @@ -1675,4 +1691,3 @@ class MainFileListFragment : Fragment(), } } } -