DO NOT MERGE Only rely on developer option for back animation am: ab58191c7f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18310267

Change-Id: Ibf27183e26a5a8dca9f2856de7e84016ee6e0b29
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Vadim Caen
2022-05-23 19:30:18 +00:00
committed by Automerger Merge Worker
7 changed files with 21 additions and 21 deletions

View File

@@ -348,6 +348,7 @@ interface IActivityTaskManager {
/**
* Prepare the back navigation in the server. This setups the leashed for sysui to animate
* the back gesture and returns the data needed for the animation.
* @param requestAnimation true if the caller wishes to animate the back navigation
*/
android.window.BackNavigationInfo startBackNavigation();
android.window.BackNavigationInfo startBackNavigation(in boolean requestAnimation);
}

View File

@@ -91,7 +91,7 @@ public class BackNavigationTest {
private void assertCallbackIsCalled(CountDownLatch latch) {
try {
mInstrumentation.getUiAutomation().waitForIdle(500, 1000);
BackNavigationInfo info = ActivityTaskManager.getService().startBackNavigation();
BackNavigationInfo info = ActivityTaskManager.getService().startBackNavigation(true);
assertNotNull("BackNavigationInfo is null", info);
assertNotNull("OnBackInvokedCallback is null", info.getOnBackInvokedCallback());
info.getOnBackInvokedCallback().onBackInvoked();

View File

@@ -286,7 +286,8 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
mBackGestureStarted = true;
try {
mBackNavigationInfo = mActivityTaskManager.startBackNavigation();
boolean requestAnimation = mEnableAnimations.get();
mBackNavigationInfo = mActivityTaskManager.startBackNavigation(requestAnimation);
onBackNavigationInfoReceived(mBackNavigationInfo);
} catch (RemoteException remoteException) {
Log.e(TAG, "Failed to initAnimation", remoteException);

View File

@@ -20,6 +20,7 @@ import static android.window.BackNavigationInfo.KEY_TRIGGER_BACK;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce;
@@ -128,7 +129,7 @@ public class BackAnimationControllerTest {
new RemoteCallback((bundle) -> {}),
onBackInvokedCallback);
try {
doReturn(navigationInfo).when(mActivityTaskManager).startBackNavigation();
doReturn(navigationInfo).when(mActivityTaskManager).startBackNavigation(anyBoolean());
} catch (RemoteException ex) {
ex.rethrowFromSystemServer();
}
@@ -136,7 +137,7 @@ public class BackAnimationControllerTest {
private void createNavigationInfo(BackNavigationInfo.Builder builder) {
try {
doReturn(builder.build()).when(mActivityTaskManager).startBackNavigation();
doReturn(builder.build()).when(mActivityTaskManager).startBackNavigation(anyBoolean());
} catch (RemoteException ex) {
ex.rethrowFromSystemServer();
}

View File

@@ -1789,13 +1789,13 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
}
@Override
public BackNavigationInfo startBackNavigation() {
public BackNavigationInfo startBackNavigation(boolean requestAnimation) {
mAmInternal.enforceCallingPermission(START_TASKS_FROM_RECENTS,
"startBackNavigation()");
if (mBackNavigationController == null) {
return null;
}
return mBackNavigationController.startBackNavigation(mWindowManager);
return mBackNavigationController.startBackNavigation(mWindowManager, requestAnimation);
}
/**

View File

@@ -61,10 +61,6 @@ class BackNavigationController {
return SystemProperties.getInt("persist.wm.debug.predictive_back_screenshot", 0) != 0;
}
private static boolean isAnimationEnabled() {
return SystemProperties.getInt("persist.wm.debug.predictive_back_anim", 0) != 0;
}
/**
* Set up the necessary leashes and build a {@link BackNavigationInfo} instance for an upcoming
* back gesture animation.
@@ -74,20 +70,21 @@ class BackNavigationController {
* fallback on dispatching the key event.
*/
@Nullable
BackNavigationInfo startBackNavigation(@NonNull WindowManagerService wmService) {
return startBackNavigation(wmService, null);
BackNavigationInfo startBackNavigation(@NonNull WindowManagerService wmService,
boolean requestAnimation) {
return startBackNavigation(wmService, null, requestAnimation);
}
/**
* @param tx, a transaction to be used for the attaching the animation leash.
* This is used in tests. If null, the object will be initialized with a new {@link
* SurfaceControl.Transaction}
* @see #startBackNavigation(WindowManagerService)
* @see #startBackNavigation(WindowManagerService, boolean)
*/
@VisibleForTesting
@Nullable
BackNavigationInfo startBackNavigation(WindowManagerService wmService,
@Nullable SurfaceControl.Transaction tx) {
@Nullable SurfaceControl.Transaction tx, boolean requestAnimation) {
if (tx == null) {
tx = new SurfaceControl.Transaction();
@@ -295,7 +292,7 @@ class BackNavigationController {
}
// Special handling for back to home animation
if (backType == BackNavigationInfo.TYPE_RETURN_TO_HOME && isAnimationEnabled()
if (backType == BackNavigationInfo.TYPE_RETURN_TO_HOME && requestAnimation
&& prevTask != null) {
currentTask.mBackGestureStarted = true;
// Make launcher show from behind by marking its top activity as visible and
@@ -350,7 +347,7 @@ class BackNavigationController {
Task finalTask = currentTask;
RemoteCallback onBackNavigationDone = new RemoteCallback(result -> onBackNavigationDone(
result, finalRemovedWindowContainer, finalBackType, finalTask,
finalprevActivity));
finalprevActivity, requestAnimation));
infoBuilder.setOnBackNavigationDone(onBackNavigationDone);
}
@@ -384,14 +381,14 @@ class BackNavigationController {
private void onBackNavigationDone(
Bundle result, WindowContainer<?> windowContainer, int backType,
Task task, ActivityRecord prevActivity) {
Task task, ActivityRecord prevActivity, boolean requestAnimation) {
SurfaceControl surfaceControl = windowContainer.getSurfaceControl();
boolean triggerBack = result != null && result.getBoolean(
BackNavigationInfo.KEY_TRIGGER_BACK);
ProtoLog.d(WM_DEBUG_BACK_PREVIEW, "onBackNavigationDone backType=%s, "
+ "task=%s, prevActivity=%s", backType, task, prevActivity);
if (backType == BackNavigationInfo.TYPE_RETURN_TO_HOME && isAnimationEnabled()) {
if (backType == BackNavigationInfo.TYPE_RETURN_TO_HOME && requestAnimation) {
if (triggerBack) {
if (surfaceControl != null && surfaceControl.isValid()) {
// When going back to home, hide the task surface before it is re-parented to

View File

@@ -86,7 +86,7 @@ public class BackNavigationControllerTests extends WindowTestsBase {
SurfaceControl.Transaction tx = mock(SurfaceControl.Transaction.class);
BackNavigationInfo backNavigationInfo = mBackNavigationController.startBackNavigation(mWm,
tx);
tx, true);
assertWithMessage("BackNavigationInfo").that(backNavigationInfo).isNotNull();
assertThat(backNavigationInfo.getDepartingAnimationTarget()).isNotNull();
assertThat(backNavigationInfo.getTaskWindowConfiguration()).isNotNull();
@@ -242,7 +242,7 @@ public class BackNavigationControllerTests extends WindowTestsBase {
@Nullable
private BackNavigationInfo startBackNavigation() {
return mBackNavigationController.startBackNavigation(mWm, new StubTransaction());
return mBackNavigationController.startBackNavigation(mWm, new StubTransaction(), true);
}
@NonNull