Add separate alarms and reminders banner

pull/3145/head
Alex Baker 1 year ago
parent 2def074096
commit f48224e555

@ -28,7 +28,9 @@ import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.app.ShareCompat import androidx.core.app.ShareCompat
@ -86,6 +88,7 @@ import org.tasks.activities.TagSettingsActivity
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.billing.PurchaseActivity import org.tasks.billing.PurchaseActivity
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
import org.tasks.compose.AlarmsDisabledBanner
import org.tasks.compose.FilterSelectionActivity.Companion.launch import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult import org.tasks.compose.FilterSelectionActivity.Companion.registerForListPickerResult
import org.tasks.compose.NotificationsDisabledBanner 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.DialogBuilder
import org.tasks.dialogs.PriorityPicker.Companion.newPriorityPicker import org.tasks.dialogs.PriorityPicker.Companion.newPriorityPicker
import org.tasks.dialogs.SortSettingsActivity import org.tasks.dialogs.SortSettingsActivity
import org.tasks.extensions.Context.canScheduleExactAlarms
import org.tasks.extensions.Context.is24HourFormat import org.tasks.extensions.Context.is24HourFormat
import org.tasks.extensions.Context.openAppNotificationSettings import org.tasks.extensions.Context.openAppNotificationSettings
import org.tasks.extensions.Context.openReminderSettings import org.tasks.extensions.Context.openReminderSettings
@ -376,16 +378,14 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
} else { } else {
null null
} }
val showNotificationBanner = state.warnNotificationsDisabled && val showNotificationBanner = state.warnNotificationsDisabled && notificationPermissions?.status is PermissionStatus.Denied
(!hasRemindersPermission || notificationPermissions?.status is PermissionStatus.Denied) val showAlarmsBanner = !showNotificationBanner && state.warnNotificationsDisabled && !hasRemindersPermission
val showSubscriptionNag = !showNotificationBanner && state.begForSubscription val showSubscriptionNag = !showNotificationBanner && !showAlarmsBanner && state.begForSubscription
val showQuietHoursWarning = !showNotificationBanner && !showSubscriptionNag && state.warnQuietHoursEnabled val showQuietHoursWarning = !showNotificationBanner && !showAlarmsBanner && !showSubscriptionNag && state.warnQuietHoursEnabled
NotificationsDisabledBanner( NotificationsDisabledBanner(
visible = showNotificationBanner, visible = showNotificationBanner,
settings = { settings = {
if (!context.canScheduleExactAlarms()) { if (notificationPermissions?.status?.shouldShowRationale == true) {
context.openReminderSettings()
} else if (notificationPermissions?.status?.shouldShowRationale == true) {
context.openAppNotificationSettings() context.openAppNotificationSettings()
} else { } else {
notificationPermissions?.launchPermissionRequest() notificationPermissions?.launchPermissionRequest()
@ -393,6 +393,11 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
}, },
dismiss = { listViewModel.dismissNotificationBanner() }, dismiss = { listViewModel.dismissNotificationBanner() },
) )
AlarmsDisabledBanner(
visible = showAlarmsBanner,
settings = { context.openReminderSettings() },
dismiss = { listViewModel.dismissNotificationBanner() },
)
SubscriptionNagBanner( SubscriptionNagBanner(
visible = showSubscriptionNag, visible = showSubscriptionNag,
subscribe = { subscribe = {

@ -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 @ExperimentalAnimationApi
@Composable @Composable
fun SubscriptionNagBanner( fun SubscriptionNagBanner(

@ -731,6 +731,8 @@ File %1$s contained %2$s.\n\n
<string name="hint_customize_edit_body">You can customize this screen by rearranging or removing fields</string> <string name="hint_customize_edit_body">You can customize this screen by rearranging or removing fields</string>
<string name="enable_reminders">Enable reminders</string> <string name="enable_reminders">Enable reminders</string>
<string name="enable_reminders_description">Reminders are disabled in Android Settings</string> <string name="enable_reminders_description">Reminders are disabled in Android Settings</string>
<string name="enable_alarms">Get notified at the right time</string>
<string name="enable_alarms_description">To make sure you\'re notified at the right time, grant permission to set alarms and reminders in Settings</string>
<string name="sign_in">Sign in</string> <string name="sign_in">Sign in</string>
<string name="consent_agree">Agree</string> <string name="consent_agree">Agree</string>
<string name="consent_deny">Not now</string> <string name="consent_deny">Not now</string>

Loading…
Cancel
Save