Merge "Hook up custom activity-level animation callbacks to shell" into sc-v2-dev
This commit is contained in:
@@ -1042,7 +1042,8 @@ class ActivityClientController extends IActivityClientController.Stub {
|
|||||||
r.mOverrideTaskTransition);
|
r.mOverrideTaskTransition);
|
||||||
mService.getTransitionController().setOverrideAnimation(
|
mService.getTransitionController().setOverrideAnimation(
|
||||||
TransitionInfo.AnimationOptions.makeCustomAnimOptions(packageName,
|
TransitionInfo.AnimationOptions.makeCustomAnimOptions(packageName,
|
||||||
enterAnim, exitAnim, r.mOverrideTaskTransition));
|
enterAnim, exitAnim, r.mOverrideTaskTransition),
|
||||||
|
null /* startCallback */, null /* finishCallback */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Binder.restoreCallingIdentity(origId);
|
Binder.restoreCallingIdentity(origId);
|
||||||
|
|||||||
@@ -273,6 +273,7 @@ import android.os.Build;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Debug;
|
import android.os.Debug;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.os.IRemoteCallback;
|
||||||
import android.os.PersistableBundle;
|
import android.os.PersistableBundle;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
@@ -4315,6 +4316,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
|||||||
final int animationType = pendingOptions.getAnimationType();
|
final int animationType = pendingOptions.getAnimationType();
|
||||||
final DisplayContent displayContent = getDisplayContent();
|
final DisplayContent displayContent = getDisplayContent();
|
||||||
AnimationOptions options = null;
|
AnimationOptions options = null;
|
||||||
|
IRemoteCallback startCallback = null;
|
||||||
|
IRemoteCallback finishCallback = null;
|
||||||
switch (animationType) {
|
switch (animationType) {
|
||||||
case ANIM_CUSTOM:
|
case ANIM_CUSTOM:
|
||||||
displayContent.mAppTransition.overridePendingAppTransition(
|
displayContent.mAppTransition.overridePendingAppTransition(
|
||||||
@@ -4327,6 +4330,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
|||||||
options = AnimationOptions.makeCustomAnimOptions(pendingOptions.getPackageName(),
|
options = AnimationOptions.makeCustomAnimOptions(pendingOptions.getPackageName(),
|
||||||
pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(),
|
pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(),
|
||||||
pendingOptions.getOverrideTaskTransition());
|
pendingOptions.getOverrideTaskTransition());
|
||||||
|
startCallback = pendingOptions.getAnimationStartedListener();
|
||||||
|
finishCallback = pendingOptions.getAnimationFinishedListener();
|
||||||
break;
|
break;
|
||||||
case ANIM_CLIP_REVEAL:
|
case ANIM_CLIP_REVEAL:
|
||||||
displayContent.mAppTransition.overridePendingAppTransitionClipReveal(
|
displayContent.mAppTransition.overridePendingAppTransitionClipReveal(
|
||||||
@@ -4366,6 +4371,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
|||||||
scaleUp);
|
scaleUp);
|
||||||
options = AnimationOptions.makeThumnbnailAnimOptions(buffer,
|
options = AnimationOptions.makeThumnbnailAnimOptions(buffer,
|
||||||
pendingOptions.getStartX(), pendingOptions.getStartY(), scaleUp);
|
pendingOptions.getStartX(), pendingOptions.getStartY(), scaleUp);
|
||||||
|
startCallback = pendingOptions.getAnimationStartedListener();
|
||||||
if (intent.getSourceBounds() == null && buffer != null) {
|
if (intent.getSourceBounds() == null && buffer != null) {
|
||||||
intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
|
intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
|
||||||
pendingOptions.getStartY(),
|
pendingOptions.getStartY(),
|
||||||
@@ -4416,7 +4422,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (options != null) {
|
if (options != null) {
|
||||||
mAtmService.getTransitionController().setOverrideAnimation(options);
|
mAtmService.getTransitionController().setOverrideAnimation(options,
|
||||||
|
startCallback, finishCallback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,11 +46,13 @@ import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_W
|
|||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.Nullable;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.os.IRemoteCallback;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
@@ -65,6 +67,7 @@ import android.window.TransitionInfo;
|
|||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.protolog.ProtoLogGroup;
|
import com.android.internal.protolog.ProtoLogGroup;
|
||||||
import com.android.internal.protolog.common.ProtoLog;
|
import com.android.internal.protolog.common.ProtoLog;
|
||||||
|
import com.android.internal.util.function.pooled.PooledLambda;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
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. */
|
/** The final animation targets derived from participants after promotion. */
|
||||||
private ArraySet<WindowContainer> mTargets = null;
|
private ArraySet<WindowContainer> mTargets = null;
|
||||||
|
|
||||||
|
/** Custom activity-level animation options and callbacks. */
|
||||||
private TransitionInfo.AnimationOptions mOverrideOptions;
|
private TransitionInfo.AnimationOptions mOverrideOptions;
|
||||||
|
private IRemoteCallback mClientAnimationStartCallback = null;
|
||||||
|
private IRemoteCallback mClientAnimationFinishCallback = null;
|
||||||
|
|
||||||
private @TransitionState int mState = STATE_COLLECTING;
|
private @TransitionState int mState = STATE_COLLECTING;
|
||||||
private final ReadyTracker mReadyTracker = new ReadyTracker();
|
private final ReadyTracker mReadyTracker = new ReadyTracker();
|
||||||
@@ -226,13 +232,26 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
|||||||
mChanges.get(wc).mExistenceChanged = true;
|
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.
|
* Set animation options for collecting transition by ActivityRecord.
|
||||||
* @param options AnimationOptions captured from ActivityOptions
|
* @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;
|
if (mSyncId < 0) return;
|
||||||
mOverrideOptions = options;
|
mOverrideOptions = options;
|
||||||
|
sendRemoteCallback(mClientAnimationStartCallback);
|
||||||
|
mClientAnimationStartCallback = startCallback;
|
||||||
|
mClientAnimationFinishCallback = finishCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -363,6 +382,8 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
|||||||
.scheduleProcessStoppingAndFinishingActivitiesIfNeeded();
|
.scheduleProcessStoppingAndFinishingActivitiesIfNeeded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sendRemoteCallback(mClientAnimationFinishCallback);
|
||||||
|
|
||||||
legacyRestoreNavigationBarFromApp();
|
legacyRestoreNavigationBarFromApp();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -426,6 +447,9 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
|||||||
|
|
||||||
reportStartReasonsToLogger();
|
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
|
// Manually show any activities that are visibleRequested. This is needed to properly
|
||||||
// support simultaneous animation queueing/merging. Specifically, if transition A makes
|
// support simultaneous animation queueing/merging. Specifically, if transition A makes
|
||||||
// an activity invisible, it's finishTransaction (which is applied *after* the animation)
|
// an activity invisible, it's finishTransaction (which is applied *after* the animation)
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import android.annotation.NonNull;
|
|||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.os.IRemoteCallback;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
@@ -277,9 +278,10 @@ class TransitionController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @see Transition#setOverrideAnimation */
|
/** @see Transition#setOverrideAnimation */
|
||||||
void setOverrideAnimation(TransitionInfo.AnimationOptions options) {
|
void setOverrideAnimation(TransitionInfo.AnimationOptions options,
|
||||||
|
@Nullable IRemoteCallback startCallback, @Nullable IRemoteCallback finishCallback) {
|
||||||
if (mCollectingTransition == null) return;
|
if (mCollectingTransition == null) return;
|
||||||
mCollectingTransition.setOverrideAnimation(options);
|
mCollectingTransition.setOverrideAnimation(options, startCallback, finishCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @see Transition#setReady */
|
/** @see Transition#setReady */
|
||||||
|
|||||||
Reference in New Issue
Block a user