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.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)

View File

@ -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<CalendarEvent>,
hiddenPastDayEvents: Int
hiddenPastDayEvents: Int,
missingPermission: Boolean
) {
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(
InformationText(context.getString(R.string.calendar_widget_no_events))
)