Merge "Unset last orientation for fixed orientation transient launch" into tm-dev
This commit is contained in:
@@ -6362,10 +6362,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the fixed orientation requested by a transient launch (e.g. recents animation).
|
* Returns {@code true} if the transient launch (e.g. recents animation) requested a fixed
|
||||||
* If it doesn't return SCREEN_ORIENTATION_UNSET, the rotation change should be deferred.
|
* orientation, then the rotation change should be deferred.
|
||||||
*/
|
*/
|
||||||
@ActivityInfo.ScreenOrientation int getTransientFixedOrientation() {
|
boolean shouldDeferRotation() {
|
||||||
ActivityRecord source = null;
|
ActivityRecord source = null;
|
||||||
if (mTransitionController.isShellTransitionsEnabled()) {
|
if (mTransitionController.isShellTransitionsEnabled()) {
|
||||||
final ActivityRecord r = mFixedRotationLaunchingApp;
|
final ActivityRecord r = mFixedRotationLaunchingApp;
|
||||||
@@ -6377,13 +6377,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
}
|
}
|
||||||
if (source == null || source.getRequestedConfigurationOrientation(
|
if (source == null || source.getRequestedConfigurationOrientation(
|
||||||
true /* forDisplay */) == ORIENTATION_UNDEFINED) {
|
true /* forDisplay */) == ORIENTATION_UNDEFINED) {
|
||||||
return SCREEN_ORIENTATION_UNSET;
|
return false;
|
||||||
}
|
}
|
||||||
if (!mWmService.mPolicy.okToAnimate(false /* ignoreScreenOn */)) {
|
|
||||||
// If screen is off or the device is going to sleep, then still allow to update.
|
// If screen is off or the device is going to sleep, then still allow to update.
|
||||||
return SCREEN_ORIENTATION_UNSET;
|
return mWmService.mPolicy.okToAnimate(false /* ignoreScreenOn */);
|
||||||
}
|
|
||||||
return source.mOrientation;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -446,12 +446,10 @@ public class DisplayRotation {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final int transientFixedOrientation =
|
if (mDisplayContent.mFixedRotationTransitionListener.shouldDeferRotation()) {
|
||||||
mDisplayContent.mFixedRotationTransitionListener.getTransientFixedOrientation();
|
|
||||||
if (transientFixedOrientation != SCREEN_ORIENTATION_UNSET) {
|
|
||||||
// Makes sure that after the transition is finished, updateOrientation() can see
|
// Makes sure that after the transition is finished, updateOrientation() can see
|
||||||
// the difference from the latest orientation source.
|
// the difference from the latest orientation source.
|
||||||
mLastOrientation = transientFixedOrientation;
|
mLastOrientation = SCREEN_ORIENTATION_UNSET;
|
||||||
// During the recents animation, the closing app might still be considered on top.
|
// During the recents animation, the closing app might still be considered on top.
|
||||||
// In order to ignore its requested orientation to avoid a sensor led rotation (e.g
|
// In order to ignore its requested orientation to avoid a sensor led rotation (e.g
|
||||||
// user rotating the device while the recents animation is running), we ignore
|
// user rotating the device while the recents animation is running), we ignore
|
||||||
|
|||||||
@@ -451,7 +451,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
|
|||||||
final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation();
|
final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation();
|
||||||
final int topOrientation = DisplayContentTests.getRotatedOrientation(mDefaultDisplay);
|
final int topOrientation = DisplayContentTests.getRotatedOrientation(mDefaultDisplay);
|
||||||
assertFalse(displayRotation.updateOrientation(topOrientation, false /* forceUpdate */));
|
assertFalse(displayRotation.updateOrientation(topOrientation, false /* forceUpdate */));
|
||||||
assertEquals(recents.mOrientation, displayRotation.getLastOrientation());
|
assertEquals(ActivityInfo.SCREEN_ORIENTATION_UNSET, displayRotation.getLastOrientation());
|
||||||
final int prevRotation = mDisplayContent.getRotation();
|
final int prevRotation = mDisplayContent.getRotation();
|
||||||
mWm.cleanupRecentsAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
|
mWm.cleanupRecentsAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,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.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
|
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
|
||||||
|
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
|
||||||
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS;
|
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
|
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
|
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
|
||||||
@@ -691,7 +692,7 @@ public class TransitionTests extends WindowTestsBase {
|
|||||||
anyInt() /* orientation */, anyInt() /* lastRotation */);
|
anyInt() /* orientation */, anyInt() /* lastRotation */);
|
||||||
// Rotation update is skipped while the recents animation is running.
|
// Rotation update is skipped while the recents animation is running.
|
||||||
assertFalse(mDisplayContent.updateRotationUnchecked());
|
assertFalse(mDisplayContent.updateRotationUnchecked());
|
||||||
assertEquals(SCREEN_ORIENTATION_NOSENSOR, displayRotation.getLastOrientation());
|
assertEquals(SCREEN_ORIENTATION_UNSET, displayRotation.getLastOrientation());
|
||||||
// Return to the app without fixed orientation from recents.
|
// Return to the app without fixed orientation from recents.
|
||||||
app.moveFocusableActivityToTop("test");
|
app.moveFocusableActivityToTop("test");
|
||||||
player.finish();
|
player.finish();
|
||||||
|
|||||||
Reference in New Issue
Block a user