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

Commit b665810d authored by Hongwei Wang's avatar Hongwei Wang Committed by Automerger Merge Worker
Browse files

Merge "Add auto-enter-pip support in FallbackSwipeHandler" into tm-dev am: 1acabce4

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

Change-Id: I865c39eac5d1afb46fed74d42af304eb32b320ce
parents 6117c23c 1acabce4
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -1273,8 +1273,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
            HomeAnimationFactory homeAnimFactory =
                    createHomeAnimationFactory(cookies, duration, isTranslucent, appCanEnterPip,
                            runningTaskTarget);
            mIsSwipingPipToHome = !mIsSwipeForStagedSplit
                    && homeAnimFactory.supportSwipePipToHome() && appCanEnterPip;
            mIsSwipingPipToHome = !mIsSwipeForStagedSplit && appCanEnterPip;
            final RectFSpringAnim[] windowAnim;
            if (mIsSwipingPipToHome) {
                mSwipePipToHomeAnimator = createWindowAnimationToPip(
+40 −3
Original line number Diff line number Diff line
@@ -50,12 +50,14 @@ import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.anim.SpringAnimationBuilder;
import com.android.launcher3.states.StateAnimationConfig;
import com.android.launcher3.util.DisplayController;
import com.android.quickstep.fallback.FallbackRecentsView;
import com.android.quickstep.fallback.RecentsState;
@@ -93,6 +95,8 @@ public class FallbackSwipeHandler extends
    private final Matrix mTmpMatrix = new Matrix();
    private float mMaxLauncherScale = 1;

    private boolean mAppCanEnterPip;

    public FallbackSwipeHandler(Context context, RecentsAnimationDeviceState deviceState,
            TaskAnimationManager taskAnimationManager, GestureState gestureState, long touchTimeMs,
            boolean continuingLastGesture, InputConsumerController inputConsumer) {
@@ -135,16 +139,27 @@ public class FallbackSwipeHandler extends
    protected HomeAnimationFactory createHomeAnimationFactory(ArrayList<IBinder> launchCookies,
            long duration, boolean isTargetTranslucent, boolean appCanEnterPip,
            RemoteAnimationTargetCompat runningTaskTarget) {
        mAppCanEnterPip = appCanEnterPip;
        if (appCanEnterPip) {
            return new FallbackPipToHomeAnimationFactory();
        }
        mActiveAnimationFactory = new FallbackHomeAnimationFactory(duration);
        startHomeIntent(mActiveAnimationFactory);
        return mActiveAnimationFactory;
    }

    private void startHomeIntent(
            @Nullable FallbackHomeAnimationFactory gestureContractAnimationFactory) {
        ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0);
        Intent intent = new Intent(mGestureState.getHomeIntent());
        mActiveAnimationFactory.addGestureContract(intent);
        if (gestureContractAnimationFactory != null) {
            gestureContractAnimationFactory.addGestureContract(intent);
        }
        try {
            mContext.startActivity(intent, options.toBundle());
        } catch (NullPointerException | ActivityNotFoundException | SecurityException e) {
            mContext.startActivity(createHomeIntent());
        }
        return mActiveAnimationFactory;
    }

    @Override
@@ -160,8 +175,19 @@ public class FallbackSwipeHandler extends

    @Override
    protected void finishRecentsControllerToHome(Runnable callback) {
        final Runnable recentsCallback;
        if (mAppCanEnterPip) {
            // Make sure Launcher is resumed after auto-enter-pip transition to actually trigger
            // the PiP task appearing.
            recentsCallback = () -> {
                callback.run();
                startHomeIntent(null /* gestureContractAnimationFactory */);
            };
        } else {
            recentsCallback = callback;
        }
        mRecentsAnimationController.finish(
                false /* toRecents */, callback, true /* sendUserLeaveHint */);
                mAppCanEnterPip /* toRecents */, recentsCallback, true /* sendUserLeaveHint */);
    }

    @Override
@@ -186,6 +212,17 @@ public class FallbackSwipeHandler extends
        }
    }

    private class FallbackPipToHomeAnimationFactory extends HomeAnimationFactory {
        @NonNull
        @Override
        public AnimatorPlaybackController createActivityAnimationToHome() {
            // copied from {@link LauncherSwipeHandlerV2.LauncherHomeAnimationFactory}
            long accuracy = 2 * Math.max(mDp.widthPx, mDp.heightPx);
            return mActivity.getStateManager().createAnimationToNewWorkspace(
                    RecentsState.HOME, accuracy, StateAnimationConfig.SKIP_ALL_ANIMATIONS);
        }
    }

    private class FallbackHomeAnimationFactory extends HomeAnimationFactory {
        private final Rect mTempRect = new Rect();
        private final TransformParams mHomeAlphaParams = new TransformParams();
+0 −5
Original line number Diff line number Diff line
@@ -284,10 +284,5 @@ public class LauncherSwipeHandlerV2 extends
                    getViewIgnoredInWorkspaceRevealAnimation())
                    .start();
        }

        @Override
        public boolean supportSwipePipToHome() {
            return true;
        }
    }
}
+0 −8
Original line number Diff line number Diff line
@@ -183,14 +183,6 @@ public abstract class SwipeUpAnimationLogic implements

        public void onCancel() { }

        /**
         * @return {@code true} if this factory supports animating an Activity to PiP window on
         * swiping up to home.
         */
        public boolean supportSwipePipToHome() {
            return false;
        }

        /**
         * @param progress The progress of the animation to the home screen.
         * @return The current alpha to set on the animating app window.