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

Commit 3abdfaaa authored by Pierre Barbier de Reuille's avatar Pierre Barbier de Reuille
Browse files

Prevent recycling if the color mapping changed.

It was done in a weird way by "forgetting" the layoutId. It's now done
explicitly, which should make it more robust in the future.

Fix: 205265677
Test: Manually
Change-Id: Ie8b88a2b17e8f680f14fa19a485cd91853d90142
parent 61569f50
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -97,7 +97,8 @@ public class AppWidgetHostView extends FrameLayout {
    AppWidgetProviderInfo mInfo;
    View mView;
    int mViewMode = VIEW_MODE_NOINIT;
    int mLayoutId = -1;
    // If true, we should not try to re-apply the RemoteViews on the next inflation.
    boolean mColorMappingChanged = false;
    private InteractionHandler mInteractionHandler;
    private boolean mOnLightBackground;
    private SizeF mCurrentSize = null;
@@ -540,7 +541,6 @@ public class AppWidgetHostView extends FrameLayout {
                return;
            }
            content = getDefaultView();
            mLayoutId = -1;
            mViewMode = VIEW_MODE_DEFAULT;
        } else {
            // Select the remote view we are actually going to apply.
@@ -557,8 +557,7 @@ public class AppWidgetHostView extends FrameLayout {
            // inflate any requested LayoutParams.
            mRemoteContext = getRemoteContextEnsuringCorrectCachedApkPath();

            int layoutId = rvToApply.getLayoutId();
            if (rvToApply.canRecycleView(mView)) {
            if (!mColorMappingChanged && rvToApply.canRecycleView(mView)) {
                try {
                    rvToApply.reapply(mContext, mView, mInteractionHandler, mCurrentSize,
                            mColorResources);
@@ -583,7 +582,6 @@ public class AppWidgetHostView extends FrameLayout {
                }
            }

            mLayoutId = layoutId;
            mViewMode = VIEW_MODE_CONTENT;
        }

@@ -591,6 +589,7 @@ public class AppWidgetHostView extends FrameLayout {
    }

    private void applyContent(View content, boolean recycled, Exception exception) {
        mColorMappingChanged = false;
        if (content == null) {
            if (mViewMode == VIEW_MODE_ERROR) {
                // We've already done this -- nothing to do.
@@ -626,7 +625,7 @@ public class AppWidgetHostView extends FrameLayout {

        // If our stale view has been prepared to match active, and the new
        // layout matches, try recycling it
        if (remoteViews.canRecycleView(mView)) {
        if (!mColorMappingChanged && remoteViews.canRecycleView(mView)) {
            try {
                mLastExecutionSignal = remoteViews.reapplyAsync(mContext,
                        mView,
@@ -666,7 +665,6 @@ public class AppWidgetHostView extends FrameLayout {

        @Override
        public void onViewApplied(View v) {
            AppWidgetHostView.this.mLayoutId = mLayoutId;
            mViewMode = VIEW_MODE_CONTENT;

            applyContent(v, mIsReapply, null);
@@ -907,7 +905,7 @@ public class AppWidgetHostView extends FrameLayout {
        }
        mColorMapping = colorMapping.clone();
        mColorResources = RemoteViews.ColorResources.create(mContext, mColorMapping);
        mLayoutId = -1;
        mColorMappingChanged = true;
        mViewMode = VIEW_MODE_NOINIT;
        reapplyLastRemoteViews();
    }
@@ -937,7 +935,7 @@ public class AppWidgetHostView extends FrameLayout {
        if (mColorResources != null) {
            mColorResources = null;
            mColorMapping = null;
            mLayoutId = -1;
            mColorMappingChanged = true;
            mViewMode = VIEW_MODE_NOINIT;
            reapplyLastRemoteViews();
        }