mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 15:26:58 +00:00
enh : Exclude apps already in other folders from container list
This commit is contained in:
@@ -31,6 +31,9 @@ class FolderViewModel(context: Context) : ViewModel() {
|
||||
private val _foldersMutable = MutableLiveData<List<FolderInfo>>()
|
||||
val foldersMutable: LiveData<List<FolderInfo>> = _foldersMutable
|
||||
|
||||
private val _items = MutableStateFlow<Set<String>>(setOf())
|
||||
val items: StateFlow<Set<String>> = _items.asStateFlow()
|
||||
|
||||
private val _folderInfo = MutableStateFlow<FolderInfo?>(null)
|
||||
val folderInfo = _folderInfo.asStateFlow()
|
||||
private var tempTitle: String = ""
|
||||
@@ -54,6 +57,13 @@ class FolderViewModel(context: Context) : ViewModel() {
|
||||
}
|
||||
}
|
||||
|
||||
fun setItems(id: Int) {
|
||||
viewModelScope.launch {
|
||||
val items = repository.getItems(id)
|
||||
_items.value = items
|
||||
}
|
||||
}
|
||||
|
||||
fun updateCurrentTitle(title: String) {
|
||||
if (action.value == Action.EDIT) {
|
||||
tempTitle = title
|
||||
|
||||
@@ -25,6 +25,10 @@ interface FolderDao {
|
||||
@Transaction
|
||||
suspend fun getFolderWithItems(folderId: Int): FolderWithItems?
|
||||
|
||||
@Query("SELECT * FROM FolderItems WHERE folderId IS NOT :folderId")
|
||||
@Transaction
|
||||
suspend fun getItems(folderId: Int): List<FolderItemEntity>
|
||||
|
||||
@Query("SELECT * FROM Folders")
|
||||
fun getAllFolders(): Flow<List<FolderInfoEntity>>
|
||||
|
||||
|
||||
@@ -76,6 +76,15 @@ class FolderService(val context: Context) : SafeCloseable {
|
||||
return null
|
||||
}
|
||||
|
||||
suspend fun getItems(id: Int): Set<String> = withContext(Dispatchers.IO) {
|
||||
return@withContext try {
|
||||
folderDao.getItems(id).mapNotNull { it.componentKey }.toSet()
|
||||
} catch (e: Exception) {
|
||||
Log.e("FolderService", "Failed to get all items", e)
|
||||
setOf()
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getAllFolders(): List<FolderInfo> = withContext(Dispatchers.IO) {
|
||||
try {
|
||||
val folderEntities = folderDao.getAllFolders().firstOrNull() ?: emptyList()
|
||||
|
||||
@@ -21,6 +21,7 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import app.lawnchair.LawnchairLauncher
|
||||
import app.lawnchair.data.Converters
|
||||
import app.lawnchair.data.factory.ViewModelFactory
|
||||
import app.lawnchair.data.folder.model.FolderViewModel
|
||||
import app.lawnchair.launcher
|
||||
@@ -62,6 +63,7 @@ fun AppListToFolderPreferences(
|
||||
val loading = folderInfo == null
|
||||
|
||||
val selectedAppsState = remember { mutableStateOf(setOf<ItemInfo>()) }
|
||||
val dbItems = viewModel.items.collectAsState()
|
||||
|
||||
LaunchedEffect(folderInfoId) {
|
||||
viewModel.setFolderInfo(folderInfoId, false)
|
||||
@@ -70,9 +72,12 @@ fun AppListToFolderPreferences(
|
||||
LaunchedEffect(folderInfo) {
|
||||
val folderContents = folderInfo?.contents?.toMutableSet() ?: mutableSetOf()
|
||||
selectedAppsState.value = folderContents
|
||||
viewModel.setItems(folderInfoId)
|
||||
}
|
||||
|
||||
val apps = launcher.mAppsView.appsStore.apps.toList()
|
||||
val apps = launcher.mAppsView.appsStore.apps
|
||||
.toList()
|
||||
.filterNot { app -> dbItems.value.contains(Converters().fromComponentKey(app.componentKey)) }
|
||||
.sortedBySelection(selectedAppsState.value)
|
||||
|
||||
val state = rememberLazyListState()
|
||||
|
||||
Reference in New Issue
Block a user