Merge "Update ImageAnalysis' target rotation based on motion sensor." into androidx-main am: 4d02ddbe4e

Original change: https://android-review.googlesource.com/c/platform/frameworks/support/+/1685185

Change-Id: If403a592c21df79f64bb1a7a9d62d520d4e1de29
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java b/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
index 9cbf934..b4f35eb 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/CameraController.java
@@ -162,7 +162,7 @@
     private ImageAnalysis.Analyzer mAnalysisAnalyzer;
 
     @NonNull
-    private ImageAnalysis mImageAnalysis;
+    ImageAnalysis mImageAnalysis;
 
     // Synthetic access
     @SuppressWarnings("WeakerAccess")
@@ -243,6 +243,7 @@
         mSensorRotationListener = new SensorRotationListener(mAppContext) {
             @Override
             public void onRotationChanged(int rotation) {
+                mImageAnalysis.setTargetRotation(rotation);
                 mImageCapture.setTargetRotation(rotation);
                 mVideoCapture.setTargetRotation(rotation);
             }
diff --git a/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt b/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt
index 1327ddb..916d316 100644
--- a/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt
+++ b/camera/camera-view/src/test/java/androidx/camera/view/CameraControllerTest.kt
@@ -18,6 +18,7 @@
 
 import android.content.Context
 import android.os.Build
+import android.view.Surface
 import androidx.camera.core.CameraSelector
 import androidx.camera.core.CameraX
 import androidx.camera.core.CameraXConfig
@@ -58,6 +59,21 @@
 
     @UiThreadTest
     @Test
+    public fun sensorRotationChanges_useCaseTargetRotationUpdated() {
+        // Arrange.
+        val controller = LifecycleCameraController(context)
+
+        // Act.
+        controller.mSensorRotationListener.onRotationChanged(Surface.ROTATION_180)
+
+        // Assert.
+        assertThat(controller.mImageAnalysis.targetRotation).isEqualTo(Surface.ROTATION_180)
+        assertThat(controller.mImageCapture.targetRotation).isEqualTo(Surface.ROTATION_180)
+        // TODO(b/177276479): verify VideoCapture once it supports getTargetRotation().
+    }
+
+    @UiThreadTest
+    @Test
     public fun setSelectorBeforeBound_selectorSet() {
         // Arrange.
         val controller = LifecycleCameraController(context)