Create MainSwitchPreference (#4062)

This commit is contained in:
SuperDragonXD
2024-02-09 18:46:34 +08:00
committed by GitHub
parent 066a9e3ffa
commit c6e975be4d
4 changed files with 147 additions and 89 deletions
+1 -1
View File
@@ -293,7 +293,7 @@
<!-- DockPreferences -->
<!-- <string name="dock_label" /> -->
<string name="show_hotseat_title">Enable Dock</string>
<string name="show_hotseat_title">Show Dock</string>
<string name="hotseat_mode_label">Search Bar Widget</string>
<string name="hotseat_mode_disabled">Disabled</string>
<string name="hotseat_mode_lawnchair">Lawnchair</string>
@@ -0,0 +1,58 @@
package app.lawnchair.ui.preferences.components.controls
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.AnimatedVisibilityScope
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import app.lawnchair.preferences.PreferenceAdapter
import app.lawnchair.ui.preferences.components.layout.DividerColumn
/**
* A toggle to enable a list of preferences.
*/
@Composable
fun MainSwitchPreference(
adapter: PreferenceAdapter<Boolean>,
label: String,
description: String? = null,
content: @Composable AnimatedVisibilityScope.() -> Unit,
) {
val checked = adapter.state.value
Surface(
modifier = Modifier.padding(horizontal = 16.dp),
shape = androidx.compose.material.MaterialTheme.shapes.large,
color = if (checked) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surfaceVariant,
) {
SwitchPreference(
checked = checked,
onCheckedChange = adapter::onChange,
label = label,
)
}
if (description != null) {
CompositionLocalProvider(
LocalContentColor provides MaterialTheme.colorScheme.onBackground.copy(alpha = ContentAlpha.medium),
LocalTextStyle provides MaterialTheme.typography.bodyMedium,
) {
Text(text = description)
}
}
AnimatedVisibility(
visible = checked,
enter = fadeIn(),
exit = fadeOut(),
) { DividerColumn(color = Color.Transparent) { content() } }
}
@@ -13,6 +13,7 @@ import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.preferenceManager2
import app.lawnchair.ui.preferences.components.FontPreference
import app.lawnchair.ui.preferences.components.controls.ClickablePreference
import app.lawnchair.ui.preferences.components.controls.MainSwitchPreference
import app.lawnchair.ui.preferences.components.controls.SwitchPreference
import app.lawnchair.ui.preferences.components.controls.TextPreference
import app.lawnchair.ui.preferences.components.layout.PreferenceGroup
@@ -38,45 +39,54 @@ fun DebugMenuPreferences() {
val textFlags = remember { prefs2.textFlags }
val fontFlags = remember { prefs.fontFlags }
val context = LocalContext.current
val enableDebug = prefs.enableDebugMenu.getAdapter()
PreferenceLayout(label = "Debug Menu") {
PreferenceGroup {
ClickablePreference(
label = "Feature Flags",
onClick = {
Intent(context, SettingsActivity::class.java)
.putExtra(":settings:fragment", DeveloperOptionsFragment::class.java.name)
.also { context.startActivity(it) }
},
)
ClickablePreference(
label = "Crash Launcher",
onClick = { throw RuntimeException("User triggered crash") },
)
}
PreferenceGroup(heading = "Debug Flags") {
flags2.forEach {
SwitchPreference(
adapter = it.getAdapter(),
label = it.key.name,
MainSwitchPreference(adapter = enableDebug, label = "Show Debug Menu") {
PreferenceGroup {
ClickablePreference(
label = "Feature Flags",
onClick = {
Intent(context, SettingsActivity::class.java)
.putExtra(
":settings:fragment",
DeveloperOptionsFragment::class.java.name,
)
.also { context.startActivity(it) }
},
)
ClickablePreference(
label = "Crash Launcher",
onClick = { throw RuntimeException("User triggered crash") },
)
}
flags.forEach {
SwitchPreference(
adapter = it.getAdapter(),
label = it.key,
)
}
textFlags.forEach {
TextPreference(
adapter = it.getAdapter(),
label = it.key.name,
)
}
fontFlags.forEach {
FontPreference(
fontPref = it,
label = it.key,
)
PreferenceGroup(heading = "Debug Flags") {
flags2.forEach {
SwitchPreference(
adapter = it.getAdapter(),
label = it.key.name,
)
}
flags.forEach {
SwitchPreference(
adapter = it.getAdapter(),
label = it.key,
)
}
textFlags.forEach {
TextPreference(
adapter = it.getAdapter(),
label = it.key.name,
)
}
fontFlags.forEach {
FontPreference(
fontPref = it,
label = it.key,
)
}
}
}
}
@@ -18,7 +18,6 @@ package app.lawnchair.ui.preferences.destinations
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavGraphBuilder
@@ -32,6 +31,7 @@ import app.lawnchair.qsb.providers.QsbSearchProvider
import app.lawnchair.ui.preferences.components.NavigationActionPreference
import app.lawnchair.ui.preferences.components.controls.ListPreference
import app.lawnchair.ui.preferences.components.controls.ListPreferenceEntry
import app.lawnchair.ui.preferences.components.controls.MainSwitchPreference
import app.lawnchair.ui.preferences.components.controls.SliderPreference
import app.lawnchair.ui.preferences.components.controls.SwitchPreference
import app.lawnchair.ui.preferences.components.layout.DividerColumn
@@ -60,61 +60,51 @@ fun DockPreferences() {
PreferenceLayout(label = stringResource(id = R.string.dock_label)) {
val isHotseatEnabled = prefs2.isHotseatEnabled.getAdapter()
val hotseatModeAdapter = prefs2.hotseatMode.getAdapter()
PreferenceGroup(heading = stringResource(id = R.string.general_label)) {
SwitchPreference(
adapter = isHotseatEnabled,
label = stringResource(id = R.string.show_hotseat_title),
)
}
ExpandAndShrink(visible = isHotseatEnabled.state.value) {
DividerColumn(color = Color.Transparent) {
PreferenceGroup(heading = stringResource(id = R.string.search_bar_label)) {
MainSwitchPreference(adapter = isHotseatEnabled, label = stringResource(id = R.string.show_hotseat_title)) {
PreferenceGroup(heading = stringResource(id = R.string.search_bar_label)) {
HotseatModePreference(
adapter = hotseatModeAdapter,
)
ExpandAndShrink(visible = hotseatModeAdapter.state.value == LawnchairHotseat) {
DividerColumn {
HotseatModePreference(
adapter = hotseatModeAdapter,
SwitchPreference(
adapter = prefs2.themedHotseatQsb.getAdapter(),
label = stringResource(id = R.string.apply_accent_color_label),
)
SliderPreference(
label = stringResource(id = R.string.corner_radius_label),
adapter = prefs.hotseatQsbCornerRadius.getAdapter(),
step = 0.05F,
valueRange = 0F..1F,
showAsPercentage = true,
)
val hotseatQsbProviderAdapter by preferenceManager2().hotseatQsbProvider.getAdapter()
NavigationActionPreference(
label = stringResource(R.string.search_provider),
destination = subRoute(DockRoutes.SEARCH_PROVIDER),
subtitle = stringResource(
id = QsbSearchProvider.values()
.first { it == hotseatQsbProviderAdapter }
.name,
),
)
ExpandAndShrink(visible = hotseatModeAdapter.state.value == LawnchairHotseat) {
DividerColumn {
SwitchPreference(
adapter = prefs2.themedHotseatQsb.getAdapter(),
label = stringResource(id = R.string.apply_accent_color_label),
)
SliderPreference(
label = stringResource(id = R.string.corner_radius_label),
adapter = prefs.hotseatQsbCornerRadius.getAdapter(),
step = 0.05F,
valueRange = 0F..1F,
showAsPercentage = true,
)
val hotseatQsbProviderAdapter by preferenceManager2().hotseatQsbProvider.getAdapter()
NavigationActionPreference(
label = stringResource(R.string.search_provider),
destination = subRoute(DockRoutes.SEARCH_PROVIDER),
subtitle = stringResource(
id = QsbSearchProvider.values()
.first { it == hotseatQsbProviderAdapter }
.name,
),
)
}
}
}
}
PreferenceGroup(heading = stringResource(id = R.string.grid)) {
SliderPreference(
label = stringResource(id = R.string.dock_icons),
adapter = prefs.hotseatColumns.getAdapter(),
step = 1,
valueRange = 3..10,
)
SliderPreference(
adapter = prefs2.hotseatBottomFactor.getAdapter(),
label = stringResource(id = R.string.hotseat_bottom_space_label),
valueRange = 0.0F..1.7F,
step = 0.1F,
showAsPercentage = true,
)
}
}
PreferenceGroup(heading = stringResource(id = R.string.grid)) {
SliderPreference(
label = stringResource(id = R.string.dock_icons),
adapter = prefs.hotseatColumns.getAdapter(),
step = 1,
valueRange = 3..10,
)
SliderPreference(
adapter = prefs2.hotseatBottomFactor.getAdapter(),
label = stringResource(id = R.string.hotseat_bottom_space_label),
valueRange = 0.0F..1.7F,
step = 0.1F,
showAsPercentage = true,
)
}
}
}