summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/Notification.java44
-rw-r--r--core/java/android/app/NotificationManager.java2
-rw-r--r--services/core/java/com/android/server/notification/RankingHelper.java12
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;