Fix notifications that are sent for USER_ALL.

Also avoid creating a heavy LoadedApk object which will be cached
around in the long-lived system process.

Bug: 28116427
Change-Id: I1a5fc43e6d559a09088636b2fe4b5c76f08d3413
This commit is contained in:
Jeff Sharkey
2016-04-11 16:30:27 -06:00
parent 03c7b09a83
commit 012bc7bb9f
2 changed files with 14 additions and 9 deletions

View File

@@ -1955,9 +1955,16 @@ public class Notification implements Parcelable
* @hide
*/
public static void addFieldsFromContext(Context context, Notification notification) {
notification.extras.putParcelable(EXTRA_BUILDER_APPLICATION_INFO,
context.getApplicationInfo());
notification.extras.putInt(EXTRA_ORIGINATING_USERID, context.getUserId());
addFieldsFromContext(context.getApplicationInfo(), context.getUserId(), notification);
}
/**
* @hide
*/
public static void addFieldsFromContext(ApplicationInfo ai, int userId,
Notification notification) {
notification.extras.putParcelable(EXTRA_BUILDER_APPLICATION_INFO, ai);
notification.extras.putInt(EXTRA_ORIGINATING_USERID, userId);
}
@Override

View File

@@ -2459,12 +2459,10 @@ public class NotificationManagerService extends SystemService {
// Fix the notification as best we can.
try {
if (!"android".equals(pkg) && !"system".equals(pkg)) {
Notification.addFieldsFromContext(getContext().createApplicationContext(
getContext().getPackageManager().getApplicationInfoAsUser(
pkg, PackageManager.MATCH_UNINSTALLED_PACKAGES, userId),
Context.CONTEXT_RESTRICTED), notification);
}
final ApplicationInfo ai = getContext().getPackageManager().getApplicationInfoAsUser(
pkg, PackageManager.MATCH_DEBUG_TRIAGED_MISSING,
(userId == UserHandle.USER_ALL) ? UserHandle.USER_SYSTEM : userId);
Notification.addFieldsFromContext(ai, userId, notification);
} catch (NameNotFoundException e) {
Slog.e(TAG, "Cannot create a context for sending app", e);
return;