From 54deae4c6902cf405a29c30b86a65878a326f170 Mon Sep 17 00:00:00 2001 From: Pierre Barbier de Reuille Date: Thu, 18 Mar 2021 09:07:28 +0000 Subject: [PATCH] Ensure the view being recycled has been inflated before. Fix: 183061275 Test: atest CtsWidgetTestCases:RemoteViewsTest Change-Id: I346fd894bea3ca37ab75871025fa0a92433d061c --- core/java/android/widget/RemoteViews.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 0cedcea7b4d45..11ac7f2a51670 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -5339,9 +5339,13 @@ public class RemoteViews implements Parcelable, Filter { /** @hide */ public boolean canRecycleView(View v) { + Integer previousLayout = (Integer) v.getTag(R.id.widget_frame); + if (previousLayout == null) { + return false; + } Integer overrideIdTag = (Integer) v.getTag(R.id.remote_views_override_id); int overrideId = overrideIdTag == null ? View.NO_ID : overrideIdTag; - return (Integer) v.getTag(R.id.widget_frame) == getLayoutId() && mViewId == overrideId; + return previousLayout == getLayoutId() && mViewId == overrideId; } // Note: topLevel should be true only for calls on the topLevel RemoteViews, internal calls