From d51f91a7d0243895606bf52e1cc6e8ec23da71ea Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 15 Mar 2024 10:15:29 -0700 Subject: [PATCH] Fixing PendingWidgets getting attached to real host Bug: 318539160 Flag: aconfig enable_workspace_inflation DISABLED Test: TaplBindWidgetTest#testPendingWidget_notRestored_activeInstall Change-Id: I013811e83b90ea32221904a27790dd677dd63b4b --- .../android/launcher3/widget/LauncherWidgetHolder.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/widget/LauncherWidgetHolder.java b/src/com/android/launcher3/widget/LauncherWidgetHolder.java index 2fcf8c5d54..0fb4e097be 100644 --- a/src/com/android/launcher3/widget/LauncherWidgetHolder.java +++ b/src/com/android/launcher3/widget/LauncherWidgetHolder.java @@ -349,7 +349,13 @@ public class LauncherWidgetHolder { @NonNull public final AppWidgetHostView attachViewToHostAndGetAttachedView( @NonNull LauncherAppWidgetHostView view) { - if (mViews.get(view.getAppWidgetId()) != view) { + + // Binder can also inflate placeholder widgets in case of backup-restore. Skip + // attaching such widgets + boolean isRealWidget = ((view instanceof PendingAppWidgetHostView pw) + ? pw.isDeferredWidget() : true) + && view.getAppWidgetInfo() != null; + if (isRealWidget && mViews.get(view.getAppWidgetId()) != view) { view = recycleExistingView(view); mViews.put(view.getAppWidgetId(), view); }