From 8bf1bca59a2df0697ebeb875cfc8160dcbeb09c6 Mon Sep 17 00:00:00 2001 From: Federico Baron Date: Tue, 27 Sep 2022 16:19:11 -0700 Subject: [PATCH] Tapping on a "folder" on the Homescreen right after returning home results in it starting to open, then canceling. Fix: 243531200, 253264925 Test: manual Change-Id: I180300e8333536346ad07ce7bc9956d3b84d82e6 --- src/com/android/launcher3/Launcher.java | 38 ++++++++++++++++++------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 1259d6ea44..1ab6ab78db 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -142,6 +142,7 @@ import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.dragndrop.DragOptions; import com.android.launcher3.dragndrop.DragView; import com.android.launcher3.dragndrop.LauncherDragController; +import com.android.launcher3.folder.Folder; import com.android.launcher3.folder.FolderGridOrganizer; import com.android.launcher3.folder.FolderIcon; import com.android.launcher3.icons.BitmapRenderer; @@ -1192,7 +1193,6 @@ public class Launcher extends StatefulActivity mOverlayManager.onActivityResumed(this); } - AbstractFloatingView.closeAllOpenViewsExcept(this, false, TYPE_REBIND_SAFE); DragView.removeAllViews(this); TraceHelper.INSTANCE.endSection(traceToken); } @@ -1705,6 +1705,10 @@ public class Launcher extends StatefulActivity outState.remove(RUNTIME_STATE_WIDGET_PANEL); } + // We close any open folders and shortcut containers that are not safe for rebind, + // and we need to make sure this state is reflected. + AbstractFloatingView.closeAllOpenViewsExcept( + this, isStarted() && !isForceInvisible(), TYPE_REBIND_SAFE); finishAutoCancelActionMode(); if (mPendingRequestArgs != null) { @@ -2815,16 +2819,30 @@ public class Launcher extends StatefulActivity } return v; - } else { - List containers = new ArrayList<>(mWorkspace.getPanelCount() + 1); - containers.add(mWorkspace.getHotseat().getShortcutsAndWidgets()); - mWorkspace.forEachVisiblePage(page - -> containers.add(((CellLayout) page).getShortcutsAndWidgets())); - - // Order: Preferred item by itself or in folder, then by matching package/user - return getFirstMatch(containers, preferredItem, forFolderMatch(preferredItem), - packageAndUserAndApp, forFolderMatch(packageAndUserAndApp)); } + + // Look for the item inside the folder at the current page + Folder folder = Folder.getOpen(this); + if (folder != null) { + View v = getFirstMatch(Collections.singletonList( + folder.getContent().getCurrentCellLayout().getShortcutsAndWidgets()), + preferredItem, + packageAndUserAndApp); + if (v == null) { + folder.close(isStarted() && !isForceInvisible()); + } else { + return v; + } + } + + List containers = new ArrayList<>(mWorkspace.getPanelCount() + 1); + containers.add(mWorkspace.getHotseat().getShortcutsAndWidgets()); + mWorkspace.forEachVisiblePage(page + -> containers.add(((CellLayout) page).getShortcutsAndWidgets())); + + // Order: Preferred item by itself or in folder, then by matching package/user + return getFirstMatch(containers, preferredItem, forFolderMatch(preferredItem), + packageAndUserAndApp, forFolderMatch(packageAndUserAndApp)); } /**