Add favorites settings screen
This commit is contained in:
parent
8b162dea01
commit
a2aca9bded
@ -617,6 +617,9 @@
|
||||
<string name="preference_hidden_items">Hidden search results</string>
|
||||
<string name="preference_hidden_items_summary">Manage hidden apps and search results</string>
|
||||
<string name="preference_wikipedia_customurl">Wikipedia URL</string>
|
||||
<string name="preference_edit_favorites_summary">Change the order of pinned items</string>
|
||||
<string name="preference_category_favorites_frequently_used">Frequently used</string>
|
||||
<string name="preference_favorites_frequently_used_summary">Show frequently used items in favorites</string>
|
||||
<!-- Used in an info banner if a specific feature requires a Nextcloud account -->
|
||||
<string name="no_account_nextcloud">You haven\'t connected a Nextcloud account yet</string>
|
||||
<!-- Used in an info banner if a specific feature requires an Owncloud account -->
|
||||
|
||||
@ -35,6 +35,7 @@ import de.mm20.launcher2.ui.settings.crashreporter.CrashReportScreen
|
||||
import de.mm20.launcher2.ui.settings.crashreporter.CrashReporterScreen
|
||||
import de.mm20.launcher2.ui.settings.debug.DebugSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.easteregg.EasterEggSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.favorites.FavoritesSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.filesearch.FileSearchSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.hiddenitems.HiddenItemsSettingsScreen
|
||||
import de.mm20.launcher2.ui.settings.license.LicenseScreen
|
||||
@ -132,6 +133,9 @@ class SettingsActivity : BaseActivity() {
|
||||
composable("settings/widgets/clock") {
|
||||
ClockWidgetSettingsScreen()
|
||||
}
|
||||
composable("settings/favorites") {
|
||||
FavoritesSettingsScreen()
|
||||
}
|
||||
composable("settings/badges") {
|
||||
BadgeSettingsScreen()
|
||||
}
|
||||
|
||||
@ -0,0 +1,68 @@
|
||||
package de.mm20.launcher2.ui.settings.favorites
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.livedata.observeAsState
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import de.mm20.launcher2.ui.R
|
||||
import de.mm20.launcher2.ui.component.preferences.Preference
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||
import de.mm20.launcher2.ui.component.preferences.SliderPreference
|
||||
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
|
||||
import de.mm20.launcher2.ui.launcher.modals.EditFavoritesSheet
|
||||
|
||||
@Composable
|
||||
fun FavoritesSettingsScreen() {
|
||||
val viewModel: FavoritesSettingsScreenVM = viewModel()
|
||||
var showEditSheet by remember { mutableStateOf(false) }
|
||||
PreferenceScreen(
|
||||
title = stringResource(R.string.preference_search_favorites)
|
||||
) {
|
||||
item {
|
||||
PreferenceCategory {
|
||||
Preference(
|
||||
title = stringResource(R.string.menu_item_edit_favs),
|
||||
summary = stringResource(R.string.preference_edit_favorites_summary),
|
||||
onClick = {
|
||||
showEditSheet = true
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
item {
|
||||
PreferenceCategory(stringResource(R.string.preference_category_favorites_frequently_used)) {
|
||||
val frequentlyUsed by viewModel.frequentlyUsed.observeAsState()
|
||||
SwitchPreference(
|
||||
title = stringResource(R.string.frequently_used_show_in_favorites),
|
||||
summary = stringResource(R.string.preference_favorites_frequently_used_summary),
|
||||
value = frequentlyUsed == true,
|
||||
onValueChanged = {
|
||||
viewModel.setFrequentlyUsed(it)
|
||||
}
|
||||
)
|
||||
val frequentlyUsedRows by viewModel.frequentlyUsedRows.observeAsState(1)
|
||||
SliderPreference(
|
||||
title = stringResource(R.string.frequently_used_rows),
|
||||
value = frequentlyUsedRows,
|
||||
enabled = frequentlyUsed == true,
|
||||
min = 1,
|
||||
max = 4,
|
||||
onValueChanged = {
|
||||
viewModel.setFrequentlyUsedRows(it)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (showEditSheet) {
|
||||
EditFavoritesSheet(
|
||||
onDismiss = { showEditSheet = false }
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
package de.mm20.launcher2.ui.settings.favorites
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.asLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import de.mm20.launcher2.preferences.LauncherDataStore
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
|
||||
class FavoritesSettingsScreenVM: ViewModel(), KoinComponent {
|
||||
private val dataStore: LauncherDataStore by inject()
|
||||
|
||||
val frequentlyUsed = dataStore.data.map { it.favorites.frequentlyUsed }.asLiveData()
|
||||
fun setFrequentlyUsed(frequentlyUsed: Boolean) {
|
||||
viewModelScope.launch {
|
||||
dataStore.updateData {
|
||||
it.toBuilder()
|
||||
.setFavorites(
|
||||
it.favorites.toBuilder()
|
||||
.setFrequentlyUsed(frequentlyUsed)
|
||||
)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val frequentlyUsedRows = dataStore.data.map { it.favorites.frequentlyUsedRows }.asLiveData()
|
||||
fun setFrequentlyUsedRows(frequentlyUsedRows: Int) {
|
||||
viewModelScope.launch {
|
||||
dataStore.updateData {
|
||||
it.toBuilder()
|
||||
.setFavorites(
|
||||
it.favorites.toBuilder()
|
||||
.setFrequentlyUsedRows(frequentlyUsedRows)
|
||||
)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -31,13 +31,16 @@ fun SearchSettingsScreen() {
|
||||
item {
|
||||
PreferenceCategory {
|
||||
val favorites by viewModel.favorites.observeAsState()
|
||||
SwitchPreference(
|
||||
PreferenceWithSwitch(
|
||||
title = stringResource(R.string.preference_search_favorites),
|
||||
summary = stringResource(R.string.preference_search_favorites_summary),
|
||||
icon = Icons.Rounded.Star,
|
||||
value = favorites == true,
|
||||
onValueChanged = {
|
||||
switchValue = favorites == true,
|
||||
onSwitchChanged = {
|
||||
viewModel.setFavorites(it)
|
||||
},
|
||||
onClick = {
|
||||
navController?.navigate("settings/favorites")
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@ -13,4 +13,5 @@ class WidgetSettingsScreenVM: ViewModel(), KoinComponent {
|
||||
val calendarWidget = widgetRepository.isCalendarWidgetEnabled().asLiveData()
|
||||
val musicWidget = widgetRepository.isMusicWidgetEnabled().asLiveData()
|
||||
val weatherWidget = widgetRepository.isWeatherWidgetEnabled().asLiveData()
|
||||
val favoritesWidget = widgetRepository.isFavoritesWidgetEnabled().asLiveData()
|
||||
}
|
||||
@ -4,6 +4,7 @@ import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Audiotrack
|
||||
import androidx.compose.material.icons.rounded.LightMode
|
||||
import androidx.compose.material.icons.rounded.Schedule
|
||||
import androidx.compose.material.icons.rounded.Star
|
||||
import androidx.compose.material.icons.rounded.Today
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
@ -61,6 +62,17 @@ fun WidgetsSettingsScreen() {
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
val favoritesWidget by viewModel.favoritesWidget.observeAsState()
|
||||
if (favoritesWidget == true) {
|
||||
Preference(
|
||||
title = stringResource(R.string.favorites),
|
||||
icon = Icons.Rounded.Star,
|
||||
onClick = {
|
||||
navController?.navigate("settings/favorites")
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -147,7 +147,20 @@ object FavoritesWidget : Widget() {
|
||||
)
|
||||
}
|
||||
|
||||
override val isConfigurable: Boolean = false
|
||||
override val isConfigurable: Boolean = true
|
||||
|
||||
override fun configure(context: Activity, appWidgetHost: AppWidgetHost) {
|
||||
val intent = Intent()
|
||||
intent.component = ComponentName(
|
||||
context.getPackageName(),
|
||||
"de.mm20.launcher2.ui.settings.SettingsActivity"
|
||||
)
|
||||
intent.putExtra(
|
||||
"de.mm20.launcher2.settings.ROUTE",
|
||||
"settings/favorites"
|
||||
)
|
||||
context.tryStartActivity(intent)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user