Hide settings for widgets if they are disabled

This commit is contained in:
MM20 2022-04-16 21:54:07 +02:00
parent 558d12bb8a
commit 742c90d7e9
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
3 changed files with 63 additions and 21 deletions

View File

@ -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()
}

View File

@ -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")
}
)
}
}
}
}

View File

@ -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<Boolean>
fun isMusicWidgetEnabled(): Flow<Boolean>
fun isCalendarWidgetEnabled(): Flow<Boolean>
fun isFavoritesWidgetEnabled(): Flow<Boolean>
}
@ -78,6 +80,14 @@ internal class WidgetRepositoryImpl(
}
}
override fun isWeatherWidgetEnabled(): Flow<Boolean> {
return database.widgetDao().exists("internal", "weather")
}
override fun isMusicWidgetEnabled(): Flow<Boolean> {
return database.widgetDao().exists("internal", "music")
}
override fun isCalendarWidgetEnabled(): Flow<Boolean> {
return database.widgetDao().exists("internal", "calendar")
}