Merge "Refresh activity after stronger letterboxing for camera compat" into udc-dev

This commit is contained in:
Vali Calinescu
2023-05-11 14:25:05 +00:00
committed by Android (Google) Code Review
5 changed files with 31 additions and 13 deletions

View File

@@ -3865,6 +3865,12 @@
"group": "WM_DEBUG_ADD_REMOVE", "group": "WM_DEBUG_ADD_REMOVE",
"at": "com\/android\/server\/wm\/WindowState.java" "at": "com\/android\/server\/wm\/WindowState.java"
}, },
"1511273241": {
"message": "Refreshing activity for camera compatibility treatment, activityRecord=%s",
"level": "VERBOSE",
"group": "WM_DEBUG_STATES",
"at": "com\/android\/server\/wm\/DisplayRotationCompatPolicy.java"
},
"1518495446": { "1518495446": {
"message": "removeWindowToken: Attempted to remove non-existing token: %s", "message": "removeWindowToken: Attempted to remove non-existing token: %s",
"level": "WARN", "level": "WARN",
@@ -4297,12 +4303,6 @@
"group": "WM_DEBUG_REMOTE_ANIMATIONS", "group": "WM_DEBUG_REMOTE_ANIMATIONS",
"at": "com\/android\/server\/wm\/RemoteAnimationController.java" "at": "com\/android\/server\/wm\/RemoteAnimationController.java"
}, },
"1967643923": {
"message": "Refershing activity for camera compatibility treatment, activityRecord=%s",
"level": "VERBOSE",
"group": "WM_DEBUG_STATES",
"at": "com\/android\/server\/wm\/DisplayRotationCompatPolicy.java"
},
"1967975839": { "1967975839": {
"message": "Changing app %s visible=%b performLayout=%b", "message": "Changing app %s visible=%b performLayout=%b",
"level": "VERBOSE", "level": "VERBOSE",

View File

@@ -223,7 +223,7 @@ final class DisplayRotationCompatPolicy {
try { try {
activity.mLetterboxUiController.setIsRefreshAfterRotationRequested(true); activity.mLetterboxUiController.setIsRefreshAfterRotationRequested(true);
ProtoLog.v(WM_DEBUG_STATES, ProtoLog.v(WM_DEBUG_STATES,
"Refershing activity for camera compatibility treatment, " "Refreshing activity for camera compatibility treatment, "
+ "activityRecord=%s", activity); + "activityRecord=%s", activity);
final ClientTransaction transaction = ClientTransaction.obtain( final ClientTransaction transaction = ClientTransaction.obtain(
activity.app.getThread(), activity.token); activity.app.getThread(), activity.token);
@@ -311,11 +311,14 @@ final class DisplayRotationCompatPolicy {
} }
} }
// Refreshing only when configuration changes after rotation. // Refreshing only when configuration changes after rotation or camera split screen aspect ratio
// treatment is enabled
private boolean shouldRefreshActivity(ActivityRecord activity, Configuration newConfig, private boolean shouldRefreshActivity(ActivityRecord activity, Configuration newConfig,
Configuration lastReportedConfig) { Configuration lastReportedConfig) {
return newConfig.windowConfiguration.getDisplayRotation() final boolean displayRotationChanged = (newConfig.windowConfiguration.getDisplayRotation()
!= lastReportedConfig.windowConfiguration.getDisplayRotation() != lastReportedConfig.windowConfiguration.getDisplayRotation());
return (displayRotationChanged
|| activity.mLetterboxUiController.isCameraCompatSplitScreenAspectRatioAllowed())
&& isTreatmentEnabledForActivity(activity) && isTreatmentEnabledForActivity(activity)
&& activity.mLetterboxUiController.shouldRefreshActivityForCameraCompat(); && activity.mLetterboxUiController.shouldRefreshActivityForCameraCompat();
} }

View File

@@ -214,7 +214,7 @@ final class LetterboxConfiguration {
// otherwise the apps get blacked out when they are resumed and do not have focus yet. // otherwise the apps get blacked out when they are resumed and do not have focus yet.
private boolean mIsCompatFakeFocusEnabled; private boolean mIsCompatFakeFocusEnabled;
// Whether should use split screen aspect ratio for the activity when camera compat treatment // Whether we should use split screen aspect ratio for the activity when camera compat treatment
// is enabled and activity is connected to the camera in fullscreen. // is enabled and activity is connected to the camera in fullscreen.
private final boolean mIsCameraCompatSplitScreenAspectRatioEnabled; private final boolean mIsCameraCompatSplitScreenAspectRatioEnabled;
@@ -1118,7 +1118,7 @@ final class LetterboxConfiguration {
} }
/** /**
* Whether should use split screen aspect ratio for the activity when camera compat treatment * Whether we should use split screen aspect ratio for the activity when camera compat treatment
* is enabled and activity is connected to the camera in fullscreen. * is enabled and activity is connected to the camera in fullscreen.
*/ */
boolean isCameraCompatSplitScreenAspectRatioEnabled() { boolean isCameraCompatSplitScreenAspectRatioEnabled() {

View File

@@ -958,7 +958,7 @@ final class LetterboxUiController {
* Whether we use split screen aspect ratio for the activity when camera compat treatment * Whether we use split screen aspect ratio for the activity when camera compat treatment
* is active because the corresponding config is enabled and activity supports resizing. * is active because the corresponding config is enabled and activity supports resizing.
*/ */
private boolean isCameraCompatSplitScreenAspectRatioAllowed() { boolean isCameraCompatSplitScreenAspectRatioAllowed() {
return mLetterboxConfiguration.isCameraCompatSplitScreenAspectRatioEnabled() return mLetterboxConfiguration.isCameraCompatSplitScreenAspectRatioEnabled()
&& !mActivityRecord.shouldCreateCompatDisplayInsets(); && !mActivityRecord.shouldCreateCompatDisplayInsets();
} }

View File

@@ -479,6 +479,8 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase {
public void testOnActivityConfigurationChanging_displayRotationNotChanging_noRefresh() public void testOnActivityConfigurationChanging_displayRotationNotChanging_noRefresh()
throws Exception { throws Exception {
configureActivity(SCREEN_ORIENTATION_PORTRAIT); configureActivity(SCREEN_ORIENTATION_PORTRAIT);
doReturn(false).when(mActivity.mLetterboxUiController)
.isCameraCompatSplitScreenAspectRatioAllowed();
mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1); mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);
callOnActivityConfigurationChanging(mActivity, /* isDisplayRotationChanging */ false); callOnActivityConfigurationChanging(mActivity, /* isDisplayRotationChanging */ false);
@@ -486,6 +488,19 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase {
assertActivityRefreshRequested(/* refreshRequested */ false); assertActivityRefreshRequested(/* refreshRequested */ false);
} }
@Test
public void testOnActivityConfigurationChanging_splitScreenAspectRatioAllowed_refresh()
throws Exception {
configureActivity(SCREEN_ORIENTATION_PORTRAIT);
doReturn(true).when(mActivity.mLetterboxUiController)
.isCameraCompatSplitScreenAspectRatioAllowed();
mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);
callOnActivityConfigurationChanging(mActivity, /* isDisplayRotationChanging */ false);
assertActivityRefreshRequested(/* refreshRequested */ true);
}
@Test @Test
public void testOnActivityConfigurationChanging_cycleThroughStopDisabled() throws Exception { public void testOnActivityConfigurationChanging_cycleThroughStopDisabled() throws Exception {
when(mLetterboxConfiguration.isCameraCompatRefreshCycleThroughStopEnabled()) when(mLetterboxConfiguration.isCameraCompatRefreshCycleThroughStopEnabled())