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();
}
public static boolean preTiramisu() {
return VERSION.SDK_INT < VERSION_CODES.TIRAMISU;
}
public static boolean atLeastNougatMR1() {
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.dialogs.DialogBuilder
import org.tasks.dialogs.MyTimePickerDialog
import org.tasks.scheduling.NotificationSchedulerIntentService
import org.tasks.ui.TaskEditControlFragment
import java.util.*
import javax.inject.Inject
@ -79,7 +80,12 @@ class ReminderControlSet : TaskEditControlFragment() {
val ringMode by remember { this@ReminderControlSet.ringMode }
val notificationPermissions = if (AndroidUtilities.atLeastTiramisu()) {
rememberPermissionState(
Manifest.permission.POST_NOTIFICATIONS
Manifest.permission.POST_NOTIFICATIONS,
onPermissionResult = { success ->
if (success) {
NotificationSchedulerIntentService.enqueueWork(context)
}
}
)
} else {
null

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

@ -16,6 +16,7 @@ import org.tasks.data.TaskDao
import org.tasks.filters.NotificationsFilter
import org.tasks.intents.TaskIntents
import org.tasks.markdown.MarkdownProvider
import org.tasks.preferences.PermissionChecker
import org.tasks.preferences.Preferences
import org.tasks.receivers.CompleteTaskReceiver
import org.tasks.reminders.NotificationActivity
@ -38,6 +39,7 @@ class NotificationManager @Inject constructor(
private val localBroadcastManager: LocalBroadcastManager,
private val notificationManager: ThrottledNotificationManager,
private val markdownProvider: MarkdownProvider,
private val permissionChecker: PermissionChecker,
) {
private val colorProvider = ColorProvider(context, preferences)
private val queue = NotificationLimiter(MAX_NOTIFICATIONS)
@ -142,7 +144,12 @@ class NotificationManager @Inject constructor(
alert: Boolean,
nonstop: Boolean,
fiveTimes: Boolean,
useGroupKey: Boolean) {
useGroupKey: Boolean
) {
if (!permissionChecker.canNotify()) {
Timber.w("Notifications disabled")
return
}
var alert = alert
for (notification in notifications) {
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.atLeastQ;
import static com.todoroo.andlib.utility.AndroidUtilities.preTiramisu;
import static java.util.Arrays.asList;
import android.Manifest.permission;
@ -42,6 +42,10 @@ public class PermissionChecker {
return checkPermissions(backgroundPermissions().toArray(new String[0]));
}
public boolean canNotify() {
return preTiramisu() || checkPermissions(permission.POST_NOTIFICATIONS);
}
private boolean checkPermissions(String... permissions) {
for (String permission : permissions) {
if (context.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {

@ -63,7 +63,7 @@ class NotificationSchedulerIntentService : InjectingJobIntentService() {
companion object {
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)
intent.putExtra(EXTRA_CANCEL_EXISTING_NOTIFICATIONS, cancelNotifications)
enqueueWork(

Loading…
Cancel
Save