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

Commit 279fa867 authored by Selim Cinek's avatar Selim Cinek
Browse files

Fixed another case where the systemUI could crashloop

Because it's not guaranteed to use any builder at all,
there is another case where the SmallIcon could remain null.
We are now checking this lazily instead of ahead of time.

Change-Id: I7a0feff6911b2bce6707427259d3423131a26e32
Fixes: 29255365
parent 189ef624
Loading
Loading
Loading
Loading
+26 −9
Original line number Diff line number Diff line
@@ -1866,6 +1866,10 @@ public class Notification implements Parcelable
        } else {
            parcel.writeInt(0);
        }
        if (mLargeIcon == null && largeIcon != null) {
            // you snuck an icon in here without using the builder; let's try to keep it
            mLargeIcon = Icon.createWithBitmap(largeIcon);
        }
        if (mLargeIcon != null) {
            parcel.writeInt(1);
            mLargeIcon.writeToParcel(parcel, 0);
@@ -3230,7 +3234,7 @@ public class Notification implements Parcelable
                contentView.setViewVisibility(textId, View.VISIBLE);
            }

            setContentMinHeight(contentView, showProgress || mN.mLargeIcon != null);
            setContentMinHeight(contentView, showProgress || mN.hasLargeIcon());

            return contentView;
        }
@@ -3274,6 +3278,9 @@ public class Notification implements Parcelable
        }

        private void bindLargeIcon(RemoteViews contentView) {
            if (mN.mLargeIcon == null && mN.largeIcon != null) {
                mN.mLargeIcon = Icon.createWithBitmap(mN.largeIcon);
            }
            if (mN.mLargeIcon != null) {
                contentView.setViewVisibility(R.id.right_icon, View.VISIBLE);
                contentView.setImageViewIcon(R.id.right_icon, mN.mLargeIcon);
@@ -3380,6 +3387,9 @@ public class Notification implements Parcelable
        }

        private void bindSmallIcon(RemoteViews contentView) {
            if (mN.mSmallIcon == null && mN.icon != 0) {
                mN.mSmallIcon = Icon.createWithResource(mContext, mN.icon);
            }
            contentView.setImageViewIcon(R.id.icon, mN.mSmallIcon);
            processSmallIconColor(mN.mSmallIcon, contentView);
        }
@@ -3579,6 +3589,8 @@ public class Notification implements Parcelable
            mStyle = null;
            Icon largeIcon = mN.mLargeIcon;
            mN.mLargeIcon = null;
            Bitmap largeIconLegacy = mN.largeIcon;
            mN.largeIcon = null;
            Bundle publicExtras = new Bundle();
            publicExtras.putBoolean(EXTRA_SHOW_WHEN,
                    savedBundle.getBoolean(EXTRA_SHOW_WHEN));
@@ -3592,6 +3604,7 @@ public class Notification implements Parcelable
            final RemoteViews publicView = applyStandardTemplate(getBaseLayoutResource());
            mN.extras = savedBundle;
            mN.mLargeIcon = largeIcon;
            mN.largeIcon = largeIconLegacy;
            mStyle = style;
            return publicView;
        }
@@ -3888,6 +3901,10 @@ public class Notification implements Parcelable
        }
    }

    private boolean hasLargeIcon() {
        return mLargeIcon != null || largeIcon != null;
    }

    /**
     * @return true if the notification will show the time; false otherwise
     * @hide
@@ -4194,7 +4211,7 @@ public class Notification implements Parcelable
                contentView.setTextViewText(R.id.text, mBuilder.processLegacyText(mSummaryText));
                contentView.setViewVisibility(R.id.text, View.VISIBLE);
            }
            mBuilder.setContentMinHeight(contentView, mBuilder.mN.mLargeIcon != null);
            mBuilder.setContentMinHeight(contentView, mBuilder.mN.hasLargeIcon());

            if (mBigLargeIconSet) {
                mBuilder.mN.mLargeIcon = oldLargeIcon;
@@ -4349,7 +4366,7 @@ public class Notification implements Parcelable
            contentView.setViewVisibility(R.id.big_text,
                    TextUtils.isEmpty(bigTextText) ? View.GONE : View.VISIBLE);
            contentView.setInt(R.id.big_text, "setMaxLines", calculateMaxLines(builder));
            contentView.setBoolean(R.id.big_text, "setHasImage", builder.mN.mLargeIcon != null);
            contentView.setBoolean(R.id.big_text, "setHasImage", builder.mN.hasLargeIcon());
        }

        private static int calculateMaxLines(Builder builder) {
@@ -4622,7 +4639,7 @@ public class Notification implements Parcelable
            contentView.setViewLayoutMarginBottomDimen(R.id.line1,
                    hasTitle ? R.dimen.notification_messaging_spacing : 0);
            contentView.setInt(R.id.notification_messaging, "setNumIndentLines",
                    mBuilder.mN.mLargeIcon == null ? 0 : (hasTitle ? 1 : 2));
                    !mBuilder.mN.hasLargeIcon() ? 0 : (hasTitle ? 1 : 2));

            int contractedChildId = View.NO_ID;
            Message contractedMessage = findLatestIncomingMessage();
@@ -4995,7 +5012,7 @@ public class Notification implements Parcelable
                final int max = mBuilder.mN.extras.getInt(EXTRA_PROGRESS_MAX, 0);
                final boolean ind = mBuilder.mN.extras.getBoolean(EXTRA_PROGRESS_INDETERMINATE);
                boolean hasProgress = max != 0 || ind;
                if (mBuilder.mN.mLargeIcon != null && !hasProgress) {
                if (mBuilder.mN.hasLargeIcon() && !hasProgress) {
                    endMargin = R.dimen.notification_content_picture_margin;
                }
            }
@@ -5185,7 +5202,7 @@ public class Notification implements Parcelable
            handleImage(view);
            // handle the content margin
            int endMargin = R.dimen.notification_content_margin_end;
            if (mBuilder.mN.mLargeIcon != null) {
            if (mBuilder.mN.hasLargeIcon()) {
                endMargin = R.dimen.notification_content_plus_picture_margin_end;
            }
            view.setViewLayoutMarginEndDimen(R.id.notification_main_column, endMargin);
@@ -5198,7 +5215,7 @@ public class Notification implements Parcelable
            int actionsInCompact = mActionsToShowInCompact == null
                    ? 0
                    : Math.min(mActionsToShowInCompact.length, MAX_MEDIA_BUTTONS_IN_COMPACT);
            if (mBuilder.mN.mLargeIcon == null && actionCount <= actionsInCompact) {
            if (!mBuilder.mN.hasLargeIcon() && actionCount <= actionsInCompact) {
                return null;
            }
            RemoteViews big = mBuilder.applyStandardTemplate(
@@ -5218,7 +5235,7 @@ public class Notification implements Parcelable
        }

        private void handleImage(RemoteViews contentView) {
            if (mBuilder.mN.mLargeIcon != null) {
            if (mBuilder.mN.hasLargeIcon()) {
                contentView.setViewLayoutMarginEndDimen(R.id.line1, 0);
                contentView.setViewLayoutMarginEndDimen(R.id.text, 0);
            }
@@ -5336,7 +5353,7 @@ public class Notification implements Parcelable
            }
            // also update the end margin if there is an image
            int endMargin = R.dimen.notification_content_margin_end;
            if (mBuilder.mN.mLargeIcon != null) {
            if (mBuilder.mN.hasLargeIcon()) {
                endMargin = R.dimen.notification_content_plus_picture_margin_end;
            }
            remoteViews.setViewLayoutMarginEndDimen(R.id.notification_main_column, endMargin);