From 09bb040e9ad5fc81b7dded6e972b7d8126178cee Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Wed, 26 Jan 2022 22:34:51 +0100 Subject: [PATCH] Show permission banner in calendar widget if calendar permission is not granted --- .../widgets/calendar/CalendarWidgetVM.kt | 5 ++- .../ui/legacy/widget/CalendarWidget.kt | 32 ++++++++++++++++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/calendar/CalendarWidgetVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/calendar/CalendarWidgetVM.kt index eb75825a..32ebabd7 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/calendar/CalendarWidgetVM.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/calendar/CalendarWidgetVM.kt @@ -11,6 +11,8 @@ import androidx.lifecycle.viewModelScope import de.mm20.launcher2.calendar.CalendarRepository import de.mm20.launcher2.favorites.FavoritesRepository 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 kotlinx.coroutines.flow.collectLatest import org.koin.core.component.KoinComponent @@ -30,7 +32,8 @@ class CalendarWidgetVM : ViewModel(), KoinComponent { favoritesRepository.getPinnedCalendarEvents().asLiveData(viewModelScope.coroutineContext) 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 val hiddenPastEvents = MutableLiveData(0) diff --git a/ui/src/main/java/de/mm20/launcher2/ui/legacy/widget/CalendarWidget.kt b/ui/src/main/java/de/mm20/launcher2/ui/legacy/widget/CalendarWidget.kt index 6a3cb236..2801fc30 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/legacy/widget/CalendarWidget.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/legacy/widget/CalendarWidget.kt @@ -14,7 +14,9 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import de.mm20.launcher2.ktx.lifecycleOwner 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.MissingPermission import de.mm20.launcher2.search.data.Searchable import de.mm20.launcher2.ui.R import de.mm20.launcher2.ui.databinding.ViewCalendarWidgetBinding @@ -102,10 +104,20 @@ class CalendarWidget : LauncherWidget { val pinnedCalendarEvents = viewModel.pinnedCalendarEvents val hiddenPastEvents = viewModel.hiddenPastEvents 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) { binding.calendarWidgetPinnedList.submitItems(it) if (it.isEmpty()) { @@ -128,11 +140,21 @@ class CalendarWidget : LauncherWidget { private fun updateEventList( events: List, - hiddenPastDayEvents: Int + hiddenPastDayEvents: Int, + missingPermission: Boolean ) { val items = events.toMutableList() - if (events.isEmpty()) { + if (missingPermission) { + items.add( + MissingPermission( + context.getString(R.string.permission_calendar_widget), + PermissionGroup.Calendar + ) + ) + } + + if (events.isEmpty() && !missingPermission) { items.add( InformationText(context.getString(R.string.calendar_widget_no_events)) )