Add app shortcut search

This commit is contained in:
MM20
2022-03-19 17:41:04 +01:00
parent b73c9fabc9
commit ab114595c4
4 changed files with 116 additions and 12 deletions
@@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.applications.AppRepository
import de.mm20.launcher2.appshortcuts.AppShortcutRepository
import de.mm20.launcher2.calculator.CalculatorRepository
import de.mm20.launcher2.calendar.CalendarRepository
import de.mm20.launcher2.contacts.ContactRepository
@@ -36,6 +37,7 @@ class SearchVM : ViewModel(), KoinComponent {
private val calendarRepository: CalendarRepository by inject()
private val contactRepository: ContactRepository by inject()
private val appRepository: AppRepository by inject()
private val appShortcutRepository: AppShortcutRepository by inject()
private val wikipediaRepository: WikipediaRepository by inject()
private val unitConverterRepository: UnitConverterRepository by inject()
private val calculatorRepository: CalculatorRepository by inject()
@@ -52,6 +54,7 @@ class SearchVM : ViewModel(), KoinComponent {
}
val appResults = MutableLiveData<List<Application>>(emptyList())
val appShortcutResults = MutableLiveData<List<AppShortcut>>(emptyList())
val fileResults = MutableLiveData<List<File>>(emptyList())
val contactResults = MutableLiveData<List<Contact>>(emptyList())
val calendarResults = MutableLiveData<List<CalendarEvent>>(emptyList())
@@ -124,6 +127,11 @@ class SearchVM : ViewModel(), KoinComponent {
websearchResults.postValue(it)
}
}
jobs += async {
appShortcutRepository.search(query).collectLatest {
appShortcutResults.postValue(it)
}
}
jobs.map { it.await() }
isSearching.postValue(false)
}
@@ -13,6 +13,7 @@ import androidx.compose.ui.unit.dp
import de.mm20.launcher2.ui.MdcLauncherTheme
import de.mm20.launcher2.ui.base.ProvideSettings
import de.mm20.launcher2.ui.launcher.search.apps.AppResults
import de.mm20.launcher2.ui.launcher.search.appshortcuts.AppShortcutResults
import de.mm20.launcher2.ui.launcher.search.calculator.CalculatorResults
import de.mm20.launcher2.ui.launcher.search.calendar.CalendarResults
import de.mm20.launcher2.ui.launcher.search.contacts.ContactResults
@@ -44,6 +45,7 @@ class SearchView @JvmOverloads constructor(
) {
FavoritesResults()
AppResults()
AppShortcutResults()
UnitConverterResults()
CalculatorResults()
CalendarResults()
@@ -0,0 +1,29 @@
package de.mm20.launcher2.ui.launcher.search.appshortcuts
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.ui.component.LauncherCard
import de.mm20.launcher2.ui.launcher.search.SearchVM
import de.mm20.launcher2.ui.launcher.search.common.SearchResultGrid
@Composable
fun ColumnScope.AppShortcutResults() {
val viewModel: SearchVM = viewModel()
val apps by viewModel.appShortcutResults.observeAsState(emptyList())
AnimatedVisibility(apps.isNotEmpty()) {
LauncherCard(
modifier = Modifier.padding(bottom = 8.dp)
) {
SearchResultGrid(items = apps)
}
}
}