diff options
-rw-r--r-- | src/com/android/launcher3/AutoInstallsLayout.java | 13 | ||||
-rw-r--r-- | src/com/android/launcher3/FocusHelper.java | 12 | ||||
-rw-r--r-- | src/com/android/launcher3/Hotseat.java | 75 | ||||
-rw-r--r-- | src/com/android/launcher3/InvariantDeviceProfile.java | 17 | ||||
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 26 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherBackupHelper.java | 1 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherModel.java | 5 | ||||
-rw-r--r-- | src/com/android/launcher3/LauncherStateTransitionAnimation.java | 4 | ||||
-rw-r--r-- | src/com/android/launcher3/Workspace.java | 4 | ||||
-rw-r--r-- | src/com/android/launcher3/model/GridSizeMigrationTask.java | 31 | ||||
-rw-r--r-- | src/com/android/launcher3/util/FocusLogic.java | 17 | ||||
-rw-r--r-- | src_config/com/android/launcher3/config/FeatureFlags.java | 2 | ||||
-rw-r--r-- | tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java | 6 |
13 files changed, 102 insertions, 111 deletions
diff --git a/src/com/android/launcher3/AutoInstallsLayout.java b/src/com/android/launcher3/AutoInstallsLayout.java index f3a2bdc98..0d5043bb2 100644 --- a/src/com/android/launcher3/AutoInstallsLayout.java +++ b/src/com/android/launcher3/AutoInstallsLayout.java @@ -37,6 +37,7 @@ import android.util.Patterns; import com.android.launcher3.LauncherProvider.SqlArguments; import com.android.launcher3.LauncherSettings.Favorites; +import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.util.Thunk; import org.xmlpull.v1.XmlPullParser; @@ -157,7 +158,7 @@ public class AutoInstallsLayout { protected final Resources mSourceRes; protected final int mLayoutId; - private final int mHotseatAllAppsRank; + private final InvariantDeviceProfile mIdp; private final int mRowCount; private final int mColumnCount; @@ -181,10 +182,9 @@ public class AutoInstallsLayout { mSourceRes = res; mLayoutId = layoutId; - InvariantDeviceProfile idp = LauncherAppState.getInstance().getInvariantDeviceProfile(); - mHotseatAllAppsRank = idp.hotseatAllAppsRank; - mRowCount = idp.numRows; - mColumnCount = idp.numColumns; + mIdp = LauncherAppState.getInstance().getInvariantDeviceProfile(); + mRowCount = mIdp.numRows; + mColumnCount = mIdp.numColumns; } /** @@ -231,7 +231,8 @@ public class AutoInstallsLayout { out[0] = Favorites.CONTAINER_HOTSEAT; // Hack: hotseat items are stored using screen ids long rank = Long.parseLong(getAttributeValue(parser, ATTR_RANK)); - out[1] = (rank < mHotseatAllAppsRank) ? rank : (rank + 1); + out[1] = (FeatureFlags.NO_ALL_APPS_ICON || rank < mIdp.getAllAppsButtonRank()) + ? rank : (rank + 1); } else { out[0] = Favorites.CONTAINER_DESKTOP; out[1] = Long.parseLong(getAttributeValue(parser, ATTR_SCREEN)); diff --git a/src/com/android/launcher3/FocusHelper.java b/src/com/android/launcher3/FocusHelper.java index 0b9e4ac07..c73ceea14 100644 --- a/src/com/android/launcher3/FocusHelper.java +++ b/src/com/android/launcher3/FocusHelper.java @@ -239,14 +239,12 @@ public class FocusHelper { if (keyCode == KeyEvent.KEYCODE_DPAD_UP && !profile.isVerticalBarLayout()) { - matrix = FocusLogic.createSparseMatrixWithHotseat(iconLayout, hotseatLayout, - true /* hotseat horizontal */, profile.inv.hotseatAllAppsRank); + matrix = FocusLogic.createSparseMatrixWithHotseat(iconLayout, hotseatLayout, profile); iconIndex += iconParent.getChildCount(); parent = iconParent; } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT && profile.isVerticalBarLayout()) { - matrix = FocusLogic.createSparseMatrixWithHotseat(iconLayout, hotseatLayout, - false /* hotseat horizontal */, profile.inv.hotseatAllAppsRank); + matrix = FocusLogic.createSparseMatrixWithHotseat(iconLayout, hotseatLayout, profile); iconIndex += iconParent.getChildCount(); parent = iconParent; } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT && @@ -372,12 +370,10 @@ public class FocusHelper { // to take a user to the hotseat. For other dpad navigation, do not use the matrix extended // with the hotseat. if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN && !profile.isVerticalBarLayout()) { - matrix = FocusLogic.createSparseMatrixWithHotseat(iconLayout, hotseatLayout, - true /* horizontal */, profile.inv.hotseatAllAppsRank); + matrix = FocusLogic.createSparseMatrixWithHotseat(iconLayout, hotseatLayout, profile); } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT && profile.isVerticalBarLayout()) { - matrix = FocusLogic.createSparseMatrixWithHotseat(iconLayout, hotseatLayout, - false /* horizontal */, profile.inv.hotseatAllAppsRank); + matrix = FocusLogic.createSparseMatrixWithHotseat(iconLayout, hotseatLayout, profile); } else if (isUninstallKeyChord(e)) { matrix = FocusLogic.createSparseMatrix(iconLayout); if (UninstallDropTarget.supportsDrop(launcher, itemInfo)) { diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index 7e1ecf5af..9f86a0b25 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -31,6 +31,7 @@ import android.view.ViewDebug; import android.widget.FrameLayout; import android.widget.TextView; +import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.dynamicui.ExtractedColors; import com.android.launcher3.logging.UserEventDispatcher; import com.android.launcher3.userevent.nano.LauncherLogProto; @@ -44,9 +45,6 @@ public class Hotseat extends FrameLayout private Launcher mLauncher; @ViewDebug.ExportedProperty(category = "launcher") - private int mAllAppsButtonRank; - - @ViewDebug.ExportedProperty(category = "launcher") private final boolean mHasVerticalHotseat; @ViewDebug.ExportedProperty(category = "launcher") @@ -106,16 +104,10 @@ public class Hotseat extends FrameLayout return mHasVerticalHotseat ? (mContent.getCountY() - (rank + 1)) : 0; } - public boolean isAllAppsButtonRank(int rank) { - return rank == mAllAppsButtonRank; - } - @Override protected void onFinishInflate() { super.onFinishInflate(); DeviceProfile grid = mLauncher.getDeviceProfile(); - - mAllAppsButtonRank = grid.inv.hotseatAllAppsRank; mContent = (CellLayout) findViewById(R.id.layout); if (grid.isLandscape && !grid.isLargeTablet) { mContent.setGridSize(1, (int) grid.inv.numHotseatIcons); @@ -130,38 +122,41 @@ public class Hotseat extends FrameLayout void resetLayout() { mContent.removeAllViewsInLayout(); - // Add the Apps button - Context context = getContext(); - - LayoutInflater inflater = LayoutInflater.from(context); - TextView allAppsButton = (TextView) - inflater.inflate(R.layout.all_apps_button, mContent, false); - Drawable d = context.getResources().getDrawable(R.drawable.all_apps_button_icon); - - mLauncher.resizeIconDrawable(d); - int scaleDownPx = getResources().getDimensionPixelSize(R.dimen.all_apps_button_scale_down); - Rect bounds = d.getBounds(); - d.setBounds(bounds.left, bounds.top + scaleDownPx / 2, bounds.right - scaleDownPx, - bounds.bottom - scaleDownPx / 2); - allAppsButton.setCompoundDrawables(null, d, null, null); - - allAppsButton.setContentDescription(context.getString(R.string.all_apps_button_label)); - allAppsButton.setOnKeyListener(new HotseatIconKeyEventListener()); - if (mLauncher != null) { - mLauncher.setAllAppsButton(allAppsButton); - allAppsButton.setOnTouchListener(mLauncher.getHapticFeedbackTouchListener()); - allAppsButton.setOnClickListener(mLauncher); - allAppsButton.setOnLongClickListener(mLauncher); - allAppsButton.setOnFocusChangeListener(mLauncher.mFocusHandler); - } + if (!FeatureFlags.NO_ALL_APPS_ICON) { + // Add the Apps button + Context context = getContext(); + int allAppsButtonRank = mLauncher.getDeviceProfile().inv.getAllAppsButtonRank(); + + LayoutInflater inflater = LayoutInflater.from(context); + TextView allAppsButton = (TextView) + inflater.inflate(R.layout.all_apps_button, mContent, false); + Drawable d = context.getResources().getDrawable(R.drawable.all_apps_button_icon); + + mLauncher.resizeIconDrawable(d); + int scaleDownPx = getResources().getDimensionPixelSize(R.dimen.all_apps_button_scale_down); + Rect bounds = d.getBounds(); + d.setBounds(bounds.left, bounds.top + scaleDownPx / 2, bounds.right - scaleDownPx, + bounds.bottom - scaleDownPx / 2); + allAppsButton.setCompoundDrawables(null, d, null, null); + + allAppsButton.setContentDescription(context.getString(R.string.all_apps_button_label)); + allAppsButton.setOnKeyListener(new HotseatIconKeyEventListener()); + if (mLauncher != null) { + mLauncher.setAllAppsButton(allAppsButton); + allAppsButton.setOnTouchListener(mLauncher.getHapticFeedbackTouchListener()); + allAppsButton.setOnClickListener(mLauncher); + allAppsButton.setOnLongClickListener(mLauncher); + allAppsButton.setOnFocusChangeListener(mLauncher.mFocusHandler); + } - // Note: We do this to ensure that the hotseat is always laid out in the orientation of - // the hotseat in order regardless of which orientation they were added - int x = getCellXFromOrder(mAllAppsButtonRank); - int y = getCellYFromOrder(mAllAppsButtonRank); - CellLayout.LayoutParams lp = new CellLayout.LayoutParams(x,y,1,1); - lp.canReorder = false; - mContent.addViewToCellLayout(allAppsButton, -1, allAppsButton.getId(), lp, true); + // Note: We do this to ensure that the hotseat is always laid out in the orientation of + // the hotseat in order regardless of which orientation they were added + int x = getCellXFromOrder(allAppsButtonRank); + int y = getCellYFromOrder(allAppsButtonRank); + CellLayout.LayoutParams lp = new CellLayout.LayoutParams(x, y, 1, 1); + lp.canReorder = false; + mContent.addViewToCellLayout(allAppsButton, -1, allAppsButton.getId(), lp, true); + } } @Override diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index 0742df9b4..da95d66f9 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -23,6 +23,8 @@ import android.util.DisplayMetrics; import android.view.Display; import android.view.WindowManager; +import com.android.launcher3.config.FeatureFlags; +import com.android.launcher3.config.ProviderConfig; import com.android.launcher3.util.Thunk; import java.util.ArrayList; @@ -77,9 +79,6 @@ public class InvariantDeviceProfile { float hotseatIconSize; int defaultLayoutId; - // Derived invariant properties - public int hotseatAllAppsRank; - DeviceProfile landscapeProfile; DeviceProfile portraitProfile; @@ -141,7 +140,6 @@ public class InvariantDeviceProfile { numRows = closestProfile.numRows; numColumns = closestProfile.numColumns; numHotseatIcons = closestProfile.numHotseatIcons; - hotseatAllAppsRank = (int) (numHotseatIcons / 2); defaultLayoutId = closestProfile.defaultLayoutId; numFolderRows = closestProfile.numFolderRows; numFolderColumns = closestProfile.numFolderColumns; @@ -304,6 +302,17 @@ public class InvariantDeviceProfile { return this; } + public int getAllAppsButtonRank() { + if (ProviderConfig.IS_DOGFOOD_BUILD && FeatureFlags.NO_ALL_APPS_ICON) { + throw new IllegalAccessError("Accessing all apps rank when all-apps is disabled"); + } + return numHotseatIcons / 2; + } + + public boolean isAllAppsButtonRank(int rank) { + return rank == getAllAppsButtonRank(); + } + private float weight(float x0, float y0, float x1, float y1, float pow) { float d = dist(x0, y0, x1, y1); if (Float.compare(d, 0f) == 0) { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index c1c41a8c2..d768ea87c 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1457,13 +1457,14 @@ public class Launcher extends Activity /** * Sets the all apps button. This method is called from {@link Hotseat}. + * TODO: Get rid of this. */ public void setAllAppsButton(View allAppsButton) { mAllAppsButton = allAppsButton; } - public View getAllAppsButton() { - return mAllAppsButton; + public View getStartViewForAllAppsRevealAnimation() { + return FeatureFlags.NO_ALL_APPS_ICON ? mPageIndicator : mAllAppsButton; } public View getWidgetsButton() { @@ -2491,7 +2492,7 @@ public class Launcher extends Activity if (v instanceof FolderIcon) { onClickFolderIcon(v); } - } else if (v instanceof PageIndicator || v == mAllAppsButton) { + } else if (v instanceof PageIndicator || (v == mAllAppsButton && mAllAppsButton != null)) { onClickAllAppsButton(v); } else if (tag instanceof AppInfo) { startAppShortcutOrInfoActivity(v); @@ -3096,7 +3097,7 @@ public class Launcher extends Activity if (isWorkspaceLocked()) return false; if (mState != State.WORKSPACE) return false; - if (v == mAllAppsButton) { + if (v == mAllAppsButton && mAllAppsButton != null) { onLongClickAllAppsButton(v); return true; } @@ -3127,7 +3128,6 @@ public class Launcher extends Activity // The hotseat touch handling does not go through Workspace, and we always allow long press // on hotseat items. - final boolean inHotseat = isHotseatLayout(v); if (!mDragController.isDragging()) { if (itemUnderLongClick == null) { // User long pressed on empty space @@ -3138,13 +3138,12 @@ public class Launcher extends Activity } else { showOverviewMode(true); mHotseat.requestDisallowInterceptTouchEvent(true); - } } else { - final boolean isAllAppsButton = inHotseat && isAllAppsButtonRank( - mHotseat.getOrderInHotseat( - longClickCellInfo.cellX, - longClickCellInfo.cellY)); + final boolean isAllAppsButton = + !FeatureFlags.NO_ALL_APPS_ICON && isHotseatLayout(v) && + mDeviceProfile.inv.isAllAppsButtonRank(mHotseat.getOrderInHotseat( + longClickCellInfo.cellX, longClickCellInfo.cellY)); if (!(itemUnderLongClick instanceof Folder || isAllAppsButton)) { // User long pressed on an item mWorkspace.startDrag(longClickCellInfo); @@ -3989,13 +3988,6 @@ public class Launcher extends Activity } } - public boolean isAllAppsButtonRank(int rank) { - if (mHotseat != null) { - return mHotseat.isAllAppsButtonRank(rank); - } - return false; - } - private boolean canRunNewAppsAnimation() { long diff = System.currentTimeMillis() - mDragController.getLastGestureUpTime(); return diff > (NEW_APPS_ANIMATION_INACTIVE_TIMEOUT_SECONDS * 1000) diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java index 7238f7098..bca2ffbe0 100644 --- a/src/com/android/launcher3/LauncherBackupHelper.java +++ b/src/com/android/launcher3/LauncherBackupHelper.java @@ -439,7 +439,6 @@ public class LauncherBackupHelper implements BackupHelper { data.desktopRows = profile.numRows; data.desktopCols = profile.numColumns; data.hotseatCount = profile.numHotseatIcons; - data.allappsRank = profile.hotseatAllAppsRank; return data; } diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 4c80ccf69..a5e703eb0 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -196,7 +196,6 @@ public class LauncherModel extends BroadcastReceiver public void bindAppInfosRemoved(ArrayList<AppInfo> appInfos); public void notifyWidgetProvidersChanged(); public void bindWidgetsModel(WidgetsModel model); - public boolean isAllAppsButtonRank(int rank); public void onPageBoundSynchronously(int page); public void executeOnNextDraw(ViewOnDrawExecutor executor); } @@ -1450,8 +1449,8 @@ public class LauncherModel extends BroadcastReceiver long containerIndex = item.screenId; if (item.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) { // Return early if we detect that an item is under the hotseat button - if (mCallbacks == null || - mCallbacks.get().isAllAppsButtonRank((int) item.screenId)) { + if (!FeatureFlags.NO_ALL_APPS_ICON && + profile.isAllAppsButtonRank((int) item.screenId)) { Log.e(TAG, "Error loading shortcut into hotseat " + item + " into position (" + item.screenId + ":" + item.cellX + "," + item.cellY + ") occupied by all apps"); diff --git a/src/com/android/launcher3/LauncherStateTransitionAnimation.java b/src/com/android/launcher3/LauncherStateTransitionAnimation.java index bdd026d30..fd4aff98e 100644 --- a/src/com/android/launcher3/LauncherStateTransitionAnimation.java +++ b/src/com/android/launcher3/LauncherStateTransitionAnimation.java @@ -142,7 +142,7 @@ public class LauncherStateTransitionAnimation { public void startAnimationToAllApps(final Workspace.State fromWorkspaceState, final boolean animated, final boolean startSearchAfterTransition) { final AllAppsContainerView toView = mLauncher.getAppsView(); - final View buttonView = mLauncher.getAllAppsButton(); + final View buttonView = mLauncher.getStartViewForAllAppsRevealAnimation(); PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks(1f) { @Override public float getMaterialRevealViewStartFinalRadius() { @@ -525,7 +525,7 @@ public class LauncherStateTransitionAnimation { }; // Only animate the search bar if animating to spring loaded mode from all apps mCurrentAnimation = startAnimationToWorkspaceFromOverlay(fromWorkspaceState, toWorkspaceState, - mLauncher.getAllAppsButton(), appsView, + mLauncher.getStartViewForAllAppsRevealAnimation(), appsView, animated, type, onCompleteRunnable, cb); } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index ca46d74b6..cb88fc6bd 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2509,9 +2509,9 @@ public class Workspace extends PagedView // Don't show the message if we are dropping on the AllApps button and the hotseat // is full boolean isHotseat = mLauncher.isHotseatLayout(dropTargetLayout); - if (mTargetCell != null && isHotseat) { + if (mTargetCell != null && isHotseat && !FeatureFlags.NO_ALL_APPS_ICON) { Hotseat hotseat = mLauncher.getHotseat(); - if (hotseat.isAllAppsButtonRank( + if (mLauncher.getDeviceProfile().inv.isAllAppsButtonRank( hotseat.getOrderInHotseat(mTargetCell[0], mTargetCell[1]))) { return false; } diff --git a/src/com/android/launcher3/model/GridSizeMigrationTask.java b/src/com/android/launcher3/model/GridSizeMigrationTask.java index 8762fef74..8e8e551eb 100644 --- a/src/com/android/launcher3/model/GridSizeMigrationTask.java +++ b/src/com/android/launcher3/model/GridSizeMigrationTask.java @@ -49,7 +49,7 @@ public class GridSizeMigrationTask { private static final boolean DEBUG = true; private static final String KEY_MIGRATION_SRC_WORKSPACE_SIZE = "migration_src_workspace_size"; - private static final String KEY_MIGRATION_SRC_HOTSEAT_SIZE = "migration_src_hotseat_size"; + private static final String KEY_MIGRATION_SRC_HOTSEAT_COUNT = "migration_src_hotseat_count"; // Set of entries indicating minimum size a widget can be resized to. This is used during // restore in case the widget has not been installed yet. @@ -78,9 +78,7 @@ public class GridSizeMigrationTask { private final boolean mShouldRemoveX, mShouldRemoveY; private final int mSrcHotseatSize; - private final int mSrcAllAppsRank; private final int mDestHotseatSize; - private final int mDestAllAppsRank; protected GridSizeMigrationTask(Context context, InvariantDeviceProfile idp, HashSet<String> validPackages, HashMap<String, Point> widgetMinSize, @@ -100,22 +98,19 @@ public class GridSizeMigrationTask { mShouldRemoveY = mTrgY < mSrcY; // Non-used variables - mSrcHotseatSize = mSrcAllAppsRank = mDestHotseatSize = mDestAllAppsRank = -1; + mSrcHotseatSize = mDestHotseatSize = -1; } protected GridSizeMigrationTask(Context context, InvariantDeviceProfile idp, HashSet<String> validPackages, - int srcHotseatSize, int srcAllAppsRank, - int destHotseatSize, int destAllAppsRank) { + int srcHotseatSize, int destHotseatSize) { mContext = context; mIdp = idp; mValidPackages = validPackages; mSrcHotseatSize = srcHotseatSize; - mSrcAllAppsRank = srcAllAppsRank; mDestHotseatSize = destHotseatSize; - mDestAllAppsRank = destAllAppsRank; // Non-used variables mSrcX = mSrcY = mTrgX = mTrgY = -1; @@ -187,7 +182,7 @@ public class GridSizeMigrationTask { } newScreenId++; - if (newScreenId == mDestAllAppsRank) { + if (!FeatureFlags.NO_ALL_APPS_ICON && mIdp.isAllAppsButtonRank(newScreenId)) { newScreenId++; } } @@ -894,8 +889,7 @@ public class GridSizeMigrationTask { Utilities.getPrefs(context).edit() .putString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, getPointString((int) srcProfile.desktopCols, (int) srcProfile.desktopRows)) - .putString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, - getPointString((int) srcProfile.hotseatCount, srcProfile.allappsRank)) + .putInt(KEY_MIGRATION_SRC_HOTSEAT_COUNT, (int) srcProfile.hotseatCount) .putStringSet(KEY_MIGRATION_WIDGET_MINSIZE, widgets) .apply(); } @@ -909,10 +903,9 @@ public class GridSizeMigrationTask { InvariantDeviceProfile idp = LauncherAppState.getInstance().getInvariantDeviceProfile(); String gridSizeString = getPointString(idp.numColumns, idp.numRows); - String hotseatSizeString = getPointString(idp.numHotseatIcons, idp.hotseatAllAppsRank); if (gridSizeString.equals(prefs.getString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, "")) && - hotseatSizeString.equals(prefs.getString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, ""))) { + idp.numHotseatIcons != prefs.getInt(KEY_MIGRATION_SRC_HOTSEAT_COUNT, idp.numHotseatIcons)) { // Skip if workspace and hotseat sizes have not changed. return true; } @@ -923,17 +916,13 @@ public class GridSizeMigrationTask { HashSet validPackages = getValidPackages(context); // Hotseat - Point srcHotseatSize = parsePoint(prefs.getString( - KEY_MIGRATION_SRC_HOTSEAT_SIZE, hotseatSizeString)); - if (srcHotseatSize.x != idp.numHotseatIcons || - srcHotseatSize.y != idp.hotseatAllAppsRank) { + int srcHotseatCount = prefs.getInt(KEY_MIGRATION_SRC_HOTSEAT_COUNT, idp.numHotseatIcons); + if (srcHotseatCount != idp.numHotseatIcons) { // Migrate hotseat. dbChanged = new GridSizeMigrationTask(context, LauncherAppState.getInstance().getInvariantDeviceProfile(), - validPackages, - srcHotseatSize.x, srcHotseatSize.y, - idp.numHotseatIcons, idp.hotseatAllAppsRank).migrateHotseat(); + validPackages, srcHotseatCount, idp.numHotseatIcons).migrateHotseat(); } // Grid size @@ -1014,7 +1003,7 @@ public class GridSizeMigrationTask { // Save current configuration, so that the migration does not run again. prefs.edit() .putString(KEY_MIGRATION_SRC_WORKSPACE_SIZE, gridSizeString) - .putString(KEY_MIGRATION_SRC_HOTSEAT_SIZE, hotseatSizeString) + .putInt(KEY_MIGRATION_SRC_HOTSEAT_COUNT, idp.numHotseatIcons) .remove(KEY_MIGRATION_WIDGET_MINSIZE) .apply(); } diff --git a/src/com/android/launcher3/util/FocusLogic.java b/src/com/android/launcher3/util/FocusLogic.java index a5498f7b9..163c953bb 100644 --- a/src/com/android/launcher3/util/FocusLogic.java +++ b/src/com/android/launcher3/util/FocusLogic.java @@ -22,7 +22,10 @@ import android.view.View; import android.view.ViewGroup; import com.android.launcher3.CellLayout; +import com.android.launcher3.DeviceProfile; +import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.ShortcutAndWidgetContainer; +import com.android.launcher3.config.FeatureFlags; import java.util.Arrays; @@ -190,15 +193,17 @@ public class FocusLogic { * in portrait orientation. In landscape, [(icon + hotseat) column count x (icon row count)] */ // TODO: get rid of the dynamic matrix creation - public static int[][] createSparseMatrixWithHotseat(CellLayout iconLayout, - CellLayout hotseatLayout, boolean isHotseatHorizontal, int allappsiconRank) { + public static int[][] createSparseMatrixWithHotseat( + CellLayout iconLayout, CellLayout hotseatLayout, DeviceProfile dp) { ViewGroup iconParent = iconLayout.getShortcutsAndWidgets(); ViewGroup hotseatParent = hotseatLayout.getShortcutsAndWidgets(); - boolean moreIconsInHotseatThanWorkspace = isHotseatHorizontal ? - hotseatLayout.getCountX() > iconLayout.getCountX() : - hotseatLayout.getCountY() > iconLayout.getCountY(); + boolean isHotseatHorizontal = !dp.isVerticalBarLayout(); + boolean moreIconsInHotseatThanWorkspace = !FeatureFlags.NO_ALL_APPS_ICON && + (isHotseatHorizontal + ? hotseatLayout.getCountX() > iconLayout.getCountX() + : hotseatLayout.getCountY() > iconLayout.getCountY()); int m, n; if (isHotseatHorizontal) { @@ -210,6 +215,7 @@ public class FocusLogic { } int[][] matrix = createFullMatrix(m, n); if (moreIconsInHotseatThanWorkspace) { + int allappsiconRank = dp.inv.getAllAppsButtonRank(); if (isHotseatHorizontal) { for (int j = 0; j < n; j++) { matrix[allappsiconRank][j] = ALL_APPS_COLUMN; @@ -229,6 +235,7 @@ public class FocusLogic { int cx = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellX; int cy = ((CellLayout.LayoutParams) cell.getLayoutParams()).cellY; if (moreIconsInHotseatThanWorkspace) { + int allappsiconRank = dp.inv.getAllAppsButtonRank(); if (isHotseatHorizontal && cx >= allappsiconRank) { // Add 1 to account for the All Apps button. cx++; diff --git a/src_config/com/android/launcher3/config/FeatureFlags.java b/src_config/com/android/launcher3/config/FeatureFlags.java index 9806afd21..69d8f0f5f 100644 --- a/src_config/com/android/launcher3/config/FeatureFlags.java +++ b/src_config/com/android/launcher3/config/FeatureFlags.java @@ -33,4 +33,6 @@ public final class FeatureFlags { // Feature flag to enable moving the QSB on the 0th screen of the workspace public static final boolean QSB_ON_FIRST_SCREEN = true; + // When enabled the all-apps icon is not added to the hotseat. + public static final boolean NO_ALL_APPS_ICON = true; } diff --git a/tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java b/tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java index ebf06ba38..08a81f0c8 100644 --- a/tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java +++ b/tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java @@ -58,7 +58,8 @@ public class GridSizeMigrationTaskTest extends ProviderTestCase2<TestLauncherPro addItem(APPLICATION, 4, HOTSEAT, 0, 0), }; - new GridSizeMigrationTask(getMockContext(), mIdp, mValidPackages, 5, 2, 3, 1) + mIdp.numHotseatIcons = 3; + new GridSizeMigrationTask(getMockContext(), mIdp, mValidPackages, 5, 3) .migrateHotseat(); // First & last items are dropped as they have the least weight. verifyHotseat(hotseatItems[1], -1, hotseatItems[3]); @@ -73,7 +74,8 @@ public class GridSizeMigrationTaskTest extends ProviderTestCase2<TestLauncherPro addItem(10, 4, HOTSEAT, 0, 0), }; - new GridSizeMigrationTask(getMockContext(), mIdp, mValidPackages, 5, 2, 3, 1) + mIdp.numHotseatIcons = 3; + new GridSizeMigrationTask(getMockContext(), mIdp, mValidPackages, 5, 3) .migrateHotseat(); // First & third items are dropped as they have the least weight. verifyHotseat(hotseatItems[1], -1, hotseatItems[4]); |