Move color scheme preferences their own screen
This commit is contained in:
parent
c9e093bb9b
commit
de4f664333
@ -27,6 +27,7 @@ import de.mm20.launcher2.ui.settings.buildinfo.BuildInfoSettingsScreen
|
|||||||
import de.mm20.launcher2.ui.settings.calendarwidget.CalendarWidgetSettingsScreen
|
import de.mm20.launcher2.ui.settings.calendarwidget.CalendarWidgetSettingsScreen
|
||||||
import de.mm20.launcher2.ui.settings.cards.CardsSettingsScreen
|
import de.mm20.launcher2.ui.settings.cards.CardsSettingsScreen
|
||||||
import de.mm20.launcher2.ui.settings.clockwidget.ClockWidgetSettingsScreen
|
import de.mm20.launcher2.ui.settings.clockwidget.ClockWidgetSettingsScreen
|
||||||
|
import de.mm20.launcher2.ui.settings.colorscheme.ColorSchemeSettingsScreen
|
||||||
import de.mm20.launcher2.ui.settings.crashreporter.CrashReportScreen
|
import de.mm20.launcher2.ui.settings.crashreporter.CrashReportScreen
|
||||||
import de.mm20.launcher2.ui.settings.crashreporter.CrashReporterScreen
|
import de.mm20.launcher2.ui.settings.crashreporter.CrashReporterScreen
|
||||||
import de.mm20.launcher2.ui.settings.debug.DebugSettingsScreen
|
import de.mm20.launcher2.ui.settings.debug.DebugSettingsScreen
|
||||||
@ -84,6 +85,9 @@ class SettingsActivity : BaseActivity() {
|
|||||||
composable("settings/appearance") {
|
composable("settings/appearance") {
|
||||||
AppearanceSettingsScreen()
|
AppearanceSettingsScreen()
|
||||||
}
|
}
|
||||||
|
composable("settings/appearance/colorscheme") {
|
||||||
|
ColorSchemeSettingsScreen()
|
||||||
|
}
|
||||||
composable("settings/appearance/cards") {
|
composable("settings/appearance/cards") {
|
||||||
CardsSettingsScreen()
|
CardsSettingsScreen()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,14 @@
|
|||||||
package de.mm20.launcher2.ui.settings.appearance
|
package de.mm20.launcher2.ui.settings.appearance
|
||||||
|
|
||||||
import android.graphics.drawable.ColorDrawable
|
import android.graphics.drawable.ColorDrawable
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
import androidx.appcompat.content.res.AppCompatResources
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.lazy.grid.GridCells
|
import androidx.compose.foundation.lazy.grid.GridCells
|
||||||
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
||||||
import androidx.compose.foundation.lazy.grid.items
|
import androidx.compose.foundation.lazy.grid.items
|
||||||
@ -27,10 +29,10 @@ import com.google.accompanist.pager.HorizontalPager
|
|||||||
import com.google.accompanist.pager.HorizontalPagerIndicator
|
import com.google.accompanist.pager.HorizontalPagerIndicator
|
||||||
import com.google.accompanist.pager.rememberPagerState
|
import com.google.accompanist.pager.rememberPagerState
|
||||||
import de.mm20.launcher2.icons.LauncherIcon
|
import de.mm20.launcher2.icons.LauncherIcon
|
||||||
import de.mm20.launcher2.ktx.dp
|
|
||||||
import de.mm20.launcher2.preferences.Settings.*
|
|
||||||
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.ColorScheme
|
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.ColorScheme
|
||||||
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.Theme
|
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.Theme
|
||||||
|
import de.mm20.launcher2.preferences.Settings.IconSettings
|
||||||
|
import de.mm20.launcher2.preferences.Settings.SearchBarSettings
|
||||||
import de.mm20.launcher2.ui.R
|
import de.mm20.launcher2.ui.R
|
||||||
import de.mm20.launcher2.ui.component.ShapedLauncherIcon
|
import de.mm20.launcher2.ui.component.ShapedLauncherIcon
|
||||||
import de.mm20.launcher2.ui.component.getShape
|
import de.mm20.launcher2.ui.component.getShape
|
||||||
@ -64,16 +66,15 @@ fun AppearanceSettingsScreen() {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
val colorScheme by viewModel.colorScheme.observeAsState()
|
val colorScheme by viewModel.colorScheme.observeAsState()
|
||||||
ListPreference(
|
Preference(
|
||||||
title = stringResource(id = R.string.preference_screen_colors),
|
title = stringResource(id = R.string.preference_screen_colors),
|
||||||
items = listOf(
|
summary = when (colorScheme) {
|
||||||
stringResource(id = R.string.preference_colors_default) to ColorScheme.Default,
|
ColorScheme.Default -> stringResource(R.string.preference_colors_default)
|
||||||
stringResource(id = R.string.preference_colors_bw) to ColorScheme.BlackAndWhite,
|
ColorScheme.BlackAndWhite -> stringResource(R.string.preference_colors_bw)
|
||||||
),
|
else -> null
|
||||||
value = colorScheme,
|
},
|
||||||
onValueChanged = { newValue ->
|
onClick = {
|
||||||
if (newValue == null) return@ListPreference
|
navController?.navigate("settings/appearance/colorscheme")
|
||||||
viewModel.setColorScheme(newValue)
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
Preference(
|
Preference(
|
||||||
|
|||||||
@ -0,0 +1,40 @@
|
|||||||
|
package de.mm20.launcher2.ui.settings.colorscheme
|
||||||
|
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.rounded.RadioButtonChecked
|
||||||
|
import androidx.compose.material.icons.rounded.RadioButtonUnchecked
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.livedata.observeAsState
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
|
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.ColorScheme
|
||||||
|
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
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun ColorSchemeSettingsScreen() {
|
||||||
|
val viewModel: ColorSchemeSettingsScreenVM = viewModel()
|
||||||
|
val context = LocalContext.current
|
||||||
|
|
||||||
|
PreferenceScreen(title = stringResource(R.string.preference_screen_colors)) {
|
||||||
|
item {
|
||||||
|
PreferenceCategory {
|
||||||
|
val colorScheme by viewModel.colorScheme.observeAsState()
|
||||||
|
Preference(
|
||||||
|
title = stringResource(R.string.preference_colors_default),
|
||||||
|
icon = if (colorScheme == ColorScheme.Default) Icons.Rounded.RadioButtonChecked else Icons.Rounded.RadioButtonUnchecked,
|
||||||
|
onClick = { viewModel.setColorScheme(ColorScheme.Default) }
|
||||||
|
)
|
||||||
|
Preference(
|
||||||
|
title = stringResource(R.string.preference_colors_bw),
|
||||||
|
icon = if (colorScheme == ColorScheme.BlackAndWhite) Icons.Rounded.RadioButtonChecked else Icons.Rounded.RadioButtonUnchecked,
|
||||||
|
onClick = { viewModel.setColorScheme(ColorScheme.BlackAndWhite) }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
package de.mm20.launcher2.ui.settings.colorscheme
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.asLiveData
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import de.mm20.launcher2.preferences.LauncherDataStore
|
||||||
|
import de.mm20.launcher2.preferences.Settings.AppearanceSettings
|
||||||
|
import kotlinx.coroutines.flow.map
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import org.koin.core.component.KoinComponent
|
||||||
|
import org.koin.core.component.inject
|
||||||
|
|
||||||
|
class ColorSchemeSettingsScreenVM : ViewModel(), KoinComponent {
|
||||||
|
private val dataStore: LauncherDataStore by inject()
|
||||||
|
|
||||||
|
val colorScheme = dataStore.data.map { it.appearance.colorScheme }.asLiveData()
|
||||||
|
fun setColorScheme(colorScheme: AppearanceSettings.ColorScheme) {
|
||||||
|
viewModelScope.launch {
|
||||||
|
dataStore.updateData {
|
||||||
|
it.toBuilder()
|
||||||
|
.setAppearance(
|
||||||
|
it.appearance.toBuilder()
|
||||||
|
.setColorScheme(colorScheme)
|
||||||
|
).build()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user