diff options
-rw-r--r-- | core/java/android/app/Notification.java | 44 | ||||
-rw-r--r-- | core/java/android/app/NotificationManager.java | 2 | ||||
-rw-r--r-- | services/core/java/com/android/server/notification/RankingHelper.java | 12 |
3 files changed, 36 insertions, 22 deletions
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 7fdb97272cf6..74634a9f2b39 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -1915,6 +1915,19 @@ public class Notification implements Parcelable builder.build(); // callers expect this notification to be ready to use } + /** + * @hide + */ + public static void addFieldsFromContext(Context context, Notification notification) { + if (notification.extras.getParcelable(EXTRA_BUILDER_APPLICATION_INFO) == null) { + notification.extras.putParcelable(EXTRA_BUILDER_APPLICATION_INFO, + context.getApplicationInfo()); + } + if (!notification.extras.containsKey(EXTRA_ORIGINATING_USERID)) { + notification.extras.putInt(EXTRA_ORIGINATING_USERID, context.getUserId()); + } + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -2105,11 +2118,6 @@ public class Notification implements Parcelable private boolean mColorUtilInited = false; /** - * The user that built the notification originally. - */ - private int mOriginatingUserId; - - /** * Constructs a new Builder with the defaults: * @@ -2940,7 +2948,7 @@ public class Notification implements Parcelable // Note: This assumes that the current user can read the profile badge of the // originating user. return mContext.getPackageManager().getUserBadgeForDensity( - new UserHandle(mOriginatingUserId), 0); + new UserHandle(mContext.getUserId()), 0); } private Bitmap getProfileBadge() { @@ -3428,10 +3436,6 @@ public class Notification implements Parcelable mN.extras.putStringArray(EXTRA_PEOPLE, mPersonList.toArray(new String[mPersonList.size()])); } - if (mN.topic == null) { - mN.topic = new Topic(TOPIC_DEFAULT, mContext.getString( - R.string.default_notification_topic_label)); - } return mN; } @@ -3440,12 +3444,16 @@ public class Notification implements Parcelable ApplicationInfo applicationInfo = n.extras.getParcelable( EXTRA_BUILDER_APPLICATION_INFO); Context builderContext; - try { - builderContext = context.createApplicationContext(applicationInfo, - Context.CONTEXT_RESTRICTED); - } catch (NameNotFoundException e) { - Log.e(TAG, "ApplicationInfo " + applicationInfo + " not found"); - builderContext = context; // try with our context + if (applicationInfo != null) { + try { + builderContext = context.createApplicationContext(applicationInfo, + Context.CONTEXT_RESTRICTED); + } catch (NameNotFoundException e) { + Log.e(TAG, "ApplicationInfo " + applicationInfo + " not found"); + builderContext = context; // try with our context + } + } else { + builderContext = context; // try with given context } return new Builder(builderContext, n); @@ -3494,9 +3502,7 @@ public class Notification implements Parcelable } // lazy stuff from mContext; see comment in Builder(Context, Notification) - mN.extras.putParcelable(EXTRA_BUILDER_APPLICATION_INFO, mContext.getApplicationInfo()); - mOriginatingUserId = mContext.getUserId(); - mN.extras.putInt(EXTRA_ORIGINATING_USERID, mOriginatingUserId); + Notification.addFieldsFromContext(mContext, mN); buildUnstyled(); diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index 043c503b3ec0..3eb3e0f3b69f 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -218,6 +218,8 @@ public class NotificationManager int[] idOut = new int[1]; INotificationManager service = getService(); String pkg = mContext.getPackageName(); + // Fix the notification as best we can. + Notification.addFieldsFromContext(mContext, notification); if (notification.sound != null) { notification.sound = notification.sound.getCanonicalUri(); if (StrictMode.vmFileUriExposureEnabled()) { diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java index 4d3324898f9e..543cd89a4c0f 100644 --- a/services/core/java/com/android/server/notification/RankingHelper.java +++ b/services/core/java/com/android/server/notification/RankingHelper.java @@ -226,9 +226,7 @@ public class RankingHelper implements RankingConfig { r = new Record(); r.pkg = pkg; r.uid = uid; - r.topics.put(Notification.TOPIC_DEFAULT, - new Topic(new Notification.Topic(Notification.TOPIC_DEFAULT, - mContext.getString(R.string.default_notification_topic_label)))); + r.topics.put(Notification.TOPIC_DEFAULT, new Topic(createDefaultTopic())); mRecords.put(key, r); } return r; @@ -406,6 +404,9 @@ public class RankingHelper implements RankingConfig { } private Topic getOrCreateTopic(Record r, Notification.Topic topic) { + if (topic == null) { + topic = createDefaultTopic(); + } Topic t = r.topics.get(topic.getId()); if (t != null) { return t; @@ -416,6 +417,11 @@ public class RankingHelper implements RankingConfig { } } + private Notification.Topic createDefaultTopic() { + return new Notification.Topic(Notification.TOPIC_DEFAULT, + mContext.getString(R.string.default_notification_topic_label)); + } + public void dump(PrintWriter pw, String prefix, NotificationManagerService.DumpFilter filter) { if (filter == null) { final int N = mSignalExtractors.length; |