Merge "resolve merge conflicts of 25e37a85ae to sc-v2-dev" into sc-v2-dev

This commit is contained in:
Pierre Barbier de Reuille
2021-07-01 11:50:42 +00:00
committed by Android (Google) Code Review
4 changed files with 69 additions and 13 deletions
@@ -20,15 +20,12 @@ import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static com.android.launcher3.LauncherState.NORMAL;
import android.animation.AnimatorSet;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Property;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -40,6 +37,7 @@ import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.dragndrop.DragView;
import com.android.launcher3.model.data.ItemInfo;
/**
@@ -212,15 +210,20 @@ public abstract class ButtonDropTarget extends TextView
return;
}
final DragLayer dragLayer = mLauncher.getDragLayer();
final DragView dragView = d.dragView;
final Rect to = getIconRect(d);
final float scale = (float) to.width() / d.dragView.getMeasuredWidth();
d.dragView.detachContentView(/* reattachToPreviousParent= */ true);
final float scale = (float) to.width() / dragView.getMeasuredWidth();
dragView.disableColorExtraction();
dragView.detachContentView(/* reattachToPreviousParent= */ true);
mDropTargetBar.deferOnDragEnd();
Runnable onAnimationEndRunnable = () -> {
completeDrop(d);
mDropTargetBar.onDragEnd();
mLauncher.getStateManager().goToState(NORMAL);
// Only re-enable updates once the workspace is back to normal, which will be after the
// current frame.
post(dragView::resumeColorExtraction);
};
dragLayer.animateView(d.dragView, to, scale, 0.1f, 0.1f,
+7 -2
View File
@@ -1833,8 +1833,11 @@ public class Workspace extends PagedView<WorkspacePageIndicator>
onDropExternal(touchXY, dropTargetLayout, d);
} else {
final View cell = mDragInfo.cell;
final DragView dragView = d.dragView;
boolean droppedOnOriginalCellDuringTransition = false;
Runnable onCompleteRunnable = null;
Runnable onCompleteRunnable = dragView::resumeColorExtraction;
dragView.disableColorExtraction();
if (dropTargetLayout != null && !d.cancelled) {
// Move internally
@@ -1945,7 +1948,9 @@ public class Workspace extends PagedView<WorkspacePageIndicator>
AppWidgetProviderInfo pInfo = hostView.getAppWidgetInfo();
if (pInfo != null && pInfo.resizeMode != AppWidgetProviderInfo.RESIZE_NONE
&& !options.isAccessibleDrag) {
final Runnable previousRunnable = onCompleteRunnable;
onCompleteRunnable = () -> {
previousRunnable.run();
if (!isPageInTransition()) {
AppWidgetResizeFrame.showForWidget(hostView, cellLayout);
}
@@ -2014,7 +2019,7 @@ public class Workspace extends PagedView<WorkspacePageIndicator>
parent.onDropChild(cell);
mLauncher.getStateManager().goToState(NORMAL, SPRING_LOADED_EXIT_DELAY,
onCompleteRunnable == null ? null : forSuccessCallback(onCompleteRunnable));
forSuccessCallback(onCompleteRunnable));
mStatsLogManager.logger().withItemInfo(d.dragInfo).withInstanceId(d.logInstanceId)
.log(LauncherEvent.LAUNCHER_ITEM_DROP_COMPLETED);
}
@@ -63,6 +63,7 @@ import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.util.RunnableList;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.BaseDragLayer;
import com.android.launcher3.widget.LauncherAppWidgetHostView;
/** A custom view for rendering an icon, folder, shortcut or widget during drag-n-drop. */
public abstract class DragView<T extends Context & ActivityContext> extends FrameLayout {
@@ -466,6 +467,24 @@ public abstract class DragView<T extends Context & ActivityContext> extends Fram
}
}
/**
* If the drag view uses color extraction, block it.
*/
public void disableColorExtraction() {
if (mContent instanceof LauncherAppWidgetHostView) {
((LauncherAppWidgetHostView) mContent).disableColorExtraction();
}
}
/**
* If the drag view uses color extraction, restores it.
*/
public void resumeColorExtraction() {
if (mContent instanceof LauncherAppWidgetHostView) {
((LauncherAppWidgetHostView) mContent).enableColorExtraction(/* updateColors= */ false);
}
}
/**
* Removes this view from the {@link DragLayer}.
*
@@ -100,6 +100,7 @@ public class LauncherAppWidgetHostView extends BaseLauncherAppWidgetHostView
private long mDeferUpdatesUntilMillis = 0;
private RemoteViews mDeferredRemoteViews;
private Optional<SparseIntArray> mDeferredColorChange = Optional.empty();
private boolean mEnableColorExtraction = true;
public LauncherAppWidgetHostView(Context context) {
super(context);
@@ -301,12 +302,7 @@ public class LauncherAppWidgetHostView extends BaseLauncherAppWidgetHostView
super.onLayout(changed, left, top, right, bottom);
mIsScrollable = checkScrollableRecursively(this);
if (!mIsInDragMode && getTag() instanceof LauncherAppWidgetInfo) {
LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) getTag();
mDragLayerRelativeCoordinateHelper.viewToRect(this, mCurrentWidgetSize);
updateColorExtraction(mCurrentWidgetSize,
mWorkspace.getPageIndexForScreenId(info.screenId));
}
updateColorExtraction();
}
/** Starts the drag mode. */
@@ -333,6 +329,7 @@ public class LauncherAppWidgetHostView extends BaseLauncherAppWidgetHostView
* @param pageId The workspace page the widget is on.
*/
private void updateColorExtraction(Rect rectInDragLayer, int pageId) {
if (!mEnableColorExtraction) return;
mColorExtractor.getExtractedRectForViewRect(mLauncher, pageId, rectInDragLayer, mTempRectF);
if (mTempRectF.isEmpty()) {
@@ -347,6 +344,38 @@ public class LauncherAppWidgetHostView extends BaseLauncherAppWidgetHostView
}
}
/**
* Update the color extraction, using the current position of the app widget.
*/
private void updateColorExtraction() {
if (!mIsInDragMode && getTag() instanceof LauncherAppWidgetInfo) {
LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) getTag();
mDragLayerRelativeCoordinateHelper.viewToRect(this, mCurrentWidgetSize);
updateColorExtraction(mCurrentWidgetSize,
mWorkspace.getPageIndexForScreenId(info.screenId));
}
}
/**
* Enables the local color extraction.
*
* @param updateColors If true, this will update the color extraction using the current location
* of the App Widget.
*/
public void enableColorExtraction(boolean updateColors) {
mEnableColorExtraction = true;
if (updateColors) {
updateColorExtraction();
}
}
/**
* Disables the local color extraction.
*/
public void disableColorExtraction() {
mEnableColorExtraction = false;
}
// Compare two location rectangles. Locations are always in the [0;1] range.
private static boolean isSameLocation(@NonNull RectF rect1, @Nullable RectF rect2,
float epsilon) {