From 7bb7848cfaa347408b8576cc572d52dff3d97856 Mon Sep 17 00:00:00 2001
From: MM20 <15646950+MM2-0@users.noreply.github.com>
Date: Tue, 13 Sep 2022 21:56:58 +0200
Subject: [PATCH] Separate main and work profile apps
---
i18n/src/main/res/values/strings.xml | 3 ++
.../ui/launcher/search/SearchColumn.kt | 51 +++++++++++++++++--
.../launcher2/ui/launcher/search/SearchVM.kt | 5 +-
3 files changed, 54 insertions(+), 5 deletions(-)
diff --git a/i18n/src/main/res/values/strings.xml b/i18n/src/main/res/values/strings.xml
index b5e0422d..0003cd74 100644
--- a/i18n/src/main/res/values/strings.xml
+++ b/i18n/src/main/res/values/strings.xml
@@ -635,4 +635,7 @@
Default
Suggestions
Search icon
+
+ Personal
+ Work
\ No newline at end of file
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchColumn.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchColumn.kt
index ffcb17f2..4978498a 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchColumn.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchColumn.kt
@@ -5,14 +5,22 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.rounded.Person
+import androidx.compose.material.icons.rounded.Work
+import androidx.compose.material3.FilterChip
+import androidx.compose.material3.Icon
+import androidx.compose.material3.Text
+import androidx.compose.runtime.*
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clipToBounds
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.search.data.Searchable
+import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.LauncherCard
import de.mm20.launcher2.ui.component.PartialLauncherCard
import de.mm20.launcher2.ui.launcher.search.calculator.CalculatorItem
@@ -41,9 +49,12 @@ fun SearchColumn(
val showLabels by viewModel.showLabels.observeAsState(true)
+ var showWorkProfileApps by remember { mutableStateOf(false) }
+
val hideFavs by viewModel.hideFavorites.observeAsState(true)
val favorites by viewModel.favorites.observeAsState(emptyList())
val apps by viewModel.appResults.observeAsState(emptyList())
+ val workApps by viewModel.workAppResults.observeAsState(emptyList())
val appShortcuts by viewModel.appShortcutResults.observeAsState(emptyList())
val contacts by viewModel.contactResults.observeAsState(emptyList())
val files by viewModel.fileResults.observeAsState(emptyList())
@@ -69,10 +80,42 @@ fun SearchColumn(
)
}
GridResults(
- items = apps.toImmutableList(),
+ items = if (showWorkProfileApps && workApps.isNotEmpty()) workApps.toImmutableList() else apps.toImmutableList(),
columns = columns,
showLabels = showLabels,
- reverse = reverse
+ reverse = reverse,
+ before = if (workApps.isNotEmpty()) {
+ {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 8.dp)
+ .padding(top = 8.dp, bottom = 4.dp),
+ ) {
+ FilterChip(
+ modifier = Modifier.padding(horizontal = 8.dp),
+ selected = !showWorkProfileApps,
+ onClick = { showWorkProfileApps = false },
+ leadingIcon = {
+ Icon(imageVector = Icons.Rounded.Person, contentDescription = null)
+ },
+ label = {
+ Text(stringResource(R.string.apps_profile_main), maxLines = 1, overflow = TextOverflow.Ellipsis)
+ }
+ )
+ FilterChip(
+ selected = showWorkProfileApps,
+ onClick = { showWorkProfileApps = true },
+ leadingIcon = {
+ Icon(imageVector = Icons.Rounded.Work, contentDescription = null)
+ },
+ label = {
+ Text(stringResource(R.string.apps_profile_work), maxLines = 1, overflow = TextOverflow.Ellipsis)
+ }
+ )
+ }
+ }
+ } else null
)
ListResults(appShortcuts.toImmutableList(), reverse)
val uc = unitConverter
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchVM.kt
index bfc70249..ab371984 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchVM.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchVM.kt
@@ -55,6 +55,7 @@ class SearchVM : ViewModel(), KoinComponent {
val favorites = MutableLiveData>(emptyList())
val appResults = MutableLiveData>(emptyList())
+ val workAppResults = MutableLiveData>(emptyList())
val appShortcutResults = MutableLiveData>(emptyList())
val fileResults = MutableLiveData>(emptyList())
val contactResults = MutableLiveData>(emptyList())
@@ -133,7 +134,9 @@ class SearchVM : ViewModel(), KoinComponent {
.withCustomLabels()
.sorted()
.collectWithHiddenItems(hiddenItemKeys) { results, hidden ->
- appResults.postValue(results)
+ val (work, personal) = results.partition { it is LauncherApp && !it.isMainProfile }
+ appResults.postValue(personal)
+ workAppResults.postValue(work)
hiddenItems.update {
it.copy(apps = hidden)
}