Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d80c1716 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add some logs to help debug a NotificationAssistant issue"

parents 0a6dc753 180a9c44
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -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);
+6 −1
Original line number Original line Diff line number Diff line
@@ -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) {
@@ -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,
+62 −41
Original line number Original line Diff line number Diff line
@@ -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 {
@@ -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();
@@ -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();
@@ -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 {
@@ -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;


@@ -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");
            }
            }
        }
        }
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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);
@@ -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;
        }
        }


@@ -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)
@@ -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);
            }
            }
        }
        }


@@ -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);
                        }
                        }
                    });
                    });
        }
        }
@@ -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);
                        }
                        }
                    });
                    });
        }
        }
@@ -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);
                        }
                        }
                    });
                    });
        }
        }
@@ -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);
                        }
                        }
                    });
                    });
        }
        }
@@ -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);
                        }
                        }
                    });
                    });
        }
        }
@@ -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);
                        }
                        }
                    });
                    });
        }
        }
@@ -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;
                }
                }
@@ -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 {
@@ -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);
                    }
                    }
                });
                });
@@ -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);
            }
            }
        }
        }


@@ -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);
            }
            }
        }
        }


@@ -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);
            }
            }
        }
        }


@@ -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);
            }
            }
        }
        }


@@ -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);
            }
            }
        }
        }


@@ -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);
            }
            }
        }
        }


@@ -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);
            }
            }
        }
        }