diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/widgets/WidgetSettingsScreenVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/widgets/WidgetSettingsScreenVM.kt new file mode 100644 index 00000000..d73d0e37 --- /dev/null +++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/widgets/WidgetSettingsScreenVM.kt @@ -0,0 +1,16 @@ +package de.mm20.launcher2.ui.settings.widgets + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.asLiveData +import de.mm20.launcher2.widgets.WidgetRepository +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +class WidgetSettingsScreenVM: ViewModel(), KoinComponent { + + private val widgetRepository: WidgetRepository by inject() + + val calendarWidget = widgetRepository.isCalendarWidgetEnabled().asLiveData() + val musicWidget = widgetRepository.isMusicWidgetEnabled().asLiveData() + val weatherWidget = widgetRepository.isWeatherWidgetEnabled().asLiveData() +} \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/widgets/WidgetsSettingsScreen.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/widgets/WidgetsSettingsScreen.kt index 7de04606..0deba0bd 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/settings/widgets/WidgetsSettingsScreen.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/widgets/WidgetsSettingsScreen.kt @@ -6,7 +6,10 @@ import androidx.compose.material.icons.rounded.LightMode import androidx.compose.material.icons.rounded.Schedule import androidx.compose.material.icons.rounded.Today import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.res.stringResource +import androidx.lifecycle.viewmodel.compose.viewModel import de.mm20.launcher2.ui.R import de.mm20.launcher2.ui.component.preferences.Preference import de.mm20.launcher2.ui.component.preferences.PreferenceScreen @@ -15,6 +18,7 @@ import de.mm20.launcher2.ui.locals.LocalNavController @Composable fun WidgetsSettingsScreen() { val navController = LocalNavController.current + val viewModel: WidgetSettingsScreenVM = viewModel() PreferenceScreen(title = stringResource(R.string.preference_screen_widgets)) { item { Preference( @@ -24,27 +28,39 @@ fun WidgetsSettingsScreen() { navController?.navigate("settings/widgets/clock") } ) - Preference( - title = stringResource(R.string.preference_screen_weatherwidget), - icon = Icons.Rounded.LightMode, - onClick = { - navController?.navigate("settings/widgets/weather") - } - ) - Preference( - title = stringResource(R.string.preference_screen_musicwidget), - icon = Icons.Rounded.Audiotrack, - onClick = { - navController?.navigate("settings/widgets/music") - } - ) - Preference( - title = stringResource(R.string.preference_screen_calendarwidget), - icon = Icons.Rounded.Today, - onClick = { - navController?.navigate("settings/widgets/calendar") - } - ) + + val weatherWidget by viewModel.weatherWidget.observeAsState() + if (weatherWidget == true) { + Preference( + title = stringResource(R.string.preference_screen_weatherwidget), + icon = Icons.Rounded.LightMode, + onClick = { + navController?.navigate("settings/widgets/weather") + } + ) + } + + val musicWidget by viewModel.musicWidget.observeAsState() + if (musicWidget == true) { + Preference( + title = stringResource(R.string.preference_screen_musicwidget), + icon = Icons.Rounded.Audiotrack, + onClick = { + navController?.navigate("settings/widgets/music") + } + ) + } + + val calendarWidget by viewModel.calendarWidget.observeAsState() + if (calendarWidget == true) { + Preference( + title = stringResource(R.string.preference_screen_calendarwidget), + icon = Icons.Rounded.Today, + onClick = { + navController?.navigate("settings/widgets/calendar") + } + ) + } } } } \ No newline at end of file diff --git a/widgets/src/main/java/de/mm20/launcher2/widgets/WidgetRepository.kt b/widgets/src/main/java/de/mm20/launcher2/widgets/WidgetRepository.kt index 675df1bd..d108fe8d 100644 --- a/widgets/src/main/java/de/mm20/launcher2/widgets/WidgetRepository.kt +++ b/widgets/src/main/java/de/mm20/launcher2/widgets/WidgetRepository.kt @@ -13,6 +13,8 @@ interface WidgetRepository { fun addWidget(widget: Widget, position: Int) fun removeWidget(widget: Widget) fun setWidgetHeight(widget: Widget, newHeight: Int) + fun isWeatherWidgetEnabled(): Flow + fun isMusicWidgetEnabled(): Flow fun isCalendarWidgetEnabled(): Flow fun isFavoritesWidgetEnabled(): Flow } @@ -78,6 +80,14 @@ internal class WidgetRepositoryImpl( } } + override fun isWeatherWidgetEnabled(): Flow { + return database.widgetDao().exists("internal", "weather") + } + + override fun isMusicWidgetEnabled(): Flow { + return database.widgetDao().exists("internal", "music") + } + override fun isCalendarWidgetEnabled(): Flow { return database.widgetDao().exists("internal", "calendar") }