diff --git a/build.gradle b/build.gradle
index 94f7f6e9c7..4f3075db79 100644
--- a/build.gradle
+++ b/build.gradle
@@ -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'
diff --git a/lawnchair/res/values-en-rGB/strings.xml b/lawnchair/res/values-en-rGB/strings.xml
index 2c4370ea91..bd584967e9 100644
--- a/lawnchair/res/values-en-rGB/strings.xml
+++ b/lawnchair/res/values-en-rGB/strings.xml
@@ -29,7 +29,7 @@
Label Size
Allow Empty Pages
Make Coloured Backgrounds
- For generated Adaptive icons.
+ For generated Adaptive Icons.
Notification Dots
Preferences
About
diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml
index f2a5c8196c..b9329ab171 100644
--- a/lawnchair/res/values/strings.xml
+++ b/lawnchair/res/values/strings.xml
@@ -34,7 +34,7 @@
Label Size
Allow Empty Pages
Make Colored Backgrounds
- For generated Adaptive icons.
+ For generated Adaptive Icons.
Notification Dots
Preferences
About
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt
index 7fcc969a37..ab794d8529 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt
@@ -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),
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/ClickListenerPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/ClickListenerPreference.kt
index 4b2c7a35b2..906b3875f7 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/ClickListenerPreference.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/ClickListenerPreference.kt
@@ -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(
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/ContributorRow.kt b/lawnchair/src/app/lawnchair/ui/preferences/ContributorRow.kt
index a126b317c3..e5cc7438e8 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/ContributorRow.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/ContributorRow.kt
@@ -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))
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt
index 36d2f14d01..c5bb050abb 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt
@@ -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),
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt
index 235b838609..5c7b55e814 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt
@@ -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
+ )
+ }
}
}
\ No newline at end of file
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt
index 32b2dff272..671fa62515 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt
@@ -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
- )
}
}
\ No newline at end of file
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt
index 201bc1e433..4ed26c13aa 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt
@@ -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,
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreference.kt
index 7f7ba5b3c0..2aa68dbed3 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreference.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreference.kt
@@ -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
+ )
+ }
}
}
}
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceCategoryList.kt b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceCategoryList.kt
index 565715db1c..2be9e1b4b8 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceCategoryList.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceCategoryList.kt
@@ -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,
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt
index 15502ca4e6..9330f9f864 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt
@@ -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
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/SwitchPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/SwitchPreference.kt
index 2437b1422d..65a067f995 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/SwitchPreference.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/SwitchPreference.kt
@@ -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,