diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml index 4185eca399..460d8d84f0 100644 --- a/lawnchair/res/values/strings.xml +++ b/lawnchair/res/values/strings.xml @@ -104,6 +104,9 @@ Delete Swipe left to edit, swipe right to delete, or tap to update items + Hide folder apps + Apps assigned to folders are excluded from app lists + To lock your phone when performing a gesture, and to open Recents via gesture, Lawnchair requires accessibility access.\n\nLawnchair doesn\'t watch any user action, though the privilege to do so is required for all accessibility services. Lawnchair discards any event sent by the system.\n\nIn order to lock your phone, or to open Recents, Lawnchair uses the performGlobalAction Accessibility service. diff --git a/lawnchair/src/app/lawnchair/allapps/LawnchairAlphabeticalAppsList.kt b/lawnchair/src/app/lawnchair/allapps/LawnchairAlphabeticalAppsList.kt index 043fc3a506..e11dd94070 100644 --- a/lawnchair/src/app/lawnchair/allapps/LawnchairAlphabeticalAppsList.kt +++ b/lawnchair/src/app/lawnchair/allapps/LawnchairAlphabeticalAppsList.kt @@ -41,6 +41,7 @@ class LawnchairAlphabeticalAppsList( private var viewModel: FolderViewModel private var folderList = mutableListOf() + private val filteredList = mutableListOf() init { context.launcher.deviceProfile.inv.addOnChangeListener(this) @@ -77,8 +78,8 @@ class LawnchairAlphabeticalAppsList( override fun addAppsWithSections(appList: List?, startPosition: Int): Int { if (appList.isNullOrEmpty()) return startPosition val drawerListDefault = prefs.drawerList.get() + filteredList.clear() var position = startPosition - val filteredList = mutableListOf() if (!drawerListDefault) { val categorizedApps = categorizeApps(context, appList) @@ -103,13 +104,13 @@ class LawnchairAlphabeticalAppsList( folder.contents.forEach { app -> (appsStore.getApp(app.componentKey) as? AppInfo)?.let { folderInfo.add(it) - filteredList.add(it) + if (prefs.folderApps.get()) filteredList.add(it) } } } position++ } - val remainingApps = appList.filterNot { app -> filteredList.contains(app) } + val remainingApps = appList.filterNot { app -> filteredList.contains(app) && prefs.folderApps.get() } position = super.addAppsWithSections(remainingApps, position) } diff --git a/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt b/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt index e791d59cac..6c6b945e6f 100644 --- a/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt +++ b/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt @@ -116,6 +116,7 @@ class PreferenceManager private constructor(private val context: Context) : val wallpaperBlurFactorThreshold = FloatPref("pref_wallpaperBlurFactor", 3.0F, recreate) val drawerList = BoolPref("pref_drawerList", true, recreate) + val folderApps = BoolPref("pref_hideFolderApps", true, reloadGrid) val recentsActionScreenshot = BoolPref("pref_recentsActionScreenshot", !isOnePlusStock) val recentsActionShare = BoolPref("pref_recentsActionShare", isOnePlusStock) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/folder/AppListToFolderPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/folder/AppListToFolderPreferences.kt index e4f5777a79..ce4bf2d22e 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/folder/AppListToFolderPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/folder/AppListToFolderPreferences.kt @@ -17,6 +17,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import app.lawnchair.LawnchairLauncher @@ -24,14 +25,19 @@ import app.lawnchair.data.factory.ViewModelFactory import app.lawnchair.data.folder.model.FolderViewModel import app.lawnchair.launcher import app.lawnchair.launcherNullable +import app.lawnchair.preferences.getAdapter +import app.lawnchair.preferences.preferenceManager import app.lawnchair.preferences2.ReloadHelper import app.lawnchair.ui.preferences.LocalIsExpandedScreen import app.lawnchair.ui.preferences.components.AppItem import app.lawnchair.ui.preferences.components.AppItemPlaceholder +import app.lawnchair.ui.preferences.components.controls.SwitchPreference +import app.lawnchair.ui.preferences.components.layout.ExpandAndShrink import app.lawnchair.ui.preferences.components.layout.PreferenceLazyColumn import app.lawnchair.ui.preferences.components.layout.PreferenceScaffold import app.lawnchair.ui.preferences.components.layout.preferenceGroupItems import app.lawnchair.util.sortedBySelection +import com.android.launcher3.R import com.android.launcher3.model.data.AppInfo import com.android.launcher3.model.data.ItemInfo @@ -44,6 +50,7 @@ fun AppListToFolderPreferences( if (folderInfoId == null) return val context = LocalContext.current + val prefs = preferenceManager() val launcher = context.launcherNullable ?: LawnchairLauncher.instance?.launcher if (launcher == null) return @@ -115,6 +122,16 @@ fun AppListToFolderPreferences( reloadHelper.reloadGrid() } + item { + ExpandAndShrink(visible = selectedAppsState.value.isNotEmpty()) { + SwitchPreference( + adapter = prefs.folderApps.getAdapter(), + label = stringResource(id = R.string.apps_in_folder_label), + description = stringResource(id = R.string.apps_in_folder_description), + ) + } + } + preferenceGroupItems(apps, isFirstChild = true, dividerStartIndent = 40.dp) { _, app -> key(app.toString()) { AppItem(app, onClick = { updateFolderApp(app) }) {