Settings: Ensure content is scrollable, make minor tweaks
This commit is contained in:
+1
-1
@@ -9,7 +9,7 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.0.0-alpha11'
|
||||
classpath 'com.android.tools.build:gradle:7.0.0-alpha12'
|
||||
classpath PROTOBUF_CLASS_PATH
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath 'com.google.android.gms:oss-licenses-plugin:0.10.2'
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<string name="label_size">Label Size</string>
|
||||
<string name="allow_empty_pages_label">Allow Empty Pages</string>
|
||||
<string name="colored_generated_icon_backgrounds_label">Make Coloured Backgrounds</string>
|
||||
<string name="colored_generated_icon_backgrounds_description">For generated Adaptive icons.</string>
|
||||
<string name="colored_generated_icon_backgrounds_description">For generated Adaptive Icons.</string>
|
||||
<string name="notification_dots">Notification Dots</string>
|
||||
<string name="smartspace_preferences">Preferences</string>
|
||||
<string name="about_label">About</string>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<string name="label_size">Label Size</string>
|
||||
<string name="allow_empty_pages_label">Allow Empty Pages</string>
|
||||
<string name="colored_generated_icon_backgrounds_label">Make Colored Backgrounds</string>
|
||||
<string name="colored_generated_icon_backgrounds_description">For generated Adaptive icons.</string>
|
||||
<string name="colored_generated_icon_backgrounds_description">For generated Adaptive Icons.</string>
|
||||
<string name="notification_dots">Notification Dots</string>
|
||||
<string name="smartspace_preferences">Preferences</string>
|
||||
<string name="about_label">About</string>
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
package app.lawnchair.ui.preferences
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.android.launcher3.R
|
||||
|
||||
@Composable
|
||||
fun AppDrawerPreferences(interactor: PreferenceInteractor) {
|
||||
Column {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
PreferenceGroup(heading = stringResource(id = R.string.general_label), isFirstChild = true) {
|
||||
SliderPreference(
|
||||
label = stringResource(id = R.string.background_opacity),
|
||||
|
||||
@@ -10,8 +10,6 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.compose.navigate
|
||||
|
||||
@Composable
|
||||
fun ClickListenerPreference(
|
||||
|
||||
@@ -43,9 +43,11 @@ fun ContributorRow(name: String, description: String, photoUrl: String, url: Str
|
||||
.width(32.dp)
|
||||
.height(32.dp),
|
||||
loading = {
|
||||
Box(modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(MaterialTheme.colors.onBackground.copy(alpha = 0.08F)))
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(MaterialTheme.colors.onBackground.copy(alpha = 0.08F))
|
||||
)
|
||||
}
|
||||
)
|
||||
Spacer(modifier = Modifier.requiredWidth(16.dp))
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
package app.lawnchair.ui.preferences
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.android.launcher3.R
|
||||
|
||||
@Composable
|
||||
fun DockPreferences(interactor: PreferenceInteractor) {
|
||||
Column {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
PreferenceGroup(heading = stringResource(id = R.string.grid), isFirstChild = true) {
|
||||
SliderPreference(
|
||||
label = stringResource(id = R.string.dock_icons),
|
||||
|
||||
@@ -1,26 +1,37 @@
|
||||
package app.lawnchair.ui.preferences
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.android.launcher3.R
|
||||
|
||||
@Composable
|
||||
fun FolderPreferences(interactor: PreferenceInteractor) {
|
||||
PreferenceGroup(heading = stringResource(id = R.string.grid), isFirstChild = true) {
|
||||
SliderPreference(
|
||||
label = stringResource(id = R.string.max_folder_columns),
|
||||
value = interactor.folderColumns.value,
|
||||
onValueChange = { interactor.setFolderColumns(it) },
|
||||
steps = 2,
|
||||
valueRange = 2.0F..5.0F
|
||||
)
|
||||
SliderPreference(
|
||||
label = stringResource(id = R.string.max_folder_rows),
|
||||
value = interactor.folderRows.value,
|
||||
onValueChange = { interactor.setFolderRows(it) },
|
||||
steps = 2,
|
||||
valueRange = 2.0F..5.0F,
|
||||
showDivider = false
|
||||
)
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
PreferenceGroup(heading = stringResource(id = R.string.grid), isFirstChild = true) {
|
||||
SliderPreference(
|
||||
label = stringResource(id = R.string.max_folder_columns),
|
||||
value = interactor.folderColumns.value,
|
||||
onValueChange = { interactor.setFolderColumns(it) },
|
||||
steps = 2,
|
||||
valueRange = 2.0F..5.0F
|
||||
)
|
||||
SliderPreference(
|
||||
label = stringResource(id = R.string.max_folder_rows),
|
||||
value = interactor.folderRows.value,
|
||||
onValueChange = { interactor.setFolderRows(it) },
|
||||
steps = 2,
|
||||
valueRange = 2.0F..5.0F,
|
||||
showDivider = false
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,12 @@ package app.lawnchair.ui.preferences
|
||||
|
||||
import android.os.Build
|
||||
import androidx.compose.animation.*
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.navigation.NavController
|
||||
import com.android.launcher3.R
|
||||
@@ -10,42 +15,48 @@ import com.android.launcher3.R
|
||||
@ExperimentalAnimationApi
|
||||
@Composable
|
||||
fun GeneralPreferences(navController: NavController, interactor: PreferenceInteractor) {
|
||||
PreferenceGroup(isFirstChild = true) {
|
||||
SwitchPreference(
|
||||
checked = interactor.allowRotation.value,
|
||||
onCheckedChange = { interactor.setAllowRotation(it) },
|
||||
label = stringResource(id = R.string.home_screen_rotation_label),
|
||||
description = stringResource(id = R.string.home_screen_rotaton_description),
|
||||
showDivider = false
|
||||
)
|
||||
}
|
||||
PreferenceGroup(heading = stringResource(id = R.string.icons)) {
|
||||
NotificationDotsPreference(interactor)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
PreferenceGroup(isFirstChild = true) {
|
||||
SwitchPreference(
|
||||
checked = interactor.wrapAdaptiveIcons.value,
|
||||
onCheckedChange = { interactor.setWrapAdaptiveIcons(it) },
|
||||
label = stringResource(id = R.string.make_icon_packs_adaptive_label),
|
||||
description = stringResource(id = R.string.make_icon_packs_adaptive_description)
|
||||
checked = interactor.allowRotation.value,
|
||||
onCheckedChange = { interactor.setAllowRotation(it) },
|
||||
label = stringResource(id = R.string.home_screen_rotation_label),
|
||||
description = stringResource(id = R.string.home_screen_rotaton_description),
|
||||
showDivider = false
|
||||
)
|
||||
}
|
||||
PreferenceGroup(heading = stringResource(id = R.string.icons)) {
|
||||
NotificationDotsPreference(interactor)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
SwitchPreference(
|
||||
checked = interactor.wrapAdaptiveIcons.value,
|
||||
onCheckedChange = { interactor.setWrapAdaptiveIcons(it) },
|
||||
label = stringResource(id = R.string.make_icon_packs_adaptive_label),
|
||||
description = stringResource(id = R.string.make_icon_packs_adaptive_description)
|
||||
)
|
||||
AnimatedVisibility(
|
||||
visible = interactor.wrapAdaptiveIcons.value,
|
||||
enter = expandVertically() + fadeIn(),
|
||||
exit = shrinkVertically() + fadeOut()
|
||||
) {
|
||||
SwitchPreference(
|
||||
checked = interactor.makeColoredBackgrounds.value,
|
||||
onCheckedChange = { interactor.setMakeColoredBackgrounds(it) },
|
||||
label = stringResource(id = R.string.colored_generated_icon_backgrounds_label),
|
||||
description = stringResource(id = R.string.colored_generated_icon_backgrounds_description)
|
||||
)
|
||||
}
|
||||
}
|
||||
NavActionPreference(
|
||||
label = stringResource(id = R.string.icon_pack),
|
||||
navController = navController,
|
||||
destination = ICON_PACK_PREFERENCES_ROUTE,
|
||||
showDivider = false
|
||||
)
|
||||
AnimatedVisibility(
|
||||
visible = interactor.wrapAdaptiveIcons.value,
|
||||
enter = expandVertically() + fadeIn(),
|
||||
exit = shrinkVertically() + fadeOut()
|
||||
) {
|
||||
SwitchPreference(
|
||||
checked = interactor.makeColoredBackgrounds.value,
|
||||
onCheckedChange = { interactor.setMakeColoredBackgrounds(it) },
|
||||
label = stringResource(id = R.string.colored_generated_icon_backgrounds_label),
|
||||
description = stringResource(id = R.string.colored_generated_icon_backgrounds_description)
|
||||
)
|
||||
}
|
||||
}
|
||||
NavActionPreference(
|
||||
label = stringResource(id = R.string.icon_pack),
|
||||
navController = navController,
|
||||
destination = ICON_PACK_PREFERENCES_ROUTE,
|
||||
showDivider = false
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,21 @@
|
||||
package app.lawnchair.ui.preferences
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.android.launcher3.R
|
||||
|
||||
@Composable
|
||||
fun HomeScreenPreferences(interactor: PreferenceInteractor) {
|
||||
Column {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
PreferenceGroup(heading = "General", isFirstChild = true) {
|
||||
SwitchPreference(
|
||||
checked = interactor.addIconToHome.value,
|
||||
|
||||
@@ -8,6 +8,8 @@ import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -27,15 +29,21 @@ data class IconPackInfo(val name: String, val packageName: String, val icon: Dra
|
||||
fun IconPackPreference(interactor: PreferenceInteractor) {
|
||||
val iconPacks = interactor.getIconPacks().values.toList()
|
||||
|
||||
PreferenceGroup(isFirstChild = true) {
|
||||
LazyColumn(Modifier.fillMaxWidth()) {
|
||||
items(iconPacks) { iconPack ->
|
||||
IconPackListItem(
|
||||
iconPack,
|
||||
interactor.iconPackPackage.value,
|
||||
onSelectionChange = { interactor.setIconPackPackage(it) },
|
||||
showDivider = iconPacks.last().packageName != iconPack.packageName
|
||||
)
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
PreferenceGroup(isFirstChild = true) {
|
||||
LazyColumn(Modifier.fillMaxWidth()) {
|
||||
items(iconPacks) { iconPack ->
|
||||
IconPackListItem(
|
||||
iconPack,
|
||||
interactor.iconPackPackage.value,
|
||||
onSelectionChange = { interactor.setIconPackPackage(it) },
|
||||
showDivider = iconPacks.last().packageName != iconPack.packageName
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
package app.lawnchair.ui.preferences
|
||||
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.compose.navigate
|
||||
@@ -11,7 +15,10 @@ import androidx.navigation.compose.navigate
|
||||
fun PreferenceCategoryList(navController: NavController) {
|
||||
val context = LocalContext.current
|
||||
|
||||
LazyColumn {
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
) {
|
||||
items(screens(context)) { screen ->
|
||||
PreferenceCategoryLink(
|
||||
titleResId = screen.labelResId,
|
||||
|
||||
@@ -5,9 +5,7 @@ import android.view.Window
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
|
||||
@@ -6,6 +6,7 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
@Composable
|
||||
@@ -16,26 +17,38 @@ fun SwitchPreference(
|
||||
description: String? = null,
|
||||
showDivider: Boolean = true
|
||||
) =
|
||||
// TODO: Wrap overflowing text instead of using an ellipsis.
|
||||
PreferenceTemplate(height = if (description != null) 72.dp else 52.dp, showDivider = showDivider) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.padding(start = 16.dp, end = 16.dp)
|
||||
.fillMaxHeight()
|
||||
.fillMaxWidth()
|
||||
.fillMaxHeight(),
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
.padding(start = 16.dp, end = 16.dp),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Column {
|
||||
Text(text = label, style = MaterialTheme.typography.subtitle1, color = MaterialTheme.colors.onBackground)
|
||||
Column(modifier = Modifier.weight(1f)) {
|
||||
Text(
|
||||
text = label,
|
||||
style = MaterialTheme.typography.subtitle1,
|
||||
color = MaterialTheme.colors.onBackground,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
maxLines = 1
|
||||
)
|
||||
description?.let {
|
||||
CompositionLocalProvider(
|
||||
LocalContentAlpha provides ContentAlpha.medium,
|
||||
LocalContentColor provides MaterialTheme.colors.onBackground
|
||||
) {
|
||||
Text(text = it, style = MaterialTheme.typography.body2)
|
||||
Text(
|
||||
text = it,
|
||||
style = MaterialTheme.typography.body2,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
maxLines = 1
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Spacer(modifier = Modifier.requiredWidth(16.dp))
|
||||
Switch(
|
||||
checked = checked,
|
||||
onCheckedChange = onCheckedChange,
|
||||
|
||||
Reference in New Issue
Block a user