diff options
| -rw-r--r-- | core/java/android/hardware/camera2/CameraManager.java | 21 | 
1 files changed, 18 insertions, 3 deletions
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index 6a7ee7fcb26a..d40b2e342fbb 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -29,6 +29,7 @@ import android.annotation.SystemApi;  import android.annotation.SystemService;  import android.annotation.TestApi;  import android.app.ActivityManager; +import android.app.CameraCompatTaskInfo;  import android.app.TaskInfo;  import android.app.compat.CompatChanges;  import android.companion.virtual.VirtualDeviceManager; @@ -1586,12 +1587,13 @@ public final class CameraManager {                      context.getSystemService(ActivityManager.class);              for (ActivityManager.AppTask appTask : activityManager.getAppTasks()) {                  final TaskInfo taskInfo = appTask.getTaskInfo(); -                if (taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode -                        != 0 +                final int freeformCameraCompatMode = +                        taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode; +                if (freeformCameraCompatMode != 0                          && taskInfo.topActivity != null                          && taskInfo.topActivity.getPackageName().equals(packageName)) {                      // WindowManager has requested rotation override. -                    return ICameraService.ROTATION_OVERRIDE_ROTATION_ONLY; +                    return getRotationOverrideForCompatFreeform(freeformCameraCompatMode);                  }              }          } @@ -1613,6 +1615,19 @@ public final class CameraManager {                  : ICameraService.ROTATION_OVERRIDE_NONE;      } +    private static int getRotationOverrideForCompatFreeform( +            @CameraCompatTaskInfo.FreeformCameraCompatMode int freeformCameraCompatMode) { +        // Only rotate-and-crop if the app and device orientations do not match. +        if (freeformCameraCompatMode +                == CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT +                || freeformCameraCompatMode +                    == CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE) { +            return ICameraService.ROTATION_OVERRIDE_ROTATION_ONLY; +        } else { +            return ICameraService.ROTATION_OVERRIDE_NONE; +        } +    } +      /**       * @hide       */  |