Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 12a24dca authored by Vinit Nayak's avatar Vinit Nayak
Browse files

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
parent b70131e1
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -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()));
+14 −5
Original line number Diff line number Diff line
@@ -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(),