Create MainSwitchPreference (#4062)
This commit is contained in:
@@ -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>
|
||||
|
||||
+58
@@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user