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

Commit ffa6652c authored by Evan Rosky's avatar Evan Rosky
Browse files

Include shell+stage-split in legacy recents animations

This just builds the infrastructure and then, just as
an example/proof-of-concept, uses the infra to show/hide
the divider-bar when it makes sense.

Bug: 192292305
Test: enable SPLIT_SELECT, enter split, use recents and observe
      the divider bar appropriately showing/hiding
Change-Id: Iea0704b3f7821c3056a1675f11e671e81305831f
parent 1abc73c5
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -740,6 +740,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
            mRecentsAnimationStartCallbacks.clear();
        }

        TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, false);

        // Only add the callback to enable the input consumer after we actually have the controller
        mStateCallback.runOnceAtState(STATE_APP_CONTROLLER_RECEIVED | STATE_GESTURE_STARTED,
                mRecentsAnimationController::enableInputConsumer);
@@ -754,6 +756,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
        mActivityInitListener.unregister();
        mStateCallback.setStateOnUiThread(STATE_GESTURE_CANCELLED | STATE_HANDLER_INVALIDATED);

        TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true);

        // Defer clearing the controller and the targets until after we've updated the state
        mRecentsAnimationController = null;
        mRecentsAnimationTargets = null;
@@ -882,6 +886,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
                break;
            case LAST_TASK:
                mStateCallback.setState(STATE_RESUME_LAST_TASK);
                TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true);
                break;
        }
        ActiveGestureLog.INSTANCE.addLog("onSettledOnEndTarget " + endTarget);
@@ -1723,6 +1728,9 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,

    @Override
    public void onRecentsAnimationFinished(RecentsAnimationController controller) {
        if (!controller.getFinishTargetIsLauncher()) {
            TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true);
        }
        mRecentsAnimationController = null;
        mRecentsAnimationTargets = null;
        if (mRecentsView != null) {
+9 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;

import android.graphics.Rect;
import android.util.ArraySet;
import android.view.RemoteAnimationTarget;

import androidx.annotation.BinderThread;
import androidx.annotation.UiThread;
@@ -39,6 +40,7 @@ public class RecentsAnimationCallbacks implements
        com.android.systemui.shared.system.RecentsAnimationListener {

    private final Set<RecentsAnimationListener> mListeners = new ArraySet<>();
    private final SystemUiProxy mSystemUiProxy;
    private final boolean mAllowMinimizeSplitScreen;

    // TODO(141886704): Remove these references when they are no longer needed
@@ -46,7 +48,9 @@ public class RecentsAnimationCallbacks implements

    private boolean mCancelled;

    public RecentsAnimationCallbacks(boolean allowMinimizeSplitScreen) {
    public RecentsAnimationCallbacks(SystemUiProxy systemUiProxy,
            boolean allowMinimizeSplitScreen) {
        mSystemUiProxy = systemUiProxy;
        mAllowMinimizeSplitScreen = allowMinimizeSplitScreen;
    }

@@ -89,8 +93,11 @@ public class RecentsAnimationCallbacks implements
            RemoteAnimationTargetCompat[] appTargets,
            RemoteAnimationTargetCompat[] wallpaperTargets,
            Rect homeContentInsets, Rect minimizedHomeBounds) {
        RemoteAnimationTarget[] nonAppTargets =
                mSystemUiProxy.onGoingToRecentsLegacy(mCancelled);
        RecentsAnimationTargets targets = new RecentsAnimationTargets(appTargets,
                wallpaperTargets, homeContentInsets, minimizedHomeBounds);
                wallpaperTargets, RemoteAnimationTargetCompat.wrap(nonAppTargets),
                homeContentInsets, minimizedHomeBounds);
        mController = new RecentsAnimationController(animationController,
                mAllowMinimizeSplitScreen, this::onAnimationFinished);

+3 −3
Original line number Diff line number Diff line
@@ -31,9 +31,9 @@ public class RecentsAnimationTargets extends RemoteAnimationTargets {
    public final Rect minimizedHomeBounds;

    public RecentsAnimationTargets(RemoteAnimationTargetCompat[] apps,
            RemoteAnimationTargetCompat[] wallpapers, Rect homeContentInsets,
            Rect minimizedHomeBounds) {
        super(apps, wallpapers, new RemoteAnimationTargetCompat[0], MODE_CLOSING);
            RemoteAnimationTargetCompat[] wallpapers, RemoteAnimationTargetCompat[] nonApps,
            Rect homeContentInsets, Rect minimizedHomeBounds) {
        super(apps, wallpapers, nonApps, MODE_CLOSING);
        this.homeContentInsets = homeContentInsets;
        this.minimizedHomeBounds = minimizedHomeBounds;
    }
+19 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.os.UserHandle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.RemoteAnimationAdapter;
import android.view.RemoteAnimationTarget;
import android.view.SurfaceControl;

import com.android.launcher3.util.MainThreadInitializedObject;
@@ -612,6 +613,24 @@ public class SystemUiProxy implements ISystemUiProxy,
        }
    }

    /**
     * Call this when going to recents so that shell can set-up and provide appropriate leashes
     * for animation (eg. DividerBar).
     *
     * @param cancel true if recents starting is being cancelled.
     * @return RemoteAnimationTargets of windows that need to animate but only exist in shell.
     */
    public RemoteAnimationTarget[] onGoingToRecentsLegacy(boolean cancel) {
        if (mSplitScreen != null) {
            try {
                return mSplitScreen.onGoingToRecentsLegacy(cancel);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call onGoingToRecentsLegacy");
            }
        }
        return null;
    }

    //
    // One handed
    //
+2 −1
Original line number Diff line number Diff line
@@ -109,7 +109,8 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn

        final BaseActivityInterface activityInterface = gestureState.getActivityInterface();
        mLastGestureState = gestureState;
        mCallbacks = new RecentsAnimationCallbacks(activityInterface.allowMinimizeSplitScreen());
        mCallbacks = new RecentsAnimationCallbacks(SystemUiProxy.INSTANCE.get(mCtx),
                activityInterface.allowMinimizeSplitScreen());
        mCallbacks.addListener(new RecentsAnimationCallbacks.RecentsAnimationListener() {
            @Override
            public void onRecentsAnimationStart(RecentsAnimationController controller,
Loading