Add favorites widget

This commit is contained in:
MM20
2022-03-30 22:29:20 +02:00
parent a86d453f4e
commit 0b7704cdf2
7 changed files with 82 additions and 2 deletions
@@ -7,6 +7,8 @@ import de.mm20.launcher2.ui.component.ProvideIconShape
import de.mm20.launcher2.ui.locals.LocalCardStyle
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
import de.mm20.launcher2.ui.locals.LocalGridColumns
import de.mm20.launcher2.widgets.WidgetRepository
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import org.koin.androidx.compose.inject
@@ -16,6 +18,7 @@ fun ProvideSettings(
content: @Composable () -> Unit
) {
val dataStore: LauncherDataStore by inject()
val widgetRepository: WidgetRepository by inject()
val cardStyle by remember {
dataStore.data.map { it.cards }.distinctUntilChanged()
@@ -30,7 +33,10 @@ fun ProvideSettings(
}.collectAsState(Settings.IconSettings.IconShape.Circle)
val favoritesEnabled by remember {
dataStore.data.map { it.favorites.enabled }.distinctUntilChanged()
combine(
widgetRepository.isFavoritesWidgetEnabled(),
dataStore.data.map { it.favorites.enabled }
) { a, b -> a || b }.distinctUntilChanged()
}.collectAsState(true)
val gridColumns by remember {
@@ -25,6 +25,7 @@ import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.LauncherCard
import de.mm20.launcher2.ui.launcher.widgets.calendar.CalendarWidget
import de.mm20.launcher2.ui.launcher.widgets.external.ExternalWidget
import de.mm20.launcher2.ui.launcher.widgets.favorites.FavoritesWidget
import de.mm20.launcher2.ui.launcher.widgets.music.MusicWidget
import de.mm20.launcher2.ui.launcher.widgets.weather.WeatherWidget
import de.mm20.launcher2.widgets.*
@@ -120,6 +121,9 @@ fun WidgetItem(
is CalendarWidget -> {
CalendarWidget()
}
is FavoritesWidget -> {
FavoritesWidget()
}
is ExternalWidget -> {
var height by remember(widget) { mutableStateOf(widget.height) }
Column {
@@ -0,0 +1,15 @@
package de.mm20.launcher2.ui.launcher.widgets.favorites
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.ui.launcher.search.common.grid.SearchResultGrid
@Composable
fun FavoritesWidget() {
val viewModel: FavoritesWidgetVM = viewModel()
val favorites by viewModel.favorites.observeAsState(emptyList())
SearchResultGrid(favorites)
}
@@ -0,0 +1,30 @@
package de.mm20.launcher2.ui.launcher.widgets.favorites
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.favorites.FavoritesRepository
import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.search.data.Searchable
import de.mm20.launcher2.widgets.WidgetRepository
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
class FavoritesWidgetVM: ViewModel(), KoinComponent {
private val favoritesRepository: FavoritesRepository by inject()
private val widgetRepository: WidgetRepository by inject()
val favorites = MutableLiveData<List<Searchable>>(emptyList())
init {
viewModelScope.launch {
widgetRepository.isCalendarWidgetEnabled().collectLatest { excludeCalendar ->
favoritesRepository.getFavorites(excludeCalendarEvents = excludeCalendar).collectLatest {
favorites.value = it
}
}
}
}
}