mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-02 17:06:49 +00:00
Apply local color extraction during drag-n-drop
Test: Drag a test widget around and observe local extract color
is applied.
Bug: b/182282587, b/182816217
Change-Id: If63a9d91ceb2102d5d913bca85997b8be07b1adf
This commit is contained in:
@@ -60,6 +60,7 @@ import com.android.launcher3.LauncherSettings.Favorites;
|
||||
import com.android.launcher3.accessibility.DragAndDropAccessibilityDelegate;
|
||||
import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.dragndrop.AppWidgetHostViewDrawable;
|
||||
import com.android.launcher3.dragndrop.DraggableView;
|
||||
import com.android.launcher3.folder.PreviewBackground;
|
||||
import com.android.launcher3.graphics.DragPreviewProvider;
|
||||
@@ -180,6 +181,9 @@ public class CellLayout extends ViewGroup {
|
||||
private final ArrayList<View> mIntersectingViews = new ArrayList<>();
|
||||
private final Rect mOccupiedRect = new Rect();
|
||||
private final int[] mDirectionVector = new int[2];
|
||||
private final Workspace mWorkspace;
|
||||
private final DeviceProfile mDeviceProfile;
|
||||
|
||||
final int[] mPreviousReorderDirection = new int[2];
|
||||
private static final int INVALID_DIRECTION = -100;
|
||||
|
||||
@@ -209,15 +213,15 @@ public class CellLayout extends ViewGroup {
|
||||
setWillNotDraw(false);
|
||||
setClipToPadding(false);
|
||||
mActivity = ActivityContext.lookupContext(context);
|
||||
mWorkspace = Launcher.cast(mActivity).getWorkspace();
|
||||
mDeviceProfile = mActivity.getDeviceProfile();
|
||||
|
||||
DeviceProfile grid = mActivity.getDeviceProfile();
|
||||
|
||||
mBorderSpacing = grid.cellLayoutBorderSpacingPx;
|
||||
mBorderSpacing = mDeviceProfile.cellLayoutBorderSpacingPx;
|
||||
mCellWidth = mCellHeight = -1;
|
||||
mFixedCellWidth = mFixedCellHeight = -1;
|
||||
|
||||
mCountX = grid.inv.numColumns;
|
||||
mCountY = grid.inv.numRows;
|
||||
mCountX = mDeviceProfile.inv.numColumns;
|
||||
mCountY = mDeviceProfile.inv.numRows;
|
||||
mOccupied = new GridOccupancy(mCountX, mCountY);
|
||||
mTmpOccupied = new GridOccupancy(mCountX, mCountY);
|
||||
|
||||
@@ -234,7 +238,7 @@ public class CellLayout extends ViewGroup {
|
||||
mBackground.setCallback(this);
|
||||
mBackground.setAlpha(0);
|
||||
|
||||
mReorderPreviewAnimationMagnitude = (REORDER_PREVIEW_MAGNITUDE * grid.iconSizePx);
|
||||
mReorderPreviewAnimationMagnitude = (REORDER_PREVIEW_MAGNITUDE * mDeviceProfile.iconSizePx);
|
||||
|
||||
// Initialize the data structures used for the drag visualization.
|
||||
mEaseOutInterpolator = Interpolators.DEACCEL_2_5; // Quint ease out
|
||||
@@ -961,15 +965,18 @@ public class CellLayout extends ViewGroup {
|
||||
final int oldDragCellX = mDragCell[0];
|
||||
final int oldDragCellY = mDragCell[1];
|
||||
|
||||
if (outlineProvider == null || outlineProvider.generatedDragOutline == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Bitmap dragOutline = outlineProvider.generatedDragOutline;
|
||||
if (cellX != oldDragCellX || cellY != oldDragCellY) {
|
||||
mDragCell[0] = cellX;
|
||||
mDragCell[1] = cellY;
|
||||
|
||||
applyColorExtraction(dragObject, mDragCell, spanX, spanY);
|
||||
|
||||
if (outlineProvider == null || outlineProvider.generatedDragOutline == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Bitmap dragOutline = outlineProvider.generatedDragOutline;
|
||||
|
||||
final int oldIndex = mDragOutlineCurrent;
|
||||
mDragOutlineAnims[oldIndex].animateOut();
|
||||
mDragOutlineCurrent = (oldIndex + 1) % mDragOutlines.length;
|
||||
@@ -1011,6 +1018,20 @@ public class CellLayout extends ViewGroup {
|
||||
}
|
||||
}
|
||||
|
||||
/** Applies the local color extraction to a dragging widget object. */
|
||||
private void applyColorExtraction(DropTarget.DragObject dragObject, int[] targetCell, int spanX,
|
||||
int spanY) {
|
||||
// Apply local extracted color if the DragView is an AppWidgetHostViewDrawable.
|
||||
Drawable drawable = dragObject.dragView.getDrawable();
|
||||
if (drawable instanceof AppWidgetHostViewDrawable) {
|
||||
int screenId = mWorkspace.getIdForScreen(this);
|
||||
int pageId = mWorkspace.getPageIndexForScreenId(screenId);
|
||||
AppWidgetHostViewDrawable hostViewDrawable = ((AppWidgetHostViewDrawable) drawable);
|
||||
cellToRect(targetCell[0], targetCell[1], spanX, spanY, mTempRect);
|
||||
hostViewDrawable.getAppWidgetHostView().handleDrag(mTempRect, pageId);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("StringFormatMatches")
|
||||
public String getItemMoveDescription(int cellX, int cellY) {
|
||||
if (mContainerType == HOTSEAT) {
|
||||
@@ -2076,7 +2097,7 @@ public class CellLayout extends ViewGroup {
|
||||
private void commitTempPlacement() {
|
||||
mTmpOccupied.copyTo(mOccupied);
|
||||
|
||||
int screenId = Launcher.cast(mActivity).getWorkspace().getIdForScreen(this);
|
||||
int screenId = mWorkspace.getIdForScreen(this);
|
||||
int container = Favorites.CONTAINER_DESKTOP;
|
||||
|
||||
if (mContainerType == HOTSEAT) {
|
||||
|
||||
Reference in New Issue
Block a user