Merge "Include ActivityRecord in the transition when windowingMode changed" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8256522b6b
@@ -44,6 +44,7 @@ import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
|
|||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
|
||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
|
||||||
|
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
|
||||||
import static android.app.WindowConfiguration.activityTypeToString;
|
import static android.app.WindowConfiguration.activityTypeToString;
|
||||||
import static android.app.WindowConfiguration.isSplitScreenWindowingMode;
|
import static android.app.WindowConfiguration.isSplitScreenWindowingMode;
|
||||||
import static android.app.admin.DevicePolicyResources.Drawables.Source.PROFILE_SWITCH_ANIMATION;
|
import static android.app.admin.DevicePolicyResources.Drawables.Source.PROFILE_SWITCH_ANIMATION;
|
||||||
@@ -8211,6 +8212,20 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfigurationChanged(Configuration newParentConfig) {
|
public void onConfigurationChanged(Configuration newParentConfig) {
|
||||||
|
// We want to collect the ActivityRecord if the windowing mode is changed, so that it will
|
||||||
|
// dispatch app transition finished event correctly at the end.
|
||||||
|
// Check #isVisible() because we don't want to animate for activity that stays invisible.
|
||||||
|
// Activity with #isVisibleRequested() changed should be collected when that is requested.
|
||||||
|
if (mTransitionController.isShellTransitionsEnabled() && isVisible()
|
||||||
|
&& isVisibleRequested()) {
|
||||||
|
final int projectedWindowingMode =
|
||||||
|
getRequestedOverrideWindowingMode() == WINDOWING_MODE_UNDEFINED
|
||||||
|
? newParentConfig.windowConfiguration.getWindowingMode()
|
||||||
|
: getRequestedOverrideWindowingMode();
|
||||||
|
if (getWindowingMode() != projectedWindowingMode) {
|
||||||
|
mTransitionController.collect(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (mCompatDisplayInsets != null) {
|
if (mCompatDisplayInsets != null) {
|
||||||
Configuration overrideConfig = getRequestedOverrideConfiguration();
|
Configuration overrideConfig = getRequestedOverrideConfiguration();
|
||||||
// Adapt to changes in orientation locking. The app is still non-resizable, but
|
// Adapt to changes in orientation locking. The app is still non-resizable, but
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
|
|||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
|
||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
|
||||||
|
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
|
||||||
import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
|
import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
|
||||||
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT;
|
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT;
|
||||||
import static android.content.pm.ActivityInfo.FLAG_SUPPORTS_PICTURE_IN_PICTURE;
|
import static android.content.pm.ActivityInfo.FLAG_SUPPORTS_PICTURE_IN_PICTURE;
|
||||||
@@ -54,6 +55,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
|
|||||||
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
|
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
|
||||||
import static android.view.WindowManager.TRANSIT_CLOSE;
|
import static android.view.WindowManager.TRANSIT_CLOSE;
|
||||||
import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_OPEN;
|
import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_OPEN;
|
||||||
|
import static android.view.WindowManager.TRANSIT_PIP;
|
||||||
import static android.window.StartingWindowInfo.TYPE_PARAMETER_LEGACY_SPLASH_SCREEN;
|
import static android.window.StartingWindowInfo.TYPE_PARAMETER_LEGACY_SPLASH_SCREEN;
|
||||||
|
|
||||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||||
@@ -3397,6 +3399,24 @@ public class ActivityRecordTests extends WindowTestsBase {
|
|||||||
assertFalse(activity.mVisibleRequested);
|
assertFalse(activity.mVisibleRequested);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testShellTransitionTaskWindowingModeChange() {
|
||||||
|
final ActivityRecord activity = createActivityWithTask();
|
||||||
|
final Task task = activity.getTask();
|
||||||
|
task.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
|
||||||
|
|
||||||
|
assertTrue(activity.isVisible());
|
||||||
|
assertTrue(activity.isVisibleRequested());
|
||||||
|
assertEquals(WINDOWING_MODE_FULLSCREEN, activity.getWindowingMode());
|
||||||
|
|
||||||
|
registerTestTransitionPlayer();
|
||||||
|
task.mTransitionController.requestTransitionIfNeeded(TRANSIT_PIP, task);
|
||||||
|
task.setWindowingMode(WINDOWING_MODE_PINNED);
|
||||||
|
|
||||||
|
// Collect activity in the transition if the Task windowing mode is going to change.
|
||||||
|
assertTrue(activity.inTransition());
|
||||||
|
}
|
||||||
|
|
||||||
private ICompatCameraControlCallback getCompatCameraControlCallback() {
|
private ICompatCameraControlCallback getCompatCameraControlCallback() {
|
||||||
return new ICompatCameraControlCallback.Stub() {
|
return new ICompatCameraControlCallback.Stub() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user