From d9af42b50ed2ef8b1afc34557ce3f8029fddc3cb Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 9 Dec 2023 15:45:04 +0800 Subject: [PATCH] Use mrmans0n Compose rules to check styles (#3788) * Use customRuleSets * Disable ktlint_compose_modifier-missing-check * Fix compose:vm-forwarding-check https://mrmans0n.github.io/compose-rules/rules/#hoist-all-the-things * Fix compose:param-order-check https://mrmans0n.github.io/compose-rules/rules/#ordering-composable-parameters-properly * Intro kotlinx-collections-immutable * Fix compose:unstable-collections https://mrmans0n.github.io/compose-rules/rules/#avoid-using-unstable-collections * Fix compose:modifier-not-used-at-root https://mrmans0n.github.io/compose-rules/rules/#modifiers-should-be-used-at-the-top-most-layout-of-the-component * Fix compose:multiple-emitters-check https://mrmans0n.github.io/compose-rules/rules/#do-not-emit-multiple-pieces-of-content * Fix compose:compositionlocal-allowlist https://mrmans0n.github.io/compose-rules/rules/#compositionlocals * Enable modifier-missing-check https://mrmans0n.github.io/compose-rules/rules/#when-should-i-expose-modifier-parameters * Cleanups * io.nlopez.compose.rules:ktlint:0.3.5 * Rearrange params * Revert "Fix compose:modifier-not-used-at-root" This reverts commit 7dee424730d58e1a75e6953dd780806750823887. * Disable modifier-not-used-at-root for PreferenceTemplate * Cleanups * Remove unused modifiers * Disable ktlint_compose_modifier-missing-check * Disable ktlint_compose_compositionlocal-allowlist --- build.gradle | 10 +- .../lawnchair/backup/ui/CreateBackupScreen.kt | 4 +- .../backup/ui/RestoreBackupScreen.kt | 10 +- .../gestures/handlers/SleepGestureHandler.kt | 6 +- .../src/app/lawnchair/ui/OverflowMenu.kt | 4 +- .../preferences/CustomIconShapePreference.kt | 11 +-- .../ui/preferences/DockPreferences.kt | 3 +- .../ui/preferences/FontSelectionPreference.kt | 98 ++++++++++--------- .../ui/preferences/HiddenAppsPreferences.kt | 6 +- .../ui/preferences/HomeScreenPreferences.kt | 3 +- .../ui/preferences/IconPackPreferences.kt | 8 +- .../ui/preferences/IconPickerPreference.kt | 4 +- .../lawnchair/ui/preferences/Preferences.kt | 4 +- .../ui/preferences/SmartspacePreferences.kt | 11 ++- .../ui/preferences/about/ContributorRow.kt | 7 +- .../ui/preferences/about/LawnchairLink.kt | 2 +- .../acknowledgements/Acknowledgements.kt | 9 +- .../ui/preferences/components/AppItem.kt | 29 +++--- .../components/FlagSwitchPreference.kt | 2 +- .../components/IconShapePreference.kt | 6 +- .../components/LazyColumnPreferenceGroup.kt | 18 ++-- .../preferences/components/ListPreference.kt | 5 +- .../preferences/components/LoadingScreen.kt | 10 +- .../components/NavigationActionPreference.kt | 2 +- .../components/NestedScrollStretch.kt | 4 +- .../components/NotificationDotsPreference.kt | 9 +- .../components/PreferenceCategory.kt | 2 +- .../preferences/components/PreferenceGroup.kt | 11 ++- .../components/PreferenceLayout.kt | 8 +- .../components/PreferenceScaffold.kt | 2 +- .../components/PreferenceTemplate.kt | 9 +- .../components/ScrollContainers.kt | 2 +- .../preferences/components/SearchTextField.kt | 8 +- .../components/SwitchPreference.kt | 4 +- .../preferences/components/TextPreference.kt | 4 +- .../preferences/components/ThemePreference.kt | 3 +- .../ui/preferences/components/TopBar.kt | 2 +- .../components/WallpaperPreview.kt | 4 +- .../components/WarningPreference.kt | 2 +- .../colorpreference/ColorContrastWarning.kt | 4 +- .../colorpreference/ColorOptions.kt | 13 ++- .../colorpreference/ColorPreference.kt | 4 +- .../ColorSelectionPreference.kt | 8 +- .../pickers/CustomColorPicker.kt | 6 +- .../colorpreference/pickers/PresetsList.kt | 3 +- .../colorpreference/pickers/SwatchGrid.kt | 9 +- .../ui/util/ProvideBottomSheetHandler.kt | 4 +- .../src/app/lawnchair/util/BackHandler.kt | 4 +- .../app/lawnchair/views/ComposeBottomSheet.kt | 6 +- 49 files changed, 240 insertions(+), 167 deletions(-) diff --git a/build.gradle b/build.gradle index edd7cf7be82..fc3ec582a4d 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 c527ef33de6..c6473b2b64d 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 e019278151d..f52ced0709e 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 c118bce6017..d210f894758 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 c5d88201542..30b51b9360a 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 8f9632b9ffc..ed6a30fbd77 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 9cd964a2f88..fc7bf22b2df 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 eacab6bb723..bc1edf8e3be 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) } + Row( + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .wrapContentWidth() + .padding(end = 16.dp), + ) { + 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 { } - } + 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, - ) + 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 de993d760c0..eb418d8bb23 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 0df4ef4cc99..46a11145cdc 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 8f3c970f156..f5f11cf088f 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 f8edc5c0c83..0bc9e6f23bd 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 fe374aed355..98905a38bf1 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 124e970d3f1..b00961a2afb 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 62d699a904d..dd05b6c9ba0 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 2cca9702c5d..c84f24ea427 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 9153619a818..1c293f2e264 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 cd253398626..aed0634510c 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 65778e9afb7..458304bb5ff 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 10756b38287..8c06b372a99 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 92284e9f09d..2437a630d11 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 781c7b5523e..9e0eb7a5a35 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 3e900962429..88faad62e7a 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 7a61f9d800d..48725acef07 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 9d562dc1c88..ec637ff678b 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 c69debfff1e..a7f5273cd50 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 c7d34660c31..0a888c4f87f 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 2a7c283ad23..8916c80fa3a 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 25b1854c014..75ecba07b04 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, + backArrowVisible: Boolean = true, state: LazyListState = rememberLazyListState(), - label: String, actions: @Composable RowScope.() -> Unit = {}, - backArrowVisible: Boolean = true, 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 0271cd4b3ad..61ba0e76c03 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 9577c72971f..3b1417cde5d 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 47f50fa37b0..7ab2cd02c49 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 929ac3abc76..5ce559c06e0 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 0771a577a22..8539aa07b37 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 534571cfc22..64723706c8c 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 d9defc30cb3..6f0d4fe34fc 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 b9bc16c626d..5cbe381f65a 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 f69181150c5..60d99623106 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 40cb911e4c0..8eb1267b564 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 e07b4eb2af6..2703c26d8c5 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 a7ce76da05f..cf6a41936cb 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 da36907a7b3..7b39e4c4eed 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 653ee92943a..6ce5c9f1cfd 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 9cf5d301ea0..53c0a37a4fb 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 34a66bcb6e4..aa3f6ab9c36 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 e299e7b394f..191df04c099 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 4bf29901563..16ac5c59ae3 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 2a8c5938673..9b0919e1f3e 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 c8b9d2c3c77..b1404484e3b 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(