From b96c6c603d3db957cb3607367434e7e686073794 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Sat, 3 Sep 2022 15:08:53 +0200 Subject: [PATCH] Add preference to hide grid labels Close #159 --- i18n/src/main/res/values/strings.xml | 2 ++ .../ui/launcher/search/SearchColumn.kt | 24 ++++++++++++++----- .../launcher2/ui/launcher/search/SearchVM.kt | 3 +++ .../appearance/AppearanceSettingsScreen.kt | 9 +++++++ .../appearance/AppearanceSettingsScreenVM.kt | 12 ++++++++++ 5 files changed, 44 insertions(+), 6 deletions(-) diff --git a/i18n/src/main/res/values/strings.xml b/i18n/src/main/res/values/strings.xml index 5b46b753..46df15d7 100644 --- a/i18n/src/main/res/values/strings.xml +++ b/i18n/src/main/res/values/strings.xml @@ -507,6 +507,8 @@ Grid Icon size Number of columns + Show labels + Show the app name below the icon Debug Troubleshooting tools Widgets diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchColumn.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchColumn.kt index e5dab99a..ba043cb1 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchColumn.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchColumn.kt @@ -5,14 +5,11 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.foundation.shape.CornerSize -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clipToBounds -import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import de.mm20.launcher2.search.data.Searchable @@ -42,6 +39,8 @@ fun SearchColumn( val viewModel: SearchVM = viewModel() + val showLabels by viewModel.showLabels.observeAsState(true) + val hideFavs by viewModel.hideFavorites.observeAsState(true) val favorites by viewModel.favorites.observeAsState(emptyList()) val apps by viewModel.appResults.observeAsState(emptyList()) @@ -62,9 +61,19 @@ fun SearchColumn( reverseLayout = reverse, ) { if (!hideFavs) { - GridResults(favorites.toImmutableList(), columns, reverse) + GridResults( + items = favorites.toImmutableList(), + columns = columns, + showLabels = showLabels, + reverse = reverse, + ) } - GridResults(apps.toImmutableList(), columns, reverse) + GridResults( + items = apps.toImmutableList(), + columns = columns, + showLabels = showLabels, + reverse = reverse, + ) ListResults(appShortcuts.toImmutableList(), reverse) val uc = unitConverter if (uc != null) { @@ -103,6 +112,7 @@ fun LazyListScope.GridResults( items: ImmutableList, columns: Int, reverse: Boolean, + showLabels: Boolean, ) { if (items.isEmpty()) return val rows = ceil(items.size / columns.toFloat()).toInt() @@ -110,6 +120,7 @@ fun LazyListScope.GridResults( GridRow( items = items.subList(it * columns, (it * columns + columns).coerceAtMost(items.size)), columns = columns, + showLabels = showLabels, isFirst = if (reverse) it == rows - 1 else it == 0, isLast = if (reverse) it == 0 else it == rows - 1 ) @@ -121,6 +132,7 @@ fun GridRow( modifier: Modifier = Modifier, items: ImmutableList, columns: Int, + showLabels: Boolean, isFirst: Boolean, isLast: Boolean, ) { @@ -145,7 +157,7 @@ fun GridRow( .weight(1f) .padding(4.dp, 8.dp), item = item, - showLabels = true + showLabels = showLabels ) } for (i in 0 until columns - items.size) { diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchVM.kt index bdba5406..ec471ffa 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchVM.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchVM.kt @@ -3,6 +3,7 @@ package de.mm20.launcher2.ui.launcher.search import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.asLiveData import androidx.lifecycle.viewModelScope import de.mm20.launcher2.applications.AppRepository import de.mm20.launcher2.appshortcuts.AppShortcutRepository @@ -47,6 +48,8 @@ class SearchVM : ViewModel(), KoinComponent { val searchQuery = MutableLiveData("") val isSearchEmpty = MutableLiveData(true) + val showLabels = dataStore.data.map { it.grid.showLabels }.asLiveData() + val favorites = MutableLiveData>(emptyList()) val appResults = MutableLiveData>(emptyList()) diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt index f1bf8217..2488282b 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt @@ -125,6 +125,15 @@ fun AppearanceSettingsScreen() { viewModel.setIconSize(it) } ) + val showLabels by viewModel.showLabels.observeAsState() + SwitchPreference( + title = stringResource(R.string.preference_grid_labels), + summary = stringResource(R.string.preference_grid_labels_summary), + value = showLabels == true, + onValueChanged = { + viewModel.setShowLabels(it) + } + ) val columnCount by viewModel.columnCount.observeAsState(5) SliderPreference( title = stringResource(R.string.preference_grid_column_count), diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt index 5f09aa20..b2fe39bb 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt @@ -78,6 +78,18 @@ class AppearanceSettingsScreenVM : ViewModel(), KoinComponent { } } + + val showLabels = dataStore.data.map { it.grid.showLabels }.asLiveData() + fun setShowLabels(showLabels: Boolean) { + viewModelScope.launch { + dataStore.updateData { + it.toBuilder() + .setGrid(it.grid.toBuilder().setShowLabels(showLabels)) + .build() + } + } + } + val dimWallpaper = dataStore.data.map { it.appearance.dimWallpaper }.asLiveData() fun setDimWallpaper(dimWallpaper: Boolean) { viewModelScope.launch {