From 14d6771aae2037d5e9bb330f608c4a7e461786d3 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Wed, 8 Dec 2021 17:47:33 -0800 Subject: [PATCH] Clear all DragView in onSaveInstanceState Multiple users reports view getting stuck on screen. This CL clears all DragView when user leaves launcher. Root cause still undetermined, but happens enough that it warrants a temp fix. Bug: 162636845 Test: manual Change-Id: I532b5274a1308c53f67c23c5c8ca07f2b7f9802c --- src/com/android/launcher3/Launcher.java | 2 ++ src/com/android/launcher3/dragndrop/DragView.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 8154168e4f..a522b114cf 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1632,6 +1632,8 @@ public class Launcher extends StatefulActivity implements Launche AbstractFloatingView.closeOpenViews(this, false, TYPE_ALL & ~TYPE_REBIND_SAFE); finishAutoCancelActionMode(); + DragView.removeAllViews(this); + if (mPendingRequestArgs != null) { outState.putParcelable(RUNTIME_STATE_PENDING_REQUEST_ARGS, mPendingRequestArgs); } diff --git a/src/com/android/launcher3/dragndrop/DragView.java b/src/com/android/launcher3/dragndrop/DragView.java index fa65945da3..c37613fc5a 100644 --- a/src/com/android/launcher3/dragndrop/DragView.java +++ b/src/com/android/launcher3/dragndrop/DragView.java @@ -565,4 +565,19 @@ public abstract class DragView extends Fram iv.setImageDrawable(drawable); return iv; } + + /** + * Removes any stray DragView from the DragLayer. + */ + public static void removeAllViews(ActivityContext activity) { + BaseDragLayer dragLayer = activity.getDragLayer(); + // Iterate in reverse order. DragView is added later to the dragLayer, + // and will be one of the last views. + for (int i = dragLayer.getChildCount() - 1; i >= 0; i--) { + View child = dragLayer.getChildAt(i); + if (child instanceof DragView) { + dragLayer.removeView(child); + } + } + } }