Cover thumbnail view instead of TaskView for split animation
Fixes: 219622592 Test: Slowed down animation and verified same as before refactor was done. Change-Id: Iec8dc9ea1d7925575c3a3b84e12653829a00d8dd
This commit is contained in:
@@ -30,9 +30,11 @@ import com.android.launcher3.touch.PagedOrientationHandler;
|
||||
import com.android.launcher3.views.BaseDragLayer;
|
||||
import com.android.quickstep.util.MultiValueUpdateListener;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* Create an instance via
|
||||
* {@link #getFloatingTaskView(StatefulActivity, View, Bitmap, Drawable, RectF)} to
|
||||
* {@link #getFloatingTaskView(StatefulActivity, View, Bitmap, Drawable, RectF, Consumer)} to
|
||||
* which will have the thumbnail from the provided existing TaskView overlaying the taskview itself.
|
||||
*
|
||||
* Can then animate the taskview using
|
||||
@@ -46,6 +48,8 @@ public class FloatingTaskView extends FrameLayout {
|
||||
|
||||
private SplitPlaceholderView mSplitPlaceholderView;
|
||||
private RectF mStartingPosition;
|
||||
@Nullable
|
||||
private Consumer<RectF> mAdditionalOffsetter;
|
||||
private final StatefulActivity mActivity;
|
||||
private final boolean mIsRtl;
|
||||
private final Rect mOutline = new Rect();
|
||||
@@ -77,8 +81,9 @@ public class FloatingTaskView extends FrameLayout {
|
||||
}
|
||||
|
||||
private void init(StatefulActivity launcher, View originalView, @Nullable Bitmap thumbnail,
|
||||
Drawable icon, RectF positionOut) {
|
||||
Drawable icon, RectF positionOut, Consumer<RectF> additionalOffsetter) {
|
||||
mStartingPosition = positionOut;
|
||||
mAdditionalOffsetter = additionalOffsetter;
|
||||
updateInitialPositionForView(originalView);
|
||||
final InsettableFrameLayout.LayoutParams lp =
|
||||
(InsettableFrameLayout.LayoutParams) getLayoutParams();
|
||||
@@ -102,15 +107,21 @@ public class FloatingTaskView extends FrameLayout {
|
||||
/**
|
||||
* Configures and returns a an instance of {@link FloatingTaskView} initially matching the
|
||||
* appearance of {@code originalView}.
|
||||
*
|
||||
* @param additionalOffsetter optional, to set additional offsets to the FloatingTaskView
|
||||
* to account for translations. If {@code null} then the
|
||||
* translation values from originalView will be used
|
||||
*/
|
||||
public static FloatingTaskView getFloatingTaskView(StatefulActivity launcher,
|
||||
View originalView, @Nullable Bitmap thumbnail, Drawable icon, RectF positionOut) {
|
||||
View originalView, @Nullable Bitmap thumbnail, Drawable icon, RectF positionOut,
|
||||
@Nullable Consumer<RectF> additionalOffsetter) {
|
||||
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);
|
||||
floatingView.init(launcher, originalView, thumbnail, icon, positionOut,
|
||||
additionalOffsetter);
|
||||
parent.addView(floatingView);
|
||||
return floatingView;
|
||||
}
|
||||
@@ -120,7 +131,12 @@ public class FloatingTaskView extends FrameLayout {
|
||||
Utilities.getBoundsForViewInDragLayer(mActivity.getDragLayer(), originalView, viewBounds,
|
||||
true /* ignoreTransform */, null /* recycle */,
|
||||
mStartingPosition);
|
||||
mStartingPosition.offset(originalView.getTranslationX(), originalView.getTranslationY());
|
||||
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()));
|
||||
|
||||
@@ -2723,8 +2723,13 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
if (mSplitHiddenTaskView != null) {
|
||||
mSplitHiddenTaskView.setVisibility(INVISIBLE);
|
||||
mFirstFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity,
|
||||
mSplitHiddenTaskView, mSplitHiddenTaskView.getThumbnail().getThumbnail(),
|
||||
mSplitHiddenTaskView.getIconView().getDrawable(), startingTaskRect);
|
||||
mSplitHiddenTaskView.getThumbnail(),
|
||||
mSplitHiddenTaskView.getThumbnail().getThumbnail(),
|
||||
mSplitHiddenTaskView.getIconView().getDrawable(), startingTaskRect,
|
||||
floatingTaskViewStartingPosition -> floatingTaskViewStartingPosition.offset(
|
||||
mSplitHiddenTaskView.getTranslationX(),
|
||||
mSplitHiddenTaskView.getTranslationY()
|
||||
));
|
||||
mFirstFloatingTaskView.setAlpha(1);
|
||||
mFirstFloatingTaskView.addAnimation(anim, startingTaskRect,
|
||||
mTempRect, mSplitHiddenTaskView, true /*fadeWithThumbnail*/);
|
||||
@@ -2732,7 +2737,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
mSplitSelectSource.view.setVisibility(INVISIBLE);
|
||||
mFirstFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity,
|
||||
mSplitSelectSource.view, null,
|
||||
mSplitSelectSource.drawable, startingTaskRect);
|
||||
mSplitSelectSource.drawable, startingTaskRect, null /*additionalOffsetter*/);
|
||||
mFirstFloatingTaskView.setAlpha(1);
|
||||
mFirstFloatingTaskView.addAnimation(anim, startingTaskRect,
|
||||
mTempRect, mSplitSelectSource.view, true /*fadeWithThumbnail*/);
|
||||
@@ -4023,8 +4028,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
false /*fadeWithThumbnail*/);
|
||||
|
||||
mSecondFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity,
|
||||
taskView, taskView.getThumbnail().getThumbnail(),
|
||||
taskView.getIconView().getDrawable(), secondTaskStartingBounds);
|
||||
taskView.getThumbnail(), taskView.getThumbnail().getThumbnail(),
|
||||
taskView.getIconView().getDrawable(), secondTaskStartingBounds,
|
||||
floatingTaskViewStartingPosition -> floatingTaskViewStartingPosition.offset(
|
||||
taskView.getTranslationX(),
|
||||
taskView.getTranslationY()
|
||||
));
|
||||
mSecondFloatingTaskView.setAlpha(1);
|
||||
mSecondFloatingTaskView.addAnimation(pendingAnimation, secondTaskStartingBounds,
|
||||
secondTaskEndingBounds, taskView.getThumbnail(),
|
||||
|
||||
Reference in New Issue
Block a user