diff --git a/app/src/main/java/eu/faircode/email/ActivityCompose.java b/app/src/main/java/eu/faircode/email/ActivityCompose.java index 6df8c7b788..8a3cdbd1ce 100644 --- a/app/src/main/java/eu/faircode/email/ActivityCompose.java +++ b/app/src/main/java/eu/faircode/email/ActivityCompose.java @@ -312,8 +312,9 @@ public class ActivityCompose extends ActivityBase implements FragmentManager.OnB ServiceSynchronize.eval(context, "outbox/drafts"); - NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel("send:" + id, 10); + NotificationManager nm = + (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel("send:" + id, NotificationHelper.NOTIFICATION_TAGGED); return message.id; } diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 9d69d300f7..e0dbafe00d 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -1081,8 +1081,10 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB } try { - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify(Helper.NOTIFICATION_UPDATE, builder.build()); + NotificationManager nm = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.notify(NotificationHelper.NOTIFICATION_UPDATE, + builder.build()); } catch (Throwable ex) { Log.w(ex); } diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 7fe6e2047e..2893ab5bb1 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -207,7 +207,7 @@ class Core { if (EntityOperation.HEADERS.equals(op.name) || EntityOperation.RAW.equals(op.name)) - nm.cancel(op.name + ":" + op.message, 10); + nm.cancel(op.name + ":" + op.message, NotificationHelper.NOTIFICATION_TAGGED); if (!Objects.equals(folder.id, op.folder)) throw new IllegalArgumentException("Invalid folder=" + folder.id + "/" + op.folder); @@ -628,7 +628,9 @@ class Core { if (title != null) { NotificationCompat.Builder builder = getNotificationError(context, "warning", title, ex); - nm.notify(op.name + ":" + op.message, 10, builder.build()); + nm.notify(op.name + ":" + op.message, + NotificationHelper.NOTIFICATION_TAGGED, + builder.build()); } } else { @@ -4075,7 +4077,7 @@ class Core { for (Long id : remove) { String tag = "unseen." + group + "." + Math.abs(id); EntityLog.log(context, "Notify cancel tag=" + tag + " id=" + id); - nm.cancel(tag, 10); + nm.cancel(tag, NotificationHelper.NOTIFICATION_TAGGED); data.groupNotifying.get(group).remove(id); db.message().setMessageNotifying(Math.abs(id), 0); @@ -4084,7 +4086,7 @@ class Core { if (notifications.size() == 0) { String tag = "unseen." + group + "." + 0; EntityLog.log(context, "Notify cancel tag=" + tag); - nm.cancel(tag, 10); + nm.cancel(tag, NotificationHelper.NOTIFICATION_TAGGED); } for (Long id : add) { @@ -4114,7 +4116,7 @@ class Core { : " channel=" + notification.getChannelId()) + " sort=" + notification.getSortKey()); try { - nm.notify(tag, 10, notification); + nm.notify(tag, NotificationHelper.NOTIFICATION_TAGGED, notification); // https://github.com/leolin310148/ShortcutBadger/wiki/Xiaomi-Device-Support if (id == 0 && badge && Helper.isXiaomi()) ShortcutBadger.applyNotification(context, notification, current); diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index 44d2d50c0d..f30d2084ab 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -1266,8 +1266,8 @@ public class FragmentAccount extends FragmentBase { if (!synchronize) { NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel("receive:" + account.id, 10); - nm.cancel("alert:" + account.id, 10); + nm.cancel("receive:" + account.id, NotificationHelper.NOTIFICATION_TAGGED); + nm.cancel("alert:" + account.id, NotificationHelper.NOTIFICATION_TAGGED); } args.putBoolean("saved", true); diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index 8194a007eb..c1e78c7d26 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -917,7 +917,7 @@ public class FragmentFolders extends FragmentBase { if (now - last > EXPORT_PROGRESS_INTERVAL) { last = now; builder.setProgress(ids.size(), i, false); - nm.notify("export", 10, builder.build()); + nm.notify("export", NotificationHelper.NOTIFICATION_TAGGED, builder.build()); } long id = ids.get(i); @@ -990,7 +990,7 @@ public class FragmentFolders extends FragmentBase { Log.e(ex); } } finally { - nm.cancel("export", 10); + nm.cancel("export", NotificationHelper.NOTIFICATION_TAGGED); } return null; diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index ce7cc54586..867d42cdef 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -7571,8 +7571,9 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. ServiceSynchronize.eval(context, "delete"); - NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel("send:" + id, 10); + NotificationManager nm = + (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel("send:" + id, NotificationHelper.NOTIFICATION_TAGGED); return null; } diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index 686e44fc0a..603618d613 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -448,8 +448,9 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc prefs.edit().putBoolean("updates", checked).apply(); swCheckWeekly.setEnabled(checked); if (!checked) { - NotificationManager nm = (NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel(Helper.NOTIFICATION_UPDATE); + NotificationManager nm = + (NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel(NotificationHelper.NOTIFICATION_UPDATE); } } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentPop.java b/app/src/main/java/eu/faircode/email/FragmentPop.java index b234a75c16..6599322c40 100644 --- a/app/src/main/java/eu/faircode/email/FragmentPop.java +++ b/app/src/main/java/eu/faircode/email/FragmentPop.java @@ -623,9 +623,10 @@ public class FragmentPop extends FragmentBase { ServiceSynchronize.eval(context, "POP3"); if (!synchronize) { - NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel("receive:" + account.id, 10); - nm.cancel("alert:" + account.id, 10); + NotificationManager nm = + (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel("receive:" + account.id, NotificationHelper.NOTIFICATION_TAGGED); + nm.cancel("alert:" + account.id, NotificationHelper.NOTIFICATION_TAGGED); } args.putBoolean("saved", true); diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index 1880a99234..d7b129cc9c 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -144,11 +144,6 @@ public class Helper { private static Boolean hasPlayStore = null; private static Boolean hasValidFingerprint = null; - static final int NOTIFICATION_SYNCHRONIZE = 1; - static final int NOTIFICATION_SEND = 2; - static final int NOTIFICATION_EXTERNAL = 3; - static final int NOTIFICATION_UPDATE = 4; - static final float LOW_LIGHT = 0.6f; static final int BUFFER_SIZE = 8192; // Same as in Files class diff --git a/app/src/main/java/eu/faircode/email/NotificationHelper.java b/app/src/main/java/eu/faircode/email/NotificationHelper.java index d4fbab7546..827af6bd88 100644 --- a/app/src/main/java/eu/faircode/email/NotificationHelper.java +++ b/app/src/main/java/eu/faircode/email/NotificationHelper.java @@ -37,6 +37,12 @@ import org.json.JSONException; import org.json.JSONObject; class NotificationHelper { + static final int NOTIFICATION_SYNCHRONIZE = 100; + static final int NOTIFICATION_SEND = 200; + static final int NOTIFICATION_EXTERNAL = 300; + static final int NOTIFICATION_UPDATE = 400; + static final int NOTIFICATION_TAGGED = 500; + @RequiresApi(api = Build.VERSION_CODES.O) static void createNotificationChannels(Context context) { // https://issuetracker.google.com/issues/65108694 diff --git a/app/src/main/java/eu/faircode/email/ServiceExternal.java b/app/src/main/java/eu/faircode/email/ServiceExternal.java index 4705294946..979dfe786e 100644 --- a/app/src/main/java/eu/faircode/email/ServiceExternal.java +++ b/app/src/main/java/eu/faircode/email/ServiceExternal.java @@ -58,7 +58,8 @@ public class ServiceExternal extends Service { public void onCreate() { Log.i("Service external create"); super.onCreate(); - startForeground(Helper.NOTIFICATION_EXTERNAL, getNotification().build()); + startForeground(NotificationHelper.NOTIFICATION_EXTERNAL, + getNotification().build()); } @Override @@ -75,7 +76,8 @@ public class ServiceExternal extends Service { Log.logExtras(intent); super.onStartCommand(intent, flags, startId); - startForeground(Helper.NOTIFICATION_EXTERNAL, getNotification().build()); + startForeground(NotificationHelper.NOTIFICATION_EXTERNAL, + getNotification().build()); if (intent == null) return START_NOT_STICKY; diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index eeba663d13..ea9c018abc 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -83,7 +83,8 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar public void onCreate() { EntityLog.log(this, "Service send create"); super.onCreate(); - startForeground(Helper.NOTIFICATION_SEND, getNotificationService().build()); + startForeground(NotificationHelper.NOTIFICATION_SEND, + getNotificationService().build()); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wlOutbox = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, BuildConfig.APPLICATION_ID + ":send"); @@ -98,8 +99,10 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar EntityLog.log(ServiceSend.this, "Unsent=" + (unsent == null ? null : unsent.count)); try { - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify(Helper.NOTIFICATION_SEND, getNotificationService().build()); + NotificationManager nm = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.notify(NotificationHelper.NOTIFICATION_SEND, + getNotificationService().build()); } catch (Throwable ex) { Log.w(ex); } @@ -177,8 +180,9 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar stopForeground(true); - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel(Helper.NOTIFICATION_SEND); + NotificationManager nm = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel(NotificationHelper.NOTIFICATION_SEND); super.onDestroy(); } @@ -192,7 +196,8 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); - startForeground(Helper.NOTIFICATION_SEND, getNotificationService().build()); + startForeground(NotificationHelper.NOTIFICATION_SEND, + getNotificationService().build()); Log.i("Send intent=" + intent); Log.logExtras(intent); @@ -319,8 +324,10 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar EntityLog.log(ServiceSend.this, "Service send suitable=" + suitable); try { - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify(Helper.NOTIFICATION_SEND, getNotificationService().build()); + NotificationManager nm = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.notify(NotificationHelper.NOTIFICATION_SEND, + getNotificationService().build()); } catch (Throwable ex) { Log.w(ex); } @@ -419,8 +426,10 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar try { int tries_left = (unrecoverable ? 0 : RETRY_MAX - op.tries); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify("send:" + message.id, 10, getNotificationError( - MessageHelper.formatAddressesShort(message.to), ex, tries_left).build()); + nm.notify("send:" + message.id, + NotificationHelper.NOTIFICATION_TAGGED, + getNotificationError( + MessageHelper.formatAddressesShort(message.to), ex, tries_left).build()); } catch (Throwable ex1) { Log.w(ex1); } @@ -473,7 +482,7 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar } db.message().setMessageError(message.id, null); - nm.cancel("send:" + message.id, 10); + nm.cancel("send:" + message.id, NotificationHelper.NOTIFICATION_TAGGED); if (message.ui_snoozed == null) EntityOperation.queue(this, message, EntityOperation.SEND); @@ -734,8 +743,9 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar db.endTransaction(); } - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel("send:" + message.id, 10); + NotificationManager nm = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel("send:" + message.id, NotificationHelper.NOTIFICATION_TAGGED); // Check sent message if (sid != null) { diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index bd2a52c75b..b79d513141 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -171,7 +171,8 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (isBackgroundService(this)) stopForeground(true); else - startForeground(Helper.NOTIFICATION_SYNCHRONIZE, getNotificationService(null, null).build()); + startForeground(NotificationHelper.NOTIFICATION_SYNCHRONIZE, + getNotificationService(null, null).build()); // Listen for network changes ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); @@ -367,8 +368,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (!isBackgroundService(ServiceSynchronize.this)) try { - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify(Helper.NOTIFICATION_SYNCHRONIZE, getNotificationService(lastAccounts, lastOperations).build()); + NotificationManager nm = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.notify(NotificationHelper.NOTIFICATION_SYNCHRONIZE, + getNotificationService(lastAccounts, lastOperations).build()); } catch (Throwable ex) { /* java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.lang.Iterable.iterator()' on a null object reference @@ -774,8 +777,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences */ } - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel(Helper.NOTIFICATION_SYNCHRONIZE); + NotificationManager nm = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel(NotificationHelper.NOTIFICATION_SYNCHRONIZE); super.onDestroy(); } @@ -799,7 +803,8 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (isBackgroundService(this)) stopForeground(true); else - startForeground(Helper.NOTIFICATION_SYNCHRONIZE, getNotificationService(null, null).build()); + startForeground(NotificationHelper.NOTIFICATION_SYNCHRONIZE, + getNotificationService(null, null).build()); if (action != null) try { @@ -1240,7 +1245,8 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (!ConnectionHelper.isMaxConnections(message)) try { NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify("alert:" + account.id, 10, + nm.notify("alert:" + account.id, + NotificationHelper.NOTIFICATION_TAGGED, getNotificationAlert(account.name, message).build()); } catch (Throwable ex) { Log.w(ex); @@ -1272,7 +1278,8 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences try { state.setBackoff(2 * CONNECT_BACKOFF_ALARM_MAX * 60); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify("receive:" + account.id, 10, + nm.notify("receive:" + account.id, + NotificationHelper.NOTIFICATION_TAGGED, Core.getNotificationError(this, "error", account.name, ex) .build()); } catch (Throwable ex1) { @@ -1932,9 +1939,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences db.account().setAccountConnected(account.id, account.last_connected); db.account().setAccountWarning(account.id, capIdle ? null : getString(R.string.title_no_idle)); - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel("receive:" + account.id, 10); - nm.cancel("alert:" + account.id, 10); + NotificationManager nm = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel("receive:" + account.id, NotificationHelper.NOTIFICATION_TAGGED); + nm.cancel("alert:" + account.id, NotificationHelper.NOTIFICATION_TAGGED); // Schedule keep alive alarm Intent intent = new Intent(this, ServiceSynchronize.class); @@ -1992,7 +2000,8 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences .format(account.last_connected)), ex); try { NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify("receive:" + account.id, 10, + nm.notify("receive:" + account.id, + NotificationHelper.NOTIFICATION_TAGGED, Core.getNotificationError(this, "warning", account.name, warning) .build()); } catch (Throwable ex1) { @@ -2351,8 +2360,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (!isBackgroundService(ServiceSynchronize.this)) try { - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify(Helper.NOTIFICATION_SYNCHRONIZE, getNotificationService(lastAccounts, lastOperations).build()); + NotificationManager nm = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.notify(NotificationHelper.NOTIFICATION_SYNCHRONIZE, + getNotificationService(lastAccounts, lastOperations).build()); } catch (Throwable ex) { Log.w(ex); } diff --git a/app/src/main/java/eu/faircode/email/ServiceUI.java b/app/src/main/java/eu/faircode/email/ServiceUI.java index 47d341f590..efe4e13eeb 100644 --- a/app/src/main/java/eu/faircode/email/ServiceUI.java +++ b/app/src/main/java/eu/faircode/email/ServiceUI.java @@ -193,8 +193,9 @@ public class ServiceUI extends IntentService { // https://issuetracker.google.com/issues/159152393 String tag = "unseen." + group + ":" + id; - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel(tag, 10); + NotificationManager nm = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel(tag, NotificationHelper.NOTIFICATION_TAGGED); } private void onMove(long id, String folderType) {