diff --git a/app/src/main/java/me/zhanghai/android/files/filelist/FileListFragment.kt b/app/src/main/java/me/zhanghai/android/files/filelist/FileListFragment.kt index df31b7a92..919bf2c26 100644 --- a/app/src/main/java/me/zhanghai/android/files/filelist/FileListFragment.kt +++ b/app/src/main/java/me/zhanghai/android/files/filelist/FileListFragment.kt @@ -367,6 +367,9 @@ class FileListFragment : Fragment(), BreadcrumbLayout.Listener, FileListAdapter. viewModel.fileListLiveData.observe(viewLifecycleOwner) { onFileListChanged(it) } Settings.FILE_LIST_SHOW_HIDDEN_FILES.observe(viewLifecycleOwner) { onShowHiddenFilesChanged(it) + Settings.GRID_COLUMNS.observe(viewLifecycleOwner) { + updateSpanCount() + } } } @@ -654,18 +657,33 @@ class FileListFragment : Fragment(), BreadcrumbLayout.Listener, FileListAdapter. } private fun updateSpanCount() { - layoutManager.spanCount = when (viewModel.viewType) { + val lm = binding.recyclerView.layoutManager as? GridLayoutManager ?: return + + val newSpan = when (viewModel.viewType) { FileViewType.LIST -> 1 + FileViewType.GRID -> { var widthDp = resources.configuration.screenWidthDp - val persistentDrawerLayout = binding.persistentDrawerLayout - if (persistentDrawerLayout != null && - persistentDrawerLayout.isDrawerOpen(GravityCompat.START)) { + val drawer = binding.persistentDrawerLayout + + if (drawer != null && drawer.isDrawerOpen(GravityCompat.START)) { widthDp -= getDimensionDp(R.dimen.navigation_max_width).roundToInt() } - (widthDp / 180).coerceAtLeast(2) + + val pref = Settings.GRID_COLUMNS.value?.toIntOrNull() ?: 0 + + if (pref == 0) { + (widthDp / 120).coerceAtLeast(2) + } else { + pref + } } } + + if (lm.spanCount != newSpan) { + lm.spanCount = newSpan + binding.recyclerView.requestLayout() + } } private fun onSortOptionsChanged(sortOptions: FileSortOptions) { diff --git a/app/src/main/java/me/zhanghai/android/files/settings/Settings.kt b/app/src/main/java/me/zhanghai/android/files/settings/Settings.kt index d2a8e2035..861abfd4d 100644 --- a/app/src/main/java/me/zhanghai/android/files/settings/Settings.kt +++ b/app/src/main/java/me/zhanghai/android/files/settings/Settings.kt @@ -12,6 +12,7 @@ import java8.nio.file.Paths import me.zhanghai.android.files.R import me.zhanghai.android.files.app.application import me.zhanghai.android.files.compat.EnvironmentCompat2 +import me.zhanghai.android.files.filelist.FileListFragment import me.zhanghai.android.files.filelist.FileSortOptions import me.zhanghai.android.files.filelist.FileViewType import me.zhanghai.android.files.filelist.OpenApkDefaultAction @@ -132,6 +133,11 @@ object Settings { TextUtils.TruncateAt::class.java ) + val GRID_COLUMNS: SettingLiveData = + StringSettingLiveData( + R.string.pref_key_grid_columns, R.string.pref_default_value_grid_columns + ) + val STANDARD_DIRECTORY_SETTINGS: SettingLiveData> = ParcelValueSettingLiveData(R.string.pref_key_standard_directory_settings, emptyList()) diff --git a/app/src/main/res/layout/file_item_grid.xml b/app/src/main/res/layout/file_item_grid.xml index b599277e2..db4d57d32 100644 --- a/app/src/main/res/layout/file_item_grid.xml +++ b/app/src/main/res/layout/file_item_grid.xml @@ -30,6 +30,7 @@ android:layout_height="match_parent" android:duplicateParentState="true" android:scaleType="fitCenter" + android:padding="4dp" android:src="@drawable/file_directory_thumbnail" /> - - - + android:scaleType="fitCenter" /> - - - 16dp + 1dp 12dp 8dp - 4dp + 0dp 8dp 0dp 72dp @@ -38,9 +38,9 @@ 18dp 24dp 40dp - 48dp + 24dp 12dp - 4dp + 0dp 18dp 19dp diff --git a/app/src/main/res/values/donottranslate_prefs.xml b/app/src/main/res/values/donottranslate_prefs.xml index 5edcd3425..b11b6a342 100644 --- a/app/src/main/res/values/donottranslate_prefs.xml +++ b/app/src/main/res/values/donottranslate_prefs.xml @@ -59,6 +59,15 @@ 2 3 + key_grid_columns + 0 + + 0 + 3 + 4 + 5 + 6 + key_standard_directories key_bookmark_directories key_root_strategy diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 964179529..4ffabd852 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -755,6 +755,14 @@ Ellipsize the end Marquee + Grid columns count + + Default + 3 + 4 + 5 + 6 + Behavior Default folder @string/storage_list_title diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index 8cdac819a..050b6e153 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -53,6 +53,14 @@ android:entries="@array/settings_file_name_ellipsize_entries" android:entryValues="@array/pref_entry_values_file_name_ellipsize" app:useSimpleSummaryProvider="true" /> + +