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

Commit 9ee6f20d authored by Evan Rosky's avatar Evan Rosky Committed by Android (Google) Code Review
Browse files

Merge "Hook up custom activity-level animation callbacks to shell" into sc-v2-dev

parents dbee7f72 95ebce09
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1042,7 +1042,8 @@ class ActivityClientController extends IActivityClientController.Stub {
                        r.mOverrideTaskTransition);
                mService.getTransitionController().setOverrideAnimation(
                        TransitionInfo.AnimationOptions.makeCustomAnimOptions(packageName,
                                enterAnim, exitAnim, r.mOverrideTaskTransition));
                                enterAnim, exitAnim, r.mOverrideTaskTransition),
                        null /* startCallback */, null /* finishCallback */);
            }
        }
        Binder.restoreCallingIdentity(origId);
+8 −1
Original line number Diff line number Diff line
@@ -273,6 +273,7 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Debug;
import android.os.IBinder;
import android.os.IRemoteCallback;
import android.os.PersistableBundle;
import android.os.Process;
import android.os.RemoteException;
@@ -4315,6 +4316,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        final int animationType = pendingOptions.getAnimationType();
        final DisplayContent displayContent = getDisplayContent();
        AnimationOptions options = null;
        IRemoteCallback startCallback = null;
        IRemoteCallback finishCallback = null;
        switch (animationType) {
            case ANIM_CUSTOM:
                displayContent.mAppTransition.overridePendingAppTransition(
@@ -4327,6 +4330,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                options = AnimationOptions.makeCustomAnimOptions(pendingOptions.getPackageName(),
                        pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(),
                        pendingOptions.getOverrideTaskTransition());
                startCallback = pendingOptions.getAnimationStartedListener();
                finishCallback = pendingOptions.getAnimationFinishedListener();
                break;
            case ANIM_CLIP_REVEAL:
                displayContent.mAppTransition.overridePendingAppTransitionClipReveal(
@@ -4366,6 +4371,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                        scaleUp);
                options = AnimationOptions.makeThumnbnailAnimOptions(buffer,
                        pendingOptions.getStartX(), pendingOptions.getStartY(), scaleUp);
                startCallback = pendingOptions.getAnimationStartedListener();
                if (intent.getSourceBounds() == null && buffer != null) {
                    intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
                            pendingOptions.getStartY(),
@@ -4416,7 +4422,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        }

        if (options != null) {
            mAtmService.getTransitionController().setOverrideAnimation(options);
            mAtmService.getTransitionController().setOverrideAnimation(options,
                    startCallback, finishCallback);
        }
    }

+25 −1
Original line number Diff line number Diff line
@@ -46,11 +46,13 @@ import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_W

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Binder;
import android.os.IBinder;
import android.os.IRemoteCallback;
import android.os.RemoteException;
import android.os.SystemClock;
import android.util.ArrayMap;
@@ -65,6 +67,7 @@ import android.window.TransitionInfo;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.ProtoLogGroup;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.function.pooled.PooledLambda;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -130,7 +133,10 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
    /** The final animation targets derived from participants after promotion. */
    private ArraySet<WindowContainer> mTargets = null;

    /** Custom activity-level animation options and callbacks. */
    private TransitionInfo.AnimationOptions mOverrideOptions;
    private IRemoteCallback mClientAnimationStartCallback = null;
    private IRemoteCallback mClientAnimationFinishCallback = null;

    private @TransitionState int mState = STATE_COLLECTING;
    private final ReadyTracker mReadyTracker = new ReadyTracker();
@@ -226,13 +232,26 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
        mChanges.get(wc).mExistenceChanged = true;
    }

    private void sendRemoteCallback(@Nullable IRemoteCallback callback) {
        if (callback == null) return;
        mController.mAtm.mH.sendMessage(PooledLambda.obtainMessage(cb -> {
            try {
                cb.sendResult(null);
            } catch (RemoteException e) { }
        }, callback));
    }

    /**
     * Set animation options for collecting transition by ActivityRecord.
     * @param options AnimationOptions captured from ActivityOptions
     */
    void setOverrideAnimation(TransitionInfo.AnimationOptions options) {
    void setOverrideAnimation(TransitionInfo.AnimationOptions options,
            @Nullable IRemoteCallback startCallback, @Nullable IRemoteCallback finishCallback) {
        if (mSyncId < 0) return;
        mOverrideOptions = options;
        sendRemoteCallback(mClientAnimationStartCallback);
        mClientAnimationStartCallback = startCallback;
        mClientAnimationFinishCallback = finishCallback;
    }

    /**
@@ -363,6 +382,8 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
                    .scheduleProcessStoppingAndFinishingActivitiesIfNeeded();
        }

        sendRemoteCallback(mClientAnimationFinishCallback);

        legacyRestoreNavigationBarFromApp();
    }

@@ -426,6 +447,9 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe

        reportStartReasonsToLogger();

        // The callback is only populated for custom activity-level client animations
        sendRemoteCallback(mClientAnimationStartCallback);

        // Manually show any activities that are visibleRequested. This is needed to properly
        // support simultaneous animation queueing/merging. Specifically, if transition A makes
        // an activity invisible, it's finishTransaction (which is applied *after* the animation)
+4 −2
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.os.IBinder;
import android.os.IRemoteCallback;
import android.os.RemoteException;
import android.os.SystemClock;
import android.util.Slog;
@@ -277,9 +278,10 @@ class TransitionController {
    }

    /** @see Transition#setOverrideAnimation */
    void setOverrideAnimation(TransitionInfo.AnimationOptions options) {
    void setOverrideAnimation(TransitionInfo.AnimationOptions options,
            @Nullable IRemoteCallback startCallback, @Nullable IRemoteCallback finishCallback) {
        if (mCollectingTransition == null) return;
        mCollectingTransition.setOverrideAnimation(options);
        mCollectingTransition.setOverrideAnimation(options, startCallback, finishCallback);
    }

    /** @see Transition#setReady */