diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java index 435eae47ee..6a2f62256b 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java @@ -469,13 +469,19 @@ public class TaskbarDragController extends DragController mAdditionalOffsetter; private final StatefulActivity mActivity; private final boolean mIsRtl; private final Rect mOutline = new Rect(); @@ -81,9 +79,8 @@ public class FloatingTaskView extends FrameLayout { } private void init(StatefulActivity launcher, View originalView, @Nullable Bitmap thumbnail, - Drawable icon, RectF positionOut, Consumer additionalOffsetter) { + Drawable icon, RectF positionOut) { mStartingPosition = positionOut; - mAdditionalOffsetter = additionalOffsetter; updateInitialPositionForView(originalView); final InsettableFrameLayout.LayoutParams lp = (InsettableFrameLayout.LayoutParams) getLayoutParams(); @@ -113,15 +110,13 @@ public class FloatingTaskView extends FrameLayout { * translation values from originalView will be used */ public static FloatingTaskView getFloatingTaskView(StatefulActivity launcher, - View originalView, @Nullable Bitmap thumbnail, Drawable icon, RectF positionOut, - @Nullable Consumer additionalOffsetter) { + View originalView, @Nullable Bitmap thumbnail, Drawable icon, RectF positionOut) { final BaseDragLayer dragLayer = launcher.getDragLayer(); ViewGroup parent = (ViewGroup) dragLayer.getParent(); final FloatingTaskView floatingView = (FloatingTaskView) launcher.getLayoutInflater() .inflate(R.layout.floating_split_select_view, parent, false); - floatingView.init(launcher, originalView, thumbnail, icon, positionOut, - additionalOffsetter); + floatingView.init(launcher, originalView, thumbnail, icon, positionOut); parent.addView(floatingView); return floatingView; } @@ -129,14 +124,8 @@ public class FloatingTaskView extends FrameLayout { public void updateInitialPositionForView(View originalView) { Rect viewBounds = new Rect(0, 0, originalView.getWidth(), originalView.getHeight()); Utilities.getBoundsForViewInDragLayer(mActivity.getDragLayer(), originalView, viewBounds, - true /* ignoreTransform */, null /* recycle */, + false /* ignoreTransform */, null /* recycle */, mStartingPosition); - if (mAdditionalOffsetter != null) { - mAdditionalOffsetter.accept(mStartingPosition); - } else { - mStartingPosition.offset(originalView.getTranslationX(), - originalView.getTranslationY()); - } final InsettableFrameLayout.LayoutParams lp = new InsettableFrameLayout.LayoutParams( Math.round(mStartingPosition.width()), Math.round(mStartingPosition.height())); diff --git a/quickstep/src/com/android/quickstep/views/GroupedTaskView.java b/quickstep/src/com/android/quickstep/views/GroupedTaskView.java index af9f818e4e..04af3c11ab 100644 --- a/quickstep/src/com/android/quickstep/views/GroupedTaskView.java +++ b/quickstep/src/com/android/quickstep/views/GroupedTaskView.java @@ -5,14 +5,17 @@ import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITIO import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT; import android.content.Context; +import android.graphics.PointF; import android.util.AttributeSet; import android.view.MotionEvent; +import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; +import com.android.launcher3.Utilities; import com.android.launcher3.util.RunnableList; import com.android.launcher3.util.SplitConfigurationOptions.StagedSplitBounds; import com.android.launcher3.util.TransformingTouchDelegate; @@ -52,7 +55,6 @@ public class GroupedTaskView extends TaskView { @Nullable private StagedSplitBounds mSplitBoundsConfig; private final DigitalWellBeingToast mDigitalWellBeingToast2; - public GroupedTaskView(Context context) { this(context, null); } @@ -204,6 +206,20 @@ public class GroupedTaskView extends TaskView { return new TaskThumbnailView[]{mSnapshotView, mSnapshotView2}; } + @Override + protected int getChildTaskIndexAtPosition(PointF position) { + if (isCoordInView(mIconView2, position) || isCoordInView(mSnapshotView2, position)) { + return 1; + } + return super.getChildTaskIndexAtPosition(position); + } + + private boolean isCoordInView(View v, PointF position) { + float[] localPos = new float[]{position.x, position.y}; + Utilities.mapCoordInSelfToDescendant(v, this, localPos); + return Utilities.pointInView(v, localPos[0], localPos[1], 0f /* slop */); + } + @Override public void onRecycle() { super.onRecycle(); diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index a042bff67f..cb7e08a255 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -619,7 +619,7 @@ public abstract class RecentsView floatingTaskViewStartingPosition.offset( - mSplitHiddenTaskView.getTranslationX(), - mSplitHiddenTaskView.getTranslationY() - )); + mSplitHiddenTaskView.getIconView().getDrawable(), startingTaskRect); mFirstFloatingTaskView.setAlpha(1); mFirstFloatingTaskView.addAnimation(anim, startingTaskRect, mTempRect, true /*fadeWithThumbnail*/); @@ -2741,7 +2737,7 @@ public abstract class RecentsView floatingTaskViewStartingPosition.offset( - taskView.getTranslationX(), - taskView.getTranslationY() - )); + thumbnailView, thumbnailView.getThumbnail(), + iconView.getDrawable(), secondTaskStartingBounds); mSecondFloatingTaskView.setAlpha(1); mSecondFloatingTaskView.addAnimation(pendingAnimation, secondTaskStartingBounds, - secondTaskEndingBounds, true /*fadeWithThumbnail*/); + secondTaskEndingBounds, true /* fadeWithThumbnail */); pendingAnimation.addEndListener(aBoolean -> - mSplitSelectStateController.setSecondTaskId(taskView.getTask().key.id, + mSplitSelectStateController.setSecondTaskId(task.key.id, aBoolean1 -> RecentsView.this.resetFromSplitSelectionState())); - mSecondSplitHiddenTaskView = taskView; - taskView.setVisibility(INVISIBLE); + if (containerTaskView.containsMultipleTasks()) { + // If we are launching from a child task, then only hide the thumbnail itself + mSecondSplitHiddenView = thumbnailView; + } else { + mSecondSplitHiddenView = containerTaskView; + } + mSecondSplitHiddenView.setVisibility(INVISIBLE); pendingAnimation.buildAnim().start(); } @@ -4059,8 +4061,8 @@ public abstract class RecentsView