mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 11:18:21 +00:00
and model position Test: atest CellPosMapperTest Bug: 188081026 Change-Id: If5c6b3df5ad240317bb535c675f6ead94084238e
108 lines
3.4 KiB
Java
108 lines
3.4 KiB
Java
/*
|
|
* Copyright (C) 2026 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.celllayout;
|
|
|
|
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_DESKTOP;
|
|
|
|
import com.android.launcher3.model.data.ItemInfo;
|
|
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* Class for mapping between model position and presenter position.
|
|
*/
|
|
public class CellPosMapper {
|
|
|
|
public static final CellPosMapper DEFAULT = new CellPosMapper();
|
|
|
|
private CellPosMapper() { }
|
|
|
|
/**
|
|
* Maps the position in model to the position in view
|
|
*/
|
|
public CellPos mapModelToPresenter(ItemInfo info) {
|
|
return new CellPos(info.cellX, info.cellY, info.screenId);
|
|
}
|
|
|
|
/**
|
|
* Maps the position in view to the position in model
|
|
*/
|
|
public CellPos mapPresenterToModel(int presenterX, int presenterY, int presenterScreen,
|
|
int container) {
|
|
return new CellPos(presenterX, presenterY, presenterScreen);
|
|
}
|
|
|
|
/**
|
|
* Cell mapper which maps two panels into a single layout
|
|
*/
|
|
public static class TwoPanelCellPosMapper extends CellPosMapper {
|
|
|
|
private final int mColumnCount;
|
|
|
|
public TwoPanelCellPosMapper(int columnCount) {
|
|
mColumnCount = columnCount;
|
|
}
|
|
|
|
/**
|
|
* Maps the position in model to the position in view
|
|
*/
|
|
public CellPos mapModelToPresenter(ItemInfo info) {
|
|
if (info.container != CONTAINER_DESKTOP || (info.screenId % 2) == 0) {
|
|
return super.mapModelToPresenter(info);
|
|
}
|
|
return new CellPos(info.cellX + mColumnCount, info.cellY, info.screenId - 1);
|
|
}
|
|
|
|
@Override
|
|
public CellPos mapPresenterToModel(int presenterX, int presenterY, int presenterScreen,
|
|
int container) {
|
|
if (container == CONTAINER_DESKTOP && (presenterScreen % 2) == 0
|
|
&& presenterX >= mColumnCount) {
|
|
return new CellPos(presenterX - mColumnCount, presenterY, presenterScreen + 1);
|
|
}
|
|
return super.mapPresenterToModel(presenterX, presenterY, presenterScreen, container);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Utility class to indicate the position of a cell
|
|
*/
|
|
public static class CellPos {
|
|
public final int cellX;
|
|
public final int cellY;
|
|
public final int screenId;
|
|
|
|
public CellPos(int cellX, int cellY, int screenId) {
|
|
this.cellX = cellX;
|
|
this.cellY = cellY;
|
|
this.screenId = screenId;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (this == o) return true;
|
|
if (!(o instanceof CellPos)) return false;
|
|
CellPos cellPos = (CellPos) o;
|
|
return cellX == cellPos.cellX && cellY == cellPos.cellY && screenId == cellPos.screenId;
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hash(cellX, cellY, screenId);
|
|
}
|
|
}
|
|
}
|