diff --git a/app/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java b/app/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java index b6bad7870..d7f9bfaa8 100644 --- a/app/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java +++ b/app/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java @@ -36,6 +36,7 @@ import org.tasks.ui.TimePreference; import javax.inject.Inject; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow; +import static com.todoroo.andlib.utility.AndroidUtilities.atLeastNougat; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo; import static com.todoroo.andlib.utility.AndroidUtilities.preOreo; import static org.tasks.PermissionUtil.verifyPermissions; @@ -65,7 +66,8 @@ public class ReminderPreferences extends InjectingPreferenceActivity { R.string.p_rmd_enable_quiet, R.string.p_rmd_quietStart, R.string.p_rmd_quietEnd, - R.string.p_rmd_persistent); + R.string.p_rmd_persistent, + R.string.p_bundle_notifications); resetGeofencesOnChange( R.string.p_geofence_radius, R.string.p_geofence_responsiveness); @@ -86,6 +88,7 @@ public class ReminderPreferences extends InjectingPreferenceActivity { requires(atLeastOreo(), R.string.notification_channel_settings); requires(atLeastMarshmallow(), R.string.battery_optimization_settings); requires(preOreo(), R.string.p_rmd_ringtone, R.string.p_rmd_vibrate, R.string.p_led_notification); + requires(atLeastNougat(), R.string.p_bundle_notifications); } @TargetApi(Build.VERSION_CODES.O) diff --git a/app/src/main/java/org/tasks/Notifier.java b/app/src/main/java/org/tasks/Notifier.java index b55b6bd8e..2dd85b3a6 100644 --- a/app/src/main/java/org/tasks/Notifier.java +++ b/app/src/main/java/org/tasks/Notifier.java @@ -44,7 +44,6 @@ import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static com.google.common.collect.Lists.transform; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybean; -import static com.todoroo.andlib.utility.AndroidUtilities.atLeastNougat; import static org.tasks.notifications.NotificationManager.GROUP_KEY; import static org.tasks.time.DateTimeUtils.currentTimeMillis; @@ -241,7 +240,7 @@ public class Notifier { } NotificationCompat.Builder notification = getTaskNotification(entry); if (notification != null) { - notification.setGroupAlertBehavior(alert && (atLeastNougat() ? entries.size() == 1 : i == entries.size() - 1) + notification.setGroupAlertBehavior(alert && (preferences.bundleNotifications() ? entries.size() == 1 : i == entries.size() - 1) ? NotificationCompat.GROUP_ALERT_CHILDREN : NotificationCompat.GROUP_ALERT_SUMMARY); notifications.put(entry, notification.build()); diff --git a/app/src/main/java/org/tasks/notifications/NotificationManager.java b/app/src/main/java/org/tasks/notifications/NotificationManager.java index 89848b0fa..c1575a4f9 100644 --- a/app/src/main/java/org/tasks/notifications/NotificationManager.java +++ b/app/src/main/java/org/tasks/notifications/NotificationManager.java @@ -31,7 +31,6 @@ import io.reactivex.schedulers.Schedulers; import static com.google.common.collect.Iterables.transform; import static com.google.common.collect.Lists.newArrayList; -import static com.todoroo.andlib.utility.AndroidUtilities.atLeastNougat; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo; @ApplicationScope @@ -133,7 +132,7 @@ public class NotificationManager { } private void updateSummary(boolean notify, boolean nonStop, boolean fiveTimes) { - if (atLeastNougat()) { + if (preferences.bundleNotifications()) { if (appDatabase.notificationDao().count() == 0) { notificationManager.cancel(SUMMARY_NOTIFICATION_ID); } else { @@ -158,6 +157,8 @@ public class NotificationManager { notify(NotificationManager.SUMMARY_NOTIFICATION_ID, builder.build(), notify, nonStop, fiveTimes); } + } else { + notificationManager.cancel(NotificationManager.SUMMARY_NOTIFICATION_ID); } } } diff --git a/app/src/main/java/org/tasks/preferences/Preferences.java b/app/src/main/java/org/tasks/preferences/Preferences.java index 5eab6a2bb..23684fbbf 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.java +++ b/app/src/main/java/org/tasks/preferences/Preferences.java @@ -27,6 +27,7 @@ import javax.inject.Inject; import timber.log.Timber; import static android.content.SharedPreferences.Editor; +import static com.todoroo.andlib.utility.AndroidUtilities.atLeastNougat; public class Preferences { @@ -411,4 +412,8 @@ public class Preferences { editor.remove(context.getString(resId)); editor.apply(); } + + public boolean bundleNotifications() { + return atLeastNougat() && getBoolean(R.string.p_bundle_notifications, true); + } } diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 5d89abea8..0b86e1b34 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -280,5 +280,6 @@ start_of_week use_native_datetime_pickers gtask_background_sync + bundle_notifications diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aefa890c5..c0da4b9b0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -787,4 +787,5 @@ File %1$s contained %2$s.\n\n Manage notifications Manage battery optimizations Battery optimizations may delay notifications + Bundle notifications diff --git a/app/src/main/res/xml/preferences_reminders.xml b/app/src/main/res/xml/preferences_reminders.xml index 7978cd584..bfc0e9b78 100644 --- a/app/src/main/res/xml/preferences_reminders.xml +++ b/app/src/main/res/xml/preferences_reminders.xml @@ -35,6 +35,11 @@ android:key="@string/p_rmd_persistent" android:summary="@string/persistent_notifications_description" android:title="@string/persistent_notifications" /> +