Schedule notifications after permissions granted

pull/2068/head
Alex Baker 2 years ago
parent e13d16d644
commit 390265a9df

@ -143,6 +143,10 @@ public class AndroidUtilities {
return !atLeastOreo(); return !atLeastOreo();
} }
public static boolean preTiramisu() {
return VERSION.SDK_INT < VERSION_CODES.TIRAMISU;
}
public static boolean atLeastNougatMR1() { public static boolean atLeastNougatMR1() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1; return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1;
} }

@ -29,6 +29,7 @@ import org.tasks.data.Alarm.Companion.TYPE_DATE_TIME
import org.tasks.date.DateTimeUtils import org.tasks.date.DateTimeUtils
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.MyTimePickerDialog import org.tasks.dialogs.MyTimePickerDialog
import org.tasks.scheduling.NotificationSchedulerIntentService
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@ -79,7 +80,12 @@ class ReminderControlSet : TaskEditControlFragment() {
val ringMode by remember { this@ReminderControlSet.ringMode } val ringMode by remember { this@ReminderControlSet.ringMode }
val notificationPermissions = if (AndroidUtilities.atLeastTiramisu()) { val notificationPermissions = if (AndroidUtilities.atLeastTiramisu()) {
rememberPermissionState( rememberPermissionState(
Manifest.permission.POST_NOTIFICATIONS Manifest.permission.POST_NOTIFICATIONS,
onPermissionResult = { success ->
if (success) {
NotificationSchedulerIntentService.enqueueWork(context)
}
}
) )
} else { } else {
null null

@ -72,7 +72,7 @@ class Tasks : Application(), Configuration.Provider {
private fun backgroundWork() = CoroutineScope(Dispatchers.Default).launch { private fun backgroundWork() = CoroutineScope(Dispatchers.Default).launch {
inventory.updateTasksAccount() inventory.updateTasksAccount()
NotificationSchedulerIntentService.enqueueWork(context, false) NotificationSchedulerIntentService.enqueueWork(context)
CalendarNotificationIntentService.enqueueWork(context) CalendarNotificationIntentService.enqueueWork(context)
refreshScheduler.get().scheduleAll() refreshScheduler.get().scheduleAll()
workManager.get().apply { workManager.get().apply {

@ -16,6 +16,7 @@ import org.tasks.data.TaskDao
import org.tasks.filters.NotificationsFilter import org.tasks.filters.NotificationsFilter
import org.tasks.intents.TaskIntents import org.tasks.intents.TaskIntents
import org.tasks.markdown.MarkdownProvider import org.tasks.markdown.MarkdownProvider
import org.tasks.preferences.PermissionChecker
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.receivers.CompleteTaskReceiver import org.tasks.receivers.CompleteTaskReceiver
import org.tasks.reminders.NotificationActivity import org.tasks.reminders.NotificationActivity
@ -38,6 +39,7 @@ class NotificationManager @Inject constructor(
private val localBroadcastManager: LocalBroadcastManager, private val localBroadcastManager: LocalBroadcastManager,
private val notificationManager: ThrottledNotificationManager, private val notificationManager: ThrottledNotificationManager,
private val markdownProvider: MarkdownProvider, private val markdownProvider: MarkdownProvider,
private val permissionChecker: PermissionChecker,
) { ) {
private val colorProvider = ColorProvider(context, preferences) private val colorProvider = ColorProvider(context, preferences)
private val queue = NotificationLimiter(MAX_NOTIFICATIONS) private val queue = NotificationLimiter(MAX_NOTIFICATIONS)
@ -142,7 +144,12 @@ class NotificationManager @Inject constructor(
alert: Boolean, alert: Boolean,
nonstop: Boolean, nonstop: Boolean,
fiveTimes: Boolean, fiveTimes: Boolean,
useGroupKey: Boolean) { useGroupKey: Boolean
) {
if (!permissionChecker.canNotify()) {
Timber.w("Notifications disabled")
return
}
var alert = alert var alert = alert
for (notification in notifications) { for (notification in notifications) {
val builder = getTaskNotification(notification) val builder = getTaskNotification(notification)

@ -2,7 +2,7 @@ package org.tasks.preferences;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastQ; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastQ;
import static com.todoroo.andlib.utility.AndroidUtilities.preTiramisu;
import static java.util.Arrays.asList; import static java.util.Arrays.asList;
import android.Manifest.permission; import android.Manifest.permission;
@ -42,6 +42,10 @@ public class PermissionChecker {
return checkPermissions(backgroundPermissions().toArray(new String[0])); return checkPermissions(backgroundPermissions().toArray(new String[0]));
} }
public boolean canNotify() {
return preTiramisu() || checkPermissions(permission.POST_NOTIFICATIONS);
}
private boolean checkPermissions(String... permissions) { private boolean checkPermissions(String... permissions) {
for (String permission : permissions) { for (String permission : permissions) {
if (context.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { if (context.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {

@ -63,7 +63,7 @@ class NotificationSchedulerIntentService : InjectingJobIntentService() {
companion object { companion object {
private const val EXTRA_CANCEL_EXISTING_NOTIFICATIONS = "extra_cancel_existing_notifications" private const val EXTRA_CANCEL_EXISTING_NOTIFICATIONS = "extra_cancel_existing_notifications"
fun enqueueWork(context: Context?, cancelNotifications: Boolean) { fun enqueueWork(context: Context?, cancelNotifications: Boolean = false) {
val intent = Intent(context, NotificationSchedulerIntentService::class.java) val intent = Intent(context, NotificationSchedulerIntentService::class.java)
intent.putExtra(EXTRA_CANCEL_EXISTING_NOTIFICATIONS, cancelNotifications) intent.putExtra(EXTRA_CANCEL_EXISTING_NOTIFICATIONS, cancelNotifications)
enqueueWork( enqueueWork(

Loading…
Cancel
Save