From 8d3c1aa054295471569f1c89192d376b77ff012a Mon Sep 17 00:00:00 2001 From: Stevie Kideckel Date: Wed, 8 Dec 2021 18:35:32 +0000 Subject: [PATCH] Copy caches when initializing RemoteViews If the BitmapCache is not copied when cloning RemoteViews, then Bitmaps will be dropped. Fix: 208865678 Test: cts, verified locally Change-Id: I7547ab3a60ac3ee16b9cfb8d592988d0e410172d --- core/java/android/widget/RemoteViews.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 3d4d9eca6b16a..dfd853acaf0d4 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -3696,18 +3696,21 @@ public class RemoteViews implements Parcelable, Filter { } private void initializeFrom(@NonNull RemoteViews src, @Nullable RemoteViews hierarchyRoot) { + if (hierarchyRoot == null) { + mBitmapCache = src.mBitmapCache; + mApplicationInfoCache = src.mApplicationInfoCache; + } else { + mBitmapCache = hierarchyRoot.mBitmapCache; + mApplicationInfoCache = hierarchyRoot.mApplicationInfoCache; + } if (hierarchyRoot == null || src.mIsRoot) { // If there's no provided root, or if src was itself a root, then this RemoteViews is // the root of the new hierarchy. mIsRoot = true; - mBitmapCache = new BitmapCache(); - mApplicationInfoCache = new ApplicationInfoCache(); hierarchyRoot = this; } else { // Otherwise, we're a descendant in the hierarchy. mIsRoot = false; - mBitmapCache = hierarchyRoot.mBitmapCache; - mApplicationInfoCache = hierarchyRoot.mApplicationInfoCache; } mApplication = src.mApplication; mLayoutId = src.mLayoutId;