diff options
author | Chris Wren <cwren@android.com> | 2014-09-02 17:23:51 -0400 |
---|---|---|
committer | Chris Wren <cwren@android.com> | 2014-09-04 11:49:06 -0400 |
commit | 3ad4e3a45bbe44129b14c4d391431e44f1e04f0c (patch) | |
tree | 43d0d023d84a38bbeb9d6169bfb9a20d634a1a31 /core/java/android/service | |
parent | e23b8dd58fba275802d48fccb43170845aac0382 (diff) | |
download | frameworks_base-3ad4e3a45bbe44129b14c4d391431e44f1e04f0c.zip frameworks_base-3ad4e3a45bbe44129b14c4d391431e44f1e04f0c.tar.gz frameworks_base-3ad4e3a45bbe44129b14c4d391431e44f1e04f0c.tar.bz2 |
Honor per-app sensitivity setting.
Settings are stored by NotificationManagerService in the policy file,
and are communicated to NotificationListeners via a hidden API on the
RankingMap object.
Bug: 16324353
Change-Id: I2d5cf6782273744cbf9b309dec76780cc0a4c39e
Diffstat (limited to 'core/java/android/service')
-rw-r--r-- | core/java/android/service/notification/NotificationListenerService.java | 46 | ||||
-rw-r--r-- | core/java/android/service/notification/NotificationRankingUpdate.java | 11 |
2 files changed, 54 insertions, 3 deletions
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java index fc12101..2ca8098 100644 --- a/core/java/android/service/notification/NotificationListenerService.java +++ b/core/java/android/service/notification/NotificationListenerService.java @@ -26,6 +26,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ParceledListSlice; +import android.os.Bundle; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; @@ -693,10 +694,15 @@ public abstract class NotificationListenerService extends Service { * current {@link RankingMap}. */ public static class Ranking { + /** Value signifying that the user has not expressed a per-app visibility override value. + * @hide */ + public static final int VISIBILITY_NO_OVERRIDE = -1000; + private String mKey; private int mRank = -1; private boolean mIsAmbient; private boolean mMatchesInterruptionFilter; + private int mVisibilityOverride; public Ranking() {} @@ -726,6 +732,17 @@ public abstract class NotificationListenerService extends Service { } /** + * Returns the user specificed visibility for the package that posted + * this notification, or + * {@link NotificationListenerService.Ranking#VISIBILITY_NO_OVERRIDE} if + * no such preference has been expressed. + * @hide + */ + public int getVisibilityOverride() { + return mVisibilityOverride; + } + + /** * Returns whether the notification meets the user's interruption * filter. * @@ -744,11 +761,12 @@ public abstract class NotificationListenerService extends Service { } private void populate(String key, int rank, boolean isAmbient, - boolean matchesInterruptionFilter) { + boolean matchesInterruptionFilter, int visibilityOverride) { mKey = key; mRank = rank; mIsAmbient = isAmbient; mMatchesInterruptionFilter = matchesInterruptionFilter; + mVisibilityOverride = visibilityOverride; } } @@ -764,6 +782,7 @@ public abstract class NotificationListenerService extends Service { private final NotificationRankingUpdate mRankingUpdate; private ArrayMap<String,Integer> mRanks; private ArraySet<Object> mIntercepted; + private ArrayMap<String, Integer> mVisibilityOverrides; private RankingMap(NotificationRankingUpdate rankingUpdate) { mRankingUpdate = rankingUpdate; @@ -788,7 +807,8 @@ public abstract class NotificationListenerService extends Service { */ public boolean getRanking(String key, Ranking outRanking) { int rank = getRank(key); - outRanking.populate(key, rank, isAmbient(key), !isIntercepted(key)); + outRanking.populate(key, rank, isAmbient(key), !isIntercepted(key), + getVisibilityOverride(key)); return rank >= 0; } @@ -820,6 +840,19 @@ public abstract class NotificationListenerService extends Service { return mIntercepted.contains(key); } + private int getVisibilityOverride(String key) { + synchronized (this) { + if (mVisibilityOverrides == null) { + buildVisibilityOverridesLocked(); + } + } + Integer overide = mVisibilityOverrides.get(key); + if (overide == null) { + return Ranking.VISIBILITY_NO_OVERRIDE; + } + return overide.intValue(); + } + // Locked by 'this' private void buildRanksLocked() { String[] orderedKeys = mRankingUpdate.getOrderedKeys(); @@ -837,6 +870,15 @@ public abstract class NotificationListenerService extends Service { Collections.addAll(mIntercepted, dndInterceptedKeys); } + // Locked by 'this' + private void buildVisibilityOverridesLocked() { + Bundle visibilityBundle = mRankingUpdate.getVisibilityOverrides(); + mVisibilityOverrides = new ArrayMap<>(visibilityBundle.size()); + for (String key: visibilityBundle.keySet()) { + mVisibilityOverrides.put(key, visibilityBundle.getInt(key)); + } + } + // ----------- Parcelable @Override diff --git a/core/java/android/service/notification/NotificationRankingUpdate.java b/core/java/android/service/notification/NotificationRankingUpdate.java index 26af38b..6fba900 100644 --- a/core/java/android/service/notification/NotificationRankingUpdate.java +++ b/core/java/android/service/notification/NotificationRankingUpdate.java @@ -15,6 +15,7 @@ */ package android.service.notification; +import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -26,18 +27,21 @@ public class NotificationRankingUpdate implements Parcelable { private final String[] mKeys; private final String[] mInterceptedKeys; private final int mFirstAmbientIndex; + private final Bundle mVisibilityOverrides; public NotificationRankingUpdate(String[] keys, String[] interceptedKeys, - int firstAmbientIndex) { + Bundle visibilityOverrides, int firstAmbientIndex) { mKeys = keys; mFirstAmbientIndex = firstAmbientIndex; mInterceptedKeys = interceptedKeys; + mVisibilityOverrides = visibilityOverrides; } public NotificationRankingUpdate(Parcel in) { mKeys = in.readStringArray(); mFirstAmbientIndex = in.readInt(); mInterceptedKeys = in.readStringArray(); + mVisibilityOverrides = in.readBundle(); } @Override @@ -50,6 +54,7 @@ public class NotificationRankingUpdate implements Parcelable { out.writeStringArray(mKeys); out.writeInt(mFirstAmbientIndex); out.writeStringArray(mInterceptedKeys); + out.writeBundle(mVisibilityOverrides); } public static final Parcelable.Creator<NotificationRankingUpdate> CREATOR @@ -74,4 +79,8 @@ public class NotificationRankingUpdate implements Parcelable { public String[] getInterceptedKeys() { return mInterceptedKeys; } + + public Bundle getVisibilityOverrides() { + return mVisibilityOverrides; + } } |