diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 4e7a8843a3..94ab4425db 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2343,13 +2343,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);