Align hotseat drop target with the adjusted hotseat
Added logic to adjust the drop target to account for changes in the
hotseat position when accommodating the bubble bar.
Fixes: 382348730
Test: all tests in package src.com.android.launcher3.celllayout
Test: Manual. Ensure bubbles are present, and the hotseat width is
adjusted. Long-press any icon in the hotseat, begin dragging it over
other hotseat icons, and observe that the drop target is drawn
appropriately.
Flag: com.android.wm.shell.enable_bubble_bar
Change-Id: Ice961f40ace03077ab8c9312a93eda1a16d7da34
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index df5f520..3d71ff1 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -1816,7 +1816,8 @@
+ (int) Math.ceil(getUnusedHorizontalSpace() / 2f);
final int vStartPadding = getPaddingTop();
- int x = hStartPadding + (cellX * mBorderSpace.x) + (cellX * cellWidth);
+ int x = hStartPadding + (cellX * mBorderSpace.x) + (cellX * cellWidth)
+ + getTranslationXForCell(cellX, cellY);
int y = vStartPadding + (cellY * mBorderSpace.y) + (cellY * cellHeight);
int width = cellHSpan * cellWidth + ((cellHSpan - 1) * mBorderSpace.x);
@@ -1825,6 +1826,11 @@
resultRect.set(x, y, x + width, y + height);
}
+ /** Enables successors to provide an X adjustment for the cell. */
+ protected int getTranslationXForCell(int cellX, int cellY) {
+ return 0;
+ }
+
public void markCellsAsOccupiedForView(View view) {
if (view instanceof LauncherAppWidgetHostView
&& view.getTag() instanceof LauncherAppWidgetInfo) {
diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java
index b20d8a5..1c18179 100644
--- a/src/com/android/launcher3/Hotseat.java
+++ b/src/com/android/launcher3/Hotseat.java
@@ -36,6 +36,7 @@
import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
+import com.android.launcher3.ShortcutAndWidgetContainer.TranslationProvider;
import com.android.launcher3.celllayout.CellLayoutLayoutParams;
import com.android.launcher3.util.HorizontalInsettableView;
import com.android.launcher3.util.MultiPropertyFactory;
@@ -233,6 +234,13 @@
}
@Override
+ protected int getTranslationXForCell(int cellX, int cellY) {
+ TranslationProvider translationProvider = getShortcutsAndWidgets().getTranslationProvider();
+ if (translationProvider == null) return 0;
+ return (int) translationProvider.getTranslationX(cellX);
+ }
+
+ @Override
public void setInsets(Rect insets) {
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams();
DeviceProfile grid = mActivity.getDeviceProfile();
diff --git a/src/com/android/launcher3/ShortcutAndWidgetContainer.java b/src/com/android/launcher3/ShortcutAndWidgetContainer.java
index a8733f2..180ed87 100644
--- a/src/com/android/launcher3/ShortcutAndWidgetContainer.java
+++ b/src/com/android/launcher3/ShortcutAndWidgetContainer.java
@@ -330,8 +330,13 @@
mTranslationProvider = provider;
}
+ /** Returns the current {@link TranslationProvider translation provider}. */
+ public @Nullable TranslationProvider getTranslationProvider() {
+ return mTranslationProvider;
+ }
+
/** Provides translation values to apply when laying out child views. */
- interface TranslationProvider {
+ public interface TranslationProvider {
float getTranslationX(int cellX);
}
}