diff options
-rw-r--r-- | Android.bp | 4 | ||||
-rw-r--r-- | go/src/com/android/launcher3/util/AbsGridOccupancy.java | 56 | ||||
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 4 | ||||
-rw-r--r-- | src/com/android/launcher3/graphics/LauncherPreviewRenderer.java | 3 | ||||
-rw-r--r-- | src/com/android/launcher3/model/BaseLoaderResults.java | 41 | ||||
-rw-r--r-- | src/com/android/launcher3/model/ModelUtils.java | 38 | ||||
-rw-r--r-- | src/com/android/launcher3/util/GridOccupancy.java | 21 | ||||
-rw-r--r-- | src_shortcuts_overrides/com/android/launcher3/util/AbsGridOccupancy.java | 55 |
8 files changed, 155 insertions, 67 deletions
diff --git a/Android.bp b/Android.bp index b3027bc440..0a55675d43 100644 --- a/Android.bp +++ b/Android.bp @@ -228,7 +228,7 @@ filegroup { ], } -// Common source files used to build go launcher +// Common source files used to build go launcher except go/src files filegroup { name: "launcher-go-src-no-build-config", srcs: [ @@ -236,8 +236,6 @@ filegroup { "src/**/*.kt", "quickstep/src/**/*.java", "quickstep/src/**/*.kt", - "go/src/**/*.java", - "go/src/**/*.kt", "go/quickstep/src/**/*.java", "go/quickstep/src/**/*.kt", ], diff --git a/go/src/com/android/launcher3/util/AbsGridOccupancy.java b/go/src/com/android/launcher3/util/AbsGridOccupancy.java new file mode 100644 index 0000000000..4a46bd193f --- /dev/null +++ b/go/src/com/android/launcher3/util/AbsGridOccupancy.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.util; + +/** + * Defines method to find the next vacant cell on a grid. + * This uses the default top-down, left-right approach and can be over-written through + * code swaps in different launchers. + */ +public abstract class AbsGridOccupancy { + + /** + * Find the first vacant cell, if there is one. + * + * @param vacantOut Holds the x and y coordinate of the vacant cell + * @param spanX Horizontal cell span. + * @param spanY Vertical cell span. + * + * @return true if a vacant cell was found + */ + protected boolean findVacantCell(int[] vacantOut, boolean[][] cells, int countX, int countY, + int spanX, int spanY) { + for (int y = 0; (y + spanY) <= countY; y++) { + for (int x = 0; (x + spanX) <= countX; x++) { + boolean available = !cells[x][y]; + out: + for (int i = x; i < x + spanX; i++) { + for (int j = y; j < y + spanY; j++) { + available = available && !cells[i][j]; + if (!available) break out; + } + } + if (available) { + vacantOut[0] = x; + vacantOut[1] = y; + return true; + } + } + } + return false; + } +} diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 923e6144f7..eda834e464 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -3234,12 +3234,12 @@ public class Launcher extends StatefulActivity<LauncherState> /** Pauses view updates that should not be run during the app launch animation. */ public void pauseExpensiveViewUpdates() { // Pause page indicator animations as they lead to layer trashing. - mWorkspace.getPageIndicator().pauseAnimations(); + getWorkspace().getPageIndicator().pauseAnimations(); } /** Resumes view updates at the end of the app launch animation. */ public void resumeExpensiveViewUpdates() { - mWorkspace.getPageIndicator().skipAnimationsToEnd(); + getWorkspace().getPageIndicator().skipAnimationsToEnd(); } } diff --git a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java index 3dfece7660..a11bd4fdad 100644 --- a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java +++ b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java @@ -23,7 +23,6 @@ import static android.view.View.VISIBLE; import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION; import static com.android.launcher3.model.ModelUtils.filterCurrentWorkspaceItems; import static com.android.launcher3.model.ModelUtils.getMissingHotseatRanks; -import static com.android.launcher3.model.ModelUtils.sortWorkspaceItemsSpatially; import android.annotation.TargetApi; import android.app.Fragment; @@ -420,8 +419,6 @@ public class LauncherPreviewRenderer extends ContextWrapper currentWorkspaceItems, otherWorkspaceItems); filterCurrentWorkspaceItems(currentScreenIds, dataModel.appWidgets, currentAppWidgets, otherAppWidgets); - - sortWorkspaceItemsSpatially(mIdp, currentWorkspaceItems); for (ItemInfo itemInfo : currentWorkspaceItems) { switch (itemInfo.itemType) { case Favorites.ITEM_TYPE_APPLICATION: diff --git a/src/com/android/launcher3/model/BaseLoaderResults.java b/src/com/android/launcher3/model/BaseLoaderResults.java index 5b278ab4cf..6c4cfb9068 100644 --- a/src/com/android/launcher3/model/BaseLoaderResults.java +++ b/src/com/android/launcher3/model/BaseLoaderResults.java @@ -18,7 +18,6 @@ package com.android.launcher3.model; import static com.android.launcher3.model.ItemInstallQueue.FLAG_LOADER_RUNNING; import static com.android.launcher3.model.ModelUtils.filterCurrentWorkspaceItems; -import static com.android.launcher3.model.ModelUtils.sortWorkspaceItemsSpatially; import static com.android.launcher3.util.Executors.MODEL_EXECUTOR; import android.os.Process; @@ -27,6 +26,8 @@ import android.util.Log; import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherModel.CallbackTask; +import com.android.launcher3.LauncherSettings; +import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.model.BgDataModel.Callbacks; import com.android.launcher3.model.BgDataModel.FixedContainerItems; import com.android.launcher3.model.data.AppInfo; @@ -110,6 +111,42 @@ public abstract class BaseLoaderResults { public abstract void bindWidgets(); + /** + * Sorts the set of items by hotseat, workspace (spatially from top to bottom, left to right) + */ + protected void sortWorkspaceItemsSpatially(InvariantDeviceProfile profile, + ArrayList<ItemInfo> workspaceItems) { + final int screenCols = profile.numColumns; + final int screenCellCount = profile.numColumns * profile.numRows; + Collections.sort(workspaceItems, (lhs, rhs) -> { + if (lhs.container == rhs.container) { + // Within containers, order by their spatial position in that container + switch (lhs.container) { + case LauncherSettings.Favorites.CONTAINER_DESKTOP: { + int lr = (lhs.screenId * screenCellCount + lhs.cellY * screenCols + + lhs.cellX); + int rr = (rhs.screenId * screenCellCount + +rhs.cellY * screenCols + + rhs.cellX); + return Integer.compare(lr, rr); + } + case LauncherSettings.Favorites.CONTAINER_HOTSEAT: { + // We currently use the screen id as the rank + return Integer.compare(lhs.screenId, rhs.screenId); + } + default: + if (FeatureFlags.IS_STUDIO_BUILD) { + throw new RuntimeException( + "Unexpected container type when sorting workspace items."); + } + return 0; + } + } else { + // Between containers, order by hotseat, desktop + return Integer.compare(lhs.container, rhs.container); + } + }); + } + protected void executeCallbacksTask(CallbackTask task, Executor executor) { executor.execute(() -> { if (mMyBindingId != mBgDataModel.lastBindId) { @@ -131,7 +168,7 @@ public abstract class BaseLoaderResults { return idleLock; } - private static class WorkspaceBinder { + private class WorkspaceBinder { private final Executor mUiExecutor; private final Callbacks mCallbacks; diff --git a/src/com/android/launcher3/model/ModelUtils.java b/src/com/android/launcher3/model/ModelUtils.java index ef5eef1e43..df6768d582 100644 --- a/src/com/android/launcher3/model/ModelUtils.java +++ b/src/com/android/launcher3/model/ModelUtils.java @@ -23,10 +23,8 @@ import android.graphics.Bitmap; import android.os.Process; import android.util.Log; -import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.LauncherSettings; import com.android.launcher3.Utilities; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.icons.BitmapInfo; import com.android.launcher3.icons.LauncherIcons; import com.android.launcher3.model.data.ItemInfo; @@ -92,42 +90,6 @@ public class ModelUtils { } /** - * Sorts the set of items by hotseat, workspace (spatially from top to bottom, left to right) - */ - public static void sortWorkspaceItemsSpatially(InvariantDeviceProfile profile, - ArrayList<ItemInfo> workspaceItems) { - final int screenCols = profile.numColumns; - final int screenCellCount = profile.numColumns * profile.numRows; - Collections.sort(workspaceItems, (lhs, rhs) -> { - if (lhs.container == rhs.container) { - // Within containers, order by their spatial position in that container - switch (lhs.container) { - case LauncherSettings.Favorites.CONTAINER_DESKTOP: { - int lr = (lhs.screenId * screenCellCount + lhs.cellY * screenCols - + lhs.cellX); - int rr = (rhs.screenId * screenCellCount + +rhs.cellY * screenCols - + rhs.cellX); - return Integer.compare(lr, rr); - } - case LauncherSettings.Favorites.CONTAINER_HOTSEAT: { - // We currently use the screen id as the rank - return Integer.compare(lhs.screenId, rhs.screenId); - } - default: - if (FeatureFlags.IS_STUDIO_BUILD) { - throw new RuntimeException( - "Unexpected container type when sorting workspace items."); - } - return 0; - } - } else { - // Between containers, order by hotseat, desktop - return Integer.compare(lhs.container, rhs.container); - } - }); - } - - /** * Iterates though current workspace items and returns available hotseat ranks for prediction. */ public static IntArray getMissingHotseatRanks(List<ItemInfo> items, int len) { diff --git a/src/com/android/launcher3/util/GridOccupancy.java b/src/com/android/launcher3/util/GridOccupancy.java index 9c752a7043..13014608c4 100644 --- a/src/com/android/launcher3/util/GridOccupancy.java +++ b/src/com/android/launcher3/util/GridOccupancy.java @@ -7,7 +7,7 @@ import com.android.launcher3.model.data.ItemInfo; /** * Utility object to manage the occupancy in a grid. */ -public class GridOccupancy { +public class GridOccupancy extends AbsGridOccupancy { private final int mCountX; private final int mCountY; @@ -30,24 +30,7 @@ public class GridOccupancy { * @return true if a vacant cell was found */ public boolean findVacantCell(int[] vacantOut, int spanX, int spanY) { - for (int y = 0; (y + spanY) <= mCountY; y++) { - for (int x = 0; (x + spanX) <= mCountX; x++) { - boolean available = !cells[x][y]; - out: - for (int i = x; i < x + spanX; i++) { - for (int j = y; j < y + spanY; j++) { - available = available && !cells[i][j]; - if (!available) break out; - } - } - if (available) { - vacantOut[0] = x; - vacantOut[1] = y; - return true; - } - } - } - return false; + return super.findVacantCell(vacantOut, cells, mCountX, mCountY, spanX, spanY); } public void copyTo(GridOccupancy dest) { diff --git a/src_shortcuts_overrides/com/android/launcher3/util/AbsGridOccupancy.java b/src_shortcuts_overrides/com/android/launcher3/util/AbsGridOccupancy.java new file mode 100644 index 0000000000..968b281787 --- /dev/null +++ b/src_shortcuts_overrides/com/android/launcher3/util/AbsGridOccupancy.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.util; + +/** + * Defines method to find the next vacant cell on a grid. + * This uses the default top-down, left-right approach and can be over-written through + * code swaps in different launchers. + */ +public abstract class AbsGridOccupancy { + /** + * Find the first vacant cell, if there is one. + * + * @param vacantOut Holds the x and y coordinate of the vacant cell + * @param spanX Horizontal cell span. + * @param spanY Vertical cell span. + * + * @return true if a vacant cell was found + */ + protected boolean findVacantCell(int[] vacantOut, boolean[][] cells, int countX, int countY, + int spanX, int spanY) { + for (int y = 0; (y + spanY) <= countY; y++) { + for (int x = 0; (x + spanX) <= countX; x++) { + boolean available = !cells[x][y]; + out: + for (int i = x; i < x + spanX; i++) { + for (int j = y; j < y + spanY; j++) { + available = available && !cells[i][j]; + if (!available) break out; + } + } + if (available) { + vacantOut[0] = x; + vacantOut[1] = y; + return true; + } + } + } + return false; + } +} |