Merge "Revert "Suppress app transition while recents is running"" into tm-dev am: d2303d97a4 am: 005860c14c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18204686 Change-Id: Ic9f45ee5e1c47841d62826f09082ae964c74dc90 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -2485,12 +2485,6 @@
|
|||||||
"group": "WM_ERROR",
|
"group": "WM_ERROR",
|
||||||
"at": "com\/android\/server\/wm\/WindowManagerService.java"
|
"at": "com\/android\/server\/wm\/WindowManagerService.java"
|
||||||
},
|
},
|
||||||
"323235828": {
|
|
||||||
"message": "Delaying app transition for recents animation to finish",
|
|
||||||
"level": "VERBOSE",
|
|
||||||
"group": "WM_DEBUG_APP_TRANSITIONS",
|
|
||||||
"at": "com\/android\/server\/wm\/AppTransitionController.java"
|
|
||||||
},
|
|
||||||
"327461496": {
|
"327461496": {
|
||||||
"message": "Complete pause: %s",
|
"message": "Complete pause: %s",
|
||||||
"level": "VERBOSE",
|
"level": "VERBOSE",
|
||||||
|
|||||||
@@ -68,7 +68,6 @@ import static com.android.server.wm.AppTransition.isNormalTransit;
|
|||||||
import static com.android.server.wm.NonAppWindowAnimationAdapter.shouldAttachNavBarToApp;
|
import static com.android.server.wm.NonAppWindowAnimationAdapter.shouldAttachNavBarToApp;
|
||||||
import static com.android.server.wm.NonAppWindowAnimationAdapter.shouldStartNonAppWindowAnimationsForKeyguardExit;
|
import static com.android.server.wm.NonAppWindowAnimationAdapter.shouldStartNonAppWindowAnimationsForKeyguardExit;
|
||||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
|
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
|
||||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS;
|
|
||||||
import static com.android.server.wm.WallpaperAnimationAdapter.shouldStartWallpaperAnimation;
|
import static com.android.server.wm.WallpaperAnimationAdapter.shouldStartWallpaperAnimation;
|
||||||
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
|
import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
|
||||||
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
|
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
|
||||||
@@ -1143,17 +1142,13 @@ public class AppTransitionController {
|
|||||||
if (activity == null) {
|
if (activity == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (activity.isAnimating(PARENTS, ANIMATION_TYPE_RECENTS)) {
|
|
||||||
ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
|
|
||||||
"Delaying app transition for recents animation to finish");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
|
ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
|
||||||
"Check opening app=%s: allDrawn=%b startingDisplayed=%b "
|
"Check opening app=%s: allDrawn=%b startingDisplayed=%b "
|
||||||
+ "startingMoved=%b isRelaunching()=%b startingWindow=%s",
|
+ "startingMoved=%b isRelaunching()=%b startingWindow=%s",
|
||||||
activity, activity.allDrawn, activity.startingDisplayed,
|
activity, activity.allDrawn, activity.startingDisplayed,
|
||||||
activity.startingMoved, activity.isRelaunching(),
|
activity.startingMoved, activity.isRelaunching(),
|
||||||
activity.mStartingWindow);
|
activity.mStartingWindow);
|
||||||
|
|
||||||
final boolean allDrawn = activity.allDrawn && !activity.isRelaunching();
|
final boolean allDrawn = activity.allDrawn && !activity.isRelaunching();
|
||||||
if (!allDrawn && !activity.startingDisplayed && !activity.startingMoved) {
|
if (!allDrawn && !activity.startingDisplayed && !activity.startingMoved) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1584,14 +1584,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void forAllWindowContainers(Consumer<WindowContainer> callback) {
|
|
||||||
callback.accept(this);
|
|
||||||
final int count = mChildren.size();
|
|
||||||
for (int i = 0; i < count; i++) {
|
|
||||||
mChildren.get(i).forAllWindowContainers(callback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For all windows at or below this container call the callback.
|
* For all windows at or below this container call the callback.
|
||||||
* @param callback Calls the {@link ToBooleanFunction#apply} method for each window found and
|
* @param callback Calls the {@link ToBooleanFunction#apply} method for each window found and
|
||||||
|
|||||||
@@ -118,7 +118,6 @@ import static com.android.server.wm.DisplayContent.IME_TARGET_CONTROL;
|
|||||||
import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING;
|
import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING;
|
||||||
import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS;
|
import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS;
|
||||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL;
|
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL;
|
||||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
|
|
||||||
import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
|
import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
|
||||||
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
|
import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
|
||||||
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG;
|
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG;
|
||||||
@@ -3053,22 +3052,13 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void cleanupRecentsAnimation(@RecentsAnimationController.ReorderMode int reorderMode) {
|
void cleanupRecentsAnimation(@RecentsAnimationController.ReorderMode int reorderMode) {
|
||||||
if (mRecentsAnimationController != null) {
|
if (mRecentsAnimationController != null) {
|
||||||
final RecentsAnimationController controller = mRecentsAnimationController;
|
final RecentsAnimationController controller = mRecentsAnimationController;
|
||||||
mRecentsAnimationController = null;
|
mRecentsAnimationController = null;
|
||||||
controller.cleanupAnimation(reorderMode);
|
controller.cleanupAnimation(reorderMode);
|
||||||
// TODO(multi-display): currently only default display support recents animation.
|
// TODO(mult-display): currently only default display support recents animation.
|
||||||
// Cancel any existing app transition animation running in the legacy transition
|
getDefaultDisplayContentLocked().mAppTransition.updateBooster();
|
||||||
// framework.
|
|
||||||
final DisplayContent dc = getDefaultDisplayContentLocked();
|
|
||||||
dc.mAppTransition.freeze();
|
|
||||||
dc.forAllWindowContainers((wc) -> {
|
|
||||||
if (wc.isAnimating(TRANSITION, ANIMATION_TYPE_APP_TRANSITION)) {
|
|
||||||
wc.cancelAnimation();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,10 +39,8 @@ import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentat
|
|||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyInt;
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyInt;
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.eq;
|
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
|
||||||
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS;
|
|
||||||
import static com.android.server.wm.WindowContainer.POSITION_TOP;
|
import static com.android.server.wm.WindowContainer.POSITION_TOP;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
@@ -50,9 +48,7 @@ import static org.junit.Assert.assertFalse;
|
|||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
|
||||||
|
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
@@ -380,7 +376,7 @@ public class AppTransitionTests extends WindowTestsBase {
|
|||||||
doReturn(false).when(dc).onDescendantOrientationChanged(any());
|
doReturn(false).when(dc).onDescendantOrientationChanged(any());
|
||||||
final WindowState exitingAppWindow = createWindow(null /* parent */, TYPE_BASE_APPLICATION,
|
final WindowState exitingAppWindow = createWindow(null /* parent */, TYPE_BASE_APPLICATION,
|
||||||
dc, "exiting app");
|
dc, "exiting app");
|
||||||
final ActivityRecord exitingActivity = exitingAppWindow.mActivityRecord;
|
final ActivityRecord exitingActivity= exitingAppWindow.mActivityRecord;
|
||||||
// Wait until everything in animation handler get executed to prevent the exiting window
|
// Wait until everything in animation handler get executed to prevent the exiting window
|
||||||
// from being removed during WindowSurfacePlacer Traversal.
|
// from being removed during WindowSurfacePlacer Traversal.
|
||||||
waitUntilHandlersIdle();
|
waitUntilHandlersIdle();
|
||||||
@@ -408,41 +404,6 @@ public class AppTransitionTests extends WindowTestsBase {
|
|||||||
assertTrue(runner.mCancelled);
|
assertTrue(runner.mCancelled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testDelayWhileRecents() {
|
|
||||||
final DisplayContent dc = createNewDisplay(Display.STATE_ON);
|
|
||||||
doReturn(false).when(dc).onDescendantOrientationChanged(any());
|
|
||||||
final Task task = createTask(dc);
|
|
||||||
|
|
||||||
// Simulate activity1 launches activity2.
|
|
||||||
final ActivityRecord activity1 = createActivityRecord(task);
|
|
||||||
activity1.setVisible(true);
|
|
||||||
activity1.mVisibleRequested = false;
|
|
||||||
activity1.allDrawn = true;
|
|
||||||
final ActivityRecord activity2 = createActivityRecord(task);
|
|
||||||
activity2.setVisible(false);
|
|
||||||
activity2.mVisibleRequested = true;
|
|
||||||
activity2.allDrawn = true;
|
|
||||||
|
|
||||||
dc.mClosingApps.add(activity1);
|
|
||||||
dc.mOpeningApps.add(activity2);
|
|
||||||
dc.prepareAppTransition(TRANSIT_OPEN);
|
|
||||||
assertTrue(dc.mAppTransition.containsTransitRequest(TRANSIT_OPEN));
|
|
||||||
|
|
||||||
// Wait until everything in animation handler get executed to prevent the exiting window
|
|
||||||
// from being removed during WindowSurfacePlacer Traversal.
|
|
||||||
waitUntilHandlersIdle();
|
|
||||||
|
|
||||||
// Start recents
|
|
||||||
doReturn(true).when(task)
|
|
||||||
.isSelfAnimating(anyInt(), eq(ANIMATION_TYPE_RECENTS));
|
|
||||||
|
|
||||||
dc.mAppTransitionController.handleAppTransitionReady();
|
|
||||||
|
|
||||||
verify(activity1, never()).commitVisibility(anyBoolean(), anyBoolean(), anyBoolean());
|
|
||||||
verify(activity2, never()).commitVisibility(anyBoolean(), anyBoolean(), anyBoolean());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetAnimationStyleResId() {
|
public void testGetAnimationStyleResId() {
|
||||||
// Verify getAnimationStyleResId will return as LayoutParams.windowAnimations when without
|
// Verify getAnimationStyleResId will return as LayoutParams.windowAnimations when without
|
||||||
|
|||||||
Reference in New Issue
Block a user