Merge "Be more resiliant to notifications that don't use a builder."
This commit is contained in:
committed by
Android (Google) Code Review
commit
ccec4f6d43
@@ -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();
|
||||
@@ -2104,11 +2117,6 @@ public class Notification implements Parcelable
|
||||
private NotificationColorUtil mColorUtil;
|
||||
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();
|
||||
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user