From f1af0171b7c6b8f82179f2bfffda33f82ee16399 Mon Sep 17 00:00:00 2001 From: Pinyao Ting Date: Mon, 20 Jul 2020 11:54:38 -0700 Subject: [PATCH] Fix launcher crash after restore with some specific widgets. The internal implementation of PendingAppWidgetHostView#getDefaultViews uses the same view across updates which causes the exception in AppWidgetHostView#applyContent when it tries to call addView() because the view has already been added to its parent view in previous iteration. Bug: 151901506 Test: manual Change-Id: Ieccec814ac514e592d0d4f196b60ba89aec0d661 --- .../launcher3/widget/PendingAppWidgetHostView.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java index 9021d9eb21..ca47728020 100644 --- a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java +++ b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java @@ -52,7 +52,6 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView private static final float MIN_SATUNATION = 0.7f; private final Rect mRect = new Rect(); - private View mDefaultView; private OnClickListener mClickListener; private final LauncherAppWidgetInfo mInfo; private final int mStartState; @@ -111,12 +110,11 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView @Override protected View getDefaultView() { - if (mDefaultView == null) { - mDefaultView = mInflater.inflate(R.layout.appwidget_not_ready, this, false); - mDefaultView.setOnClickListener(this); - applyState(); - } - return mDefaultView; + View defaultView = mInflater.inflate(R.layout.appwidget_not_ready, this, false); + defaultView.setOnClickListener(this); + applyState(); + invalidate(); + return defaultView; } @Override