diff --git a/build.gradle b/build.gradle index edd7cf7be8..fc3ec582a4 100644 --- a/build.gradle +++ b/build.gradle @@ -375,6 +375,7 @@ dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3' implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2' + implementation "org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.6" implementation 'com.github.ChickenHook:RestrictionBypass:2.2' implementation 'dev.rikka.tools.refine:runtime:4.4.0' @@ -438,8 +439,13 @@ ksp { spotless { kotlin { - ktlint() - target("lawnchair/src/**/*.kt", "baseline-profile/src/**/*.kt") + target("lawnchair/src/**/*.kt") + ktlint().customRuleSets([ + "io.nlopez.compose.rules:ktlint:0.3.5", + ]).editorConfigOverride([ + "ktlint_compose_modifier-missing-check": "disabled", + "ktlint_compose_compositionlocal-allowlist": "disabled", + ]) } } diff --git a/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt b/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt index c527ef33de..c6473b2b64 100644 --- a/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt +++ b/lawnchair/src/app/lawnchair/backup/ui/CreateBackupScreen.kt @@ -61,7 +61,9 @@ fun NavGraphBuilder.createBackupGraph(route: String) { @OptIn(ExperimentalPermissionsApi::class) @Composable -fun CreateBackupScreen(viewModel: CreateBackupViewModel) { +fun CreateBackupScreen( + viewModel: CreateBackupViewModel, +) { val contents by viewModel.backupContents.collectAsState() val screenshot by viewModel.screenshot.collectAsState() val screenshotDone by viewModel.screenshotDone.collectAsState() diff --git a/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt b/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt index e019278151..f52ced0709 100644 --- a/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt +++ b/lawnchair/src/app/lawnchair/backup/ui/RestoreBackupScreen.kt @@ -76,13 +76,15 @@ fun NavGraphBuilder.restoreBackupGraph(route: String) { viewModel.init(backupUri) onDispose { } } - RestoreBackupScreen(viewModel) + RestoreBackupScreen() } } } @Composable -fun RestoreBackupScreen(viewModel: RestoreBackupViewModel) { +fun RestoreBackupScreen( + viewModel: RestoreBackupViewModel = viewModel(), +) { val isPortrait = LocalConfiguration.current.orientation == Configuration.ORIENTATION_PORTRAIT val scrollState = rememberScrollState() val uiState = viewModel.uiState.collectAsState().value @@ -92,7 +94,7 @@ fun RestoreBackupScreen(viewModel: RestoreBackupViewModel) { scrollState = if (isPortrait) null else scrollState, ) { when (uiState) { - is RestoreBackupUiState.Success -> RestoreBackupOptions(isPortrait, uiState.backup, viewModel = viewModel) + is RestoreBackupUiState.Success -> RestoreBackupOptions(isPortrait, uiState.backup) is RestoreBackupUiState.Loading -> { Box(modifier = Modifier.fillMaxSize()) { CircularProgressIndicator(modifier = Modifier.align(Alignment.Center)) @@ -115,7 +117,7 @@ fun RestoreBackupScreen(viewModel: RestoreBackupViewModel) { fun ColumnScope.RestoreBackupOptions( isPortrait: Boolean, backup: LawnchairBackup, - viewModel: RestoreBackupViewModel, + viewModel: RestoreBackupViewModel = viewModel(), ) { val backupContents = backup.info.contents val contents by viewModel.backupContents.collectAsState() diff --git a/lawnchair/src/app/lawnchair/gestures/handlers/SleepGestureHandler.kt b/lawnchair/src/app/lawnchair/gestures/handlers/SleepGestureHandler.kt index c118bce601..d210f89475 100644 --- a/lawnchair/src/app/lawnchair/gestures/handlers/SleepGestureHandler.kt +++ b/lawnchair/src/app/lawnchair/gestures/handlers/SleepGestureHandler.kt @@ -85,8 +85,7 @@ class SleepMethodPieAccessibility(context: Context) : SleepGestureHandler.SleepM title = R.string.dt2s_a11y_hint_title, description = R.string.dt2s_a11y_hint, settingsIntent = intent, - handleClose = { close(true) }, - ) + ) { close(true) } } return } @@ -114,8 +113,7 @@ class SleepMethodDeviceAdmin(context: Context) : SleepGestureHandler.SleepMethod title = R.string.dt2s_admin_hint_title, description = R.string.dt2s_admin_hint, settingsIntent = intent, - handleClose = { close(true) }, - ) + ) { close(true) } } return } diff --git a/lawnchair/src/app/lawnchair/ui/OverflowMenu.kt b/lawnchair/src/app/lawnchair/ui/OverflowMenu.kt index c5d8820154..30b51b9360 100644 --- a/lawnchair/src/app/lawnchair/ui/OverflowMenu.kt +++ b/lawnchair/src/app/lawnchair/ui/OverflowMenu.kt @@ -13,7 +13,9 @@ import androidx.compose.ui.unit.dp import app.lawnchair.ui.preferences.components.ClickableIcon @Composable -fun OverflowMenu(block: @Composable OverflowMenuScope.() -> Unit) { +fun OverflowMenu( + block: @Composable OverflowMenuScope.() -> Unit, +) { val showMenu = remember { mutableStateOf(false) } val overflowMenuScope = remember { OverflowMenuScopeImpl(showMenu) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/CustomIconShapePreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/CustomIconShapePreference.kt index 8f9632b9ff..ed6a30fbd7 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/CustomIconShapePreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/CustomIconShapePreference.kt @@ -219,16 +219,15 @@ private fun IconShapeClipboardPreferenceGroup( @Composable private fun ClipboardButton( - modifier: Modifier = Modifier, label: String, + imageVector: ImageVector, + modifier: Modifier = Modifier, description: String? = null, enabled: Boolean = true, - imageVector: ImageVector, onClick: () -> Unit, ) { PreferenceTemplate( modifier = modifier.clickable(enabled = enabled, onClick = onClick), - contentModifier = Modifier, title = { Text(text = label) }, description = { description?.let { Text(text = it) } }, startWidget = { @@ -247,12 +246,12 @@ private fun ClipboardButton( @Composable private fun IconShapeCornerPreference( - modifier: Modifier = Modifier, title: String, scale: Float, - onScaleChange: (Float) -> Unit, cornerShape: IconCornerShape, + onScaleChange: (Float) -> Unit, onCornerShapeChange: (IconCornerShape) -> Unit, + modifier: Modifier = Modifier, ) { CornerSlider( modifier = modifier, @@ -268,12 +267,12 @@ private fun IconShapeCornerPreference( @Composable private fun CornerSlider( - modifier: Modifier = Modifier, label: String, value: Float, onValueChange: (Float) -> Unit, cornerShape: IconCornerShape, onCornerShapeChange: (IconCornerShape) -> Unit, + modifier: Modifier = Modifier, ) { val bottomSheetHandler = LocalBottomSheetHandler.current val options = listOf( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt index 9cd964a2f8..fc7bf22b2d 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt @@ -38,6 +38,7 @@ import app.lawnchair.ui.preferences.components.PreferenceLayout import app.lawnchair.ui.preferences.components.SliderPreference import app.lawnchair.ui.preferences.components.SwitchPreference import com.android.launcher3.R +import kotlinx.collections.immutable.toPersistentList object DockRoutes { const val SEARCH_PROVIDER = "searchProvider" @@ -116,7 +117,7 @@ private fun HotseatModePreference( ListPreference( adapter = adapter, - entries = entries, + entries = entries.toPersistentList(), label = stringResource(id = R.string.hotseat_mode_label), ) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt index eacab6bb72..bc1edf8e3b 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt @@ -89,7 +89,9 @@ private enum class ContentType { } @Composable -fun FontSelection(fontPref: BasePreferenceManager.FontPref) { +fun FontSelection( + fontPref: BasePreferenceManager.FontPref, +) { val context = LocalContext.current val customFonts by remember { FontCache.INSTANCE.get(context).customFonts }.collectAsState(initial = emptyList()) val items by produceState(initialValue = emptyList()) { @@ -254,15 +256,7 @@ private fun FontSelectionItem( endWidget = when { selected && family.variants.size > 1 -> { { - Row( - horizontalArrangement = Arrangement.End, - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier - .wrapContentWidth() - .padding(end = 16.dp), - ) { - VariantDropdown(adapter = adapter, family = family) - } + VariantDropdown(adapter = adapter, family = family) } } onDelete != null -> { @@ -298,46 +292,54 @@ private fun VariantDropdown( adapter: PreferenceAdapter, family: FontCache.Family, ) { - val selectedFont = adapter.state.value - var showVariants by remember { mutableStateOf(false) } - - val context = LocalContext.current - DisposableEffect(family) { - val fontCache = FontCache.INSTANCE.get(context) - family.variants.forEach { fontCache.preloadFont(it.value) } - onDispose { } - } - - TextButton( - onClick = { showVariants = true }, - colors = ButtonDefaults.textButtonColors(contentColor = MaterialTheme.colorScheme.onBackground), - contentPadding = VariantButtonContentPadding, + Row( + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .wrapContentWidth() + .padding(end = 16.dp), ) { - AndroidText( - modifier = Modifier.wrapContentWidth(), - update = { - it.text = selectedFont.displayName - it.setFont(selectedFont) - }, - ) - Icon( - imageVector = Icons.Rounded.ArrowDropDown, - contentDescription = null, - ) - } - DropdownMenu( - expanded = showVariants, - onDismissRequest = { showVariants = false }, - ) { - family.sortedVariants.forEach { font -> - DropdownMenuItem(onClick = { - adapter.onChange(font) - showVariants = false - }) { - Text( - text = font.displayName, - fontFamily = font.composeFontFamily, - ) + val selectedFont = adapter.state.value + var showVariants by remember { mutableStateOf(false) } + + val context = LocalContext.current + DisposableEffect(family) { + val fontCache = FontCache.INSTANCE.get(context) + family.variants.forEach { fontCache.preloadFont(it.value) } + onDispose { } + } + + TextButton( + onClick = { showVariants = true }, + colors = ButtonDefaults.textButtonColors(contentColor = MaterialTheme.colorScheme.onBackground), + contentPadding = VariantButtonContentPadding, + ) { + AndroidText( + modifier = Modifier.wrapContentWidth(), + update = { + it.text = selectedFont.displayName + it.setFont(selectedFont) + }, + ) + Icon( + imageVector = Icons.Rounded.ArrowDropDown, + contentDescription = null, + ) + } + DropdownMenu( + expanded = showVariants, + onDismissRequest = { showVariants = false }, + ) { + family.sortedVariants.forEach { font -> + DropdownMenuItem(onClick = { + adapter.onChange(font) + showVariants = false + }) { + Text( + text = font.displayName, + fontFamily = font.composeFontFamily, + ) + } } } } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt index de993d760c..eb418d8bb2 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt @@ -40,6 +40,8 @@ import app.lawnchair.util.appComparator import app.lawnchair.util.appsState import com.android.launcher3.R import java.util.Comparator.comparing +import kotlinx.collections.immutable.ImmutableSet +import kotlinx.collections.immutable.toPersistentSet fun NavGraphBuilder.hiddenAppsGraph(route: String) { preferenceGraph(route, { HiddenAppsPreferences() }) @@ -55,7 +57,7 @@ fun HiddenAppsPreferences() { } else { stringResource(id = R.string.hidden_apps_label_with_count, hiddenApps.size) } - val apps by appsState(comparator = hiddenAppsComparator(hiddenApps)) + val apps by appsState(comparator = hiddenAppsComparator(hiddenApps.toPersistentSet())) val state = rememberLazyListState() PreferenceScaffold( label = pageTitle, @@ -107,7 +109,7 @@ fun HiddenAppsPreferences() { } @Composable -fun hiddenAppsComparator(hiddenApps: Set): Comparator = remember { +fun hiddenAppsComparator(hiddenApps: ImmutableSet): Comparator = remember { comparing { if (hiddenApps.contains(it.key.toString())) 0 else 1 }.then(appComparator) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt index 0df4ef4cc9..46a11145cd 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt @@ -41,6 +41,7 @@ import app.lawnchair.ui.preferences.components.SwitchPreference import app.lawnchair.util.collectAsStateBlocking import com.android.launcher3.R import com.android.launcher3.Utilities +import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.launch object HomeScreenRoutes { @@ -187,7 +188,7 @@ fun HomeScreenPreferences() { fun HomeScreenTextColorPreference() { ListPreference( adapter = preferenceManager2().workspaceTextColor.getAdapter(), - entries = ColorMode.entries(), + entries = ColorMode.entries().toPersistentList(), label = stringResource(id = R.string.home_screen_text_color), ) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt index 8f3c970f15..f5f11cf088 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/IconPackPreferences.kt @@ -70,6 +70,7 @@ import app.lawnchair.util.getThemedIconPacksInstalled import app.lawnchair.util.isPackageInstalled import com.android.launcher3.R import com.google.accompanist.drawablepainter.rememberDrawablePainter +import kotlinx.collections.immutable.toPersistentList data class IconPackInfo( val name: String, @@ -190,7 +191,7 @@ fun IconPackPreferences() { value = it, label = { stringResource(id = it.labelResourceId) }, ) - }, + }.toPersistentList(), value = ThemedIconsState.getForSettings( themedIcons = themedIconsAdapter.state.value, drawerThemedIcons = drawerThemedIconsEnabled, @@ -228,7 +229,6 @@ fun IconPackGrid( val padding = 12.dp var iconPacksLocal = iconPacks val themedIconPacksName = themedIconPacks.map { it.name } - val modifier = Modifier.padding(bottom = 6.dp, top = 6.dp) if (isThemedIconPack) { iconPacksLocal = if (drawerThemedIcons) { @@ -259,7 +259,7 @@ fun IconPackGrid( state = lazyListState, horizontalArrangement = Arrangement.spacedBy(space = padding), contentPadding = PaddingValues(horizontal = padding), - modifier = modifier.fillMaxWidth(), + modifier = Modifier.padding(bottom = 6.dp, top = 6.dp).fillMaxWidth(), ) { itemsIndexed(iconPacksLocal, { _, item -> item.packageName }) { index, item -> IconPackItem( @@ -300,7 +300,7 @@ private fun getIconPackItemWidth( fun IconPackItem( item: IconPackInfo, selected: Boolean, - modifier: Modifier, + modifier: Modifier = Modifier, onClick: () -> Unit, ) { Surface( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/IconPickerPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/IconPickerPreference.kt index f8edc5c0c8..0bc9e6f23b 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/IconPickerPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/IconPickerPreference.kt @@ -84,7 +84,9 @@ fun NavGraphBuilder.iconPickerGraph(route: String) { } @Composable -fun IconPickerPreference(packageName: String) { +fun IconPickerPreference( + packageName: String, +) { val context = LocalContext.current val iconPack = remember { IconPackProvider.INSTANCE.get(context).getIconPackOrSystem(packageName) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt index fe374aed35..98905a38bf 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/Preferences.kt @@ -68,7 +68,9 @@ val LocalPreferenceInteractor = staticCompositionLocalOf { } @Composable -fun Preferences(interactor: PreferenceInteractor = viewModel()) { +fun Preferences( + interactor: PreferenceInteractor = viewModel(), +) { val navController = rememberNavController() val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl val slideDistance = rememberSlideDistance() diff --git a/lawnchair/src/app/lawnchair/ui/preferences/SmartspacePreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/SmartspacePreferences.kt index 124e970d3f..b00961a2af 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/SmartspacePreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/SmartspacePreferences.kt @@ -46,6 +46,7 @@ import app.lawnchair.ui.preferences.components.SwitchPreference import app.lawnchair.ui.theme.isSelectedThemeDark import com.android.launcher3.R import com.kieronquinn.app.smartspacer.sdk.SmartspacerConstants +import kotlinx.collections.immutable.toPersistentList fun NavGraphBuilder.smartspaceGraph(route: String) { preferenceGraph(route, { SmartspacePreferences(fromWidget = false) }) @@ -56,7 +57,9 @@ fun NavGraphBuilder.smartspaceWidgetGraph(route: String) { } @Composable -fun SmartspacePreferences(fromWidget: Boolean) { +fun SmartspacePreferences( + fromWidget: Boolean, +) { val preferenceManager2 = preferenceManager2() val smartspaceProvider = SmartspaceProvider.INSTANCE.get(LocalContext.current) val smartspaceAdapter = preferenceManager2.enableSmartspace.getAdapter() @@ -134,7 +137,7 @@ fun SmartspaceProviderPreference( ListPreference( adapter = adapter, - entries = entries, + entries = entries.toPersistentList(), label = stringResource(id = R.string.smartspace_mode_label), endWidget = endWidget, ) @@ -227,7 +230,7 @@ fun SmartspaceTimeFormatPreference() { ListPreference( adapter = adapter, - entries = entries, + entries = entries.toPersistentList(), label = stringResource(id = R.string.smartspace_time_format), ) } @@ -244,7 +247,7 @@ fun SmartspaceCalendarPreference() { ListPreference( adapter = adapter, - entries = entries, + entries = entries.toPersistentList(), label = stringResource(id = R.string.smartspace_calendar), ) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/about/ContributorRow.kt b/lawnchair/src/app/lawnchair/ui/preferences/about/ContributorRow.kt index 62d699a904..dd05b6c9ba 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/about/ContributorRow.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/about/ContributorRow.kt @@ -39,7 +39,12 @@ import app.lawnchair.ui.preferences.components.PreferenceTemplate import coil.compose.SubcomposeAsyncImage @Composable -fun ContributorRow(name: String, description: String, photoUrl: String, url: String) { +fun ContributorRow( + name: String, + description: String, + photoUrl: String, + url: String, +) { val context = LocalContext.current PreferenceTemplate( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/about/LawnchairLink.kt b/lawnchair/src/app/lawnchair/ui/preferences/about/LawnchairLink.kt index 2cca9702c5..c84f24ea42 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/about/LawnchairLink.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/about/LawnchairLink.kt @@ -45,8 +45,8 @@ import androidx.compose.ui.unit.dp fun LawnchairLink( @DrawableRes iconResId: Int, label: String, - modifier: Modifier = Modifier, url: String, + modifier: Modifier = Modifier, ) { val context = LocalContext.current diff --git a/lawnchair/src/app/lawnchair/ui/preferences/about/acknowledgements/Acknowledgements.kt b/lawnchair/src/app/lawnchair/ui/preferences/about/acknowledgements/Acknowledgements.kt index 9153619a81..1c293f2e26 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/about/acknowledgements/Acknowledgements.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/about/acknowledgements/Acknowledgements.kt @@ -78,7 +78,10 @@ fun Acknowledgements() { } @Composable -fun OssLibraryItem(ossLibrary: OssLibrary, index: Int) { +fun OssLibraryItem( + ossLibrary: OssLibrary, + index: Int, +) { val navController = LocalNavController.current val destination = subRoute(name = "$index") @@ -96,7 +99,9 @@ fun OssLibraryItem(ossLibrary: OssLibrary, index: Int) { } @Composable -fun NoticePage(index: Int) { +fun NoticePage( + index: Int, +) { val ossLibraries by LocalPreferenceInteractor.current.ossLibraries.collectAsState() val ossLibrary = ossLibraries.getOrNull(index) val dataState = ossLibrary?.let { loadNotice(ossLibrary = it) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt index cd25339862..aed0634510 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/AppItem.kt @@ -75,7 +75,6 @@ fun AppItemPlaceholder( widget: (@Composable () -> Unit)? = null, ) { AppItemLayout( - widget = widget, icon = { Spacer( modifier = Modifier @@ -86,25 +85,27 @@ fun AppItemPlaceholder( ), ) }, - ) { - Spacer( - modifier = Modifier - .width(120.dp) - .height(24.dp) - .placeholder( - visible = true, - highlight = PlaceholderHighlight.fade(), - ), - ) - } + title = { + Spacer( + modifier = Modifier + .width(120.dp) + .height(24.dp) + .placeholder( + visible = true, + highlight = PlaceholderHighlight.fade(), + ), + ) + }, + widget = widget, + ) } @Composable private fun AppItemLayout( - modifier: Modifier = Modifier, - widget: (@Composable () -> Unit)? = null, icon: @Composable () -> Unit, title: @Composable () -> Unit, + modifier: Modifier = Modifier, + widget: (@Composable () -> Unit)? = null, ) { PreferenceTemplate( title = title, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/FlagSwitchPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/FlagSwitchPreference.kt index 65778e9afb..458304bb5f 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/FlagSwitchPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/FlagSwitchPreference.kt @@ -11,8 +11,8 @@ fun FlagSwitchPreference( mask: Int, label: String, description: String? = null, - onClick: (() -> Unit)? = null, enabled: Boolean = true, + onClick: (() -> Unit)? = null, ) { SwitchPreference( checked = flags.hasFlag(mask), diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/IconShapePreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/IconShapePreference.kt index 10756b3828..8c06b372a9 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/IconShapePreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/IconShapePreference.kt @@ -140,8 +140,8 @@ fun IconShapePreference() { @Composable private fun CustomIconShapePreference( - modifier: Modifier = Modifier, iconShapeAdapter: PreferenceAdapter, + modifier: Modifier = Modifier, ) { val preferenceManager2 = preferenceManager2() @@ -169,8 +169,8 @@ private fun CustomIconShapePreference( @Composable private fun ModifyCustomIconShapePreference( - modifier: Modifier = Modifier, customIconShape: IconShape?, + modifier: Modifier = Modifier, ) { val navController = LocalNavController.current val route = subRoute(IconShapeRoutes.CUSTOM_ICON_SHAPE_CREATOR) @@ -220,8 +220,8 @@ private fun ModifyCustomIconShapePreference( */ @Composable fun IconShapePreview( - modifier: Modifier = Modifier, iconShape: IconShape, + modifier: Modifier = Modifier, strokeColor: Color = MaterialTheme.colorScheme.primary, fillColor: Color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.1f), ) { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnPreferenceGroup.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnPreferenceGroup.kt index 92284e9f09..2437a630d1 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnPreferenceGroup.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnPreferenceGroup.kt @@ -31,13 +31,13 @@ import androidx.compose.ui.unit.dp fun LazyListScope.preferenceGroupItems( count: Int, - heading: (@Composable () -> String)? = null, isFirstChild: Boolean, - key: ((index: Int) -> Any)? = null, - contentType: (index: Int) -> Any? = { null }, showDividers: Boolean = true, dividerStartIndent: Dp = 0.dp, dividerEndIndent: Dp = 0.dp, + heading: (@Composable () -> String)? = null, + key: ((index: Int) -> Any)? = null, + contentType: (index: Int) -> Any? = { null }, itemContent: @Composable LazyItemScope.(index: Int) -> Unit, ) { item { @@ -58,24 +58,24 @@ fun LazyListScope.preferenceGroupItems( inline fun LazyListScope.preferenceGroupItems( items: List, - noinline heading: (@Composable () -> String)? = null, isFirstChild: Boolean, - noinline key: ((index: Int, item: T) -> Any)? = null, - noinline contentType: (index: Int) -> Any? = { null }, showDividers: Boolean = true, dividerStartIndent: Dp = 0.dp, dividerEndIndent: Dp = 0.dp, + noinline heading: (@Composable () -> String)? = null, + noinline key: ((index: Int, item: T) -> Any)? = null, + noinline contentType: (index: Int) -> Any? = { null }, crossinline itemContent: @Composable LazyItemScope.(index: Int, item: T) -> Unit, ) { preferenceGroupItems( items.size, - heading, isFirstChild, - if (key != null) { index: Int -> key(index, items[index]) } else null, - contentType = contentType, showDividers = showDividers, dividerStartIndent = dividerStartIndent, dividerEndIndent = dividerEndIndent, + heading, + key = if (key != null) { index: Int -> key(index, items[index]) } else null, + contentType = contentType, ) { itemContent(it, items[it]) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/ListPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/ListPreference.kt index 781c7b5523..9e0eb7a5a3 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/ListPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/ListPreference.kt @@ -31,11 +31,12 @@ import androidx.compose.ui.unit.dp import app.lawnchair.preferences.PreferenceAdapter import app.lawnchair.ui.AlertBottomSheetContent import app.lawnchair.ui.util.bottomSheetHandler +import kotlinx.collections.immutable.ImmutableList @Composable fun ListPreference( adapter: PreferenceAdapter, - entries: List>, + entries: ImmutableList>, label: String, enabled: Boolean = true, description: String? = null, @@ -54,7 +55,7 @@ fun ListPreference( @Composable fun ListPreference( - entries: List>, + entries: ImmutableList>, value: T, onValueChange: (T) -> Unit, label: String, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/LoadingScreen.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/LoadingScreen.kt index 3e90096242..88faad62e7 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/LoadingScreen.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/LoadingScreen.kt @@ -26,7 +26,10 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @Composable -fun LoadingScreen(isLoading: Boolean, content: @Composable () -> Unit) { +fun LoadingScreen( + isLoading: Boolean, + content: @Composable () -> Unit, +) { Crossfade(targetState = isLoading, label = "") { if (it) { Column( @@ -43,7 +46,10 @@ fun LoadingScreen(isLoading: Boolean, content: @Composable () -> Unit) { } @Composable -fun LoadingScreen(obj: T?, content: @Composable (T) -> Unit) { +fun LoadingScreen( + obj: T?, + content: @Composable (T) -> Unit, +) { LoadingScreen(isLoading = obj == null) { content(obj!!) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/NavigationActionPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/NavigationActionPreference.kt index 7a61f9d800..48725acef0 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/NavigationActionPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/NavigationActionPreference.kt @@ -25,8 +25,8 @@ import app.lawnchair.ui.preferences.LocalNavController @Composable fun NavigationActionPreference( label: String, - subtitle: String? = null, destination: String, + subtitle: String? = null, endWidget: (@Composable () -> Unit)? = null, ) { val navController = LocalNavController.current diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/NestedScrollStretch.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/NestedScrollStretch.kt index 9d562dc1c8..ec637ff678 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/NestedScrollStretch.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/NestedScrollStretch.kt @@ -19,7 +19,9 @@ import androidx.compose.ui.unit.Velocity import app.lawnchair.ui.StretchEdgeEffect @Composable -fun NestedScrollStretch(content: @Composable () -> Unit) { +fun NestedScrollStretch( + content: @Composable () -> Unit, +) { val invalidateTick = remember { mutableIntStateOf(0) } val invalidate = Runnable { invalidateTick.intValue++ } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/NotificationDotsPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/NotificationDotsPreference.kt index c69debfff1..a7f5273cd5 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/NotificationDotsPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/NotificationDotsPreference.kt @@ -56,7 +56,10 @@ import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow @Composable -fun NotificationDotsPreference(enabled: Boolean, serviceEnabled: Boolean) { +fun NotificationDotsPreference( + enabled: Boolean, + serviceEnabled: Boolean, +) { val bottomSheetHandler = bottomSheetHandler val context = LocalContext.current val showWarning = enabled && !serviceEnabled @@ -102,7 +105,9 @@ fun NotificationDotsPreference(enabled: Boolean, serviceEnabled: Boolean) { } @Composable -fun NotificationAccessConfirmation(onDismissRequest: () -> Unit) { +fun NotificationAccessConfirmation( + onDismissRequest: () -> Unit, +) { val context = LocalContext.current AlertBottomSheetContent( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceCategory.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceCategory.kt index c7d34660c3..0a888c4f87 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceCategory.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceCategory.kt @@ -34,9 +34,9 @@ import app.lawnchair.ui.preferences.subRoute @Composable fun PreferenceCategory( label: String, - description: String? = null, @DrawableRes iconResource: Int, route: String, + description: String? = null, ) { val navController = LocalNavController.current val resolvedRoute = subRoute(name = route) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt index 2a7c283ad2..8916c80fa3 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt @@ -67,12 +67,14 @@ fun PreferenceGroup( } } } - PreferenceGroupDescription(description, showDescription) + PreferenceGroupDescription(description = description, showDescription = showDescription) } } @Composable -fun PreferenceGroupHeading(heading: String?) { +fun PreferenceGroupHeading( + heading: String?, +) { if (heading != null) { Column( verticalArrangement = Arrangement.Center, @@ -93,7 +95,10 @@ fun PreferenceGroupHeading(heading: String?) { } @Composable -fun PreferenceGroupDescription(description: String? = null, showDescription: Boolean = true) { +fun PreferenceGroupDescription( + description: String? = null, + showDescription: Boolean = true, +) { description?.let { ExpandAndShrink(visible = showDescription) { Row(modifier = Modifier.padding(start = 32.dp, end = 32.dp, top = 16.dp)) { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceLayout.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceLayout.kt index 25b1854c01..75ecba07b0 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceLayout.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceLayout.kt @@ -31,13 +31,13 @@ import androidx.compose.ui.unit.dp @Composable fun PreferenceLayout( + label: String, + backArrowVisible: Boolean = true, verticalArrangement: Arrangement.Vertical = Arrangement.spacedBy(8.dp), horizontalAlignment: Alignment.Horizontal = Alignment.Start, scrollState: ScrollState? = rememberScrollState(), - label: String, actions: @Composable RowScope.() -> Unit = {}, bottomBar: @Composable () -> Unit = { BottomSpacer() }, - backArrowVisible: Boolean = true, content: @Composable ColumnScope.() -> Unit, ) { PreferenceScaffold( @@ -57,12 +57,12 @@ fun PreferenceLayout( @Composable fun PreferenceLayoutLazyColumn( + label: String, modifier: Modifier = Modifier, enabled: Boolean = true, - state: LazyListState = rememberLazyListState(), - label: String, - actions: @Composable RowScope.() -> Unit = {}, backArrowVisible: Boolean = true, + state: LazyListState = rememberLazyListState(), + actions: @Composable RowScope.() -> Unit = {}, content: LazyListScope.() -> Unit, ) { PreferenceScaffold( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceScaffold.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceScaffold.kt index 0271cd4b3a..61ba0e76c0 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceScaffold.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceScaffold.kt @@ -34,8 +34,8 @@ import com.google.accompanist.insets.ui.Scaffold @OptIn(ExperimentalMaterial3Api::class) @Composable fun PreferenceScaffold( - backArrowVisible: Boolean = true, label: String, + backArrowVisible: Boolean = true, actions: @Composable RowScope.() -> Unit = {}, bottomBar: @Composable () -> Unit = { BottomSpacer() }, content: @Composable (PaddingValues) -> Unit, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceTemplate.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceTemplate.kt index 9577c72971..3b1417cde5 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceTemplate.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceTemplate.kt @@ -37,19 +37,20 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import app.lawnchair.ui.util.addIf +@Suppress("ktlint:compose:modifier-not-used-at-root") @Composable fun PreferenceTemplate( + title: @Composable () -> Unit, modifier: Modifier = Modifier, contentModifier: Modifier = Modifier, - title: @Composable () -> Unit, - description: @Composable () -> Unit = {}, - startWidget: (@Composable () -> Unit)? = null, - endWidget: (@Composable () -> Unit)? = null, enabled: Boolean = true, applyPaddings: Boolean = true, horizontalPadding: Dp = 16.dp, verticalPadding: Dp = 16.dp, verticalAlignment: Alignment.Vertical = Alignment.CenterVertically, + description: @Composable () -> Unit = {}, + startWidget: (@Composable () -> Unit)? = null, + endWidget: (@Composable () -> Unit)? = null, ) { val contentAlphaDisabled = ContentAlpha.disabled Column { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/ScrollContainers.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/ScrollContainers.kt index 47f50fa37b..7ab2cd02c4 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/ScrollContainers.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/ScrollContainers.kt @@ -54,8 +54,8 @@ fun PreferenceColumn( fun PreferenceLazyColumn( modifier: Modifier = Modifier, enabled: Boolean = true, - state: LazyListState = rememberLazyListState(), isChild: Boolean = false, + state: LazyListState = rememberLazyListState(), content: LazyListScope.() -> Unit, ) { if (!enabled) { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/SearchTextField.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/SearchTextField.kt index 929ac3abc7..5ce559c06e 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/SearchTextField.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/SearchTextField.kt @@ -23,14 +23,12 @@ fun SearchTextField( modifier: Modifier = Modifier, enabled: Boolean = true, readOnly: Boolean = false, - placeholder: @Composable (() -> Unit)? = null, - leadingIcon: @Composable (() -> Unit)? = null, isError: Boolean = false, + singleLine: Boolean = false, + maxLines: Int = Int.MAX_VALUE, visualTransformation: VisualTransformation = VisualTransformation.None, keyboardOptions: KeyboardOptions = KeyboardOptions.Default, keyboardActions: KeyboardActions = KeyboardActions.Default, - singleLine: Boolean = false, - maxLines: Int = Int.MAX_VALUE, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, shape: Shape = MaterialTheme.shapes.small, colors: TextFieldColors = TextFieldDefaults.outlinedTextFieldColors( @@ -38,6 +36,8 @@ fun SearchTextField( unfocusedBorderColor = Color.Transparent, disabledBorderColor = Color.Transparent, ), + placeholder: @Composable (() -> Unit)? = null, + leadingIcon: @Composable (() -> Unit)? = null, ) { OutlinedTextField( value = value, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/SwitchPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/SwitchPreference.kt index 0771a577a2..8539aa07b3 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/SwitchPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/SwitchPreference.kt @@ -36,8 +36,8 @@ fun SwitchPreference( adapter: PreferenceAdapter, label: String, description: String? = null, - onClick: (() -> Unit)? = null, enabled: Boolean = true, + onClick: (() -> Unit)? = null, ) { val checked = adapter.state.value SwitchPreference( @@ -56,8 +56,8 @@ fun SwitchPreference( onCheckedChange: (Boolean) -> Unit, label: String, description: String? = null, - onClick: (() -> Unit)? = null, enabled: Boolean = true, + onClick: (() -> Unit)? = null, ) { PreferenceTemplate( modifier = Modifier.clickable(enabled = enabled) { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/TextPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/TextPreference.kt index 534571cfc2..64723706c8 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/TextPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/TextPreference.kt @@ -24,8 +24,8 @@ import app.lawnchair.ui.util.bottomSheetHandler fun TextPreference( adapter: PreferenceAdapter, label: String, - description: (String) -> String? = { it }, enabled: Boolean = true, + description: (String) -> String? = { it }, ) { val value = adapter.state.value TextPreference( @@ -42,8 +42,8 @@ fun TextPreference( value: String, onChange: (String) -> Unit, label: String, - description: (String) -> String? = { it }, enabled: Boolean = true, + description: (String) -> String? = { it }, ) { val bottomSheetHandler = bottomSheetHandler PreferenceTemplate( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/ThemePreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/ThemePreference.kt index d9defc30cb..6f0d4fe34f 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/ThemePreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/ThemePreference.kt @@ -6,6 +6,7 @@ import app.lawnchair.preferences.getAdapter import app.lawnchair.preferences.preferenceManager import com.android.launcher3.R import com.android.launcher3.Utilities +import kotlinx.collections.immutable.toPersistentList object ThemeChoice { const val LIGHT = "light" @@ -31,7 +32,7 @@ val themeEntries = listOf( fun ThemePreference() { ListPreference( adapter = preferenceManager().launcherTheme.getAdapter(), - entries = themeEntries, + entries = themeEntries.toPersistentList(), label = stringResource(id = R.string.theme_label), ) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/TopBar.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/TopBar.kt index b9bc16c626..5cbe381f65 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/TopBar.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/TopBar.kt @@ -47,8 +47,8 @@ import androidx.compose.ui.unit.dp @Composable fun TopBar( backArrowVisible: Boolean, - scrollBehavior: TopAppBarScrollBehavior? = null, label: String, + scrollBehavior: TopAppBarScrollBehavior? = null, actions: @Composable RowScope.() -> Unit = {}, ) { val backDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/WallpaperPreview.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/WallpaperPreview.kt index f69181150c..60d9962310 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/WallpaperPreview.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/WallpaperPreview.kt @@ -24,7 +24,9 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @Composable -fun WallpaperPreview(modifier: Modifier = Modifier) { +fun WallpaperPreview( + modifier: Modifier = Modifier, +) { val painter = rememberDrawablePainter(wallpaperDrawable()) Image( painter = painter, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/WarningPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/WarningPreference.kt index 40cb911e4c..8eb1267b56 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/WarningPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/WarningPreference.kt @@ -10,8 +10,8 @@ import androidx.compose.ui.Modifier @Composable fun WarningPreference( - modifier: Modifier = Modifier, text: String, + modifier: Modifier = Modifier, ) { PreferenceTemplate( modifier = modifier, diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorContrastWarning.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorContrastWarning.kt index e07b4eb2af..2703c26d8c 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorContrastWarning.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorContrastWarning.kt @@ -17,10 +17,10 @@ private const val CONTRAST_THRESHOLD = 1.5 */ @Composable fun ColorContrastWarning( - modifier: Modifier = Modifier, foregroundColor: ColorOption, backgroundColor: ColorOption, text: String, + modifier: Modifier = Modifier, ) { val context = LocalContext.current val foregroundColorInt = foregroundColor.colorPreferenceEntry.lightColor(context) @@ -40,10 +40,10 @@ fun ColorContrastWarning( */ @Composable fun ColorContrastWarning( - modifier: Modifier = Modifier, @ColorInt foregroundColor: Int, @ColorInt backgroundColor: Int, text: String, + modifier: Modifier = Modifier, ) { val enoughContrast = if (foregroundColor != 0 && backgroundColor != 0) { ColorUtils.calculateContrast( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorOptions.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorOptions.kt index a7ce76da05..cf6a41936c 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorOptions.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorOptions.kt @@ -1,8 +1,10 @@ package app.lawnchair.ui.preferences.components.colorpreference import app.lawnchair.theme.color.ColorOption +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toPersistentList -val staticColors = listOf( +val staticColors: ImmutableList> = listOf( ColorOption.CustomColor(0xFFF32020), ColorOption.CustomColor(0xFFF20D69), ColorOption.CustomColor(0xFF7452FF), @@ -15,10 +17,13 @@ val staticColors = listOf( ColorOption.CustomColor(0xFFFF9800), ColorOption.CustomColor(0xFF7C5445), ColorOption.CustomColor(0xFF67818E), -).map(ColorOption::colorPreferenceEntry) +).asSequence().map(ColorOption::colorPreferenceEntry).toPersistentList() -val dynamicColors = listOf(ColorOption.SystemAccent, ColorOption.WallpaperPrimary) +val dynamicColors: ImmutableList> = listOf(ColorOption.SystemAccent, ColorOption.WallpaperPrimary) + .asSequence() .filter(ColorOption::isSupported) .map(ColorOption::colorPreferenceEntry) + .toPersistentList() -val dynamicColorsWithDefault = dynamicColors + listOf(ColorOption.Default.colorPreferenceEntry) +val dynamicColorsWithDefault: ImmutableList> = + (dynamicColors.asSequence() + ColorOption.Default.colorPreferenceEntry).toPersistentList() diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreference.kt index da36907a7b..7b39e4c4ee 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorPreference.kt @@ -37,7 +37,9 @@ import com.patrykmichalik.opto.domain.Preference * @see ColorSelection */ @Composable -fun ColorPreference(preference: Preference>) { +fun ColorPreference( + preference: Preference>, +) { val modelList = ColorPreferenceModelList.INSTANCE.get(LocalContext.current) val model = modelList[preference.key.name] val adapter: PreferenceAdapter = model.prefObject.getAdapter() diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt index 653ee92943..6ce5c9f1cf 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/ColorSelectionPreference.kt @@ -38,6 +38,8 @@ import app.lawnchair.ui.preferences.components.colorpreference.pickers.SwatchGri import app.lawnchair.ui.preferences.preferenceGraph import com.android.launcher3.R import com.patrykmichalik.opto.domain.Preference +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.launch fun NavGraphBuilder.colorSelectionGraph(route: String) { @@ -56,7 +58,7 @@ fun NavGraphBuilder.colorSelectionGraph(route: String) { ColorSelection( label = stringResource(id = model.labelRes), preference = model.prefObject, - dynamicEntries = model.dynamicEntries, + dynamicEntries = model.dynamicEntries.toPersistentList(), ) } } @@ -67,8 +69,8 @@ fun NavGraphBuilder.colorSelectionGraph(route: String) { fun ColorSelection( label: String, preference: Preference, - dynamicEntries: List> = dynamicColors, - staticEntries: List> = staticColors, + dynamicEntries: ImmutableList> = dynamicColors, + staticEntries: ImmutableList> = staticColors, ) { val adapter = preference.getAdapter() val appliedColor = adapter.state.value diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/CustomColorPicker.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/CustomColorPicker.kt index 9cf5d301ea..53c0a37a4f 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/CustomColorPicker.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/CustomColorPicker.kt @@ -79,8 +79,8 @@ import kotlinx.coroutines.launch @OptIn(ExperimentalFoundationApi::class) @Composable fun CustomColorPicker( - modifier: Modifier = Modifier, selectedColor: Int, + modifier: Modifier = Modifier, onSelect: (Int) -> Unit, ) { val focusManager = LocalFocusManager.current @@ -208,8 +208,8 @@ fun CustomColorPicker( @Composable private fun HexColorPicker( - modifier: Modifier = Modifier, textFieldValue: TextFieldValue, + modifier: Modifier = Modifier, onTextFieldValueChange: (TextFieldValue) -> Unit, ) { val context = LocalContext.current @@ -353,9 +353,9 @@ private fun HsvColorPicker( @Composable private fun RgbColorPicker( selectedColor: Int, - selectedColorCompose: Color = Color(selectedColor), onSelectedColorChange: () -> Unit, onSliderValuesChange: (Int) -> Unit, + selectedColorCompose: Color = Color(selectedColor), ) { var red by remember { mutableIntStateOf(selectedColor.red) } var green by remember { mutableIntStateOf(selectedColor.green) } diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/PresetsList.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/PresetsList.kt index 34a66bcb6e..aa3f6ab9c3 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/PresetsList.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/PresetsList.kt @@ -16,10 +16,11 @@ import app.lawnchair.ui.preferences.components.PreferenceTemplate import app.lawnchair.ui.preferences.components.colorpreference.ColorDot import app.lawnchair.ui.preferences.components.colorpreference.ColorPreferenceEntry import com.android.launcher3.R +import kotlinx.collections.immutable.ImmutableList @Composable fun PresetsList( - dynamicEntries: List>, + dynamicEntries: ImmutableList>, onPresetClick: (ColorOption) -> Unit, isPresetSelected: (ColorOption) -> Boolean, ) { diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/SwatchGrid.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/SwatchGrid.kt index e299e7b394..191df04c09 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/SwatchGrid.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/colorpreference/pickers/SwatchGrid.kt @@ -28,6 +28,7 @@ import androidx.compose.ui.unit.dp import app.lawnchair.ui.preferences.components.PreferenceGroup import app.lawnchair.ui.preferences.components.colorpreference.ColorPreferenceEntry import com.android.launcher3.R +import kotlinx.collections.immutable.ImmutableList object SwatchGridDefaults { val GutterSize = 12.dp @@ -37,11 +38,11 @@ object SwatchGridDefaults { @Composable fun SwatchGrid( - modifier: Modifier = Modifier, - contentModifier: Modifier = Modifier, - entries: List>, + entries: ImmutableList>, onSwatchClick: (T) -> Unit, isSwatchSelected: (T) -> Boolean, + modifier: Modifier = Modifier, + contentModifier: Modifier = Modifier, ) { val columnCount = SwatchGridDefaults.COLUMN_COUNT val rowCount = (entries.size - 1) / columnCount + 1 @@ -87,9 +88,9 @@ fun SwatchGrid( @Composable fun ColorSwatch( entry: ColorPreferenceEntry, - modifier: Modifier = Modifier, onClick: () -> Unit, selected: Boolean, + modifier: Modifier = Modifier, ) { val color = if (MaterialTheme.colors.isLight) { entry.lightColor(LocalContext.current) diff --git a/lawnchair/src/app/lawnchair/ui/util/ProvideBottomSheetHandler.kt b/lawnchair/src/app/lawnchair/ui/util/ProvideBottomSheetHandler.kt index 4bf2990156..16ac5c59ae 100644 --- a/lawnchair/src/app/lawnchair/ui/util/ProvideBottomSheetHandler.kt +++ b/lawnchair/src/app/lawnchair/ui/util/ProvideBottomSheetHandler.kt @@ -120,7 +120,9 @@ class BottomSheetHandler( ) @Composable -fun StatusBarOffset(content: @Composable () -> Unit) { +fun StatusBarOffset( + content: @Composable () -> Unit, +) { val statusBar = WindowInsets.statusBars.getTop(LocalDensity.current) val displayCutout = WindowInsets.displayCutout.getTop(LocalDensity.current) val statusBarHeight = max(statusBar, displayCutout) diff --git a/lawnchair/src/app/lawnchair/util/BackHandler.kt b/lawnchair/src/app/lawnchair/util/BackHandler.kt index 2a8c593867..9b0919e1f3 100644 --- a/lawnchair/src/app/lawnchair/util/BackHandler.kt +++ b/lawnchair/src/app/lawnchair/util/BackHandler.kt @@ -9,7 +9,9 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.lifecycle.Lifecycle @Composable -fun BackHandler(onBack: () -> Unit) { +fun BackHandler( + onBack: () -> Unit, +) { val backDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher val currentOnBack by rememberUpdatedState(onBack) val resumed = lifecycleState().isAtLeast(Lifecycle.State.RESUMED) diff --git a/lawnchair/src/app/lawnchair/views/ComposeBottomSheet.kt b/lawnchair/src/app/lawnchair/views/ComposeBottomSheet.kt index c8b9d2c3c7..b1404484e3 100644 --- a/lawnchair/src/app/lawnchair/views/ComposeBottomSheet.kt +++ b/lawnchair/src/app/lawnchair/views/ComposeBottomSheet.kt @@ -78,7 +78,7 @@ class ComposeBottomSheet(context: Context) : ) { container.setContent { Providers { - ContentWrapper(contentPaddings) { + ContentWrapper(contentPaddings = contentPaddings) { content(this) } } @@ -188,7 +188,9 @@ class ComposeBottomSheet(context: Context) : } @Composable - private fun Providers(content: @Composable () -> Unit) { + private fun Providers( + content: @Composable () -> Unit, + ) { LawnchairTheme { ProvideLifecycleState { CompositionLocalProvider(