Loading api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -39571,6 +39571,7 @@ package android.service.notification { method public final deprecated void cancelNotification(java.lang.String, java.lang.String, int); method public final void cancelNotification(java.lang.String); method public final void cancelNotifications(java.lang.String[]); method public final void clearRequestedListenerHints(); method public android.service.notification.StatusBarNotification[] getActiveNotifications(); method public android.service.notification.StatusBarNotification[] getActiveNotifications(java.lang.String[]); method public final int getCurrentInterruptionFilter(); core/java/android/app/INotificationManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -112,6 +112,7 @@ interface INotificationManager ParceledListSlice getActiveNotificationsFromListener(in INotificationListener token, in String[] keys, int trim); ParceledListSlice getSnoozedNotificationsFromListener(in INotificationListener token, int trim); void clearRequestedListenerHints(in INotificationListener token); void requestHintsFromListener(in INotificationListener token, int hints); int getHintsFromListener(in INotificationListener token); void requestInterruptionFilterFromListener(in INotificationListener token, int interruptionFilter); Loading core/java/android/service/notification/NotificationListenerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -988,6 +988,21 @@ public abstract class NotificationListenerService extends Service { } } /** * Clears listener hints set via {@link #getCurrentListenerHints()}. * * <p>The service should wait for the {@link #onListenerConnected()} event * before performing this operation. */ public final void clearRequestedListenerHints() { if (!isBound()) return; try { getNotificationInterface().clearRequestedListenerHints(mWrapper); } catch (android.os.RemoteException ex) { Log.v(TAG, "Unable to contact notification manager", ex); } } /** * Sets the desired {@link #getCurrentListenerHints() listener hints}. * Loading core/proto/android/service/notification.proto +2 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,8 @@ message ListenersDisablingEffectsProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; optional int32 hint = 1; repeated ManagedServiceInfoProto listeners = 2; reserved 2; // ManagedServiceInfoProto listeners repeated android.content.ComponentNameProto listener_components = 3; } message ManagedServiceInfoProto { Loading services/core/java/com/android/server/notification/NotificationManagerService.java +32 −18 Original line number Diff line number Diff line Loading @@ -345,7 +345,7 @@ public class NotificationManagerService extends SystemService { private String mSoundNotificationKey; private String mVibrateNotificationKey; private final SparseArray<ArraySet<ManagedServiceInfo>> mListenersDisablingEffects = private final SparseArray<ArraySet<ComponentName>> mListenersDisablingEffects = new SparseArray<>(); private List<ComponentName> mEffectsSuppressors = new ArrayList<>(); private int mListenerHints; // right now, all hints are global Loading Loading @@ -1784,10 +1784,10 @@ public class NotificationManagerService extends SystemService { private ArrayList<ComponentName> getSuppressors() { ArrayList<ComponentName> names = new ArrayList<ComponentName>(); for (int i = mListenersDisablingEffects.size() - 1; i >= 0; --i) { ArraySet<ManagedServiceInfo> serviceInfoList = mListenersDisablingEffects.valueAt(i); ArraySet<ComponentName> serviceInfoList = mListenersDisablingEffects.valueAt(i); for (ManagedServiceInfo info : serviceInfoList) { names.add(info.component); for (ComponentName info : serviceInfoList) { names.add(info); } } Loading @@ -1803,11 +1803,10 @@ public class NotificationManagerService extends SystemService { for (int i = mListenersDisablingEffects.size() - 1; i >= 0; --i) { final int hint = mListenersDisablingEffects.keyAt(i); final ArraySet<ManagedServiceInfo> listeners = mListenersDisablingEffects.valueAt(i); final ArraySet<ComponentName> listeners = mListenersDisablingEffects.valueAt(i); if (hints == 0 || (hint & hints) == hint) { removed = removed || listeners.remove(info); removed |= listeners.remove(info.component); } } Loading @@ -1830,18 +1829,18 @@ public class NotificationManagerService extends SystemService { private void addDisabledHint(ManagedServiceInfo info, int hint) { if (mListenersDisablingEffects.indexOfKey(hint) < 0) { mListenersDisablingEffects.put(hint, new ArraySet<ManagedServiceInfo>()); mListenersDisablingEffects.put(hint, new ArraySet<>()); } ArraySet<ManagedServiceInfo> hintListeners = mListenersDisablingEffects.get(hint); hintListeners.add(info); ArraySet<ComponentName> hintListeners = mListenersDisablingEffects.get(hint); hintListeners.add(info.component); } private int calculateHints() { int hints = 0; for (int i = mListenersDisablingEffects.size() - 1; i >= 0; --i) { int hint = mListenersDisablingEffects.keyAt(i); ArraySet<ManagedServiceInfo> serviceInfoList = mListenersDisablingEffects.valueAt(i); ArraySet<ComponentName> serviceInfoList = mListenersDisablingEffects.valueAt(i); if (!serviceInfoList.isEmpty()) { hints |= hint; Loading Loading @@ -2954,6 +2953,21 @@ public class NotificationManagerService extends SystemService { } } @Override public void clearRequestedListenerHints(INotificationListener token) { final long identity = Binder.clearCallingIdentity(); try { synchronized (mNotificationLock) { final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token); removeDisabledHints(info); updateListenerHintsLocked(); updateEffectsSuppressorLocked(); } } finally { Binder.restoreCallingIdentity(identity); } } @Override public void requestHintsFromListener(INotificationListener token, int hints) { final long identity = Binder.clearCallingIdentity(); Loading Loading @@ -3860,11 +3874,12 @@ public class NotificationManagerService extends SystemService { proto.write( ListenersDisablingEffectsProto.HINT, mListenersDisablingEffects.keyAt(i)); final ArraySet<ManagedServiceInfo> listeners = final ArraySet<ComponentName> listeners = mListenersDisablingEffects.valueAt(i); for (int j = 0; j < listeners.size(); j++) { final ManagedServiceInfo listener = listeners.valueAt(i); listener.writeToProto(proto, ListenersDisablingEffectsProto.LISTENERS, null); final ComponentName componentName = listeners.valueAt(i); componentName.writeToProto(proto, ListenersDisablingEffectsProto.LISTENER_COMPONENTS); } proto.end(effectsToken); Loading Loading @@ -4003,15 +4018,14 @@ public class NotificationManagerService extends SystemService { if (i > 0) pw.print(';'); pw.print("hint[" + hint + "]:"); final ArraySet<ManagedServiceInfo> listeners = mListenersDisablingEffects.valueAt(i); final ArraySet<ComponentName> listeners = mListenersDisablingEffects.valueAt(i); final int listenerSize = listeners.size(); for (int j = 0; j < listenerSize; j++) { if (i > 0) pw.print(','); final ManagedServiceInfo listener = listeners.valueAt(i); final ComponentName listener = listeners.valueAt(i); if (listener != null) { pw.print(listener.component); pw.print(listener); } } } Loading Loading
api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -39571,6 +39571,7 @@ package android.service.notification { method public final deprecated void cancelNotification(java.lang.String, java.lang.String, int); method public final void cancelNotification(java.lang.String); method public final void cancelNotifications(java.lang.String[]); method public final void clearRequestedListenerHints(); method public android.service.notification.StatusBarNotification[] getActiveNotifications(); method public android.service.notification.StatusBarNotification[] getActiveNotifications(java.lang.String[]); method public final int getCurrentInterruptionFilter();
core/java/android/app/INotificationManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -112,6 +112,7 @@ interface INotificationManager ParceledListSlice getActiveNotificationsFromListener(in INotificationListener token, in String[] keys, int trim); ParceledListSlice getSnoozedNotificationsFromListener(in INotificationListener token, int trim); void clearRequestedListenerHints(in INotificationListener token); void requestHintsFromListener(in INotificationListener token, int hints); int getHintsFromListener(in INotificationListener token); void requestInterruptionFilterFromListener(in INotificationListener token, int interruptionFilter); Loading
core/java/android/service/notification/NotificationListenerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -988,6 +988,21 @@ public abstract class NotificationListenerService extends Service { } } /** * Clears listener hints set via {@link #getCurrentListenerHints()}. * * <p>The service should wait for the {@link #onListenerConnected()} event * before performing this operation. */ public final void clearRequestedListenerHints() { if (!isBound()) return; try { getNotificationInterface().clearRequestedListenerHints(mWrapper); } catch (android.os.RemoteException ex) { Log.v(TAG, "Unable to contact notification manager", ex); } } /** * Sets the desired {@link #getCurrentListenerHints() listener hints}. * Loading
core/proto/android/service/notification.proto +2 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,8 @@ message ListenersDisablingEffectsProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; optional int32 hint = 1; repeated ManagedServiceInfoProto listeners = 2; reserved 2; // ManagedServiceInfoProto listeners repeated android.content.ComponentNameProto listener_components = 3; } message ManagedServiceInfoProto { Loading
services/core/java/com/android/server/notification/NotificationManagerService.java +32 −18 Original line number Diff line number Diff line Loading @@ -345,7 +345,7 @@ public class NotificationManagerService extends SystemService { private String mSoundNotificationKey; private String mVibrateNotificationKey; private final SparseArray<ArraySet<ManagedServiceInfo>> mListenersDisablingEffects = private final SparseArray<ArraySet<ComponentName>> mListenersDisablingEffects = new SparseArray<>(); private List<ComponentName> mEffectsSuppressors = new ArrayList<>(); private int mListenerHints; // right now, all hints are global Loading Loading @@ -1784,10 +1784,10 @@ public class NotificationManagerService extends SystemService { private ArrayList<ComponentName> getSuppressors() { ArrayList<ComponentName> names = new ArrayList<ComponentName>(); for (int i = mListenersDisablingEffects.size() - 1; i >= 0; --i) { ArraySet<ManagedServiceInfo> serviceInfoList = mListenersDisablingEffects.valueAt(i); ArraySet<ComponentName> serviceInfoList = mListenersDisablingEffects.valueAt(i); for (ManagedServiceInfo info : serviceInfoList) { names.add(info.component); for (ComponentName info : serviceInfoList) { names.add(info); } } Loading @@ -1803,11 +1803,10 @@ public class NotificationManagerService extends SystemService { for (int i = mListenersDisablingEffects.size() - 1; i >= 0; --i) { final int hint = mListenersDisablingEffects.keyAt(i); final ArraySet<ManagedServiceInfo> listeners = mListenersDisablingEffects.valueAt(i); final ArraySet<ComponentName> listeners = mListenersDisablingEffects.valueAt(i); if (hints == 0 || (hint & hints) == hint) { removed = removed || listeners.remove(info); removed |= listeners.remove(info.component); } } Loading @@ -1830,18 +1829,18 @@ public class NotificationManagerService extends SystemService { private void addDisabledHint(ManagedServiceInfo info, int hint) { if (mListenersDisablingEffects.indexOfKey(hint) < 0) { mListenersDisablingEffects.put(hint, new ArraySet<ManagedServiceInfo>()); mListenersDisablingEffects.put(hint, new ArraySet<>()); } ArraySet<ManagedServiceInfo> hintListeners = mListenersDisablingEffects.get(hint); hintListeners.add(info); ArraySet<ComponentName> hintListeners = mListenersDisablingEffects.get(hint); hintListeners.add(info.component); } private int calculateHints() { int hints = 0; for (int i = mListenersDisablingEffects.size() - 1; i >= 0; --i) { int hint = mListenersDisablingEffects.keyAt(i); ArraySet<ManagedServiceInfo> serviceInfoList = mListenersDisablingEffects.valueAt(i); ArraySet<ComponentName> serviceInfoList = mListenersDisablingEffects.valueAt(i); if (!serviceInfoList.isEmpty()) { hints |= hint; Loading Loading @@ -2954,6 +2953,21 @@ public class NotificationManagerService extends SystemService { } } @Override public void clearRequestedListenerHints(INotificationListener token) { final long identity = Binder.clearCallingIdentity(); try { synchronized (mNotificationLock) { final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token); removeDisabledHints(info); updateListenerHintsLocked(); updateEffectsSuppressorLocked(); } } finally { Binder.restoreCallingIdentity(identity); } } @Override public void requestHintsFromListener(INotificationListener token, int hints) { final long identity = Binder.clearCallingIdentity(); Loading Loading @@ -3860,11 +3874,12 @@ public class NotificationManagerService extends SystemService { proto.write( ListenersDisablingEffectsProto.HINT, mListenersDisablingEffects.keyAt(i)); final ArraySet<ManagedServiceInfo> listeners = final ArraySet<ComponentName> listeners = mListenersDisablingEffects.valueAt(i); for (int j = 0; j < listeners.size(); j++) { final ManagedServiceInfo listener = listeners.valueAt(i); listener.writeToProto(proto, ListenersDisablingEffectsProto.LISTENERS, null); final ComponentName componentName = listeners.valueAt(i); componentName.writeToProto(proto, ListenersDisablingEffectsProto.LISTENER_COMPONENTS); } proto.end(effectsToken); Loading Loading @@ -4003,15 +4018,14 @@ public class NotificationManagerService extends SystemService { if (i > 0) pw.print(';'); pw.print("hint[" + hint + "]:"); final ArraySet<ManagedServiceInfo> listeners = mListenersDisablingEffects.valueAt(i); final ArraySet<ComponentName> listeners = mListenersDisablingEffects.valueAt(i); final int listenerSize = listeners.size(); for (int j = 0; j < listenerSize; j++) { if (i > 0) pw.print(','); final ManagedServiceInfo listener = listeners.valueAt(i); final ComponentName listener = listeners.valueAt(i); if (listener != null) { pw.print(listener.component); pw.print(listener); } } } Loading