Loading services/core/java/com/android/server/wm/CameraCompatFreeformPolicy.java +6 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.app.CameraCompatTaskInfo; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.os.RemoteException; import android.util.Slog; import android.view.DisplayInfo; import android.view.Surface; Loading Loading @@ -196,6 +197,11 @@ final class CameraCompatFreeformPolicy implements CameraStateMonitorImpl.CameraC } private void updateCompatibilityInfo(@NonNull ActivityRecord activityRecord) { if (activityRecord.app == null) { Slog.w(TAG, "Activity exists, but the app does not. Cannot revert display rotation" + "sandboxing."); return; } final CompatibilityInfo compatibilityInfo = activityRecord.mAtmService .compatibilityInfoForPackageLocked(activityRecord.info.applicationInfo); compatibilityInfo.applicationDisplayRotation = Loading services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java +24 −0 Original line number Diff line number Diff line Loading @@ -588,6 +588,26 @@ public class CameraCompatFreeformPolicyTests extends WindowTestsBase { }); } @Test @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING) @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT}) public void testCameraClosed_activityDetachedFromProcess_handlesGracefully() { runTestScenario((robot) -> { robot.configureActivity(SCREEN_ORIENTATION_PORTRAIT); robot.activity().rotateDisplayForTopActivity(ROTATION_270); robot.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1); robot.callOnActivityConfigurationChanging(/* letterboxNew= */ true, /* lastLetterbox= */ false); // This might happen at some point during teardown. robot.detachActivityFromProcess(); // Make sure no errors are thrown here. robot.onCameraClosed(CAMERA_ID_1); }); } /** * Runs a test scenario providing a Robot. */ Loading Loading @@ -724,6 +744,10 @@ public class CameraCompatFreeformPolicyTests extends WindowTestsBase { mWindowTestsBase.waitHandlerIdle(activity().displayContent().mWmService.mH); } void detachActivityFromProcess() { activity().top().detachFromProcess(); } void setInFreeformWindowingMode(boolean inFreeform) { doReturn(inFreeform).when(activity().top()).inFreeformWindowingMode(); } Loading Loading
services/core/java/com/android/server/wm/CameraCompatFreeformPolicy.java +6 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.app.CameraCompatTaskInfo; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.os.RemoteException; import android.util.Slog; import android.view.DisplayInfo; import android.view.Surface; Loading Loading @@ -196,6 +197,11 @@ final class CameraCompatFreeformPolicy implements CameraStateMonitorImpl.CameraC } private void updateCompatibilityInfo(@NonNull ActivityRecord activityRecord) { if (activityRecord.app == null) { Slog.w(TAG, "Activity exists, but the app does not. Cannot revert display rotation" + "sandboxing."); return; } final CompatibilityInfo compatibilityInfo = activityRecord.mAtmService .compatibilityInfoForPackageLocked(activityRecord.info.applicationInfo); compatibilityInfo.applicationDisplayRotation = Loading
services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java +24 −0 Original line number Diff line number Diff line Loading @@ -588,6 +588,26 @@ public class CameraCompatFreeformPolicyTests extends WindowTestsBase { }); } @Test @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING) @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT}) public void testCameraClosed_activityDetachedFromProcess_handlesGracefully() { runTestScenario((robot) -> { robot.configureActivity(SCREEN_ORIENTATION_PORTRAIT); robot.activity().rotateDisplayForTopActivity(ROTATION_270); robot.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1); robot.callOnActivityConfigurationChanging(/* letterboxNew= */ true, /* lastLetterbox= */ false); // This might happen at some point during teardown. robot.detachActivityFromProcess(); // Make sure no errors are thrown here. robot.onCameraClosed(CAMERA_ID_1); }); } /** * Runs a test scenario providing a Robot. */ Loading Loading @@ -724,6 +744,10 @@ public class CameraCompatFreeformPolicyTests extends WindowTestsBase { mWindowTestsBase.waitHandlerIdle(activity().displayContent().mWmService.mH); } void detachActivityFromProcess() { activity().top().detachFromProcess(); } void setInFreeformWindowingMode(boolean inFreeform) { doReturn(inFreeform).when(activity().top()).inFreeformWindowingMode(); } Loading