Settings: Ensure content is scrollable, make minor tweaks

This commit is contained in:
Patryk Michalik
2021-03-27 13:56:44 +01:00
parent 591d6d3318
commit a8b427029b
14 changed files with 151 additions and 79 deletions
+1 -1
View File
@@ -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'
+1 -1
View File
@@ -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>
+1 -1
View File
@@ -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,