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) }) {