summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/camera2/CameraManager.java21
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
*/