diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt index 32686d261..4d840d959 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -28,7 +28,9 @@ import androidx.appcompat.view.ActionMode import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.Toolbar import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.app.ShareCompat @@ -86,6 +88,7 @@ import org.tasks.activities.TagSettingsActivity import org.tasks.analytics.Firebase import org.tasks.billing.PurchaseActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity +import org.tasks.compose.AlarmsDisabledBanner import org.tasks.compose.FilterSelectionActivity.Companion.launch import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult import org.tasks.compose.NotificationsDisabledBanner @@ -107,7 +110,6 @@ import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.PriorityPicker.Companion.newPriorityPicker import org.tasks.dialogs.SortSettingsActivity -import org.tasks.extensions.Context.canScheduleExactAlarms import org.tasks.extensions.Context.is24HourFormat import org.tasks.extensions.Context.openAppNotificationSettings import org.tasks.extensions.Context.openReminderSettings @@ -376,16 +378,14 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL } else { null } - val showNotificationBanner = state.warnNotificationsDisabled && - (!hasRemindersPermission || notificationPermissions?.status is PermissionStatus.Denied) - val showSubscriptionNag = !showNotificationBanner && state.begForSubscription - val showQuietHoursWarning = !showNotificationBanner && !showSubscriptionNag && state.warnQuietHoursEnabled + val showNotificationBanner = state.warnNotificationsDisabled && notificationPermissions?.status is PermissionStatus.Denied + val showAlarmsBanner = !showNotificationBanner && state.warnNotificationsDisabled && !hasRemindersPermission + val showSubscriptionNag = !showNotificationBanner && !showAlarmsBanner && state.begForSubscription + val showQuietHoursWarning = !showNotificationBanner && !showAlarmsBanner && !showSubscriptionNag && state.warnQuietHoursEnabled NotificationsDisabledBanner( visible = showNotificationBanner, settings = { - if (!context.canScheduleExactAlarms()) { - context.openReminderSettings() - } else if (notificationPermissions?.status?.shouldShowRationale == true) { + if (notificationPermissions?.status?.shouldShowRationale == true) { context.openAppNotificationSettings() } else { notificationPermissions?.launchPermissionRequest() @@ -393,6 +393,11 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL }, dismiss = { listViewModel.dismissNotificationBanner() }, ) + AlarmsDisabledBanner( + visible = showAlarmsBanner, + settings = { context.openReminderSettings() }, + dismiss = { listViewModel.dismissNotificationBanner() }, + ) SubscriptionNagBanner( visible = showSubscriptionNag, subscribe = { diff --git a/app/src/main/java/org/tasks/compose/Banner.kt b/app/src/main/java/org/tasks/compose/Banner.kt index 7aed3cf5c..d3665fe8b 100644 --- a/app/src/main/java/org/tasks/compose/Banner.kt +++ b/app/src/main/java/org/tasks/compose/Banner.kt @@ -28,6 +28,25 @@ fun NotificationsDisabledBanner( ) } +@OptIn(ExperimentalAnimationApi::class) +@Composable +fun AlarmsDisabledBanner( + visible: Boolean, + settings: () -> Unit, + dismiss: () -> Unit, +) { + AnimatedBanner( + visible = visible, + title = stringResource(id = R.string.enable_alarms), + body = stringResource(id = R.string.enable_alarms_description), + dismissText = stringResource(id = R.string.dismiss), + onDismiss = dismiss, + action = stringResource(id = R.string.TLA_menu_settings), + onAction = settings, + ) + +} + @ExperimentalAnimationApi @Composable fun SubscriptionNagBanner( diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4fa516eed..9cc8a8498 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -731,6 +731,8 @@ File %1$s contained %2$s.\n\n You can customize this screen by rearranging or removing fields Enable reminders Reminders are disabled in Android Settings + Get notified at the right time + To make sure you\'re notified at the right time, grant permission to set alarms and reminders in Settings Sign in Agree Not now