Merge "Only rely on developer option for back animation"
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -67,7 +67,6 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
|
||||
SETTING_VALUE_ON) != SETTING_VALUE_OFF;
|
||||
private static final int PROGRESS_THRESHOLD = SystemProperties
|
||||
.getInt(PREDICTIVE_BACK_PROGRESS_THRESHOLD_PROP, -1);
|
||||
|
||||
/**
|
||||
* Max duration to wait for a transition to finish before accepting another gesture start
|
||||
* request.
|
||||
@@ -290,7 +289,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);
|
||||
|
||||
@@ -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;
|
||||
@@ -129,7 +130,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();
|
||||
}
|
||||
@@ -137,7 +138,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();
|
||||
}
|
||||
@@ -217,8 +218,11 @@ public class BackAnimationControllerTest {
|
||||
// Check that back start and progress is dispatched when first move.
|
||||
doMotionEvent(MotionEvent.ACTION_MOVE, 100);
|
||||
verify(mIOnBackInvokedCallback).onBackStarted();
|
||||
|
||||
// Check that back progress is dispatched.
|
||||
doMotionEvent(MotionEvent.ACTION_MOVE, 100);
|
||||
ArgumentCaptor<BackEvent> backEventCaptor = ArgumentCaptor.forClass(BackEvent.class);
|
||||
verify(mIOnBackInvokedCallback).onBackProgressed(backEventCaptor.capture());
|
||||
verify(mIOnBackInvokedCallback, atLeastOnce()).onBackProgressed(backEventCaptor.capture());
|
||||
assertEquals(animationTarget, backEventCaptor.getValue().getDepartingAnimationTarget());
|
||||
|
||||
// Check that back invocation is dispatched.
|
||||
|
||||
@@ -1811,13 +1811,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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user