Show permission banner in calendar widget if calendar permission is not granted

This commit is contained in:
MM20 2022-01-26 22:34:51 +01:00
parent b8304f1c1c
commit 09bb040e9a
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
2 changed files with 31 additions and 6 deletions

View File

@ -11,6 +11,8 @@ import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.calendar.CalendarRepository import de.mm20.launcher2.calendar.CalendarRepository
import de.mm20.launcher2.favorites.FavoritesRepository import de.mm20.launcher2.favorites.FavoritesRepository
import de.mm20.launcher2.ktx.tryStartActivity import de.mm20.launcher2.ktx.tryStartActivity
import de.mm20.launcher2.permissions.PermissionGroup
import de.mm20.launcher2.permissions.PermissionsManager
import de.mm20.launcher2.search.data.CalendarEvent import de.mm20.launcher2.search.data.CalendarEvent
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import org.koin.core.component.KoinComponent import org.koin.core.component.KoinComponent
@ -30,7 +32,8 @@ class CalendarWidgetVM : ViewModel(), KoinComponent {
favoritesRepository.getPinnedCalendarEvents().asLiveData(viewModelScope.coroutineContext) favoritesRepository.getPinnedCalendarEvents().asLiveData(viewModelScope.coroutineContext)
var availableDates = listOf(LocalDate.now()) var availableDates = listOf(LocalDate.now())
val permissionMissing = MutableLiveData(false) private val permissionsManager: PermissionsManager by inject()
val hasPermission = permissionsManager.hasPermission(PermissionGroup.Calendar).asLiveData()
private var showRunningPastDayEvents = false private var showRunningPastDayEvents = false
val hiddenPastEvents = MutableLiveData(0) val hiddenPastEvents = MutableLiveData(0)

View File

@ -14,7 +14,9 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import de.mm20.launcher2.ktx.lifecycleOwner import de.mm20.launcher2.ktx.lifecycleOwner
import de.mm20.launcher2.ktx.lifecycleScope import de.mm20.launcher2.ktx.lifecycleScope
import de.mm20.launcher2.permissions.PermissionGroup
import de.mm20.launcher2.search.data.CalendarEvent import de.mm20.launcher2.search.data.CalendarEvent
import de.mm20.launcher2.search.data.MissingPermission
import de.mm20.launcher2.search.data.Searchable import de.mm20.launcher2.search.data.Searchable
import de.mm20.launcher2.ui.R import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.databinding.ViewCalendarWidgetBinding import de.mm20.launcher2.ui.databinding.ViewCalendarWidgetBinding
@ -102,10 +104,20 @@ class CalendarWidget : LauncherWidget {
val pinnedCalendarEvents = viewModel.pinnedCalendarEvents val pinnedCalendarEvents = viewModel.pinnedCalendarEvents
val hiddenPastEvents = viewModel.hiddenPastEvents val hiddenPastEvents = viewModel.hiddenPastEvents
val selectedDate = viewModel.selectedDate val selectedDate = viewModel.selectedDate
val hasPermission = viewModel.hasPermission
calendarEvents.observe(context as AppCompatActivity) {
updateEventList(it, hiddenPastEvents.value ?: 0, hasPermission.value == false)
}
hasPermission.observe(context as AppCompatActivity) {
updateEventList(
calendarEvents.value ?: emptyList(),
hiddenPastEvents.value ?: 0,
it == false
)
}
calendarEvents.observe(context as AppCompatActivity, {
updateEventList(it, hiddenPastEvents.value ?: 0)
})
pinnedCalendarEvents.observe(context as AppCompatActivity) { pinnedCalendarEvents.observe(context as AppCompatActivity) {
binding.calendarWidgetPinnedList.submitItems(it) binding.calendarWidgetPinnedList.submitItems(it)
if (it.isEmpty()) { if (it.isEmpty()) {
@ -128,11 +140,21 @@ class CalendarWidget : LauncherWidget {
private fun updateEventList( private fun updateEventList(
events: List<CalendarEvent>, events: List<CalendarEvent>,
hiddenPastDayEvents: Int hiddenPastDayEvents: Int,
missingPermission: Boolean
) { ) {
val items = events.toMutableList<Searchable>() val items = events.toMutableList<Searchable>()
if (events.isEmpty()) { if (missingPermission) {
items.add(
MissingPermission(
context.getString(R.string.permission_calendar_widget),
PermissionGroup.Calendar
)
)
}
if (events.isEmpty() && !missingPermission) {
items.add( items.add(
InformationText(context.getString(R.string.calendar_widget_no_events)) InformationText(context.getString(R.string.calendar_widget_no_events))
) )