Add support for widget multi instancing

This commit is contained in:
MM20 2023-04-20 20:10:35 +02:00
parent 73039fd800
commit 6498f81e63
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
6 changed files with 9 additions and 15 deletions

View File

@ -144,7 +144,7 @@ fun WidgetItem(
}
is MusicWidget -> {
MusicWidget()
MusicWidget(widget)
}
is CalendarWidget -> {

View File

@ -35,7 +35,7 @@ import java.time.ZoneId
fun CalendarWidget(
widget: CalendarWidget,
) {
val viewModel: CalendarWidgetVM = viewModel()
val viewModel: CalendarWidgetVM = viewModel(key = "calendar-widget-${widget.id}")
val context = LocalContext.current
val lifecycleOwner = LocalLifecycleOwner.current

View File

@ -22,7 +22,7 @@ import de.mm20.launcher2.widgets.FavoritesWidget
@Composable
fun FavoritesWidget(widget: FavoritesWidget) {
val viewModel: FavoritesWidgetVM = viewModel()
val viewModel: FavoritesWidgetVM = viewModel(key = "favorites-widget-${widget.id}")
val favorites by remember { viewModel.favorites }.collectAsState(emptyList())
val pinnedTags by viewModel.pinnedTags.collectAsState(emptyList())
val selectedTag by viewModel.selectedTag.collectAsState(null)

View File

@ -77,12 +77,13 @@ import de.mm20.launcher2.ui.launcher.transitions.HandleEnterHomeTransition
import de.mm20.launcher2.ui.launcher.transitions.EnterHomeTransitionParams
import de.mm20.launcher2.ui.locals.LocalCardStyle
import de.mm20.launcher2.ui.locals.LocalWindowSize
import de.mm20.launcher2.widgets.MusicWidget
import kotlin.math.min
@Composable
fun MusicWidget() {
fun MusicWidget(widget: MusicWidget) {
val viewModel: MusicWidgetVM = viewModel()
val viewModel: MusicWidgetVM = viewModel(key = "music-widget-${widget.id}")
val albumArt by viewModel.albumArt.collectAsStateWithLifecycle(null)
val title by viewModel.title.collectAsStateWithLifecycle(null)

View File

@ -70,7 +70,7 @@ import kotlin.math.roundToInt
@Composable
fun WeatherWidget(widget: WeatherWidget) {
val viewModel: WeatherWidgetVM = viewModel()
val viewModel: WeatherWidgetVM = viewModel(key = "weather-widget-${widget.id}")
val context = LocalContext.current
val lifecycleOwner = LocalLifecycleOwner.current

View File

@ -13,6 +13,7 @@ import de.mm20.launcher2.widgets.Widget
import de.mm20.launcher2.widgets.WidgetRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.withContext
import java.util.UUID
@ -34,15 +35,7 @@ class WidgetsService(
}
fun getAvailableBuiltInWidgets(): Flow<List<BuiltInWidgetInfo>> {
return widgetRepository.get().map { widgets ->
getBuiltInWidgets().filter {
it.type == FavoritesWidget.Type && !widgets.any { it is FavoritesWidget } ||
it.type == WeatherWidget.Type && !widgets.any { it is WeatherWidget } ||
it.type == MusicWidget.Type && !widgets.any { it is MusicWidget } ||
it.type == CalendarWidget.Type && !widgets.any { it is CalendarWidget }
}
}
return flowOf(getBuiltInWidgets())
}
fun getBuiltInWidgets(): List<BuiltInWidgetInfo> {