Loading core/java/android/service/notification/NotificationAssistantService.java +4 −1 Original line number Original line Diff line number Diff line Loading @@ -373,7 +373,10 @@ public abstract class NotificationAssistantService extends NotificationListenerS args.recycle(); args.recycle(); Adjustment adjustment = onNotificationEnqueued(sbn, channel); Adjustment adjustment = onNotificationEnqueued(sbn, channel); if (adjustment != null) { if (adjustment != null) { if (!isBound()) return; if (!isBound()) { Log.w(TAG, "MSG_ON_NOTIFICATION_ENQUEUED: service not bound, skip."); return; } try { try { getNotificationInterface().applyEnqueuedAdjustmentFromAssistant( getNotificationInterface().applyEnqueuedAdjustmentFromAssistant( mWrapper, adjustment); mWrapper, adjustment); Loading services/core/java/com/android/server/notification/ManagedServices.java +6 −1 Original line number Original line Diff line number Diff line Loading @@ -1112,7 +1112,7 @@ abstract public class ManagedServices { binder.linkToDeath(info, 0); binder.linkToDeath(info, 0); added = mServices.add(info); added = mServices.add(info); } catch (RemoteException e) { } catch (RemoteException e) { // already dead Slog.e(TAG, "Failed to linkToDeath, already dead", e); } } } } if (added) { if (added) { Loading Loading @@ -1144,6 +1144,11 @@ abstract public class ManagedServices { } } } } } } @Override public void onNullBinding(ComponentName name) { Slog.v(TAG, "onNullBinding() called with: name = [" + name + "]"); } }; }; if (!mContext.bindServiceAsUser(intent, if (!mContext.bindServiceAsUser(intent, serviceConnection, serviceConnection, Loading services/core/java/com/android/server/notification/NotificationManagerService.java +62 −41 Original line number Original line Diff line number Diff line Loading @@ -251,7 +251,6 @@ import java.util.Objects; import java.util.Set; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; import java.util.function.BiConsumer; import java.util.function.Predicate; /** {@hide} */ /** {@hide} */ public class NotificationManagerService extends SystemService { public class NotificationManagerService extends SystemService { Loading Loading @@ -759,7 +758,7 @@ public class NotificationManagerService extends SystemService { synchronized (mNotificationLock) { synchronized (mNotificationLock) { NotificationRecord r = mNotificationsByKey.get(key); NotificationRecord r = mNotificationsByKey.get(key); if (r == null) { if (r == null) { Log.w(TAG, "No notification with key: " + key); Slog.w(TAG, "No notification with key: " + key); return; return; } } final long now = System.currentTimeMillis(); final long now = System.currentTimeMillis(); Loading Loading @@ -789,7 +788,7 @@ public class NotificationManagerService extends SystemService { synchronized (mNotificationLock) { synchronized (mNotificationLock) { NotificationRecord r = mNotificationsByKey.get(key); NotificationRecord r = mNotificationsByKey.get(key); if (r == null) { if (r == null) { Log.w(TAG, "No notification with key: " + key); Slog.w(TAG, "No notification with key: " + key); return; return; } } final long now = System.currentTimeMillis(); final long now = System.currentTimeMillis(); Loading Loading @@ -3133,7 +3132,7 @@ public class NotificationManagerService extends SystemService { synchronized (mNotificationLock) { synchronized (mNotificationLock) { final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token); final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token); if (info.supportsProfiles()) { if (info.supportsProfiles()) { Log.e(TAG, "Ignoring deprecated cancelNotification(pkg, tag, id) " Slog.e(TAG, "Ignoring deprecated cancelNotification(pkg, tag, id) " + "from " + info.component + "from " + info.component + " use cancelNotification(key) instead."); + " use cancelNotification(key) instead."); } else { } else { Loading Loading @@ -4553,7 +4552,7 @@ public class NotificationManagerService extends SystemService { + ", incomingUserId=" + incomingUserId + ", incomingUserId=" + incomingUserId + ", notificationUid=" + notificationUid + ", notificationUid=" + notificationUid + ", notification=" + notification; + ", notification=" + notification; Log.e(TAG, noChannelStr); Slog.e(TAG, noChannelStr); boolean appNotificationsOff = mPreferencesHelper.getImportance(pkg, notificationUid) boolean appNotificationsOff = mPreferencesHelper.getImportance(pkg, notificationUid) == NotificationManager.IMPORTANCE_NONE; == NotificationManager.IMPORTANCE_NONE; Loading Loading @@ -4650,7 +4649,7 @@ public class NotificationManagerService extends SystemService { android.Manifest.permission.USE_FULL_SCREEN_INTENT, pkg); android.Manifest.permission.USE_FULL_SCREEN_INTENT, pkg); if (fullscreenIntentPermission != PERMISSION_GRANTED) { if (fullscreenIntentPermission != PERMISSION_GRANTED) { notification.fullScreenIntent = null; notification.fullScreenIntent = null; Log.w(TAG, "Package " + pkg + Slog.w(TAG, "Package " + pkg + ": Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission"); ": Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission"); } } } } Loading Loading @@ -5179,7 +5178,7 @@ public class NotificationManagerService extends SystemService { // Ignore summary updates because we don't display most of the information. // Ignore summary updates because we don't display most of the information. if (r.sbn.isGroup() && r.sbn.getNotification().isGroupSummary()) { if (r.sbn.isGroup() && r.sbn.getNotification().isGroupSummary()) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is not interruptive: summary"); + r.getKey() + " is not interruptive: summary"); } } return false; return false; Loading @@ -5187,7 +5186,7 @@ public class NotificationManagerService extends SystemService { if (old == null) { if (old == null) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: new notification"); + r.getKey() + " is interruptive: new notification"); } } return true; return true; Loading @@ -5195,7 +5194,7 @@ public class NotificationManagerService extends SystemService { if (r == null) { if (r == null) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is not interruptive: null"); + r.getKey() + " is not interruptive: null"); } } return false; return false; Loading @@ -5206,7 +5205,7 @@ public class NotificationManagerService extends SystemService { if (oldN.extras == null || newN.extras == null) { if (oldN.extras == null || newN.extras == null) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is not interruptive: no extras"); + r.getKey() + " is not interruptive: no extras"); } } return false; return false; Loading @@ -5216,7 +5215,7 @@ public class NotificationManagerService extends SystemService { // consider them one 'session'. Count them for everything else. // consider them one 'session'. Count them for everything else. if ((r.sbn.getNotification().flags & FLAG_FOREGROUND_SERVICE) != 0) { if ((r.sbn.getNotification().flags & FLAG_FOREGROUND_SERVICE) != 0) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is not interruptive: foreground service"); + r.getKey() + " is not interruptive: foreground service"); } } return false; return false; Loading @@ -5226,11 +5225,11 @@ public class NotificationManagerService extends SystemService { final String newTitle = String.valueOf(newN.extras.get(Notification.EXTRA_TITLE)); final String newTitle = String.valueOf(newN.extras.get(Notification.EXTRA_TITLE)); if (!Objects.equals(oldTitle, newTitle)) { if (!Objects.equals(oldTitle, newTitle)) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: changed title"); + r.getKey() + " is interruptive: changed title"); Log.v(TAG, "INTERRUPTIVENESS: " + String.format(" old title: %s (%s@0x%08x)", Slog.v(TAG, "INTERRUPTIVENESS: " + String.format(" old title: %s (%s@0x%08x)", oldTitle, oldTitle.getClass(), oldTitle.hashCode())); oldTitle, oldTitle.getClass(), oldTitle.hashCode())); Log.v(TAG, "INTERRUPTIVENESS: " + String.format(" new title: %s (%s@0x%08x)", Slog.v(TAG, "INTERRUPTIVENESS: " + String.format(" new title: %s (%s@0x%08x)", newTitle, newTitle.getClass(), newTitle.hashCode())); newTitle, newTitle.getClass(), newTitle.hashCode())); } } return true; return true; Loading @@ -5240,18 +5239,18 @@ public class NotificationManagerService extends SystemService { final String newText = String.valueOf(newN.extras.get(Notification.EXTRA_TEXT)); final String newText = String.valueOf(newN.extras.get(Notification.EXTRA_TEXT)); if (!Objects.equals(oldText, newText)) { if (!Objects.equals(oldText, newText)) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: changed text"); + r.getKey() + " is interruptive: changed text"); Log.v(TAG, "INTERRUPTIVENESS: " + String.format(" old text: %s (%s@0x%08x)", Slog.v(TAG, "INTERRUPTIVENESS: " + String.format(" old text: %s (%s@0x%08x)", oldText, oldText.getClass(), oldText.hashCode())); oldText, oldText.getClass(), oldText.hashCode())); Log.v(TAG, "INTERRUPTIVENESS: " + String.format(" new text: %s (%s@0x%08x)", Slog.v(TAG, "INTERRUPTIVENESS: " + String.format(" new text: %s (%s@0x%08x)", newText, newText.getClass(), newText.hashCode())); newText, newText.getClass(), newText.hashCode())); } } return true; return true; } } if (oldN.hasCompletedProgress() != newN.hasCompletedProgress()) { if (oldN.hasCompletedProgress() != newN.hasCompletedProgress()) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: completed progress"); + r.getKey() + " is interruptive: completed progress"); } } return true; return true; Loading @@ -5259,7 +5258,7 @@ public class NotificationManagerService extends SystemService { // Actions // Actions if (Notification.areActionsVisiblyDifferent(oldN, newN)) { if (Notification.areActionsVisiblyDifferent(oldN, newN)) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: changed actions"); + r.getKey() + " is interruptive: changed actions"); } } return true; return true; Loading @@ -5272,7 +5271,7 @@ public class NotificationManagerService extends SystemService { // Style based comparisons // Style based comparisons if (Notification.areStyledNotificationsVisiblyDifferent(oldB, newB)) { if (Notification.areStyledNotificationsVisiblyDifferent(oldB, newB)) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: styles differ"); + r.getKey() + " is interruptive: styles differ"); } } return true; return true; Loading @@ -5281,7 +5280,7 @@ public class NotificationManagerService extends SystemService { // Remote views // Remote views if (Notification.areRemoteViewsChanged(oldB, newB)) { if (Notification.areRemoteViewsChanged(oldB, newB)) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: remoteviews differ"); + r.getKey() + " is interruptive: remoteviews differ"); } } return true; return true; Loading Loading @@ -5510,12 +5509,12 @@ public class NotificationManagerService extends SystemService { // Ignore summary updates because we don't display most of the information. // Ignore summary updates because we don't display most of the information. if (record.sbn.isGroup() && record.sbn.getNotification().isGroupSummary()) { if (record.sbn.isGroup() && record.sbn.getNotification().isGroupSummary()) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + record.getKey() + " is not interruptive: summary"); + record.getKey() + " is not interruptive: summary"); } } } else { } else { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + record.getKey() + " is interruptive: alerted"); + record.getKey() + " is interruptive: alerted"); } } record.setInterruptive(true); record.setInterruptive(true); Loading Loading @@ -6603,7 +6602,7 @@ public class NotificationManagerService extends SystemService { String pkg = r.sbn.getPackageName(); String pkg = r.sbn.getPackageName(); if (pkg == null) { if (pkg == null) { if (DBG) Log.e(TAG, "No package for group summary: " + r.getKey()); if (DBG) Slog.e(TAG, "No package for group summary: " + r.getKey()); return; return; } } Loading Loading @@ -6862,7 +6861,7 @@ public class NotificationManagerService extends SystemService { return; return; } } } catch (RemoteException re) { } catch (RemoteException re) { if (DBG) Log.e(TAG, "Unable to confirm if it's safe to skip category " if (DBG) Slog.e(TAG, "Unable to confirm if it's safe to skip category " + "restrictions check thus the check will be done anyway"); + "restrictions check thus the check will be done anyway"); } } if (Notification.CATEGORY_CAR_EMERGENCY.equals(notification.category) if (Notification.CATEGORY_CAR_EMERGENCY.equals(notification.category) Loading Loading @@ -7104,7 +7103,7 @@ public class NotificationManagerService extends SystemService { canUseManagedServices = false; canUseManagedServices = false; } } } catch (RemoteException e) { } catch (RemoteException e) { Log.e(TAG, "can't talk to pm", e); Slog.e(TAG, "can't talk to pm", e); } } } } Loading Loading @@ -7247,21 +7246,29 @@ public class NotificationManagerService extends SystemService { try { try { assistant.onNotificationsSeen(keys); assistant.onNotificationsSeen(keys); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (seen): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (seen): " + assistant, ex); } } } } @GuardedBy("mNotificationLock") @GuardedBy("mNotificationLock") private void onNotificationEnqueuedLocked(final NotificationRecord r) { private void onNotificationEnqueuedLocked(final NotificationRecord r) { final boolean debug = isVerboseLogEnabled(); if (debug) { Slog.v(TAG, "onNotificationEnqueuedLocked() called with: r = [" + r + "]"); } final StatusBarNotification sbn = r.sbn; final StatusBarNotification sbn = r.sbn; notifyAssistantLocked( notifyAssistantLocked( sbn, sbn, true /* sameUserOnly */, true /* sameUserOnly */, (assistant, sbnHolder) -> { (assistant, sbnHolder) -> { try { try { if (debug) { Slog.v(TAG, "calling onNotificationEnqueuedWithChannel " + sbnHolder); } assistant.onNotificationEnqueuedWithChannel(sbnHolder, r.getChannel()); assistant.onNotificationEnqueuedWithChannel(sbnHolder, r.getChannel()); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (enqueued): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (enqueued): " + assistant, ex); } } }); }); } } Loading @@ -7279,7 +7286,7 @@ public class NotificationManagerService extends SystemService { try { try { assistant.onNotificationExpansionChanged(key, isUserAction, isExpanded); assistant.onNotificationExpansionChanged(key, isUserAction, isExpanded); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (expanded): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (expanded): " + assistant, ex); } } }); }); } } Loading @@ -7295,7 +7302,7 @@ public class NotificationManagerService extends SystemService { try { try { assistant.onNotificationDirectReply(key); assistant.onNotificationDirectReply(key); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (expanded): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (expanded): " + assistant, ex); } } }); }); } } Loading @@ -7316,7 +7323,7 @@ public class NotificationManagerService extends SystemService { ? NotificationAssistantService.SOURCE_FROM_ASSISTANT ? NotificationAssistantService.SOURCE_FROM_ASSISTANT : NotificationAssistantService.SOURCE_FROM_APP); : NotificationAssistantService.SOURCE_FROM_APP); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); } } }); }); } } Loading @@ -7338,7 +7345,7 @@ public class NotificationManagerService extends SystemService { ? NotificationAssistantService.SOURCE_FROM_ASSISTANT ? NotificationAssistantService.SOURCE_FROM_ASSISTANT : NotificationAssistantService.SOURCE_FROM_APP); : NotificationAssistantService.SOURCE_FROM_APP); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); } } }); }); } } Loading @@ -7358,7 +7365,7 @@ public class NotificationManagerService extends SystemService { assistant.onNotificationSnoozedUntilContext( assistant.onNotificationSnoozedUntilContext( sbnHolder, snoozeCriterionId); sbnHolder, snoozeCriterionId); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); } } }); }); } } Loading @@ -7380,9 +7387,19 @@ public class NotificationManagerService extends SystemService { TrimCache trimCache = new TrimCache(sbn); TrimCache trimCache = new TrimCache(sbn); // There should be only one, but it's a list, so while we enforce // There should be only one, but it's a list, so while we enforce // singularity elsewhere, we keep it general here, to avoid surprises. // singularity elsewhere, we keep it general here, to avoid surprises. final boolean debug = isVerboseLogEnabled(); if (debug) { Slog.v(TAG, "notifyAssistantLocked() called with: sbn = [" + sbn + "], sameUserOnly = [" + sameUserOnly + "], callback = [" + callback + "]"); } for (final ManagedServiceInfo info : NotificationAssistants.this.getServices()) { for (final ManagedServiceInfo info : NotificationAssistants.this.getServices()) { boolean sbnVisible = isVisibleToListener(sbn, info) boolean sbnVisible = isVisibleToListener(sbn, info) && (!sameUserOnly || info.isSameUser(sbn.getUserId())); && (!sameUserOnly || info.isSameUser(sbn.getUserId())); if (debug) { Slog.v(TAG, "notifyAssistantLocked info=" + info + " snbVisible=" + sbnVisible); } if (!sbnVisible) { if (!sbnVisible) { continue; continue; } } Loading Loading @@ -7436,6 +7453,10 @@ public class NotificationManagerService extends SystemService { } } } } } } private boolean isVerboseLogEnabled() { return Log.isLoggable("notification_assistant", Log.VERBOSE); } } } public class NotificationListeners extends ManagedServices { public class NotificationListeners extends ManagedServices { Loading Loading @@ -7530,7 +7551,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onStatusBarIconsBehaviorChanged(hideSilentStatusIcons); listener.onStatusBarIconsBehaviorChanged(hideSilentStatusIcons); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener " Slog.e(TAG, "unable to notify listener " + "(hideSilentStatusIcons): " + listener, ex); + "(hideSilentStatusIcons): " + listener, ex); } } }); }); Loading Loading @@ -7824,7 +7845,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onNotificationPosted(sbnHolder, rankingUpdate); listener.onNotificationPosted(sbnHolder, rankingUpdate); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (posted): " + listener, ex); Slog.e(TAG, "unable to notify listener (posted): " + listener, ex); } } } } Loading @@ -7838,7 +7859,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onNotificationRemoved(sbnHolder, rankingUpdate, stats, reason); listener.onNotificationRemoved(sbnHolder, rankingUpdate, stats, reason); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (removed): " + listener, ex); Slog.e(TAG, "unable to notify listener (removed): " + listener, ex); } } } } Loading @@ -7848,7 +7869,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onNotificationRankingUpdate(rankingUpdate); listener.onNotificationRankingUpdate(rankingUpdate); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (ranking update): " + listener, ex); Slog.e(TAG, "unable to notify listener (ranking update): " + listener, ex); } } } } Loading @@ -7857,7 +7878,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onListenerHintsChanged(hints); listener.onListenerHintsChanged(hints); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (listener hints): " + listener, ex); Slog.e(TAG, "unable to notify listener (listener hints): " + listener, ex); } } } } Loading @@ -7867,7 +7888,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onInterruptionFilterChanged(interruptionFilter); listener.onInterruptionFilterChanged(interruptionFilter); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (interruption filter): " + listener, ex); Slog.e(TAG, "unable to notify listener (interruption filter): " + listener, ex); } } } } Loading @@ -7878,7 +7899,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onNotificationChannelModification(pkg, user, channel, modificationType); listener.onNotificationChannelModification(pkg, user, channel, modificationType); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (channel changed): " + listener, ex); Slog.e(TAG, "unable to notify listener (channel changed): " + listener, ex); } } } } Loading @@ -7889,7 +7910,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onNotificationChannelGroupModification(pkg, user, group, modificationType); listener.onNotificationChannelGroupModification(pkg, user, group, modificationType); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (channel group changed): " + listener, ex); Slog.e(TAG, "unable to notify listener (channel group changed): " + listener, ex); } } } } Loading Loading
core/java/android/service/notification/NotificationAssistantService.java +4 −1 Original line number Original line Diff line number Diff line Loading @@ -373,7 +373,10 @@ public abstract class NotificationAssistantService extends NotificationListenerS args.recycle(); args.recycle(); Adjustment adjustment = onNotificationEnqueued(sbn, channel); Adjustment adjustment = onNotificationEnqueued(sbn, channel); if (adjustment != null) { if (adjustment != null) { if (!isBound()) return; if (!isBound()) { Log.w(TAG, "MSG_ON_NOTIFICATION_ENQUEUED: service not bound, skip."); return; } try { try { getNotificationInterface().applyEnqueuedAdjustmentFromAssistant( getNotificationInterface().applyEnqueuedAdjustmentFromAssistant( mWrapper, adjustment); mWrapper, adjustment); Loading
services/core/java/com/android/server/notification/ManagedServices.java +6 −1 Original line number Original line Diff line number Diff line Loading @@ -1112,7 +1112,7 @@ abstract public class ManagedServices { binder.linkToDeath(info, 0); binder.linkToDeath(info, 0); added = mServices.add(info); added = mServices.add(info); } catch (RemoteException e) { } catch (RemoteException e) { // already dead Slog.e(TAG, "Failed to linkToDeath, already dead", e); } } } } if (added) { if (added) { Loading Loading @@ -1144,6 +1144,11 @@ abstract public class ManagedServices { } } } } } } @Override public void onNullBinding(ComponentName name) { Slog.v(TAG, "onNullBinding() called with: name = [" + name + "]"); } }; }; if (!mContext.bindServiceAsUser(intent, if (!mContext.bindServiceAsUser(intent, serviceConnection, serviceConnection, Loading
services/core/java/com/android/server/notification/NotificationManagerService.java +62 −41 Original line number Original line Diff line number Diff line Loading @@ -251,7 +251,6 @@ import java.util.Objects; import java.util.Set; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; import java.util.function.BiConsumer; import java.util.function.Predicate; /** {@hide} */ /** {@hide} */ public class NotificationManagerService extends SystemService { public class NotificationManagerService extends SystemService { Loading Loading @@ -759,7 +758,7 @@ public class NotificationManagerService extends SystemService { synchronized (mNotificationLock) { synchronized (mNotificationLock) { NotificationRecord r = mNotificationsByKey.get(key); NotificationRecord r = mNotificationsByKey.get(key); if (r == null) { if (r == null) { Log.w(TAG, "No notification with key: " + key); Slog.w(TAG, "No notification with key: " + key); return; return; } } final long now = System.currentTimeMillis(); final long now = System.currentTimeMillis(); Loading Loading @@ -789,7 +788,7 @@ public class NotificationManagerService extends SystemService { synchronized (mNotificationLock) { synchronized (mNotificationLock) { NotificationRecord r = mNotificationsByKey.get(key); NotificationRecord r = mNotificationsByKey.get(key); if (r == null) { if (r == null) { Log.w(TAG, "No notification with key: " + key); Slog.w(TAG, "No notification with key: " + key); return; return; } } final long now = System.currentTimeMillis(); final long now = System.currentTimeMillis(); Loading Loading @@ -3133,7 +3132,7 @@ public class NotificationManagerService extends SystemService { synchronized (mNotificationLock) { synchronized (mNotificationLock) { final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token); final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token); if (info.supportsProfiles()) { if (info.supportsProfiles()) { Log.e(TAG, "Ignoring deprecated cancelNotification(pkg, tag, id) " Slog.e(TAG, "Ignoring deprecated cancelNotification(pkg, tag, id) " + "from " + info.component + "from " + info.component + " use cancelNotification(key) instead."); + " use cancelNotification(key) instead."); } else { } else { Loading Loading @@ -4553,7 +4552,7 @@ public class NotificationManagerService extends SystemService { + ", incomingUserId=" + incomingUserId + ", incomingUserId=" + incomingUserId + ", notificationUid=" + notificationUid + ", notificationUid=" + notificationUid + ", notification=" + notification; + ", notification=" + notification; Log.e(TAG, noChannelStr); Slog.e(TAG, noChannelStr); boolean appNotificationsOff = mPreferencesHelper.getImportance(pkg, notificationUid) boolean appNotificationsOff = mPreferencesHelper.getImportance(pkg, notificationUid) == NotificationManager.IMPORTANCE_NONE; == NotificationManager.IMPORTANCE_NONE; Loading Loading @@ -4650,7 +4649,7 @@ public class NotificationManagerService extends SystemService { android.Manifest.permission.USE_FULL_SCREEN_INTENT, pkg); android.Manifest.permission.USE_FULL_SCREEN_INTENT, pkg); if (fullscreenIntentPermission != PERMISSION_GRANTED) { if (fullscreenIntentPermission != PERMISSION_GRANTED) { notification.fullScreenIntent = null; notification.fullScreenIntent = null; Log.w(TAG, "Package " + pkg + Slog.w(TAG, "Package " + pkg + ": Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission"); ": Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission"); } } } } Loading Loading @@ -5179,7 +5178,7 @@ public class NotificationManagerService extends SystemService { // Ignore summary updates because we don't display most of the information. // Ignore summary updates because we don't display most of the information. if (r.sbn.isGroup() && r.sbn.getNotification().isGroupSummary()) { if (r.sbn.isGroup() && r.sbn.getNotification().isGroupSummary()) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is not interruptive: summary"); + r.getKey() + " is not interruptive: summary"); } } return false; return false; Loading @@ -5187,7 +5186,7 @@ public class NotificationManagerService extends SystemService { if (old == null) { if (old == null) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: new notification"); + r.getKey() + " is interruptive: new notification"); } } return true; return true; Loading @@ -5195,7 +5194,7 @@ public class NotificationManagerService extends SystemService { if (r == null) { if (r == null) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is not interruptive: null"); + r.getKey() + " is not interruptive: null"); } } return false; return false; Loading @@ -5206,7 +5205,7 @@ public class NotificationManagerService extends SystemService { if (oldN.extras == null || newN.extras == null) { if (oldN.extras == null || newN.extras == null) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is not interruptive: no extras"); + r.getKey() + " is not interruptive: no extras"); } } return false; return false; Loading @@ -5216,7 +5215,7 @@ public class NotificationManagerService extends SystemService { // consider them one 'session'. Count them for everything else. // consider them one 'session'. Count them for everything else. if ((r.sbn.getNotification().flags & FLAG_FOREGROUND_SERVICE) != 0) { if ((r.sbn.getNotification().flags & FLAG_FOREGROUND_SERVICE) != 0) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is not interruptive: foreground service"); + r.getKey() + " is not interruptive: foreground service"); } } return false; return false; Loading @@ -5226,11 +5225,11 @@ public class NotificationManagerService extends SystemService { final String newTitle = String.valueOf(newN.extras.get(Notification.EXTRA_TITLE)); final String newTitle = String.valueOf(newN.extras.get(Notification.EXTRA_TITLE)); if (!Objects.equals(oldTitle, newTitle)) { if (!Objects.equals(oldTitle, newTitle)) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: changed title"); + r.getKey() + " is interruptive: changed title"); Log.v(TAG, "INTERRUPTIVENESS: " + String.format(" old title: %s (%s@0x%08x)", Slog.v(TAG, "INTERRUPTIVENESS: " + String.format(" old title: %s (%s@0x%08x)", oldTitle, oldTitle.getClass(), oldTitle.hashCode())); oldTitle, oldTitle.getClass(), oldTitle.hashCode())); Log.v(TAG, "INTERRUPTIVENESS: " + String.format(" new title: %s (%s@0x%08x)", Slog.v(TAG, "INTERRUPTIVENESS: " + String.format(" new title: %s (%s@0x%08x)", newTitle, newTitle.getClass(), newTitle.hashCode())); newTitle, newTitle.getClass(), newTitle.hashCode())); } } return true; return true; Loading @@ -5240,18 +5239,18 @@ public class NotificationManagerService extends SystemService { final String newText = String.valueOf(newN.extras.get(Notification.EXTRA_TEXT)); final String newText = String.valueOf(newN.extras.get(Notification.EXTRA_TEXT)); if (!Objects.equals(oldText, newText)) { if (!Objects.equals(oldText, newText)) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: changed text"); + r.getKey() + " is interruptive: changed text"); Log.v(TAG, "INTERRUPTIVENESS: " + String.format(" old text: %s (%s@0x%08x)", Slog.v(TAG, "INTERRUPTIVENESS: " + String.format(" old text: %s (%s@0x%08x)", oldText, oldText.getClass(), oldText.hashCode())); oldText, oldText.getClass(), oldText.hashCode())); Log.v(TAG, "INTERRUPTIVENESS: " + String.format(" new text: %s (%s@0x%08x)", Slog.v(TAG, "INTERRUPTIVENESS: " + String.format(" new text: %s (%s@0x%08x)", newText, newText.getClass(), newText.hashCode())); newText, newText.getClass(), newText.hashCode())); } } return true; return true; } } if (oldN.hasCompletedProgress() != newN.hasCompletedProgress()) { if (oldN.hasCompletedProgress() != newN.hasCompletedProgress()) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: completed progress"); + r.getKey() + " is interruptive: completed progress"); } } return true; return true; Loading @@ -5259,7 +5258,7 @@ public class NotificationManagerService extends SystemService { // Actions // Actions if (Notification.areActionsVisiblyDifferent(oldN, newN)) { if (Notification.areActionsVisiblyDifferent(oldN, newN)) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: changed actions"); + r.getKey() + " is interruptive: changed actions"); } } return true; return true; Loading @@ -5272,7 +5271,7 @@ public class NotificationManagerService extends SystemService { // Style based comparisons // Style based comparisons if (Notification.areStyledNotificationsVisiblyDifferent(oldB, newB)) { if (Notification.areStyledNotificationsVisiblyDifferent(oldB, newB)) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: styles differ"); + r.getKey() + " is interruptive: styles differ"); } } return true; return true; Loading @@ -5281,7 +5280,7 @@ public class NotificationManagerService extends SystemService { // Remote views // Remote views if (Notification.areRemoteViewsChanged(oldB, newB)) { if (Notification.areRemoteViewsChanged(oldB, newB)) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + r.getKey() + " is interruptive: remoteviews differ"); + r.getKey() + " is interruptive: remoteviews differ"); } } return true; return true; Loading Loading @@ -5510,12 +5509,12 @@ public class NotificationManagerService extends SystemService { // Ignore summary updates because we don't display most of the information. // Ignore summary updates because we don't display most of the information. if (record.sbn.isGroup() && record.sbn.getNotification().isGroupSummary()) { if (record.sbn.isGroup() && record.sbn.getNotification().isGroupSummary()) { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + record.getKey() + " is not interruptive: summary"); + record.getKey() + " is not interruptive: summary"); } } } else { } else { if (DEBUG_INTERRUPTIVENESS) { if (DEBUG_INTERRUPTIVENESS) { Log.v(TAG, "INTERRUPTIVENESS: " Slog.v(TAG, "INTERRUPTIVENESS: " + record.getKey() + " is interruptive: alerted"); + record.getKey() + " is interruptive: alerted"); } } record.setInterruptive(true); record.setInterruptive(true); Loading Loading @@ -6603,7 +6602,7 @@ public class NotificationManagerService extends SystemService { String pkg = r.sbn.getPackageName(); String pkg = r.sbn.getPackageName(); if (pkg == null) { if (pkg == null) { if (DBG) Log.e(TAG, "No package for group summary: " + r.getKey()); if (DBG) Slog.e(TAG, "No package for group summary: " + r.getKey()); return; return; } } Loading Loading @@ -6862,7 +6861,7 @@ public class NotificationManagerService extends SystemService { return; return; } } } catch (RemoteException re) { } catch (RemoteException re) { if (DBG) Log.e(TAG, "Unable to confirm if it's safe to skip category " if (DBG) Slog.e(TAG, "Unable to confirm if it's safe to skip category " + "restrictions check thus the check will be done anyway"); + "restrictions check thus the check will be done anyway"); } } if (Notification.CATEGORY_CAR_EMERGENCY.equals(notification.category) if (Notification.CATEGORY_CAR_EMERGENCY.equals(notification.category) Loading Loading @@ -7104,7 +7103,7 @@ public class NotificationManagerService extends SystemService { canUseManagedServices = false; canUseManagedServices = false; } } } catch (RemoteException e) { } catch (RemoteException e) { Log.e(TAG, "can't talk to pm", e); Slog.e(TAG, "can't talk to pm", e); } } } } Loading Loading @@ -7247,21 +7246,29 @@ public class NotificationManagerService extends SystemService { try { try { assistant.onNotificationsSeen(keys); assistant.onNotificationsSeen(keys); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (seen): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (seen): " + assistant, ex); } } } } @GuardedBy("mNotificationLock") @GuardedBy("mNotificationLock") private void onNotificationEnqueuedLocked(final NotificationRecord r) { private void onNotificationEnqueuedLocked(final NotificationRecord r) { final boolean debug = isVerboseLogEnabled(); if (debug) { Slog.v(TAG, "onNotificationEnqueuedLocked() called with: r = [" + r + "]"); } final StatusBarNotification sbn = r.sbn; final StatusBarNotification sbn = r.sbn; notifyAssistantLocked( notifyAssistantLocked( sbn, sbn, true /* sameUserOnly */, true /* sameUserOnly */, (assistant, sbnHolder) -> { (assistant, sbnHolder) -> { try { try { if (debug) { Slog.v(TAG, "calling onNotificationEnqueuedWithChannel " + sbnHolder); } assistant.onNotificationEnqueuedWithChannel(sbnHolder, r.getChannel()); assistant.onNotificationEnqueuedWithChannel(sbnHolder, r.getChannel()); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (enqueued): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (enqueued): " + assistant, ex); } } }); }); } } Loading @@ -7279,7 +7286,7 @@ public class NotificationManagerService extends SystemService { try { try { assistant.onNotificationExpansionChanged(key, isUserAction, isExpanded); assistant.onNotificationExpansionChanged(key, isUserAction, isExpanded); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (expanded): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (expanded): " + assistant, ex); } } }); }); } } Loading @@ -7295,7 +7302,7 @@ public class NotificationManagerService extends SystemService { try { try { assistant.onNotificationDirectReply(key); assistant.onNotificationDirectReply(key); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (expanded): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (expanded): " + assistant, ex); } } }); }); } } Loading @@ -7316,7 +7323,7 @@ public class NotificationManagerService extends SystemService { ? NotificationAssistantService.SOURCE_FROM_ASSISTANT ? NotificationAssistantService.SOURCE_FROM_ASSISTANT : NotificationAssistantService.SOURCE_FROM_APP); : NotificationAssistantService.SOURCE_FROM_APP); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); } } }); }); } } Loading @@ -7338,7 +7345,7 @@ public class NotificationManagerService extends SystemService { ? NotificationAssistantService.SOURCE_FROM_ASSISTANT ? NotificationAssistantService.SOURCE_FROM_ASSISTANT : NotificationAssistantService.SOURCE_FROM_APP); : NotificationAssistantService.SOURCE_FROM_APP); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); } } }); }); } } Loading @@ -7358,7 +7365,7 @@ public class NotificationManagerService extends SystemService { assistant.onNotificationSnoozedUntilContext( assistant.onNotificationSnoozedUntilContext( sbnHolder, snoozeCriterionId); sbnHolder, snoozeCriterionId); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); Slog.e(TAG, "unable to notify assistant (snoozed): " + assistant, ex); } } }); }); } } Loading @@ -7380,9 +7387,19 @@ public class NotificationManagerService extends SystemService { TrimCache trimCache = new TrimCache(sbn); TrimCache trimCache = new TrimCache(sbn); // There should be only one, but it's a list, so while we enforce // There should be only one, but it's a list, so while we enforce // singularity elsewhere, we keep it general here, to avoid surprises. // singularity elsewhere, we keep it general here, to avoid surprises. final boolean debug = isVerboseLogEnabled(); if (debug) { Slog.v(TAG, "notifyAssistantLocked() called with: sbn = [" + sbn + "], sameUserOnly = [" + sameUserOnly + "], callback = [" + callback + "]"); } for (final ManagedServiceInfo info : NotificationAssistants.this.getServices()) { for (final ManagedServiceInfo info : NotificationAssistants.this.getServices()) { boolean sbnVisible = isVisibleToListener(sbn, info) boolean sbnVisible = isVisibleToListener(sbn, info) && (!sameUserOnly || info.isSameUser(sbn.getUserId())); && (!sameUserOnly || info.isSameUser(sbn.getUserId())); if (debug) { Slog.v(TAG, "notifyAssistantLocked info=" + info + " snbVisible=" + sbnVisible); } if (!sbnVisible) { if (!sbnVisible) { continue; continue; } } Loading Loading @@ -7436,6 +7453,10 @@ public class NotificationManagerService extends SystemService { } } } } } } private boolean isVerboseLogEnabled() { return Log.isLoggable("notification_assistant", Log.VERBOSE); } } } public class NotificationListeners extends ManagedServices { public class NotificationListeners extends ManagedServices { Loading Loading @@ -7530,7 +7551,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onStatusBarIconsBehaviorChanged(hideSilentStatusIcons); listener.onStatusBarIconsBehaviorChanged(hideSilentStatusIcons); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener " Slog.e(TAG, "unable to notify listener " + "(hideSilentStatusIcons): " + listener, ex); + "(hideSilentStatusIcons): " + listener, ex); } } }); }); Loading Loading @@ -7824,7 +7845,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onNotificationPosted(sbnHolder, rankingUpdate); listener.onNotificationPosted(sbnHolder, rankingUpdate); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (posted): " + listener, ex); Slog.e(TAG, "unable to notify listener (posted): " + listener, ex); } } } } Loading @@ -7838,7 +7859,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onNotificationRemoved(sbnHolder, rankingUpdate, stats, reason); listener.onNotificationRemoved(sbnHolder, rankingUpdate, stats, reason); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (removed): " + listener, ex); Slog.e(TAG, "unable to notify listener (removed): " + listener, ex); } } } } Loading @@ -7848,7 +7869,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onNotificationRankingUpdate(rankingUpdate); listener.onNotificationRankingUpdate(rankingUpdate); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (ranking update): " + listener, ex); Slog.e(TAG, "unable to notify listener (ranking update): " + listener, ex); } } } } Loading @@ -7857,7 +7878,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onListenerHintsChanged(hints); listener.onListenerHintsChanged(hints); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (listener hints): " + listener, ex); Slog.e(TAG, "unable to notify listener (listener hints): " + listener, ex); } } } } Loading @@ -7867,7 +7888,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onInterruptionFilterChanged(interruptionFilter); listener.onInterruptionFilterChanged(interruptionFilter); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (interruption filter): " + listener, ex); Slog.e(TAG, "unable to notify listener (interruption filter): " + listener, ex); } } } } Loading @@ -7878,7 +7899,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onNotificationChannelModification(pkg, user, channel, modificationType); listener.onNotificationChannelModification(pkg, user, channel, modificationType); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (channel changed): " + listener, ex); Slog.e(TAG, "unable to notify listener (channel changed): " + listener, ex); } } } } Loading @@ -7889,7 +7910,7 @@ public class NotificationManagerService extends SystemService { try { try { listener.onNotificationChannelGroupModification(pkg, user, group, modificationType); listener.onNotificationChannelGroupModification(pkg, user, group, modificationType); } catch (RemoteException ex) { } catch (RemoteException ex) { Log.e(TAG, "unable to notify listener (channel group changed): " + listener, ex); Slog.e(TAG, "unable to notify listener (channel group changed): " + listener, ex); } } } } Loading