Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da303544 authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Be more resiliant to notifications that don't use a builder.

Bug: 25772839
Change-Id: I526001a21f959f7229443f487439c51c8d84f1ea
parent 9aa23389
Loading
Loading
Loading
Loading
+25 −19
Original line number Diff line number Diff line
@@ -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() {
@@ -3423,10 +3431,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;
        }

@@ -3435,6 +3439,7 @@ public class Notification implements Parcelable
            ApplicationInfo applicationInfo = n.extras.getParcelable(
                    EXTRA_BUILDER_APPLICATION_INFO);
            Context builderContext;
            if (applicationInfo != null) {
                try {
                    builderContext = context.createApplicationContext(applicationInfo,
                            Context.CONTEXT_RESTRICTED);
@@ -3442,6 +3447,9 @@ public class Notification implements Parcelable
                    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);
        }
@@ -3489,9 +3497,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();

+2 −0
Original line number Diff line number Diff line
@@ -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()) {
+9 −3
Original line number Diff line number Diff line
@@ -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;