Merge "Camera: Avoid enabling unsupported CAF modes during image capture" into rvc-dev am: 1a463d7444 am: e32bf6cd28

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Camera2/+/11707502

Change-Id: I2505d13b643689cc2f1698a1b8d76249d9a86d2f
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1f13e3e..002bf5f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -55,6 +55,7 @@
             android:launchMode="singleTask"
             android:taskAffinity="com.android.camera.CameraActivity"
             android:theme="@style/Theme.Camera"
+            android:exported="true"
             android:windowSoftInputMode="stateAlwaysHidden|adjustPan" >
             <intent-filter>
                 <action android:name="android.media.action.STILL_IMAGE_CAMERA" />
@@ -83,6 +84,7 @@
         <activity-alias
             android:name="com.android.camera.CameraLauncher"
             android:label="@string/app_name"
+            android:exported="true"
             android:targetActivity="com.android.camera.CameraActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -98,6 +100,7 @@
             android:theme="@style/Theme.Camera"
             android:configChanges="orientation|screenSize|keyboardHidden"
             android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
+            android:exported="true"
             android:visibleToInstantApps="true">
             <intent-filter>
                 <action android:name="android.media.action.IMAGE_CAPTURE" />
@@ -109,6 +112,7 @@
         <activity-alias
             android:name="com.android.camera.VideoCamera"
             android:label="@string/video_camera_label"
+            android:exported="true"
             android:targetActivity="com.android.camera.CaptureActivity">
             <intent-filter>
                 <action android:name="android.media.action.VIDEO_CAMERA" />
@@ -128,6 +132,7 @@
             android:label="@string/app_name"
             android:taskAffinity="com.android.camera.SecureCameraActivity"
             android:theme="@style/Theme.SecureCamera"
+            android:exported="true"
             android:windowSoftInputMode="stateAlwaysHidden|adjustPan" >
             <intent-filter>
                 <action android:name="android.media.action.STILL_IMAGE_CAMERA_SECURE" />
@@ -152,7 +157,8 @@
             android:configChanges="keyboardHidden|orientation|screenSize">
         </activity>
 
-        <receiver android:name="com.android.camera.DisableCameraReceiver">
+        <receiver android:name="com.android.camera.DisableCameraReceiver"
+            android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.BOOT_COMPLETED" />
             </intent-filter>
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 18d87bf..6b81641 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -22,6 +22,7 @@
 import android.app.ActionBar;
 import android.app.Activity;
 import android.app.Dialog;
+import android.app.KeyguardManager.KeyguardDismissCallback;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
@@ -2513,7 +2514,32 @@
         UsageStatistics.instance().controlUsed(
                 eventprotos.ControlEvent.ControlType.OVERALL_SETTINGS);
         Intent intent = new Intent(this, CameraSettingsActivity.class);
-        startActivity(intent);
+        if (!isKeyguardLocked()) {
+            startActivity(intent);
+        } else {
+            /* Need to explicitly request keyguard dismissal for PIN/pattern
+             * entry to show up directly. */
+            requestDismissKeyguard(
+                /* requesting Activity: */ CameraActivity.this,
+                new KeyguardDismissCallback() {
+                    @Override
+                    public void onDismissSucceeded() {
+                        /* Need to use launchActivityByIntent() so that going
+                         * back from settings after unlock leads to main
+                         * activity instead of dismissing camera entirely. */
+                        launchActivityByIntent(intent);
+                    }
+                    @Override
+                    public void onDismissError() {
+                        Log.e(TAG, "Keyguard dismissal failed.");
+                    }
+                    @Override
+                    public void onDismissCancelled() {
+                        Log.d(TAG, "Keyguard dismissal canceled.");
+                    }
+                }
+            );
+        }
     }
 
     @Override
diff --git a/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java b/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java
index c87eab8..7a2caf9 100644
--- a/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java
+++ b/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java
@@ -96,8 +96,7 @@
      */
     public Map<Integer, Integer> exifGetMinimalTags(ExifInterface exif) {
         Map<Integer, Integer> map = new HashMap<>();
-        map.put(ExifInterface.TAG_ORIENTATION,
-                ExifInterface.getRotationForOrientationValue((short) Exif.getOrientation(exif)));
+        map.put(ExifInterface.TAG_ORIENTATION, Exif.getOrientation(exif));
         map.put(ExifInterface.TAG_PIXEL_X_DIMENSION, exif.getTagIntValue(
                 ExifInterface.TAG_PIXEL_X_DIMENSION));
         map.put(ExifInterface.TAG_PIXEL_Y_DIMENSION, exif.getTagIntValue(
diff --git a/src/com/android/camera/util/QuickActivity.java b/src/com/android/camera/util/QuickActivity.java
index 18ea253..5122255 100644
--- a/src/com/android/camera/util/QuickActivity.java
+++ b/src/com/android/camera/util/QuickActivity.java
@@ -224,6 +224,16 @@
         return false;
     }
 
+    protected void requestDismissKeyguard(Activity activity,
+            @Nullable KeyguardManager.KeyguardDismissCallback callback) {
+        if (mKeyguardManager == null) {
+            mKeyguardManager = AndroidServices.instance().provideKeyguardManager();
+        }
+        if (mKeyguardManager != null) {
+            mKeyguardManager.requestDismissKeyguard(activity, callback);
+        }
+    }
+
     /**
      * Subclasses should override this in place of {@link Activity#onNewIntent}.
      */