Loading core/java/android/window/BackNavigationInfo.java +31 −5 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ public final class BackNavigationInfo implements Parcelable { @Nullable private final IOnBackInvokedCallback mOnBackInvokedCallback; private final boolean mPrepareRemoteAnimation; private final boolean mAnimationCallback; @Nullable private final CustomAnimationInfo mCustomAnimationInfo; Loading @@ -109,11 +110,13 @@ public final class BackNavigationInfo implements Parcelable { @Nullable RemoteCallback onBackNavigationDone, @Nullable IOnBackInvokedCallback onBackInvokedCallback, boolean isPrepareRemoteAnimation, boolean isAnimationCallback, @Nullable CustomAnimationInfo customAnimationInfo) { mType = type; mOnBackNavigationDone = onBackNavigationDone; mOnBackInvokedCallback = onBackInvokedCallback; mPrepareRemoteAnimation = isPrepareRemoteAnimation; mAnimationCallback = isAnimationCallback; mCustomAnimationInfo = customAnimationInfo; } Loading @@ -122,6 +125,7 @@ public final class BackNavigationInfo implements Parcelable { mOnBackNavigationDone = in.readTypedObject(RemoteCallback.CREATOR); mOnBackInvokedCallback = IOnBackInvokedCallback.Stub.asInterface(in.readStrongBinder()); mPrepareRemoteAnimation = in.readBoolean(); mAnimationCallback = in.readBoolean(); mCustomAnimationInfo = in.readTypedObject(CustomAnimationInfo.CREATOR); } Loading @@ -132,6 +136,7 @@ public final class BackNavigationInfo implements Parcelable { dest.writeTypedObject(mOnBackNavigationDone, flags); dest.writeStrongInterface(mOnBackInvokedCallback); dest.writeBoolean(mPrepareRemoteAnimation); dest.writeBoolean(mAnimationCallback); dest.writeTypedObject(mCustomAnimationInfo, flags); } Loading Loading @@ -159,13 +164,21 @@ public final class BackNavigationInfo implements Parcelable { } /** * Return true if the core is preparing a back gesture nimation. * Return true if the core is preparing a back gesture animation. * @hide */ public boolean isPrepareRemoteAnimation() { return mPrepareRemoteAnimation; } /** * Return true if the callback is {@link OnBackAnimationCallback}. * @hide */ public boolean isAnimationCallback() { return mAnimationCallback; } /** * Callback to be called when the back preview is finished in order to notify the server that * it can clean up the resources created for the animation. Loading Loading @@ -214,6 +227,8 @@ public final class BackNavigationInfo implements Parcelable { + "mType=" + typeToString(mType) + " (" + mType + ")" + ", mOnBackNavigationDone=" + mOnBackNavigationDone + ", mOnBackInvokedCallback=" + mOnBackInvokedCallback + ", mPrepareRemoteAnimation=" + mPrepareRemoteAnimation + ", mAnimationCallback=" + mAnimationCallback + ", mCustomizeAnimationInfo=" + mCustomAnimationInfo + '}'; } Loading Loading @@ -343,6 +358,7 @@ public final class BackNavigationInfo implements Parcelable { private IOnBackInvokedCallback mOnBackInvokedCallback = null; private boolean mPrepareRemoteAnimation; private CustomAnimationInfo mCustomAnimationInfo; private boolean mAnimationCallback = false; /** * @see BackNavigationInfo#getType() Loading Loading @@ -387,6 +403,7 @@ public final class BackNavigationInfo implements Parcelable { mCustomAnimationInfo.mWindowAnimations = windowAnimations; return this; } /** * Set resources ids for customize activity animation. */ Loading @@ -401,6 +418,14 @@ public final class BackNavigationInfo implements Parcelable { return this; } /** * @param isAnimationCallback whether the callback is {@link OnBackAnimationCallback} */ public Builder setAnimationCallback(boolean isAnimationCallback) { mAnimationCallback = isAnimationCallback; return this; } /** * Builds and returns an instance of {@link BackNavigationInfo} */ Loading @@ -408,6 +433,7 @@ public final class BackNavigationInfo implements Parcelable { return new BackNavigationInfo(mType, mOnBackNavigationDone, mOnBackInvokedCallback, mPrepareRemoteAnimation, mAnimationCallback, mCustomAnimationInfo); } } Loading core/java/android/window/OnBackInvokedCallbackInfo.java +15 −2 Original line number Diff line number Diff line Loading @@ -28,15 +28,20 @@ public final class OnBackInvokedCallbackInfo implements Parcelable { @NonNull private final IOnBackInvokedCallback mCallback; private @OnBackInvokedDispatcher.Priority int mPriority; private final boolean mIsAnimationCallback; public OnBackInvokedCallbackInfo(@NonNull IOnBackInvokedCallback callback, int priority) { public OnBackInvokedCallbackInfo(@NonNull IOnBackInvokedCallback callback, int priority, boolean isAnimationCallback) { mCallback = callback; mPriority = priority; mIsAnimationCallback = isAnimationCallback; } private OnBackInvokedCallbackInfo(@NonNull Parcel in) { mCallback = IOnBackInvokedCallback.Stub.asInterface(in.readStrongBinder()); mPriority = in.readInt(); mIsAnimationCallback = in.readBoolean(); } @Override Loading @@ -48,6 +53,7 @@ public final class OnBackInvokedCallbackInfo implements Parcelable { public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeStrongInterface(mCallback); dest.writeInt(mPriority); dest.writeBoolean(mIsAnimationCallback); } public static final Creator<OnBackInvokedCallbackInfo> CREATOR = Loading Loading @@ -77,9 +83,16 @@ public final class OnBackInvokedCallbackInfo implements Parcelable { return mPriority; } public boolean isAnimationCallback() { return mIsAnimationCallback; } @Override public String toString() { return "OnBackInvokedCallbackInfo{" + "mCallback=" + mCallback + ", mPriority=" + mPriority + '}'; + "mCallback=" + mCallback + ", mPriority=" + mPriority + ", mIsAnimationCallback=" + mIsAnimationCallback + '}'; } } core/java/android/window/WindowOnBackInvokedDispatcher.java +4 −1 Original line number Diff line number Diff line Loading @@ -193,7 +193,10 @@ public class WindowOnBackInvokedDispatcher implements OnBackInvokedDispatcher { ? ((ImeOnBackInvokedDispatcher.ImeOnBackInvokedCallback) callback).getIOnBackInvokedCallback() : new OnBackInvokedCallbackWrapper(callback); callbackInfo = new OnBackInvokedCallbackInfo(iCallback, priority); callbackInfo = new OnBackInvokedCallbackInfo( iCallback, priority, callback instanceof OnBackAnimationCallback); } mWindowSession.setOnBackInvokedCallbackInfo(mWindow, callbackInfo); } catch (RemoteException e) { Loading services/core/java/com/android/server/wm/BackNavigationController.java +1 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ class BackNavigationController { backType = BackNavigationInfo.TYPE_CALLBACK; } infoBuilder.setOnBackInvokedCallback(callbackInfo.getCallback()); infoBuilder.setAnimationCallback(callbackInfo.isAnimationCallback()); mNavigationMonitor.startMonitor(window, navigationObserver); } Loading services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java +38 −4 Original line number Diff line number Diff line Loading @@ -232,11 +232,36 @@ public class BackNavigationControllerTests extends WindowTestsBase { IOnBackInvokedCallback callback = createOnBackInvokedCallback(); window.setOnBackInvokedCallbackInfo( new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT)); new OnBackInvokedCallbackInfo( callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT, /* isAnimationCallback = */ false)); BackNavigationInfo backNavigationInfo = startBackNavigation(); assertWithMessage("BackNavigationInfo").that(backNavigationInfo).isNotNull(); assertThat(backNavigationInfo.getType()).isEqualTo(BackNavigationInfo.TYPE_CALLBACK); assertThat(backNavigationInfo.isAnimationCallback()).isEqualTo(false); assertThat(backNavigationInfo.getOnBackInvokedCallback()).isEqualTo(callback); } @Test public void backInfoWithAnimationCallback() { WindowState window = createWindow(null, WindowManager.LayoutParams.TYPE_WALLPAPER, "Wallpaper"); addToWindowMap(window, true); makeWindowVisibleAndDrawn(window); IOnBackInvokedCallback callback = createOnBackInvokedCallback(); window.setOnBackInvokedCallbackInfo( new OnBackInvokedCallbackInfo( callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT, /* isAnimationCallback = */ true)); BackNavigationInfo backNavigationInfo = startBackNavigation(); assertWithMessage("BackNavigationInfo").that(backNavigationInfo).isNotNull(); assertThat(backNavigationInfo.getType()).isEqualTo(BackNavigationInfo.TYPE_CALLBACK); assertThat(backNavigationInfo.isAnimationCallback()).isEqualTo(true); assertThat(backNavigationInfo.getOnBackInvokedCallback()).isEqualTo(callback); } Loading Loading @@ -364,7 +389,10 @@ public class BackNavigationControllerTests extends WindowTestsBase { IOnBackInvokedCallback callback = createOnBackInvokedCallback(); window.setOnBackInvokedCallbackInfo( new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT)); new OnBackInvokedCallbackInfo( callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT, /* isAnimationCallback = */ false)); BackNavigationInfo backNavigationInfo = startBackNavigation(); assertThat(backNavigationInfo).isNull(); Loading Loading @@ -450,14 +478,20 @@ public class BackNavigationControllerTests extends WindowTestsBase { private IOnBackInvokedCallback withSystemCallback(Task task) { IOnBackInvokedCallback callback = createOnBackInvokedCallback(); task.getTopMostActivity().getTopChild().setOnBackInvokedCallbackInfo( new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_SYSTEM)); new OnBackInvokedCallbackInfo( callback, OnBackInvokedDispatcher.PRIORITY_SYSTEM, /* isAnimationCallback = */ false)); return callback; } private IOnBackInvokedCallback withAppCallback(Task task) { IOnBackInvokedCallback callback = createOnBackInvokedCallback(); task.getTopMostActivity().getTopChild().setOnBackInvokedCallbackInfo( new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT)); new OnBackInvokedCallbackInfo( callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT, /* isAnimationCallback = */ false)); return callback; } Loading Loading
core/java/android/window/BackNavigationInfo.java +31 −5 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ public final class BackNavigationInfo implements Parcelable { @Nullable private final IOnBackInvokedCallback mOnBackInvokedCallback; private final boolean mPrepareRemoteAnimation; private final boolean mAnimationCallback; @Nullable private final CustomAnimationInfo mCustomAnimationInfo; Loading @@ -109,11 +110,13 @@ public final class BackNavigationInfo implements Parcelable { @Nullable RemoteCallback onBackNavigationDone, @Nullable IOnBackInvokedCallback onBackInvokedCallback, boolean isPrepareRemoteAnimation, boolean isAnimationCallback, @Nullable CustomAnimationInfo customAnimationInfo) { mType = type; mOnBackNavigationDone = onBackNavigationDone; mOnBackInvokedCallback = onBackInvokedCallback; mPrepareRemoteAnimation = isPrepareRemoteAnimation; mAnimationCallback = isAnimationCallback; mCustomAnimationInfo = customAnimationInfo; } Loading @@ -122,6 +125,7 @@ public final class BackNavigationInfo implements Parcelable { mOnBackNavigationDone = in.readTypedObject(RemoteCallback.CREATOR); mOnBackInvokedCallback = IOnBackInvokedCallback.Stub.asInterface(in.readStrongBinder()); mPrepareRemoteAnimation = in.readBoolean(); mAnimationCallback = in.readBoolean(); mCustomAnimationInfo = in.readTypedObject(CustomAnimationInfo.CREATOR); } Loading @@ -132,6 +136,7 @@ public final class BackNavigationInfo implements Parcelable { dest.writeTypedObject(mOnBackNavigationDone, flags); dest.writeStrongInterface(mOnBackInvokedCallback); dest.writeBoolean(mPrepareRemoteAnimation); dest.writeBoolean(mAnimationCallback); dest.writeTypedObject(mCustomAnimationInfo, flags); } Loading Loading @@ -159,13 +164,21 @@ public final class BackNavigationInfo implements Parcelable { } /** * Return true if the core is preparing a back gesture nimation. * Return true if the core is preparing a back gesture animation. * @hide */ public boolean isPrepareRemoteAnimation() { return mPrepareRemoteAnimation; } /** * Return true if the callback is {@link OnBackAnimationCallback}. * @hide */ public boolean isAnimationCallback() { return mAnimationCallback; } /** * Callback to be called when the back preview is finished in order to notify the server that * it can clean up the resources created for the animation. Loading Loading @@ -214,6 +227,8 @@ public final class BackNavigationInfo implements Parcelable { + "mType=" + typeToString(mType) + " (" + mType + ")" + ", mOnBackNavigationDone=" + mOnBackNavigationDone + ", mOnBackInvokedCallback=" + mOnBackInvokedCallback + ", mPrepareRemoteAnimation=" + mPrepareRemoteAnimation + ", mAnimationCallback=" + mAnimationCallback + ", mCustomizeAnimationInfo=" + mCustomAnimationInfo + '}'; } Loading Loading @@ -343,6 +358,7 @@ public final class BackNavigationInfo implements Parcelable { private IOnBackInvokedCallback mOnBackInvokedCallback = null; private boolean mPrepareRemoteAnimation; private CustomAnimationInfo mCustomAnimationInfo; private boolean mAnimationCallback = false; /** * @see BackNavigationInfo#getType() Loading Loading @@ -387,6 +403,7 @@ public final class BackNavigationInfo implements Parcelable { mCustomAnimationInfo.mWindowAnimations = windowAnimations; return this; } /** * Set resources ids for customize activity animation. */ Loading @@ -401,6 +418,14 @@ public final class BackNavigationInfo implements Parcelable { return this; } /** * @param isAnimationCallback whether the callback is {@link OnBackAnimationCallback} */ public Builder setAnimationCallback(boolean isAnimationCallback) { mAnimationCallback = isAnimationCallback; return this; } /** * Builds and returns an instance of {@link BackNavigationInfo} */ Loading @@ -408,6 +433,7 @@ public final class BackNavigationInfo implements Parcelable { return new BackNavigationInfo(mType, mOnBackNavigationDone, mOnBackInvokedCallback, mPrepareRemoteAnimation, mAnimationCallback, mCustomAnimationInfo); } } Loading
core/java/android/window/OnBackInvokedCallbackInfo.java +15 −2 Original line number Diff line number Diff line Loading @@ -28,15 +28,20 @@ public final class OnBackInvokedCallbackInfo implements Parcelable { @NonNull private final IOnBackInvokedCallback mCallback; private @OnBackInvokedDispatcher.Priority int mPriority; private final boolean mIsAnimationCallback; public OnBackInvokedCallbackInfo(@NonNull IOnBackInvokedCallback callback, int priority) { public OnBackInvokedCallbackInfo(@NonNull IOnBackInvokedCallback callback, int priority, boolean isAnimationCallback) { mCallback = callback; mPriority = priority; mIsAnimationCallback = isAnimationCallback; } private OnBackInvokedCallbackInfo(@NonNull Parcel in) { mCallback = IOnBackInvokedCallback.Stub.asInterface(in.readStrongBinder()); mPriority = in.readInt(); mIsAnimationCallback = in.readBoolean(); } @Override Loading @@ -48,6 +53,7 @@ public final class OnBackInvokedCallbackInfo implements Parcelable { public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeStrongInterface(mCallback); dest.writeInt(mPriority); dest.writeBoolean(mIsAnimationCallback); } public static final Creator<OnBackInvokedCallbackInfo> CREATOR = Loading Loading @@ -77,9 +83,16 @@ public final class OnBackInvokedCallbackInfo implements Parcelable { return mPriority; } public boolean isAnimationCallback() { return mIsAnimationCallback; } @Override public String toString() { return "OnBackInvokedCallbackInfo{" + "mCallback=" + mCallback + ", mPriority=" + mPriority + '}'; + "mCallback=" + mCallback + ", mPriority=" + mPriority + ", mIsAnimationCallback=" + mIsAnimationCallback + '}'; } }
core/java/android/window/WindowOnBackInvokedDispatcher.java +4 −1 Original line number Diff line number Diff line Loading @@ -193,7 +193,10 @@ public class WindowOnBackInvokedDispatcher implements OnBackInvokedDispatcher { ? ((ImeOnBackInvokedDispatcher.ImeOnBackInvokedCallback) callback).getIOnBackInvokedCallback() : new OnBackInvokedCallbackWrapper(callback); callbackInfo = new OnBackInvokedCallbackInfo(iCallback, priority); callbackInfo = new OnBackInvokedCallbackInfo( iCallback, priority, callback instanceof OnBackAnimationCallback); } mWindowSession.setOnBackInvokedCallbackInfo(mWindow, callbackInfo); } catch (RemoteException e) { Loading
services/core/java/com/android/server/wm/BackNavigationController.java +1 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ class BackNavigationController { backType = BackNavigationInfo.TYPE_CALLBACK; } infoBuilder.setOnBackInvokedCallback(callbackInfo.getCallback()); infoBuilder.setAnimationCallback(callbackInfo.isAnimationCallback()); mNavigationMonitor.startMonitor(window, navigationObserver); } Loading
services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java +38 −4 Original line number Diff line number Diff line Loading @@ -232,11 +232,36 @@ public class BackNavigationControllerTests extends WindowTestsBase { IOnBackInvokedCallback callback = createOnBackInvokedCallback(); window.setOnBackInvokedCallbackInfo( new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT)); new OnBackInvokedCallbackInfo( callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT, /* isAnimationCallback = */ false)); BackNavigationInfo backNavigationInfo = startBackNavigation(); assertWithMessage("BackNavigationInfo").that(backNavigationInfo).isNotNull(); assertThat(backNavigationInfo.getType()).isEqualTo(BackNavigationInfo.TYPE_CALLBACK); assertThat(backNavigationInfo.isAnimationCallback()).isEqualTo(false); assertThat(backNavigationInfo.getOnBackInvokedCallback()).isEqualTo(callback); } @Test public void backInfoWithAnimationCallback() { WindowState window = createWindow(null, WindowManager.LayoutParams.TYPE_WALLPAPER, "Wallpaper"); addToWindowMap(window, true); makeWindowVisibleAndDrawn(window); IOnBackInvokedCallback callback = createOnBackInvokedCallback(); window.setOnBackInvokedCallbackInfo( new OnBackInvokedCallbackInfo( callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT, /* isAnimationCallback = */ true)); BackNavigationInfo backNavigationInfo = startBackNavigation(); assertWithMessage("BackNavigationInfo").that(backNavigationInfo).isNotNull(); assertThat(backNavigationInfo.getType()).isEqualTo(BackNavigationInfo.TYPE_CALLBACK); assertThat(backNavigationInfo.isAnimationCallback()).isEqualTo(true); assertThat(backNavigationInfo.getOnBackInvokedCallback()).isEqualTo(callback); } Loading Loading @@ -364,7 +389,10 @@ public class BackNavigationControllerTests extends WindowTestsBase { IOnBackInvokedCallback callback = createOnBackInvokedCallback(); window.setOnBackInvokedCallbackInfo( new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT)); new OnBackInvokedCallbackInfo( callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT, /* isAnimationCallback = */ false)); BackNavigationInfo backNavigationInfo = startBackNavigation(); assertThat(backNavigationInfo).isNull(); Loading Loading @@ -450,14 +478,20 @@ public class BackNavigationControllerTests extends WindowTestsBase { private IOnBackInvokedCallback withSystemCallback(Task task) { IOnBackInvokedCallback callback = createOnBackInvokedCallback(); task.getTopMostActivity().getTopChild().setOnBackInvokedCallbackInfo( new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_SYSTEM)); new OnBackInvokedCallbackInfo( callback, OnBackInvokedDispatcher.PRIORITY_SYSTEM, /* isAnimationCallback = */ false)); return callback; } private IOnBackInvokedCallback withAppCallback(Task task) { IOnBackInvokedCallback callback = createOnBackInvokedCallback(); task.getTopMostActivity().getTopChild().setOnBackInvokedCallbackInfo( new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT)); new OnBackInvokedCallbackInfo( callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT, /* isAnimationCallback = */ false)); return callback; } Loading