Add permission banner to calendar widget settings
This commit is contained in:
parent
8ce84cfe22
commit
fe2da9a60e
@ -460,4 +460,6 @@
|
|||||||
|
|
||||||
<string name="music_widget_default_title">%1$s spielt Medien</string>
|
<string name="music_widget_default_title">%1$s spielt Medien</string>
|
||||||
<string name="music_widget_no_data">Bisher wurden keine Medien abgespielt</string>
|
<string name="music_widget_no_data">Bisher wurden keine Medien abgespielt</string>
|
||||||
|
|
||||||
|
<string name="missing_permission_calendar_widget_settings">Kalenderzugriff wird benötigt um Termine abzurufen</string>
|
||||||
</resources>
|
</resources>
|
||||||
@ -437,7 +437,8 @@
|
|||||||
<string name="missing_permission_auto_location">Location access is required to determine the location automatically</string>
|
<string name="missing_permission_auto_location">Location access is required to determine the location automatically</string>
|
||||||
<string name="missing_permission_music_widget">Notification access is required to control media playback</string>
|
<string name="missing_permission_music_widget">Notification access is required to control media playback</string>
|
||||||
<string name="missing_permission_contact_search">Contact permission is required to search contacts</string>
|
<string name="missing_permission_contact_search">Contact permission is required to search contacts</string>
|
||||||
<string name="missing_permission_calendar_search">Calendar permission is required to search contacts</string>
|
<string name="missing_permission_calendar_search">Calendar permission is required to search calendar</string>
|
||||||
|
<string name="missing_permission_calendar_widget_settings">This widget requires calendar permission</string>
|
||||||
<string name="weather_widget_set_location">Set location</string>
|
<string name="weather_widget_set_location">Set location</string>
|
||||||
|
|
||||||
<string name="preference_screen_debug">Debug</string>
|
<string name="preference_screen_debug">Debug</string>
|
||||||
@ -469,7 +470,7 @@
|
|||||||
<string name="preference_search_contacts">Contacts</string>
|
<string name="preference_search_contacts">Contacts</string>
|
||||||
<string name="preference_search_contacts_summary">Search contacts on this device</string>
|
<string name="preference_search_contacts_summary">Search contacts on this device</string>
|
||||||
<string name="preference_search_calendar">Calendar</string>
|
<string name="preference_search_calendar">Calendar</string>
|
||||||
<string name="preference_search_calendar_summary">Search upcoming calendar events</string>
|
<string name="preference_search_calendar_summary">Search upcoming appointments</string>
|
||||||
<string name="preference_search_calculator">Calculator</string>
|
<string name="preference_search_calculator">Calculator</string>
|
||||||
<string name="preference_search_calculator_summary">Evaluate mathematical terms</string>
|
<string name="preference_search_calculator_summary">Evaluate mathematical terms</string>
|
||||||
<string name="preference_search_unitconverter">Unit converter</string>
|
<string name="preference_search_unitconverter">Unit converter</string>
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
package de.mm20.launcher2.ui.settings.calendarwidget
|
package de.mm20.launcher2.ui.settings.calendarwidget
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
@ -11,12 +13,14 @@ import androidx.compose.runtime.livedata.observeAsState
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import de.mm20.launcher2.search.data.UserCalendar
|
import de.mm20.launcher2.search.data.UserCalendar
|
||||||
import de.mm20.launcher2.ui.R
|
import de.mm20.launcher2.ui.R
|
||||||
|
import de.mm20.launcher2.ui.component.MissingPermissionBanner
|
||||||
import de.mm20.launcher2.ui.component.preferences.Preference
|
import de.mm20.launcher2.ui.component.preferences.Preference
|
||||||
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
|
||||||
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
|
||||||
@ -26,10 +30,21 @@ import de.mm20.launcher2.ui.pluralResource
|
|||||||
@Composable
|
@Composable
|
||||||
fun CalendarWidgetSettingsScreen() {
|
fun CalendarWidgetSettingsScreen() {
|
||||||
val viewModel: CalendarWidgetSettingsScreenVM = viewModel()
|
val viewModel: CalendarWidgetSettingsScreenVM = viewModel()
|
||||||
|
val context = LocalContext.current
|
||||||
PreferenceScreen(title = stringResource(R.string.preference_screen_calendarwidget)) {
|
PreferenceScreen(title = stringResource(R.string.preference_screen_calendarwidget)) {
|
||||||
item {
|
item {
|
||||||
val excludeAllDayEvents by viewModel.excludeAllDayEvents.observeAsState()
|
val excludeAllDayEvents by viewModel.excludeAllDayEvents.observeAsState()
|
||||||
PreferenceCategory {
|
PreferenceCategory {
|
||||||
|
val hasPermission by viewModel.hasCalendarPermission.observeAsState()
|
||||||
|
AnimatedVisibility(hasPermission == false) {
|
||||||
|
MissingPermissionBanner(
|
||||||
|
modifier = Modifier.padding(16.dp),
|
||||||
|
text = stringResource(R.string.missing_permission_calendar_widget_settings),
|
||||||
|
onClick = {
|
||||||
|
viewModel.requestPermission(context as AppCompatActivity)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
title = stringResource(R.string.preference_calendar_hide_allday),
|
title = stringResource(R.string.preference_calendar_hide_allday),
|
||||||
value = excludeAllDayEvents == true,
|
value = excludeAllDayEvents == true,
|
||||||
|
|||||||
@ -1,10 +1,13 @@
|
|||||||
package de.mm20.launcher2.ui.settings.calendarwidget
|
package de.mm20.launcher2.ui.settings.calendarwidget
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.asLiveData
|
import androidx.lifecycle.asLiveData
|
||||||
import androidx.lifecycle.liveData
|
import androidx.lifecycle.liveData
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import de.mm20.launcher2.calendar.CalendarRepository
|
import de.mm20.launcher2.calendar.CalendarRepository
|
||||||
|
import de.mm20.launcher2.permissions.PermissionGroup
|
||||||
|
import de.mm20.launcher2.permissions.PermissionsManager
|
||||||
import de.mm20.launcher2.preferences.LauncherDataStore
|
import de.mm20.launcher2.preferences.LauncherDataStore
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -14,6 +17,9 @@ import org.koin.core.component.inject
|
|||||||
class CalendarWidgetSettingsScreenVM : ViewModel(), KoinComponent {
|
class CalendarWidgetSettingsScreenVM : ViewModel(), KoinComponent {
|
||||||
private val dataStore: LauncherDataStore by inject()
|
private val dataStore: LauncherDataStore by inject()
|
||||||
private val calendarRepository: CalendarRepository by inject()
|
private val calendarRepository: CalendarRepository by inject()
|
||||||
|
private val permissionsManager: PermissionsManager by inject()
|
||||||
|
|
||||||
|
val hasCalendarPermission = permissionsManager.hasPermission(PermissionGroup.Calendar).asLiveData()
|
||||||
|
|
||||||
val excludeAllDayEvents = dataStore.data.map { it.calendarWidget.hideAlldayEvents }.asLiveData()
|
val excludeAllDayEvents = dataStore.data.map { it.calendarWidget.hideAlldayEvents }.asLiveData()
|
||||||
fun setExcludeAllDayEvents(excludeAllDayEvents: Boolean) {
|
fun setExcludeAllDayEvents(excludeAllDayEvents: Boolean) {
|
||||||
@ -49,4 +55,8 @@ class CalendarWidgetSettingsScreenVM : ViewModel(), KoinComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun requestPermission(activity: AppCompatActivity) {
|
||||||
|
permissionsManager.requestPermission(activity, PermissionGroup.Calendar)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user