Add preference to hide hidden items button
This commit is contained in:
@@ -67,6 +67,7 @@ class SearchVM : ViewModel(), KoinComponent {
|
||||
val unitConverterResults = mutableStateOf<List<UnitConverter>>(emptyList())
|
||||
val searchActionResults = mutableStateOf<List<SearchAction>>(emptyList())
|
||||
|
||||
val hiddenResultsButton = dataStore.data.map { it.searchBar.hiddenItemsButton }
|
||||
val hiddenResults = mutableStateOf<List<SavableSearchable>>(emptyList())
|
||||
|
||||
val favoritesEnabled = dataStore.data.map { it.favorites.enabled }
|
||||
|
||||
@@ -12,6 +12,7 @@ import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButtonDefaults
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
@@ -47,6 +48,7 @@ fun LauncherSearchBar(
|
||||
val sheetManager = LocalBottomSheetManager.current
|
||||
|
||||
val searchVM: SearchVM = viewModel()
|
||||
val hiddenItemsButtonEnabled by searchVM.hiddenResultsButton.collectAsState(false)
|
||||
|
||||
val hiddenItems by searchVM.hiddenResults
|
||||
|
||||
@@ -64,7 +66,7 @@ fun LauncherSearchBar(
|
||||
darkColors = darkColors,
|
||||
menu = {
|
||||
AnimatedVisibility(
|
||||
showHiddenItemsButton && hiddenItems.isNotEmpty(),
|
||||
hiddenItemsButtonEnabled && showHiddenItemsButton && hiddenItems.isNotEmpty(),
|
||||
enter = scaleIn(tween(100)),
|
||||
exit = scaleOut(tween(100))
|
||||
) {
|
||||
|
||||
+33
-5
@@ -2,13 +2,26 @@ package de.mm20.launcher2.ui.settings.hiddenitems
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.combinedClickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Visibility
|
||||
import androidx.compose.material.icons.rounded.VisibilityOff
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
@@ -21,7 +34,9 @@ import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import de.mm20.launcher2.icons.LauncherIcon
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.ShapedLauncherIcon
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
|
||||
|
||||
@Composable
|
||||
fun HiddenItemsSettingsScreen() {
|
||||
@@ -32,7 +47,20 @@ fun HiddenItemsSettingsScreen() {
|
||||
|
||||
val apps by viewModel.allApps.collectAsState()
|
||||
val other by viewModel.hiddenItems.collectAsState()
|
||||
|
||||
val showButton by viewModel.hiddenItemsButton.collectAsState()
|
||||
|
||||
PreferenceScreen(title = stringResource(R.string.preference_hidden_items)) {
|
||||
item {
|
||||
PreferenceCategory {
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.preference_hidden_items_reveal_button),
|
||||
summary = stringResource(R.string.preference_hidden_items_reveal_button_summary),
|
||||
value = showButton,
|
||||
onValueChanged = { viewModel.setHiddenItemsButton(it) }
|
||||
)
|
||||
}
|
||||
}
|
||||
items(apps, key = { it.key }) { searchable ->
|
||||
val icon by remember(searchable.key) {
|
||||
viewModel.getIcon(searchable, with(density) { 32.dp.roundToPx() })
|
||||
@@ -178,13 +206,13 @@ fun HiddenItem(
|
||||
) {
|
||||
Row(
|
||||
modifier = modifier
|
||||
.padding(vertical = 12.dp, horizontal = 16.dp),
|
||||
.padding(vertical = 12.dp, horizontal = 20.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
ShapedLauncherIcon(
|
||||
size = 32.dp,
|
||||
icon = { icon },
|
||||
modifier = Modifier.padding(end = 16.dp)
|
||||
modifier = Modifier.padding(end = 20.dp)
|
||||
)
|
||||
Text(
|
||||
label,
|
||||
|
||||
+19
-2
@@ -12,6 +12,7 @@ import de.mm20.launcher2.searchable.SearchableRepository
|
||||
import de.mm20.launcher2.icons.IconService
|
||||
import de.mm20.launcher2.icons.LauncherIcon
|
||||
import de.mm20.launcher2.ktx.isAtLeastApiLevel
|
||||
import de.mm20.launcher2.preferences.LauncherDataStore
|
||||
import de.mm20.launcher2.search.SavableSearchable
|
||||
import de.mm20.launcher2.search.data.LauncherApp
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -22,6 +23,7 @@ import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.flow.flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
@@ -30,12 +32,14 @@ class HiddenItemsSettingsScreenVM : ViewModel(), KoinComponent {
|
||||
private val appRepository: AppRepository by inject()
|
||||
private val searchableRepository: SearchableRepository by inject()
|
||||
private val iconService: IconService by inject()
|
||||
private val dataStore: LauncherDataStore by inject()
|
||||
|
||||
val allApps = appRepository.getAllInstalledApps().map {
|
||||
withContext(Dispatchers.Default) { it.sorted() }
|
||||
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), emptyList())
|
||||
val hiddenItems: StateFlow<List<SavableSearchable>> = flow {
|
||||
val hidden = searchableRepository.get(hidden = true).first().filter { it !is LauncherApp }.sorted()
|
||||
val hidden =
|
||||
searchableRepository.get(hidden = true).first().filter { it !is LauncherApp }.sorted()
|
||||
emit(hidden)
|
||||
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), emptyList())
|
||||
|
||||
@@ -44,7 +48,7 @@ class HiddenItemsSettingsScreenVM : ViewModel(), KoinComponent {
|
||||
}
|
||||
|
||||
fun setHidden(searchable: SavableSearchable, hidden: Boolean) {
|
||||
if(hidden) {
|
||||
if (hidden) {
|
||||
searchableRepository.upsert(searchable, hidden = true, pinned = false)
|
||||
} else {
|
||||
searchableRepository.update(searchable, hidden = false)
|
||||
@@ -73,4 +77,17 @@ class HiddenItemsSettingsScreenVM : ViewModel(), KoinComponent {
|
||||
null
|
||||
)
|
||||
}
|
||||
|
||||
val hiddenItemsButton = dataStore.data.map { it.searchBar.hiddenItemsButton }
|
||||
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), false)
|
||||
|
||||
fun setHiddenItemsButton(hidden: Boolean) {
|
||||
viewModelScope.launch {
|
||||
dataStore.updateData {
|
||||
it.toBuilder()
|
||||
.setSearchBar(it.searchBar.toBuilder().setHiddenItemsButton(hidden)).build()
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user