Merge "Wrap IRemoteTransition in a parcelable to enable extra properties" into sc-v2-dev
This commit is contained in:
@@ -55,7 +55,7 @@ import android.view.RemoteAnimationAdapter;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.SplashScreen;
|
||||
import android.window.WindowContainerToken;
|
||||
|
||||
@@ -426,7 +426,7 @@ public class ActivityOptions {
|
||||
private IAppTransitionAnimationSpecsFuture mSpecsFuture;
|
||||
private RemoteAnimationAdapter mRemoteAnimationAdapter;
|
||||
private IBinder mLaunchCookie;
|
||||
private IRemoteTransition mRemoteTransition;
|
||||
private RemoteTransition mRemoteTransition;
|
||||
private boolean mOverrideTaskTransition;
|
||||
private String mSplashScreenThemeResName;
|
||||
@SplashScreen.SplashScreenStyle
|
||||
@@ -1054,7 +1054,7 @@ public class ActivityOptions {
|
||||
*/
|
||||
@RequiresPermission(CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS)
|
||||
public static ActivityOptions makeRemoteAnimation(RemoteAnimationAdapter remoteAnimationAdapter,
|
||||
IRemoteTransition remoteTransition) {
|
||||
RemoteTransition remoteTransition) {
|
||||
final ActivityOptions opts = new ActivityOptions();
|
||||
opts.mRemoteAnimationAdapter = remoteAnimationAdapter;
|
||||
opts.mAnimationType = ANIM_REMOTE_ANIMATION;
|
||||
@@ -1064,11 +1064,11 @@ public class ActivityOptions {
|
||||
|
||||
/**
|
||||
* Create an {@link ActivityOptions} instance that lets the application control the entire
|
||||
* transition using a {@link IRemoteTransition}.
|
||||
* transition using a {@link RemoteTransition}.
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS)
|
||||
public static ActivityOptions makeRemoteTransition(IRemoteTransition remoteTransition) {
|
||||
public static ActivityOptions makeRemoteTransition(RemoteTransition remoteTransition) {
|
||||
final ActivityOptions opts = new ActivityOptions();
|
||||
opts.mRemoteTransition = remoteTransition;
|
||||
return opts;
|
||||
@@ -1181,8 +1181,7 @@ public class ActivityOptions {
|
||||
}
|
||||
mRemoteAnimationAdapter = opts.getParcelable(KEY_REMOTE_ANIMATION_ADAPTER);
|
||||
mLaunchCookie = opts.getBinder(KEY_LAUNCH_COOKIE);
|
||||
mRemoteTransition = IRemoteTransition.Stub.asInterface(opts.getBinder(
|
||||
KEY_REMOTE_TRANSITION));
|
||||
mRemoteTransition = opts.getParcelable(KEY_REMOTE_TRANSITION);
|
||||
mOverrideTaskTransition = opts.getBoolean(KEY_OVERRIDE_TASK_TRANSITION);
|
||||
mSplashScreenThemeResName = opts.getString(KEY_SPLASH_SCREEN_THEME);
|
||||
mRemoveWithTaskOrganizer = opts.getBoolean(KEY_REMOVE_WITH_TASK_ORGANIZER);
|
||||
@@ -1348,7 +1347,7 @@ public class ActivityOptions {
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public IRemoteTransition getRemoteTransition() {
|
||||
public RemoteTransition getRemoteTransition() {
|
||||
return mRemoteTransition;
|
||||
}
|
||||
|
||||
@@ -1965,7 +1964,7 @@ public class ActivityOptions {
|
||||
b.putBinder(KEY_LAUNCH_COOKIE, mLaunchCookie);
|
||||
}
|
||||
if (mRemoteTransition != null) {
|
||||
b.putBinder(KEY_REMOTE_TRANSITION, mRemoteTransition.asBinder());
|
||||
b.putParcelable(KEY_REMOTE_TRANSITION, mRemoteTransition);
|
||||
}
|
||||
if (mOverrideTaskTransition) {
|
||||
b.putBoolean(KEY_OVERRIDE_TASK_TRANSITION, mOverrideTaskTransition);
|
||||
|
||||
19
core/java/android/window/RemoteTransition.aidl
Normal file
19
core/java/android/window/RemoteTransition.aidl
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.window;
|
||||
|
||||
parcelable RemoteTransition;
|
||||
158
core/java/android/window/RemoteTransition.java
Normal file
158
core/java/android/window/RemoteTransition.java
Normal file
@@ -0,0 +1,158 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.window;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.os.IBinder;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import com.android.internal.util.DataClass;
|
||||
|
||||
/**
|
||||
* Represents a remote transition animation and information required to run it (eg. the app thread
|
||||
* that needs to be boosted).
|
||||
* @hide
|
||||
*/
|
||||
@DataClass(genToString = true, genSetters = true, genAidl = true)
|
||||
public class RemoteTransition implements Parcelable {
|
||||
|
||||
/** The actual remote-transition interface used to run the transition animation. */
|
||||
private @NonNull IRemoteTransition mRemoteTransition;
|
||||
|
||||
/** Get the IBinder associated with the underlying IRemoteTransition. */
|
||||
public @Nullable IBinder asBinder() {
|
||||
return mRemoteTransition.asBinder();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Code below generated by codegen v1.0.23.
|
||||
//
|
||||
// DO NOT MODIFY!
|
||||
// CHECKSTYLE:OFF Generated code
|
||||
//
|
||||
// To regenerate run:
|
||||
// $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/window/RemoteTransition.java
|
||||
//
|
||||
// To exclude the generated code from IntelliJ auto-formatting enable (one-time):
|
||||
// Settings > Editor > Code Style > Formatter Control
|
||||
//@formatter:off
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new RemoteTransition.
|
||||
*
|
||||
* @param remoteTransition
|
||||
* The actual remote-transition interface used to run the transition animation.
|
||||
*/
|
||||
@DataClass.Generated.Member
|
||||
public RemoteTransition(
|
||||
@NonNull IRemoteTransition remoteTransition) {
|
||||
this.mRemoteTransition = remoteTransition;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
NonNull.class, null, mRemoteTransition);
|
||||
|
||||
// onConstructed(); // You can define this method to get a callback
|
||||
}
|
||||
|
||||
/**
|
||||
* The actual remote-transition interface used to run the transition animation.
|
||||
*/
|
||||
@DataClass.Generated.Member
|
||||
public @NonNull IRemoteTransition getRemoteTransition() {
|
||||
return mRemoteTransition;
|
||||
}
|
||||
|
||||
/**
|
||||
* The actual remote-transition interface used to run the transition animation.
|
||||
*/
|
||||
@DataClass.Generated.Member
|
||||
public @NonNull RemoteTransition setRemoteTransition(@NonNull IRemoteTransition value) {
|
||||
mRemoteTransition = value;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
NonNull.class, null, mRemoteTransition);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
@DataClass.Generated.Member
|
||||
public String toString() {
|
||||
// You can override field toString logic by defining methods like:
|
||||
// String fieldNameToString() { ... }
|
||||
|
||||
return "RemoteTransition { " +
|
||||
"remoteTransition = " + mRemoteTransition +
|
||||
" }";
|
||||
}
|
||||
|
||||
@Override
|
||||
@DataClass.Generated.Member
|
||||
public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
|
||||
// You can override field parcelling by defining methods like:
|
||||
// void parcelFieldName(Parcel dest, int flags) { ... }
|
||||
|
||||
dest.writeStrongInterface(mRemoteTransition);
|
||||
}
|
||||
|
||||
@Override
|
||||
@DataClass.Generated.Member
|
||||
public int describeContents() { return 0; }
|
||||
|
||||
/** @hide */
|
||||
@SuppressWarnings({"unchecked", "RedundantCast"})
|
||||
@DataClass.Generated.Member
|
||||
protected RemoteTransition(@NonNull android.os.Parcel in) {
|
||||
// You can override field unparcelling by defining methods like:
|
||||
// static FieldType unparcelFieldName(Parcel in) { ... }
|
||||
|
||||
IRemoteTransition remoteTransition = IRemoteTransition.Stub.asInterface(in.readStrongBinder());
|
||||
|
||||
this.mRemoteTransition = remoteTransition;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
NonNull.class, null, mRemoteTransition);
|
||||
|
||||
// onConstructed(); // You can define this method to get a callback
|
||||
}
|
||||
|
||||
@DataClass.Generated.Member
|
||||
public static final @NonNull Parcelable.Creator<RemoteTransition> CREATOR
|
||||
= new Parcelable.Creator<RemoteTransition>() {
|
||||
@Override
|
||||
public RemoteTransition[] newArray(int size) {
|
||||
return new RemoteTransition[size];
|
||||
}
|
||||
|
||||
@Override
|
||||
public RemoteTransition createFromParcel(@NonNull android.os.Parcel in) {
|
||||
return new RemoteTransition(in);
|
||||
}
|
||||
};
|
||||
|
||||
@DataClass.Generated(
|
||||
time = 1630613039043L,
|
||||
codegenVersion = "1.0.23",
|
||||
sourceFile = "frameworks/base/core/java/android/window/RemoteTransition.java",
|
||||
inputSignatures = "private @android.annotation.NonNull android.window.IRemoteTransition mRemoteTransition\npublic @android.annotation.Nullable android.os.IBinder asBinder()\nclass RemoteTransition extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genSetters=true, genAidl=true)")
|
||||
@Deprecated
|
||||
private void __metadata() {}
|
||||
|
||||
|
||||
//@formatter:on
|
||||
// End of generated code
|
||||
|
||||
}
|
||||
@@ -40,11 +40,11 @@ public final class TransitionRequestInfo implements Parcelable {
|
||||
private @Nullable ActivityManager.RunningTaskInfo mTriggerTask;
|
||||
|
||||
/** If non-null, a remote-transition associated with the source of this transition. */
|
||||
private @Nullable IRemoteTransition mRemoteTransition;
|
||||
private @Nullable RemoteTransition mRemoteTransition;
|
||||
|
||||
|
||||
|
||||
// Code below generated by codegen v1.0.22.
|
||||
// Code below generated by codegen v1.0.23.
|
||||
//
|
||||
// DO NOT MODIFY!
|
||||
// CHECKSTYLE:OFF Generated code
|
||||
@@ -72,7 +72,7 @@ public final class TransitionRequestInfo implements Parcelable {
|
||||
public TransitionRequestInfo(
|
||||
@WindowManager.TransitionType int type,
|
||||
@Nullable ActivityManager.RunningTaskInfo triggerTask,
|
||||
@Nullable IRemoteTransition remoteTransition) {
|
||||
@Nullable RemoteTransition remoteTransition) {
|
||||
this.mType = type;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
WindowManager.TransitionType.class, null, mType);
|
||||
@@ -103,7 +103,7 @@ public final class TransitionRequestInfo implements Parcelable {
|
||||
* If non-null, a remote-transition associated with the source of this transition.
|
||||
*/
|
||||
@DataClass.Generated.Member
|
||||
public @Nullable IRemoteTransition getRemoteTransition() {
|
||||
public @Nullable RemoteTransition getRemoteTransition() {
|
||||
return mRemoteTransition;
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ public final class TransitionRequestInfo implements Parcelable {
|
||||
* If non-null, a remote-transition associated with the source of this transition.
|
||||
*/
|
||||
@DataClass.Generated.Member
|
||||
public @android.annotation.NonNull TransitionRequestInfo setRemoteTransition(@android.annotation.NonNull IRemoteTransition value) {
|
||||
public @android.annotation.NonNull TransitionRequestInfo setRemoteTransition(@android.annotation.NonNull RemoteTransition value) {
|
||||
mRemoteTransition = value;
|
||||
return this;
|
||||
}
|
||||
@@ -151,7 +151,7 @@ public final class TransitionRequestInfo implements Parcelable {
|
||||
dest.writeByte(flg);
|
||||
dest.writeInt(mType);
|
||||
if (mTriggerTask != null) dest.writeTypedObject(mTriggerTask, flags);
|
||||
if (mRemoteTransition != null) dest.writeStrongInterface(mRemoteTransition);
|
||||
if (mRemoteTransition != null) dest.writeTypedObject(mRemoteTransition, flags);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -168,7 +168,7 @@ public final class TransitionRequestInfo implements Parcelable {
|
||||
byte flg = in.readByte();
|
||||
int type = in.readInt();
|
||||
ActivityManager.RunningTaskInfo triggerTask = (flg & 0x2) == 0 ? null : (ActivityManager.RunningTaskInfo) in.readTypedObject(ActivityManager.RunningTaskInfo.CREATOR);
|
||||
IRemoteTransition remoteTransition = (flg & 0x4) == 0 ? null : IRemoteTransition.Stub.asInterface(in.readStrongBinder());
|
||||
RemoteTransition remoteTransition = (flg & 0x4) == 0 ? null : (RemoteTransition) in.readTypedObject(RemoteTransition.CREATOR);
|
||||
|
||||
this.mType = type;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
@@ -194,10 +194,10 @@ public final class TransitionRequestInfo implements Parcelable {
|
||||
};
|
||||
|
||||
@DataClass.Generated(
|
||||
time = 1610060387917L,
|
||||
codegenVersion = "1.0.22",
|
||||
time = 1629321632222L,
|
||||
codegenVersion = "1.0.23",
|
||||
sourceFile = "frameworks/base/core/java/android/window/TransitionRequestInfo.java",
|
||||
inputSignatures = "private final @android.view.WindowManager.TransitionType int mType\nprivate @android.annotation.Nullable android.app.ActivityManager.RunningTaskInfo mTriggerTask\nprivate @android.annotation.Nullable android.window.IRemoteTransition mRemoteTransition\nclass TransitionRequestInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genSetters=true, genAidl=true)")
|
||||
inputSignatures = "private final @android.view.WindowManager.TransitionType int mType\nprivate @android.annotation.Nullable android.app.ActivityManager.RunningTaskInfo mTriggerTask\nprivate @android.annotation.Nullable android.window.RemoteTransition mRemoteTransition\nclass TransitionRequestInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genSetters=true, genAidl=true)")
|
||||
@Deprecated
|
||||
private void __metadata() {}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.view.RemoteAnimationAdapter;
|
||||
import android.view.RemoteAnimationTarget;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.RemoteTransition;
|
||||
|
||||
import com.android.wm.shell.splitscreen.ISplitScreenListener;
|
||||
|
||||
@@ -82,7 +82,7 @@ interface ISplitScreen {
|
||||
* Starts tasks simultaneously in one transition.
|
||||
*/
|
||||
oneway void startTasks(int mainTaskId, in Bundle mainOptions, int sideTaskId,
|
||||
in Bundle sideOptions, int sidePosition, in IRemoteTransition remoteTransition) = 10;
|
||||
in Bundle sideOptions, int sidePosition, in RemoteTransition remoteTransition) = 10;
|
||||
|
||||
/**
|
||||
* Version of startTasks using legacy transition system.
|
||||
|
||||
@@ -43,7 +43,7 @@ import android.view.RemoteAnimationTarget;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.SurfaceSession;
|
||||
import android.view.WindowManager;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.WindowContainerTransaction;
|
||||
|
||||
import androidx.annotation.BinderThread;
|
||||
@@ -553,7 +553,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
|
||||
public void startTasks(int mainTaskId, @Nullable Bundle mainOptions,
|
||||
int sideTaskId, @Nullable Bundle sideOptions,
|
||||
@SplitPosition int sidePosition,
|
||||
@Nullable IRemoteTransition remoteTransition) {
|
||||
@Nullable RemoteTransition remoteTransition) {
|
||||
executeRemoteCallWithTaskPermission(mController, "startTasks",
|
||||
(controller) -> controller.mStageCoordinator.startTasks(mainTaskId, mainOptions,
|
||||
sideTaskId, sideOptions, sidePosition, remoteTransition));
|
||||
|
||||
@@ -35,7 +35,7 @@ import android.graphics.Rect;
|
||||
import android.os.IBinder;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.WindowManager;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionInfo;
|
||||
import android.window.WindowContainerToken;
|
||||
import android.window.WindowContainerTransaction;
|
||||
@@ -169,7 +169,7 @@ class SplitScreenTransitions {
|
||||
|
||||
/** Starts a transition to enter split with a remote transition animator. */
|
||||
IBinder startEnterTransition(@WindowManager.TransitionType int transitType,
|
||||
@NonNull WindowContainerTransaction wct, @Nullable IRemoteTransition remoteTransition,
|
||||
@NonNull WindowContainerTransaction wct, @Nullable RemoteTransition remoteTransition,
|
||||
@NonNull Transitions.TransitionHandler handler) {
|
||||
if (remoteTransition != null) {
|
||||
// Wrapping it for ease-of-use (OneShot handles all the binder linking/death stuff)
|
||||
|
||||
@@ -72,7 +72,7 @@ import android.view.SurfaceControl;
|
||||
import android.view.SurfaceSession;
|
||||
import android.view.WindowManager;
|
||||
import android.window.DisplayAreaInfo;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionInfo;
|
||||
import android.window.TransitionRequestInfo;
|
||||
import android.window.WindowContainerToken;
|
||||
@@ -263,7 +263,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
/** Starts 2 tasks in one transition. */
|
||||
void startTasks(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId,
|
||||
@Nullable Bundle sideOptions, @SplitPosition int sidePosition,
|
||||
@Nullable IRemoteTransition remoteTransition) {
|
||||
@Nullable RemoteTransition remoteTransition) {
|
||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||
mainOptions = mainOptions != null ? mainOptions : new Bundle();
|
||||
sideOptions = sideOptions != null ? sideOptions : new Bundle();
|
||||
@@ -358,7 +358,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
public void startIntent(PendingIntent intent, Intent fillInIntent,
|
||||
@SplitScreen.StageType int stage, @SplitPosition int position,
|
||||
@androidx.annotation.Nullable Bundle options,
|
||||
@Nullable IRemoteTransition remoteTransition) {
|
||||
@Nullable RemoteTransition remoteTransition) {
|
||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||
options = resolveStartStage(stage, position, options, wct);
|
||||
wct.sendPendingIntent(intent, fillInIntent, options);
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package com.android.wm.shell.transition;
|
||||
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionFilter;
|
||||
|
||||
/**
|
||||
@@ -28,10 +28,10 @@ interface IShellTransitions {
|
||||
* Registers a remote transition handler.
|
||||
*/
|
||||
oneway void registerRemote(in TransitionFilter filter,
|
||||
in IRemoteTransition remoteTransition) = 1;
|
||||
in RemoteTransition remoteTransition) = 1;
|
||||
|
||||
/**
|
||||
* Unregisters a remote transition handler.
|
||||
*/
|
||||
oneway void unregisterRemote(in IRemoteTransition remoteTransition) = 2;
|
||||
oneway void unregisterRemote(in RemoteTransition remoteTransition) = 2;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.util.Log;
|
||||
import android.view.SurfaceControl;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.IRemoteTransitionFinishedCallback;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionInfo;
|
||||
import android.window.TransitionRequestInfo;
|
||||
import android.window.WindowContainerTransaction;
|
||||
@@ -43,10 +44,10 @@ public class OneShotRemoteHandler implements Transitions.TransitionHandler {
|
||||
private IBinder mTransition = null;
|
||||
|
||||
/** The remote to delegate animation to */
|
||||
private final IRemoteTransition mRemote;
|
||||
private final RemoteTransition mRemote;
|
||||
|
||||
public OneShotRemoteHandler(@NonNull ShellExecutor mainExecutor,
|
||||
@NonNull IRemoteTransition remote) {
|
||||
@NonNull RemoteTransition remote) {
|
||||
mMainExecutor = mainExecutor;
|
||||
mRemote = remote;
|
||||
}
|
||||
@@ -88,7 +89,7 @@ public class OneShotRemoteHandler implements Transitions.TransitionHandler {
|
||||
if (mRemote.asBinder() != null) {
|
||||
mRemote.asBinder().linkToDeath(remoteDied, 0 /* flags */);
|
||||
}
|
||||
mRemote.startAnimation(transition, info, startTransaction, cb);
|
||||
mRemote.getRemoteTransition().startAnimation(transition, info, startTransaction, cb);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(Transitions.TAG, "Error running remote transition.", e);
|
||||
if (mRemote.asBinder() != null) {
|
||||
@@ -115,7 +116,7 @@ public class OneShotRemoteHandler implements Transitions.TransitionHandler {
|
||||
}
|
||||
};
|
||||
try {
|
||||
mRemote.mergeAnimation(transition, info, t, mergeTarget, cb);
|
||||
mRemote.getRemoteTransition().mergeAnimation(transition, info, t, mergeTarget, cb);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(Transitions.TAG, "Error merging remote transition.", e);
|
||||
}
|
||||
@@ -125,8 +126,9 @@ public class OneShotRemoteHandler implements Transitions.TransitionHandler {
|
||||
@Nullable
|
||||
public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
|
||||
@Nullable TransitionRequestInfo request) {
|
||||
IRemoteTransition remote = request.getRemoteTransition();
|
||||
if (remote != mRemote) return null;
|
||||
RemoteTransition remote = request.getRemoteTransition();
|
||||
IRemoteTransition iRemote = remote != null ? remote.getRemoteTransition() : null;
|
||||
if (iRemote != mRemote.getRemoteTransition()) return null;
|
||||
mTransition = transition;
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "RemoteTransition directly requested"
|
||||
+ " for %s: %s", transition, remote);
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.util.Slog;
|
||||
import android.view.SurfaceControl;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.IRemoteTransitionFinishedCallback;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionFilter;
|
||||
import android.window.TransitionInfo;
|
||||
import android.window.TransitionRequestInfo;
|
||||
@@ -50,10 +51,10 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
private final ShellExecutor mMainExecutor;
|
||||
|
||||
/** Includes remotes explicitly requested by, eg, ActivityOptions */
|
||||
private final ArrayMap<IBinder, IRemoteTransition> mRequestedRemotes = new ArrayMap<>();
|
||||
private final ArrayMap<IBinder, RemoteTransition> mRequestedRemotes = new ArrayMap<>();
|
||||
|
||||
/** Ordered by specificity. Last filters will be checked first */
|
||||
private final ArrayList<Pair<TransitionFilter, IRemoteTransition>> mFilters =
|
||||
private final ArrayList<Pair<TransitionFilter, RemoteTransition>> mFilters =
|
||||
new ArrayList<>();
|
||||
|
||||
private final ArrayMap<IBinder, RemoteDeathHandler> mDeathHandlers = new ArrayMap<>();
|
||||
@@ -62,19 +63,12 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
mMainExecutor = mainExecutor;
|
||||
}
|
||||
|
||||
void addFiltered(TransitionFilter filter, IRemoteTransition remote) {
|
||||
try {
|
||||
RemoteDeathHandler handler = new RemoteDeathHandler(remote.asBinder());
|
||||
remote.asBinder().linkToDeath(handler, 0 /* flags */);
|
||||
mDeathHandlers.put(remote.asBinder(), handler);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Failed to link to death");
|
||||
return;
|
||||
}
|
||||
void addFiltered(TransitionFilter filter, RemoteTransition remote) {
|
||||
handleDeath(remote.asBinder(), null /* finishCallback */);
|
||||
mFilters.add(new Pair<>(filter, remote));
|
||||
}
|
||||
|
||||
void removeFiltered(IRemoteTransition remote) {
|
||||
void removeFiltered(RemoteTransition remote) {
|
||||
boolean removed = false;
|
||||
for (int i = mFilters.size() - 1; i >= 0; --i) {
|
||||
if (mFilters.get(i).second == remote) {
|
||||
@@ -83,8 +77,7 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
}
|
||||
}
|
||||
if (removed) {
|
||||
RemoteDeathHandler handler = mDeathHandlers.remove(remote.asBinder());
|
||||
remote.asBinder().unlinkToDeath(handler, 0 /* flags */);
|
||||
unhandleDeath(remote.asBinder(), null /* finishCallback */);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +91,7 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
@NonNull SurfaceControl.Transaction startTransaction,
|
||||
@NonNull SurfaceControl.Transaction finishTransaction,
|
||||
@NonNull Transitions.TransitionFinishCallback finishCallback) {
|
||||
IRemoteTransition pendingRemote = mRequestedRemotes.get(transition);
|
||||
RemoteTransition pendingRemote = mRequestedRemotes.get(transition);
|
||||
if (pendingRemote == null) {
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "Transition %s doesn't have "
|
||||
+ "explicit remote, search filters for match for %s", transition, info);
|
||||
@@ -120,21 +113,12 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
|
||||
if (pendingRemote == null) return false;
|
||||
|
||||
final IRemoteTransition remote = pendingRemote;
|
||||
final IBinder.DeathRecipient remoteDied = () -> {
|
||||
Log.e(Transitions.TAG, "Remote transition died, finishing");
|
||||
mMainExecutor.execute(() -> {
|
||||
mRequestedRemotes.remove(transition);
|
||||
finishCallback.onTransitionFinished(null /* wct */, null /* wctCB */);
|
||||
});
|
||||
};
|
||||
final RemoteTransition remote = pendingRemote;
|
||||
IRemoteTransitionFinishedCallback cb = new IRemoteTransitionFinishedCallback.Stub() {
|
||||
@Override
|
||||
public void onTransitionFinished(WindowContainerTransaction wct,
|
||||
SurfaceControl.Transaction sct) {
|
||||
if (remote.asBinder() != null) {
|
||||
remote.asBinder().unlinkToDeath(remoteDied, 0 /* flags */);
|
||||
}
|
||||
unhandleDeath(remote.asBinder(), finishCallback);
|
||||
mMainExecutor.execute(() -> {
|
||||
if (sct != null) {
|
||||
finishTransaction.merge(sct);
|
||||
@@ -145,15 +129,11 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
}
|
||||
};
|
||||
try {
|
||||
if (remote.asBinder() != null) {
|
||||
remote.asBinder().linkToDeath(remoteDied, 0 /* flags */);
|
||||
}
|
||||
remote.startAnimation(transition, info, startTransaction, cb);
|
||||
handleDeath(remote.asBinder(), finishCallback);
|
||||
remote.getRemoteTransition().startAnimation(transition, info, startTransaction, cb);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(Transitions.TAG, "Error running remote transition.", e);
|
||||
if (remote.asBinder() != null) {
|
||||
remote.asBinder().unlinkToDeath(remoteDied, 0 /* flags */);
|
||||
}
|
||||
unhandleDeath(remote.asBinder(), finishCallback);
|
||||
mRequestedRemotes.remove(transition);
|
||||
mMainExecutor.execute(
|
||||
() -> finishCallback.onTransitionFinished(null /* wct */, null /* wctCB */));
|
||||
@@ -165,7 +145,7 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
|
||||
@NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
|
||||
@NonNull Transitions.TransitionFinishCallback finishCallback) {
|
||||
final IRemoteTransition remote = mRequestedRemotes.get(mergeTarget);
|
||||
final IRemoteTransition remote = mRequestedRemotes.get(mergeTarget).getRemoteTransition();
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Attempt merge %s into %s",
|
||||
transition, remote);
|
||||
if (remote == null) return;
|
||||
@@ -196,7 +176,7 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
@Nullable
|
||||
public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
|
||||
@Nullable TransitionRequestInfo request) {
|
||||
IRemoteTransition remote = request.getRemoteTransition();
|
||||
RemoteTransition remote = request.getRemoteTransition();
|
||||
if (remote == null) return null;
|
||||
mRequestedRemotes.put(transition, remote);
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "RemoteTransition directly requested"
|
||||
@@ -204,14 +184,70 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
return new WindowContainerTransaction();
|
||||
}
|
||||
|
||||
private void handleDeath(@NonNull IBinder remote,
|
||||
@Nullable Transitions.TransitionFinishCallback finishCallback) {
|
||||
synchronized (mDeathHandlers) {
|
||||
RemoteDeathHandler deathHandler = mDeathHandlers.get(remote);
|
||||
if (deathHandler == null) {
|
||||
deathHandler = new RemoteDeathHandler(remote);
|
||||
try {
|
||||
remote.linkToDeath(deathHandler, 0 /* flags */);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Failed to link to death");
|
||||
return;
|
||||
}
|
||||
mDeathHandlers.put(remote, deathHandler);
|
||||
}
|
||||
deathHandler.addUser(finishCallback);
|
||||
}
|
||||
}
|
||||
|
||||
private void unhandleDeath(@NonNull IBinder remote,
|
||||
@Nullable Transitions.TransitionFinishCallback finishCallback) {
|
||||
synchronized (mDeathHandlers) {
|
||||
RemoteDeathHandler deathHandler = mDeathHandlers.get(remote);
|
||||
if (deathHandler == null) return;
|
||||
deathHandler.removeUser(finishCallback);
|
||||
if (deathHandler.getUserCount() == 0) {
|
||||
if (!deathHandler.mPendingFinishCallbacks.isEmpty()) {
|
||||
throw new IllegalStateException("Unhandling death for binder that still has"
|
||||
+ " pending finishCallback(s).");
|
||||
}
|
||||
remote.unlinkToDeath(deathHandler, 0 /* flags */);
|
||||
mDeathHandlers.remove(remote);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** NOTE: binder deaths can alter the filter order */
|
||||
private class RemoteDeathHandler implements IBinder.DeathRecipient {
|
||||
private final IBinder mRemote;
|
||||
private final ArrayList<Transitions.TransitionFinishCallback> mPendingFinishCallbacks =
|
||||
new ArrayList<>();
|
||||
private int mUsers = 0;
|
||||
|
||||
RemoteDeathHandler(IBinder remote) {
|
||||
mRemote = remote;
|
||||
}
|
||||
|
||||
void addUser(@Nullable Transitions.TransitionFinishCallback finishCallback) {
|
||||
if (finishCallback != null) {
|
||||
mPendingFinishCallbacks.add(finishCallback);
|
||||
}
|
||||
++mUsers;
|
||||
}
|
||||
|
||||
void removeUser(@Nullable Transitions.TransitionFinishCallback finishCallback) {
|
||||
if (finishCallback != null) {
|
||||
mPendingFinishCallbacks.remove(finishCallback);
|
||||
}
|
||||
--mUsers;
|
||||
}
|
||||
|
||||
int getUserCount() {
|
||||
return mUsers;
|
||||
}
|
||||
|
||||
@Override
|
||||
@BinderThread
|
||||
public void binderDied() {
|
||||
@@ -221,6 +257,16 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
mFilters.remove(i);
|
||||
}
|
||||
}
|
||||
for (int i = mRequestedRemotes.size() - 1; i >= 0; --i) {
|
||||
if (mRemote.equals(mRequestedRemotes.valueAt(i).asBinder())) {
|
||||
mRequestedRemotes.removeAt(i);
|
||||
}
|
||||
}
|
||||
for (int i = mPendingFinishCallbacks.size() - 1; i >= 0; --i) {
|
||||
mPendingFinishCallbacks.get(i).onTransitionFinished(
|
||||
null /* wct */, null /* wctCB */);
|
||||
}
|
||||
mPendingFinishCallbacks.clear();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
package com.android.wm.shell.transition;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionFilter;
|
||||
|
||||
import com.android.wm.shell.common.annotations.ExternalThread;
|
||||
@@ -39,10 +39,10 @@ public interface ShellTransitions {
|
||||
* Registers a remote transition.
|
||||
*/
|
||||
void registerRemote(@NonNull TransitionFilter filter,
|
||||
@NonNull IRemoteTransition remoteTransition);
|
||||
@NonNull RemoteTransition remoteTransition);
|
||||
|
||||
/**
|
||||
* Unregisters a remote transition.
|
||||
*/
|
||||
void unregisterRemote(@NonNull IRemoteTransition remoteTransition);
|
||||
void unregisterRemote(@NonNull RemoteTransition remoteTransition);
|
||||
}
|
||||
|
||||
@@ -40,8 +40,8 @@ import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.WindowManager;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.ITransitionPlayer;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionFilter;
|
||||
import android.window.TransitionInfo;
|
||||
import android.window.TransitionRequestInfo;
|
||||
@@ -176,13 +176,13 @@ public class Transitions implements RemoteCallable<Transitions> {
|
||||
return new ShellTransitions() {
|
||||
@Override
|
||||
public void registerRemote(@androidx.annotation.NonNull TransitionFilter filter,
|
||||
@androidx.annotation.NonNull IRemoteTransition remoteTransition) {
|
||||
@androidx.annotation.NonNull RemoteTransition remoteTransition) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterRemote(
|
||||
@androidx.annotation.NonNull IRemoteTransition remoteTransition) {
|
||||
@androidx.annotation.NonNull RemoteTransition remoteTransition) {
|
||||
// Do nothing
|
||||
}
|
||||
};
|
||||
@@ -218,12 +218,12 @@ public class Transitions implements RemoteCallable<Transitions> {
|
||||
|
||||
/** Register a remote transition to be used when `filter` matches an incoming transition */
|
||||
public void registerRemote(@NonNull TransitionFilter filter,
|
||||
@NonNull IRemoteTransition remoteTransition) {
|
||||
@NonNull RemoteTransition remoteTransition) {
|
||||
mRemoteTransitionHandler.addFiltered(filter, remoteTransition);
|
||||
}
|
||||
|
||||
/** Unregisters a remote transition and all associated filters */
|
||||
public void unregisterRemote(@NonNull IRemoteTransition remoteTransition) {
|
||||
public void unregisterRemote(@NonNull RemoteTransition remoteTransition) {
|
||||
mRemoteTransitionHandler.removeFiltered(remoteTransition);
|
||||
}
|
||||
|
||||
@@ -704,14 +704,14 @@ public class Transitions implements RemoteCallable<Transitions> {
|
||||
|
||||
@Override
|
||||
public void registerRemote(@NonNull TransitionFilter filter,
|
||||
@NonNull IRemoteTransition remoteTransition) {
|
||||
@NonNull RemoteTransition remoteTransition) {
|
||||
mMainExecutor.execute(() -> {
|
||||
mRemoteTransitionHandler.addFiltered(filter, remoteTransition);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterRemote(@NonNull IRemoteTransition remoteTransition) {
|
||||
public void unregisterRemote(@NonNull RemoteTransition remoteTransition) {
|
||||
mMainExecutor.execute(() -> {
|
||||
mRemoteTransitionHandler.removeFiltered(remoteTransition);
|
||||
});
|
||||
@@ -738,7 +738,7 @@ public class Transitions implements RemoteCallable<Transitions> {
|
||||
|
||||
@Override
|
||||
public void registerRemote(@NonNull TransitionFilter filter,
|
||||
@NonNull IRemoteTransition remoteTransition) {
|
||||
@NonNull RemoteTransition remoteTransition) {
|
||||
executeRemoteCallWithTaskPermission(mTransitions, "registerRemote",
|
||||
(transitions) -> {
|
||||
transitions.mRemoteTransitionHandler.addFiltered(filter, remoteTransition);
|
||||
@@ -746,7 +746,7 @@ public class Transitions implements RemoteCallable<Transitions> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterRemote(@NonNull IRemoteTransition remoteTransition) {
|
||||
public void unregisterRemote(@NonNull RemoteTransition remoteTransition) {
|
||||
executeRemoteCallWithTaskPermission(mTransitions, "unregisterRemote",
|
||||
(transitions) -> {
|
||||
transitions.mRemoteTransitionHandler.removeFiltered(remoteTransition);
|
||||
|
||||
@@ -46,6 +46,7 @@ import android.view.SurfaceControl;
|
||||
import android.view.SurfaceSession;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.IRemoteTransitionFinishedCallback;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionInfo;
|
||||
import android.window.TransitionRequestInfo;
|
||||
import android.window.WindowContainerTransaction;
|
||||
@@ -130,8 +131,8 @@ public class SplitTransitionTests extends ShellTestCase {
|
||||
TestRemoteTransition testRemote = new TestRemoteTransition();
|
||||
|
||||
IBinder transition = mSplitScreenTransitions.startEnterTransition(
|
||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, new WindowContainerTransaction(), testRemote,
|
||||
mStageCoordinator);
|
||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, new WindowContainerTransaction(),
|
||||
new RemoteTransition(testRemote), mStageCoordinator);
|
||||
mMainStage.onTaskAppeared(mMainChild, createMockSurface());
|
||||
mSideStage.onTaskAppeared(mSideChild, createMockSurface());
|
||||
boolean accepted = mStageCoordinator.startAnimation(transition, info,
|
||||
@@ -304,7 +305,7 @@ public class SplitTransitionTests extends ShellTestCase {
|
||||
TransitionInfo enterInfo = createEnterPairInfo();
|
||||
IBinder enterTransit = mSplitScreenTransitions.startEnterTransition(
|
||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, new WindowContainerTransaction(),
|
||||
new TestRemoteTransition(), mStageCoordinator);
|
||||
new RemoteTransition(new TestRemoteTransition()), mStageCoordinator);
|
||||
mMainStage.onTaskAppeared(mMainChild, createMockSurface());
|
||||
mSideStage.onTaskAppeared(mSideChild, createMockSurface());
|
||||
mStageCoordinator.startAnimation(enterTransit, enterInfo,
|
||||
|
||||
@@ -63,6 +63,7 @@ import android.view.SurfaceControl;
|
||||
import android.view.WindowManager;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.IRemoteTransitionFinishedCallback;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionFilter;
|
||||
import android.window.TransitionInfo;
|
||||
import android.window.TransitionRequestInfo;
|
||||
@@ -238,7 +239,8 @@ public class ShellTransitionTests {
|
||||
};
|
||||
IBinder transitToken = new Binder();
|
||||
transitions.requestStartTransition(transitToken,
|
||||
new TransitionRequestInfo(TRANSIT_OPEN, null /* trigger */, testRemote));
|
||||
new TransitionRequestInfo(TRANSIT_OPEN, null /* trigger */,
|
||||
new RemoteTransition(testRemote)));
|
||||
verify(mOrganizer, times(1)).startTransition(eq(TRANSIT_OPEN), eq(transitToken), any());
|
||||
TransitionInfo info = new TransitionInfoBuilder(TRANSIT_OPEN)
|
||||
.addChange(TRANSIT_OPEN).addChange(TRANSIT_CLOSE).build();
|
||||
@@ -383,7 +385,7 @@ public class ShellTransitionTests {
|
||||
new TransitionFilter.Requirement[]{new TransitionFilter.Requirement()};
|
||||
filter.mRequirements[0].mModes = new int[]{TRANSIT_OPEN, TRANSIT_TO_FRONT};
|
||||
|
||||
transitions.registerRemote(filter, testRemote);
|
||||
transitions.registerRemote(filter, new RemoteTransition(testRemote));
|
||||
mMainExecutor.flushAll();
|
||||
|
||||
IBinder transitToken = new Binder();
|
||||
@@ -426,11 +428,12 @@ public class ShellTransitionTests {
|
||||
|
||||
final int transitType = TRANSIT_FIRST_CUSTOM + 1;
|
||||
|
||||
OneShotRemoteHandler oneShot = new OneShotRemoteHandler(mMainExecutor, testRemote);
|
||||
OneShotRemoteHandler oneShot = new OneShotRemoteHandler(mMainExecutor,
|
||||
new RemoteTransition(testRemote));
|
||||
// Verify that it responds to the remote but not other things.
|
||||
IBinder transitToken = new Binder();
|
||||
assertNotNull(oneShot.handleRequest(transitToken,
|
||||
new TransitionRequestInfo(transitType, null, testRemote)));
|
||||
new TransitionRequestInfo(transitType, null, new RemoteTransition(testRemote))));
|
||||
assertNull(oneShot.handleRequest(transitToken,
|
||||
new TransitionRequestInfo(transitType, null, null)));
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ import android.view.RemoteAnimationTarget;
|
||||
import android.view.SurfaceControl;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.IRemoteTransitionFinishedCallback;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -62,7 +63,8 @@ public class RemoteAnimationAdapterCompat {
|
||||
|
||||
/** Helper to just build a remote transition. Use this if the legacy adapter isn't needed. */
|
||||
public static RemoteTransitionCompat buildRemoteTransition(RemoteAnimationRunnerCompat runner) {
|
||||
return new RemoteTransitionCompat(wrapRemoteTransition(runner));
|
||||
return new RemoteTransitionCompat(
|
||||
new RemoteTransition(wrapRemoteTransition(runner)));
|
||||
}
|
||||
|
||||
public RemoteTransitionCompat getRemoteTransition() {
|
||||
|
||||
@@ -42,6 +42,7 @@ import android.view.SurfaceControl;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.IRemoteTransitionFinishedCallback;
|
||||
import android.window.PictureInPictureSurfaceTransaction;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionFilter;
|
||||
import android.window.TransitionInfo;
|
||||
import android.window.WindowContainerToken;
|
||||
@@ -63,16 +64,16 @@ import java.util.concurrent.Executor;
|
||||
public class RemoteTransitionCompat implements Parcelable {
|
||||
private static final String TAG = "RemoteTransitionCompat";
|
||||
|
||||
@NonNull final IRemoteTransition mTransition;
|
||||
@NonNull final RemoteTransition mTransition;
|
||||
@Nullable TransitionFilter mFilter = null;
|
||||
|
||||
RemoteTransitionCompat(IRemoteTransition transition) {
|
||||
RemoteTransitionCompat(RemoteTransition transition) {
|
||||
mTransition = transition;
|
||||
}
|
||||
|
||||
public RemoteTransitionCompat(@NonNull RemoteTransitionRunner runner,
|
||||
@NonNull Executor executor) {
|
||||
mTransition = new IRemoteTransition.Stub() {
|
||||
IRemoteTransition remote = new IRemoteTransition.Stub() {
|
||||
@Override
|
||||
public void startAnimation(IBinder transition, TransitionInfo info,
|
||||
SurfaceControl.Transaction t,
|
||||
@@ -102,12 +103,13 @@ public class RemoteTransitionCompat implements Parcelable {
|
||||
finishAdapter));
|
||||
}
|
||||
};
|
||||
mTransition = new RemoteTransition(remote);
|
||||
}
|
||||
|
||||
/** Constructor specifically for recents animation */
|
||||
public RemoteTransitionCompat(RecentsAnimationListener recents,
|
||||
RecentsAnimationControllerCompat controller) {
|
||||
mTransition = new IRemoteTransition.Stub() {
|
||||
IRemoteTransition remote = new IRemoteTransition.Stub() {
|
||||
final RecentsControllerWrap mRecentsSession = new RecentsControllerWrap();
|
||||
IBinder mToken = null;
|
||||
|
||||
@@ -166,6 +168,7 @@ public class RemoteTransitionCompat implements Parcelable {
|
||||
}
|
||||
}
|
||||
};
|
||||
mTransition = new RemoteTransition(remote);
|
||||
}
|
||||
|
||||
/** Adds a filter check that restricts this remote transition to home open transitions. */
|
||||
@@ -381,7 +384,7 @@ public class RemoteTransitionCompat implements Parcelable {
|
||||
|
||||
|
||||
|
||||
// Code below generated by codegen v1.0.21.
|
||||
// Code below generated by codegen v1.0.23.
|
||||
//
|
||||
// DO NOT MODIFY!
|
||||
// CHECKSTYLE:OFF Generated code
|
||||
@@ -393,8 +396,21 @@ public class RemoteTransitionCompat implements Parcelable {
|
||||
// Settings > Editor > Code Style > Formatter Control
|
||||
//@formatter:off
|
||||
|
||||
|
||||
@DataClass.Generated.Member
|
||||
public @NonNull IRemoteTransition getTransition() {
|
||||
/* package-private */ RemoteTransitionCompat(
|
||||
@NonNull RemoteTransition transition,
|
||||
@Nullable TransitionFilter filter) {
|
||||
this.mTransition = transition;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
NonNull.class, null, mTransition);
|
||||
this.mFilter = filter;
|
||||
|
||||
// onConstructed(); // You can define this method to get a callback
|
||||
}
|
||||
|
||||
@DataClass.Generated.Member
|
||||
public @NonNull RemoteTransition getTransition() {
|
||||
return mTransition;
|
||||
}
|
||||
|
||||
@@ -412,7 +428,7 @@ public class RemoteTransitionCompat implements Parcelable {
|
||||
byte flg = 0;
|
||||
if (mFilter != null) flg |= 0x2;
|
||||
dest.writeByte(flg);
|
||||
dest.writeStrongInterface(mTransition);
|
||||
dest.writeTypedObject(mTransition, flags);
|
||||
if (mFilter != null) dest.writeTypedObject(mFilter, flags);
|
||||
}
|
||||
|
||||
@@ -428,7 +444,7 @@ public class RemoteTransitionCompat implements Parcelable {
|
||||
// static FieldType unparcelFieldName(Parcel in) { ... }
|
||||
|
||||
byte flg = in.readByte();
|
||||
IRemoteTransition transition = IRemoteTransition.Stub.asInterface(in.readStrongBinder());
|
||||
RemoteTransition transition = (RemoteTransition) in.readTypedObject(RemoteTransition.CREATOR);
|
||||
TransitionFilter filter = (flg & 0x2) == 0 ? null : (TransitionFilter) in.readTypedObject(TransitionFilter.CREATOR);
|
||||
|
||||
this.mTransition = transition;
|
||||
@@ -460,20 +476,20 @@ public class RemoteTransitionCompat implements Parcelable {
|
||||
@DataClass.Generated.Member
|
||||
public static class Builder {
|
||||
|
||||
private @NonNull IRemoteTransition mTransition;
|
||||
private @NonNull RemoteTransition mTransition;
|
||||
private @Nullable TransitionFilter mFilter;
|
||||
|
||||
private long mBuilderFieldsSet = 0L;
|
||||
|
||||
public Builder(
|
||||
@NonNull IRemoteTransition transition) {
|
||||
@NonNull RemoteTransition transition) {
|
||||
mTransition = transition;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
NonNull.class, null, mTransition);
|
||||
}
|
||||
|
||||
@DataClass.Generated.Member
|
||||
public @NonNull Builder setTransition(@NonNull IRemoteTransition value) {
|
||||
public @NonNull Builder setTransition(@NonNull RemoteTransition value) {
|
||||
checkNotUsed();
|
||||
mBuilderFieldsSet |= 0x1;
|
||||
mTransition = value;
|
||||
@@ -496,8 +512,9 @@ public class RemoteTransitionCompat implements Parcelable {
|
||||
if ((mBuilderFieldsSet & 0x2) == 0) {
|
||||
mFilter = null;
|
||||
}
|
||||
RemoteTransitionCompat o = new RemoteTransitionCompat(mTransition);
|
||||
o.mFilter = this.mFilter;
|
||||
RemoteTransitionCompat o = new RemoteTransitionCompat(
|
||||
mTransition,
|
||||
mFilter);
|
||||
return o;
|
||||
}
|
||||
|
||||
@@ -510,10 +527,10 @@ public class RemoteTransitionCompat implements Parcelable {
|
||||
}
|
||||
|
||||
@DataClass.Generated(
|
||||
time = 1606862689344L,
|
||||
codegenVersion = "1.0.21",
|
||||
time = 1629321609807L,
|
||||
codegenVersion = "1.0.23",
|
||||
sourceFile = "frameworks/base/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java",
|
||||
inputSignatures = "final @android.annotation.NonNull com.android.systemui.shared.system.IRemoteTransition mTransition\n @android.annotation.Nullable android.window.TransitionFilter mFilter\npublic void addHomeOpenCheck()\nclass RemoteTransitionCompat extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass")
|
||||
inputSignatures = "private static final java.lang.String TAG\nfinal @android.annotation.NonNull android.window.RemoteTransition mTransition\n @android.annotation.Nullable android.window.TransitionFilter mFilter\npublic void addHomeOpenCheck(android.content.ComponentName)\nclass RemoteTransitionCompat extends java.lang.Object implements [android.os.Parcelable]\nprivate com.android.systemui.shared.system.RecentsAnimationControllerCompat mWrapped\nprivate android.window.IRemoteTransitionFinishedCallback mFinishCB\nprivate android.window.WindowContainerToken mPausingTask\nprivate android.window.WindowContainerToken mPipTask\nprivate android.window.TransitionInfo mInfo\nprivate android.view.SurfaceControl mOpeningLeash\nprivate android.util.ArrayMap<android.view.SurfaceControl,android.view.SurfaceControl> mLeashMap\nprivate android.window.PictureInPictureSurfaceTransaction mPipTransaction\nprivate android.os.IBinder mTransition\n void setup(com.android.systemui.shared.system.RecentsAnimationControllerCompat,android.window.TransitionInfo,android.window.IRemoteTransitionFinishedCallback,android.window.WindowContainerToken,android.window.WindowContainerToken,android.util.ArrayMap<android.view.SurfaceControl,android.view.SurfaceControl>,android.os.IBinder)\n @android.annotation.SuppressLint boolean merge(android.window.TransitionInfo,android.view.SurfaceControl.Transaction,com.android.systemui.shared.system.RecentsAnimationListener)\npublic @java.lang.Override com.android.systemui.shared.recents.model.ThumbnailData screenshotTask(int)\npublic @java.lang.Override void setInputConsumerEnabled(boolean)\npublic @java.lang.Override void setAnimationTargetsBehindSystemBars(boolean)\npublic @java.lang.Override void hideCurrentInputMethod()\npublic @java.lang.Override void setFinishTaskTransaction(int,android.window.PictureInPictureSurfaceTransaction,android.view.SurfaceControl)\npublic @java.lang.Override @android.annotation.SuppressLint void finish(boolean,boolean)\npublic @java.lang.Override void setDeferCancelUntilNextTransition(boolean,boolean)\npublic @java.lang.Override void cleanupScreenshot()\npublic @java.lang.Override void setWillFinishToHome(boolean)\npublic @java.lang.Override boolean removeTask(int)\npublic @java.lang.Override void detachNavigationBarFromApp(boolean)\npublic @java.lang.Override void animateNavigationBarToApp(long)\nclass RecentsControllerWrap extends com.android.systemui.shared.system.RecentsAnimationControllerCompat implements []\n@com.android.internal.util.DataClass")
|
||||
@Deprecated
|
||||
private void __metadata() {}
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@ import android.view.WindowManager;
|
||||
import android.view.WindowManagerPolicyConstants;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.IRemoteTransitionFinishedCallback;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionFilter;
|
||||
import android.window.TransitionInfo;
|
||||
|
||||
@@ -236,7 +237,8 @@ public class KeyguardService extends Service {
|
||||
Slog.d(TAG, "KeyguardService registerRemote: TRANSIT_KEYGUARD_GOING_AWAY");
|
||||
TransitionFilter f = new TransitionFilter();
|
||||
f.mFlags = TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
|
||||
shellTransitions.registerRemote(f, wrap(mExitAnimationRunner));
|
||||
shellTransitions.registerRemote(f,
|
||||
new RemoteTransition(wrap(mExitAnimationRunner)));
|
||||
}
|
||||
if (sEnableRemoteKeyguardOccludeAnimation) {
|
||||
Slog.d(TAG, "KeyguardService registerRemote: TRANSIT_KEYGUARD_(UN)OCCLUDE");
|
||||
@@ -255,7 +257,7 @@ public class KeyguardService extends Service {
|
||||
f.mRequirements[1].mMustBeIndependent = false;
|
||||
f.mRequirements[1].mFlags = FLAG_OCCLUDES_KEYGUARD;
|
||||
f.mRequirements[1].mModes = new int[]{TRANSIT_CLOSE, TRANSIT_TO_BACK};
|
||||
shellTransitions.registerRemote(f, mOccludeAnimation);
|
||||
shellTransitions.registerRemote(f, new RemoteTransition(mOccludeAnimation));
|
||||
|
||||
// Now register for un-occlude.
|
||||
f = new TransitionFilter();
|
||||
@@ -275,7 +277,7 @@ public class KeyguardService extends Service {
|
||||
f.mRequirements[0].mMustBeIndependent = false;
|
||||
f.mRequirements[0].mFlags = FLAG_OCCLUDES_KEYGUARD;
|
||||
f.mRequirements[0].mModes = new int[]{TRANSIT_OPEN, TRANSIT_TO_FRONT};
|
||||
shellTransitions.registerRemote(f, mUnoccludeAnimation);
|
||||
shellTransitions.registerRemote(f, new RemoteTransition(mUnoccludeAnimation));
|
||||
}
|
||||
} else {
|
||||
RemoteAnimationDefinition definition = new RemoteAnimationDefinition();
|
||||
|
||||
@@ -317,7 +317,7 @@ import android.view.WindowManager;
|
||||
import android.view.WindowManager.LayoutParams;
|
||||
import android.view.WindowManager.TransitionOldType;
|
||||
import android.view.animation.Animation;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.SizeConfigurationBuckets;
|
||||
import android.window.SplashScreen;
|
||||
import android.window.SplashScreenView;
|
||||
@@ -491,7 +491,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
private ActivityOptions mPendingOptions;
|
||||
/** Non-null if {@link #mPendingOptions} specifies the remote animation. */
|
||||
private RemoteAnimationAdapter mPendingRemoteAnimation;
|
||||
private IRemoteTransition mPendingRemoteTransition;
|
||||
private RemoteTransition mPendingRemoteTransition;
|
||||
ActivityOptions returningOptions; // options that are coming back via convertToTranslucent
|
||||
AppTimeTracker appTimeTracker; // set if we are tracking the time in this app/task/activity
|
||||
ActivityServiceConnectionsHolder mServiceConnectionsHolder; // Service connections.
|
||||
@@ -1022,7 +1022,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
pw.println(mPendingRemoteAnimation.getCallingPid());
|
||||
}
|
||||
if (mPendingRemoteTransition != null) {
|
||||
pw.print(prefix + " pendingRemoteTransition=" + mPendingRemoteTransition);
|
||||
pw.print(prefix + " pendingRemoteTransition="
|
||||
+ mPendingRemoteTransition.getRemoteTransition());
|
||||
}
|
||||
if (appTimeTracker != null) {
|
||||
appTimeTracker.dumpWithHeader(pw, prefix, false);
|
||||
@@ -4579,8 +4580,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
return opts;
|
||||
}
|
||||
|
||||
IRemoteTransition takeRemoteTransition() {
|
||||
IRemoteTransition out = mPendingRemoteTransition;
|
||||
RemoteTransition takeRemoteTransition() {
|
||||
RemoteTransition out = mPendingRemoteTransition;
|
||||
mPendingRemoteTransition = null;
|
||||
return out;
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ import android.util.ArraySet;
|
||||
import android.util.DebugUtils;
|
||||
import android.util.Pools.SynchronizedPool;
|
||||
import android.util.Slog;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.RemoteTransition;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.app.HeavyWeightSwitcherActivity;
|
||||
@@ -1568,7 +1568,7 @@ class ActivityStarter {
|
||||
final Transition newTransition = (!mService.getTransitionController().isCollecting()
|
||||
&& mService.getTransitionController().getTransitionPlayer() != null)
|
||||
? mService.getTransitionController().createTransition(TRANSIT_OPEN) : null;
|
||||
IRemoteTransition remoteTransition = r.takeRemoteTransition();
|
||||
RemoteTransition remoteTransition = r.takeRemoteTransition();
|
||||
if (newTransition != null && remoteTransition != null) {
|
||||
newTransition.setRemoteTransition(remoteTransition);
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ import android.util.ArraySet;
|
||||
import android.util.Slog;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.animation.Animation;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionInfo;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
@@ -123,7 +123,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
||||
private @TransitionFlags int mFlags;
|
||||
private final TransitionController mController;
|
||||
private final BLASTSyncEngine mSyncEngine;
|
||||
private IRemoteTransition mRemoteTransition = null;
|
||||
private RemoteTransition mRemoteTransition = null;
|
||||
|
||||
/** Only use for clean-up after binder death! */
|
||||
private SurfaceControl.Transaction mStartTransaction = null;
|
||||
@@ -436,11 +436,11 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
||||
mSyncEngine.abort(mSyncId);
|
||||
}
|
||||
|
||||
void setRemoteTransition(IRemoteTransition remoteTransition) {
|
||||
void setRemoteTransition(RemoteTransition remoteTransition) {
|
||||
mRemoteTransition = remoteTransition;
|
||||
}
|
||||
|
||||
IRemoteTransition getRemoteTransition() {
|
||||
RemoteTransition getRemoteTransition() {
|
||||
return mRemoteTransition;
|
||||
}
|
||||
|
||||
@@ -565,7 +565,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
||||
if (mFinishTransaction != null) {
|
||||
mFinishTransaction.apply();
|
||||
}
|
||||
finishTransition();
|
||||
mController.finishTransition(this);
|
||||
}
|
||||
|
||||
/** @see RecentsAnimationController#attachNavigationBarToApp */
|
||||
|
||||
@@ -34,6 +34,7 @@ import android.util.proto.ProtoOutputStream;
|
||||
import android.view.WindowManager;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.ITransitionPlayer;
|
||||
import android.window.RemoteTransition;
|
||||
import android.window.TransitionInfo;
|
||||
import android.window.TransitionRequestInfo;
|
||||
|
||||
@@ -223,7 +224,7 @@ class TransitionController {
|
||||
@Nullable
|
||||
Transition requestTransitionIfNeeded(@WindowManager.TransitionType int type,
|
||||
@WindowManager.TransitionFlags int flags, @Nullable WindowContainer trigger,
|
||||
@NonNull WindowContainer readyGroupRef, @Nullable IRemoteTransition remoteTransition) {
|
||||
@NonNull WindowContainer readyGroupRef, @Nullable RemoteTransition remoteTransition) {
|
||||
if (mTransitionPlayer == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -252,7 +253,7 @@ class TransitionController {
|
||||
/** Asks the transition player (shell) to start a created but not yet started transition. */
|
||||
@NonNull
|
||||
Transition requestStartTransition(@NonNull Transition transition, @Nullable Task startTask,
|
||||
@Nullable IRemoteTransition remoteTransition) {
|
||||
@Nullable RemoteTransition remoteTransition) {
|
||||
try {
|
||||
ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
|
||||
"Requesting StartTransition: %s", transition);
|
||||
|
||||
Reference in New Issue
Block a user