Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
}
}

Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -132,6 +133,11 @@ object Settings {
TextUtils.TruncateAt::class.java
)

val GRID_COLUMNS: SettingLiveData<String> =
StringSettingLiveData(
R.string.pref_key_grid_columns, R.string.pref_default_value_grid_columns
)

val STANDARD_DIRECTORY_SETTINGS: SettingLiveData<List<StandardDirectorySettings>> =
ParcelValueSettingLiveData(R.string.pref_key_standard_directory_settings, emptyList())

Expand Down
56 changes: 29 additions & 27 deletions app/src/main/res/layout/file_item_grid.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
android:layout_height="match_parent"
android:duplicateParentState="true"
android:scaleType="fitCenter"
android:padding="4dp"
android:src="@drawable/file_directory_thumbnail" />

<me.zhanghai.android.files.ui.DisabledAlphaImageView
Expand Down Expand Up @@ -58,15 +59,6 @@
android:layout_height="match_parent"
android:background="@drawable/file_item_grid_thumbnail_outline"
android:duplicateParentState="true" />
</me.zhanghai.android.files.ui.AspectRatioFrameLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/single_line_list_item_height"
android:layout_marginBottom="@dimen/screen_edge_margin_minus_8dp"
android:duplicateParentState="true"
android:gravity="center_vertical"
android:orientation="horizontal">

<FrameLayout
android:id="@+id/iconLayout"
Expand All @@ -78,17 +70,16 @@

<me.zhanghai.android.files.ui.DisabledAlphaImageView
android:id="@+id/iconImage"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_gravity="center"
android:layout_width="24dp"
android:layout_height="24dp"
android:duplicateParentState="true"
android:scaleType="centerCrop" />
android:scaleType="fitCenter" />

<me.zhanghai.android.files.ui.DisabledAlphaImageView
android:id="@+id/appIconBadgeImage"
android:layout_width="@dimen/badge_size_plus_1dp"
android:layout_height="@dimen/badge_size_plus_1dp"
android:layout_gravity="end|bottom"
android:layout_gravity="start|top"
android:layout_marginStart="-0.5dp"
android:layout_marginEnd="-0.5dp"
android:layout_marginTop="-0.5dp"
Expand All @@ -99,29 +90,18 @@
android:id="@+id/badgeImage"
android:layout_width="@dimen/badge_size"
android:layout_height="@dimen/badge_size"
android:layout_gravity="end|bottom"
android:layout_gravity="start|top"
android:background="@drawable/badge_background_18dp"
android:duplicateParentState="true" />

<me.zhanghai.android.files.ui.DisabledAlphaImageView
android:layout_width="@dimen/badge_size"
android:layout_height="@dimen/badge_size"
android:layout_gravity="end|bottom"
android:layout_gravity="start|top"
android:duplicateParentState="true"
android:src="@drawable/checkable_badge_18dp" />
</FrameLayout>

<TextView
android:id="@+id/nameText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:duplicateParentState="true"
android:ellipsize="end"
android:gravity="center"
android:maxLines="2"
android:textAppearance="?textAppearanceListItemSecondary" />

<!--
~ Cannot use android:duplicateParentState="true" because a button needs to have its own
~ pressed state, etc. Necessary states will be duplicated manually in the adapter
Expand All @@ -132,10 +112,32 @@
android:layout_width="@dimen/touch_target_size"
android:layout_height="@dimen/touch_target_size"
android:layout_marginEnd="@dimen/screen_edge_margin_minus_12dp"
android:layout_gravity="end|center_vertical"
android:padding="@dimen/touch_target_icon_padding"
android:background="@null"
android:foreground="@drawable/selectable_item_background_oval"
android:src="@drawable/more_vertical_icon_white_24dp"
app:tint="?colorControlNormal" />
</me.zhanghai.android.files.ui.AspectRatioFrameLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/single_line_list_item_height"
android:layout_marginBottom="@dimen/screen_edge_margin_minus_8dp"
android:duplicateParentState="true"
android:gravity="center_vertical"
android:orientation="horizontal">

<TextView
android:id="@+id/nameText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:duplicateParentState="true"
android:ellipsize="end"
android:gravity="center"
android:maxLines="2"
android:textAppearance="?textAppearanceListItemSecondary" />

</LinearLayout>
</me.zhanghai.android.files.ui.CheckableForegroundLinearLayout>
8 changes: 4 additions & 4 deletions app/src/main/res/values/dimens.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
-->

<resources>
<dimen name="screen_edge_margin">16dp</dimen>
<dimen name="screen_edge_margin">1dp</dimen>
<dimen name="screen_edge_margin_minus_4dp">12dp</dimen>
<dimen name="screen_edge_margin_minus_8dp">8dp</dimen>
<dimen name="screen_edge_margin_minus_12dp">4dp</dimen>
<dimen name="screen_edge_margin_minus_12dp">0dp</dimen>
<dimen name="screen_edge_margin_minus_12dp_at_least_8dp">8dp</dimen>
<dimen name="screen_edge_margin_minus_16dp">0dp</dimen>
<dimen name="content_start_margin">72dp</dimen>
Expand Down Expand Up @@ -38,9 +38,9 @@
<dimen name="small_icon_size">18dp</dimen>
<dimen name="icon_size">24dp</dimen>
<dimen name="large_icon_size">40dp</dimen>
<dimen name="touch_target_size">48dp</dimen>
<dimen name="touch_target_size">24dp</dimen>
<dimen name="touch_target_icon_padding">12dp</dimen>
<dimen name="touch_target_large_icon_padding">4dp</dimen>
<dimen name="touch_target_large_icon_padding">0dp</dimen>
<dimen name="badge_size">18dp</dimen>
<dimen name="badge_size_plus_1dp">19dp</dimen>

Expand Down
9 changes: 9 additions & 0 deletions app/src/main/res/values/donottranslate_prefs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,15 @@
<item>2</item>
<item>3</item>
</string-array>
<string name="pref_key_grid_columns">key_grid_columns</string>
<string name="pref_default_value_grid_columns">0</string>
<string-array name="pref_entry_values_grid_columns">
<item>0</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</string-array>
<string name="pref_key_standard_directory_settings">key_standard_directories</string>
<string name="pref_key_bookmark_directories">key_bookmark_directories</string>
<string name="pref_key_root_strategy">key_root_strategy</string>
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -755,6 +755,14 @@
<item>Ellipsize the end</item>
<item>Marquee</item>
</string-array>
<string name="settings_grid_columns_title">Grid columns count</string>
<string-array name="settings_grid_columns_entries">
<item>Default</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</string-array>
<string name="settings_behavior_title">Behavior</string>
<string name="settings_default_directory_title">Default folder</string>
<string name="settings_storages_title" translatable="false">@string/storage_list_title</string>
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/res/xml/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@
android:entries="@array/settings_file_name_ellipsize_entries"
android:entryValues="@array/pref_entry_values_file_name_ellipsize"
app:useSimpleSummaryProvider="true" />

<rikka.preference.SimpleMenuPreference
android:key="@string/pref_key_grid_columns"
android:title="@string/settings_grid_columns_title"
android:defaultValue="@string/pref_default_value_grid_columns"
android:entries="@array/settings_grid_columns_entries"
android:entryValues="@array/pref_entry_values_grid_columns"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>

<PreferenceCategory android:title="@string/settings_behavior_title">
Expand Down