From ddd0450f6b306901d12a51b6a0b7822de4c8647d Mon Sep 17 00:00:00 2001 From: Sebastian Franco Date: Wed, 26 Jul 2023 15:09:10 -0700 Subject: [PATCH] Remove odd screen ids when isTwoPanels is true We where adding more CellLayouts but they where later removed by removeExtraEmptyScreenDelayed but when rotated the pagination animation is created before they are removed. With this change the extra CellLayouts won't be added in the first place. Fix: 291822492 Test: RoerderWidgets Test: FoldableItemsIntegrity Change-Id: I561d2ce961a7ecc50f7a8c99c4acc44262b2e211 --- src/com/android/launcher3/Launcher.java | 34 ++++++++++++++++--- src/com/android/launcher3/Workspace.java | 8 +++++ .../celllayout/CellLayoutTestCaseReader.java | 6 ++-- .../celllayout/CellLayoutTestUtils.java | 2 +- 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index f166833aa1..edee9a4a66 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2342,13 +2342,37 @@ public class Launcher extends StatefulActivity mWorkspace.unlockWallpaperFromDefaultPageOnNextLayout(); } + /** + * Remove odd number because they are already included when isTwoPanels and add the pair screen + * if not present. + */ + private IntArray filterTwoPanelScreenIds(IntArray orderedScreenIds) { + IntSet screenIds = IntSet.wrap(orderedScreenIds); + orderedScreenIds.forEach(screenId -> { + if (screenId % 2 == 1) { + screenIds.remove(screenId); + // In case the pair is not added, add it + if (!mWorkspace.containsScreenId(screenId - 1)) { + screenIds.add(screenId - 1); + } + } + }); + return screenIds.getArray(); + } + private void bindAddScreens(IntArray orderedScreenIds) { + if (mDeviceProfile.isTwoPanels) { - // Some empty pages might have been removed while the phone was in a single panel - // mode, so we want to add those empty pages back. - IntSet screenIds = IntSet.wrap(orderedScreenIds); - orderedScreenIds.forEach(screenId -> screenIds.add(mWorkspace.getScreenPair(screenId))); - orderedScreenIds = screenIds.getArray(); + if (FOLDABLE_SINGLE_PAGE.get()) { + orderedScreenIds = filterTwoPanelScreenIds(orderedScreenIds); + } else { + // Some empty pages might have been removed while the phone was in a single panel + // mode, so we want to add those empty pages back. + IntSet screenIds = IntSet.wrap(orderedScreenIds); + orderedScreenIds.forEach( + screenId -> screenIds.add(mWorkspace.getScreenPair(screenId))); + orderedScreenIds = screenIds.getArray(); + } } int count = orderedScreenIds.size(); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index adaf20f86f..8be8fedf80 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -731,6 +731,14 @@ public class Workspace extends PagedView }); } + + /** + * Returns if the given screenId is already in the Workspace + */ + public boolean containsScreenId(int screenId) { + return this.mWorkspaceScreens.containsKey(screenId); + } + /** * Inserts extra empty pages to the end of the existing workspaces. * Usually we add one extra empty screen, but when two panel home is enabled we add diff --git a/tests/src/com/android/launcher3/celllayout/CellLayoutTestCaseReader.java b/tests/src/com/android/launcher3/celllayout/CellLayoutTestCaseReader.java index e33a304941..419cb3d52e 100644 --- a/tests/src/com/android/launcher3/celllayout/CellLayoutTestCaseReader.java +++ b/tests/src/com/android/launcher3/celllayout/CellLayoutTestCaseReader.java @@ -63,8 +63,8 @@ public class CellLayoutTestCaseReader { } public static class Board extends TestSection { - Point gridSize; - String board; + public Point gridSize; + public String board; public Board(Point gridSize, String board) { super(State.BOARD); @@ -127,7 +127,7 @@ public class CellLayoutTestCaseReader { } } - List parse() { + public List parse() { List sections = new ArrayList<>(); String[] lines = mTest.split("\n"); Iterator it = Arrays.stream(lines).iterator(); diff --git a/tests/src/com/android/launcher3/celllayout/CellLayoutTestUtils.java b/tests/src/com/android/launcher3/celllayout/CellLayoutTestUtils.java index b6c55af47a..86a7bd3df0 100644 --- a/tests/src/com/android/launcher3/celllayout/CellLayoutTestUtils.java +++ b/tests/src/com/android/launcher3/celllayout/CellLayoutTestUtils.java @@ -42,7 +42,7 @@ public class CellLayoutTestUtils { params.getCellX(), params.getCellY(), launcher.getWorkspace().getIdForScreen(cellLayout), CONTAINER_DESKTOP); int screenId = pos.screenId; - if (screenId > boards.size() - 1) { + for (int j = boards.size(); j <= screenId; j++) { boards.add(new CellLayoutBoard(cellLayout.getCountX(), cellLayout.getCountY())); } CellLayoutBoard board = boards.get(screenId);