Merge "Fix bug with Taskbar second-app-selection animation" into tm-qpr-dev am: e8eb4a3c48

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/20704401

Change-Id: I5b69d3a32c6a0ba95dce3f64f8e314af9e292164
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jeremy Sim
2022-12-16 19:19:24 +00:00
committed by Automerger Merge Worker

View File

@@ -28,6 +28,7 @@ import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.taskbar.TaskbarActivityContext;
import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.util.SplitConfigurationOptions;
import com.android.launcher3.views.BaseDragLayer;
@@ -85,6 +86,7 @@ public class FloatingTaskView extends FrameLayout {
private PagedOrientationHandler mOrientationHandler;
@SplitConfigurationOptions.StagePosition
private int mStagePosition;
private final Rect mTmpRect = new Rect();
public FloatingTaskView(Context context) {
this(context, null);
@@ -158,10 +160,24 @@ 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,
false /* ignoreTransform */, null /* recycle */,
mStartingPosition);
if (originalView.getContext() instanceof TaskbarActivityContext) {
// If original View is a button on the Taskbar, find the on-screen bounds and calculate
// the equivalent bounds in the DragLayer, so we can set the initial position of
// this FloatingTaskView and start the split animation at the correct spot.
originalView.getBoundsOnScreen(mTmpRect);
mStartingPosition.set(mTmpRect);
int[] dragLayerPositionRelativeToScreen =
mActivity.getDragLayer().getLocationOnScreen();
mStartingPosition.offset(
-dragLayerPositionRelativeToScreen[0],
-dragLayerPositionRelativeToScreen[1]);
} else {
Rect viewBounds = new Rect(0, 0, originalView.getWidth(), originalView.getHeight());
Utilities.getBoundsForViewInDragLayer(mActivity.getDragLayer(), originalView,
viewBounds, false /* ignoreTransform */, null /* recycle */,
mStartingPosition);
}
final BaseDragLayer.LayoutParams lp = new BaseDragLayer.LayoutParams(
Math.round(mStartingPosition.width()),
Math.round(mStartingPosition.height()));