diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java | 22 | ||||
-rw-r--r-- | java/com/android/dialer/notification/DialerNotificationManager.java | 10 |
2 files changed, 26 insertions, 6 deletions
diff --git a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java index f37d52d68..f142399d7 100644 --- a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java +++ b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java @@ -145,10 +145,10 @@ public final class LegacyVoicemailNotifier { return phoneAccount.getShortDescription().toString(); } } - return String.format( - context.getString(R.string.notification_voicemail_text_format), - PhoneNumberHelper.formatNumber( - context, voicemailNumber, GeoUtil.getCurrentCountryIso(context))); + return String.format( + context.getString(R.string.notification_voicemail_text_format), + PhoneNumberHelper.formatNumber( + context, voicemailNumber, GeoUtil.getCurrentCountryIso(context))); } public static void cancelNotification( @@ -156,8 +156,18 @@ public final class LegacyVoicemailNotifier { LogUtil.enterBlock("LegacyVoicemailNotifier.cancelNotification"); Assert.checkArgument(BuildCompat.isAtLeastO()); Assert.isNotNull(phoneAccountHandle); - DialerNotificationManager.cancel( - context, getNotificationTag(context, phoneAccountHandle), NOTIFICATION_ID); + if ("null".equals(phoneAccountHandle.getId())) { + // while PhoneAccountHandle itself will never be null, telephony may still construct a "null" + // handle if the SIM is no longer available. Usually both SIM will be removed at the sames + // time, so just clear all notifications. + LogUtil.i( + "LegacyVoicemailNotifier.cancelNotification", + "'null' id, canceling all legacy voicemail notifications"); + DialerNotificationManager.cancelAll(context, NOTIFICATION_TAG); + } else { + DialerNotificationManager.cancel( + context, getNotificationTag(context, phoneAccountHandle), NOTIFICATION_ID); + } } @NonNull diff --git a/java/com/android/dialer/notification/DialerNotificationManager.java b/java/com/android/dialer/notification/DialerNotificationManager.java index 0e3420169..2a66cd5ac 100644 --- a/java/com/android/dialer/notification/DialerNotificationManager.java +++ b/java/com/android/dialer/notification/DialerNotificationManager.java @@ -83,6 +83,16 @@ public final class DialerNotificationManager { notificationManager.cancel(tag, id); } + public static void cancelAll(Context context, String prefix) { + NotificationManager notificationManager = getNotificationManager(context); + StatusBarNotification[] notifications = notificationManager.getActiveNotifications(); + for (StatusBarNotification notification : notifications) { + if (notification.getTag() != null && notification.getTag().startsWith(prefix)) { + notificationManager.cancel(notification.getTag(), notification.getId()); + } + } + } + public static StatusBarNotification[] getActiveNotifications(@NonNull Context context) { Assert.isNotNull(context); return getNotificationManager(context).getActiveNotifications(); |