Use the number of shown hotseat icons instead of database items to store into the DB
It seems this issue was originated from ag/14129534 and we should no
longer use numDatabaseHotseatIcons form IDP and use numShownHotseatIcons
from the DP.
Fix: 305119735
Flag: NA
Test: manuall testing, we don't have this test for landscape
Change-Id: Ie530748f9b77d89ac3298c187ae767643d505cb3
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index dd03035..7e4edd1 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -769,10 +769,10 @@
if (FOLDABLE_SINGLE_PAGE.get() && mDeviceProfile.isTwoPanels) {
mCellPosMapper = new TwoPanelCellPosMapper(mDeviceProfile.inv.numColumns);
} else {
- mCellPosMapper = CellPosMapper.DEFAULT;
+ mCellPosMapper = new CellPosMapper(mDeviceProfile.isVerticalBarLayout(),
+ mDeviceProfile.numShownHotseatIcons);
}
- mModelWriter = mModel.getWriter(getDeviceProfile().isVerticalBarLayout(), true,
- mCellPosMapper, this);
+ mModelWriter = mModel.getWriter(true, mCellPosMapper, this);
return true;
}
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 551735e..c81db63 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -180,10 +180,10 @@
}
@NonNull
- public ModelWriter getWriter(final boolean hasVerticalHotseat, final boolean verifyChanges,
- CellPosMapper cellPosMapper, @Nullable final Callbacks owner) {
- return new ModelWriter(mApp.getContext(), this, mBgDataModel,
- hasVerticalHotseat, verifyChanges, cellPosMapper, owner);
+ public ModelWriter getWriter(final boolean verifyChanges, CellPosMapper cellPosMapper,
+ @Nullable final Callbacks owner) {
+ return new ModelWriter(mApp.getContext(), this, mBgDataModel, verifyChanges, cellPosMapper,
+ owner);
}
@Override
diff --git a/src/com/android/launcher3/celllayout/CellPosMapper.java b/src/com/android/launcher3/celllayout/CellPosMapper.java
index 1891696..b133a1d 100644
--- a/src/com/android/launcher3/celllayout/CellPosMapper.java
+++ b/src/com/android/launcher3/celllayout/CellPosMapper.java
@@ -17,6 +17,7 @@
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_DESKTOP;
+import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.model.data.ItemInfo;
import java.util.Objects;
@@ -26,9 +27,14 @@
*/
public class CellPosMapper {
- public static final CellPosMapper DEFAULT = new CellPosMapper();
+ public static final CellPosMapper DEFAULT = new CellPosMapper(false, -1);
+ private final boolean mHasVerticalHotseat;
+ private final int mNumOfHotseat;
- private CellPosMapper() { }
+ public CellPosMapper(boolean hasVerticalHotseat, int numOfHotseat) {
+ mHasVerticalHotseat = hasVerticalHotseat;
+ mNumOfHotseat = numOfHotseat;
+ }
/**
* Maps the position in model to the position in view
@@ -42,17 +48,22 @@
*/
public CellPos mapPresenterToModel(int presenterX, int presenterY, int presenterScreen,
int container) {
+ if (container == Favorites.CONTAINER_HOTSEAT) {
+ presenterScreen = mHasVerticalHotseat
+ ? mNumOfHotseat - presenterY - 1 : presenterX;
+ }
return new CellPos(presenterX, presenterY, presenterScreen);
}
/**
* Cell mapper which maps two panels into a single layout
*/
- public static class TwoPanelCellPosMapper extends CellPosMapper {
+ public static class TwoPanelCellPosMapper extends CellPosMapper {
private final int mColumnCount;
public TwoPanelCellPosMapper(int columnCount) {
+ super(false, -1);
mColumnCount = columnCount;
}
@@ -103,5 +114,13 @@
public int hashCode() {
return Objects.hash(cellX, cellY, screenId);
}
+
+ @Override
+ public String toString() {
+ return "CellPos{"
+ + "cellX=" + cellX
+ + ", cellY=" + cellY
+ + ", screenId=" + screenId + '}';
+ }
}
}
diff --git a/src/com/android/launcher3/folder/LauncherDelegate.java b/src/com/android/launcher3/folder/LauncherDelegate.java
index c06a0f3..66c9109 100644
--- a/src/com/android/launcher3/folder/LauncherDelegate.java
+++ b/src/com/android/launcher3/folder/LauncherDelegate.java
@@ -28,7 +28,6 @@
import com.android.launcher3.DropTarget;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
-import com.android.launcher3.celllayout.CellPosMapper;
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.logging.InstanceId;
import com.android.launcher3.logging.StatsLogManager.StatsLogger;
@@ -177,8 +176,8 @@
@Override
ModelWriter getModelWriter() {
if (mWriter == null) {
- mWriter = LauncherAppState.getInstance((Context) mContext).getModel()
- .getWriter(false, false, CellPosMapper.DEFAULT, null);
+ mWriter = LauncherAppState.getInstance((Context) mContext).getModel().getWriter(
+ false, mContext.getCellPosMapper(), null);
}
return mWriter;
}
diff --git a/src/com/android/launcher3/model/BaseModelUpdateTask.java b/src/com/android/launcher3/model/BaseModelUpdateTask.java
index 97f540e..529c30a 100644
--- a/src/com/android/launcher3/model/BaseModelUpdateTask.java
+++ b/src/com/android/launcher3/model/BaseModelUpdateTask.java
@@ -101,8 +101,7 @@
public ModelWriter getModelWriter() {
// Updates from model task, do not deal with icon position in hotseat. Also no need to
// verify changes as the ModelTasks always push the changes to callbacks
- return mModel.getWriter(false /* hasVerticalHotseat */, false /* verifyChanges */,
- CellPosMapper.DEFAULT, null);
+ return mModel.getWriter(false /* verifyChanges */, CellPosMapper.DEFAULT, null);
}
public void bindUpdatedWorkspaceItems(@NonNull final List<WorkspaceItemInfo> allUpdates) {
diff --git a/src/com/android/launcher3/model/ModelWriter.java b/src/com/android/launcher3/model/ModelWriter.java
index 2358a9f..55093a3 100644
--- a/src/com/android/launcher3/model/ModelWriter.java
+++ b/src/com/android/launcher3/model/ModelWriter.java
@@ -28,7 +28,6 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherModel.CallbackTask;
import com.android.launcher3.LauncherSettings.Favorites;
@@ -74,7 +73,6 @@
@Nullable
private final Callbacks mOwner;
- private final boolean mHasVerticalHotseat;
private final boolean mVerifyChanges;
// Keep track of delete operations that occur when an Undo option is present; we may not commit.
@@ -83,12 +81,10 @@
private final CellPosMapper mCellPosMapper;
public ModelWriter(Context context, LauncherModel model, BgDataModel dataModel,
- boolean hasVerticalHotseat, boolean verifyChanges, CellPosMapper cellPosMapper,
- @Nullable Callbacks owner) {
+ boolean verifyChanges, CellPosMapper cellPosMapper, @Nullable Callbacks owner) {
mContext = context;
mModel = model;
mBgDataModel = dataModel;
- mHasVerticalHotseat = hasVerticalHotseat;
mVerifyChanges = verifyChanges;
mOwner = owner;
mCellPosMapper = cellPosMapper;
@@ -102,14 +98,8 @@
item.container = container;
item.cellX = modelPos.cellX;
item.cellY = modelPos.cellY;
- // We store hotseat items in canonical form which is this orientation invariant position
- // in the hotseat
- if (container == Favorites.CONTAINER_HOTSEAT) {
- item.screenId = mHasVerticalHotseat
- ? LauncherAppState.getIDP(mContext).numDatabaseHotseatIcons - cellY - 1 : cellX;
- } else {
- item.screenId = modelPos.screenId;
- }
+ item.screenId = modelPos.screenId;
+
}
/**
diff --git a/src/com/android/launcher3/views/ActivityContext.java b/src/com/android/launcher3/views/ActivityContext.java
index 3921e12..ca7abc2 100644
--- a/src/com/android/launcher3/views/ActivityContext.java
+++ b/src/com/android/launcher3/views/ActivityContext.java
@@ -447,7 +447,8 @@
}
default CellPosMapper getCellPosMapper() {
- return CellPosMapper.DEFAULT;
+ DeviceProfile dp = getDeviceProfile();
+ return new CellPosMapper(dp.isVerticalBarLayout(), dp.numShownHotseatIcons);
}
/** Whether bubbles are enabled. */