Merge "Fix check of getSupportedVideoSizes()"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ddb8920..5fb8838 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -39,7 +39,7 @@
     <application
         android:name="com.android.camera.app.CameraApp"
         android:hardwareAccelerated="true"
-        android:icon="@mipmap/logo_camera_color_44in48dp"
+        android:icon="@mipmap/logo_camera_color"
         android:label="@string/app_name"
         android:largeHeap="true"
         android:resizeableActivity="false"
diff --git a/res/values/colors.xml b/res/values/colors.xml
index b9735d9..3f0ea51 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -77,4 +77,5 @@
     <color name="mode_icon_hover_highlight">#2DFFFFFF</color>
 
     <color name="blue_button_text_color">#00838F</color>
+    <color name="ic_launcher_background">#4285f4</color>
 </resources>
diff --git a/res_p/mipmap-anydpi/logo_camera_color.xml b/res_p/mipmap-anydpi/logo_camera_color.xml
new file mode 100644
index 0000000..f9cf273
--- /dev/null
+++ b/res_p/mipmap-anydpi/logo_camera_color.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/ic_launcher_background"/>
+    <foreground android:drawable="@mipmap/logo_camera_color_foreground"/>
+</adaptive-icon>
diff --git a/res_p/mipmap-hdpi/logo_camera_color_44in48dp.png b/res_p/mipmap-hdpi/logo_camera_color_44in48dp.png
deleted file mode 100644
index 1ac6b58..0000000
--- a/res_p/mipmap-hdpi/logo_camera_color_44in48dp.png
+++ /dev/null
Binary files differ
diff --git a/res_p/mipmap-hdpi/logo_camera_color_foreground.png b/res_p/mipmap-hdpi/logo_camera_color_foreground.png
new file mode 100644
index 0000000..c172419
--- /dev/null
+++ b/res_p/mipmap-hdpi/logo_camera_color_foreground.png
Binary files differ
diff --git a/res_p/mipmap-mdpi/logo_camera_color_44in48dp.png b/res_p/mipmap-mdpi/logo_camera_color_44in48dp.png
deleted file mode 100644
index 3868f15..0000000
--- a/res_p/mipmap-mdpi/logo_camera_color_44in48dp.png
+++ /dev/null
Binary files differ
diff --git a/res_p/mipmap-mdpi/logo_camera_color_foreground.png b/res_p/mipmap-mdpi/logo_camera_color_foreground.png
new file mode 100644
index 0000000..aaad2a9
--- /dev/null
+++ b/res_p/mipmap-mdpi/logo_camera_color_foreground.png
Binary files differ
diff --git a/res_p/mipmap-xhdpi/logo_camera_color_44in48dp.png b/res_p/mipmap-xhdpi/logo_camera_color_44in48dp.png
deleted file mode 100644
index 7593dc3..0000000
--- a/res_p/mipmap-xhdpi/logo_camera_color_44in48dp.png
+++ /dev/null
Binary files differ
diff --git a/res_p/mipmap-xhdpi/logo_camera_color_foreground.png b/res_p/mipmap-xhdpi/logo_camera_color_foreground.png
new file mode 100644
index 0000000..8046dbf
--- /dev/null
+++ b/res_p/mipmap-xhdpi/logo_camera_color_foreground.png
Binary files differ
diff --git a/res_p/mipmap-xxhdpi/logo_camera_color_44in48dp.png b/res_p/mipmap-xxhdpi/logo_camera_color_44in48dp.png
deleted file mode 100644
index a989efe..0000000
--- a/res_p/mipmap-xxhdpi/logo_camera_color_44in48dp.png
+++ /dev/null
Binary files differ
diff --git a/res_p/mipmap-xxhdpi/logo_camera_color_foreground.png b/res_p/mipmap-xxhdpi/logo_camera_color_foreground.png
new file mode 100644
index 0000000..d517b97
--- /dev/null
+++ b/res_p/mipmap-xxhdpi/logo_camera_color_foreground.png
Binary files differ
diff --git a/res_p/mipmap-xxxhdpi/logo_camera_color_44in48dp.png b/res_p/mipmap-xxxhdpi/logo_camera_color_44in48dp.png
deleted file mode 100644
index 9264c34..0000000
--- a/res_p/mipmap-xxxhdpi/logo_camera_color_44in48dp.png
+++ /dev/null
Binary files differ
diff --git a/res_p/mipmap-xxxhdpi/logo_camera_color_foreground.png b/res_p/mipmap-xxxhdpi/logo_camera_color_foreground.png
new file mode 100644
index 0000000..fad721f
--- /dev/null
+++ b/res_p/mipmap-xxxhdpi/logo_camera_color_foreground.png
Binary files differ
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 57384db..3eceb8f 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -1655,7 +1655,7 @@
         mMotionManager = getServices().getMotionManager();
 
         mFirstRunDialog = new FirstRunDialog(this,
-              getAndroidContext(),
+              this /* as context */,
               mResolutionSetting,
               mSettingsManager,
               mOneCameraManager,
@@ -2189,6 +2189,9 @@
         if (mSoundPlayer != null) {
           mSoundPlayer.release();
         }
+        if (mFirstRunDialog != null) {
+            mFirstRunDialog.dismiss();
+        }
         CameraAgentFactory.recycle(CameraAgentFactory.CameraApi.API_1);
         CameraAgentFactory.recycle(CameraAgentFactory.CameraApi.AUTO);
     }
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index 640da4f..00a58cd 100644
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -1537,12 +1537,10 @@
 
     /**
      * Returns which way around the camera is facing, based on it's ID.
-     * <p>
-     * TODO: This needs to change so that we store the direction directly in the
-     * settings, rather than a Camera ID.
      */
-    private static Facing getFacingFromCameraId(int cameraId) {
-        return cameraId == 1 ? Facing.FRONT : Facing.BACK;
+    private Facing getFacingFromCameraId(int cameraId) {
+        return mAppController.getCameraProvider().getCharacteristics(cameraId)
+                .isFacingFront() ? Facing.FRONT : Facing.BACK;
     }
 
     private void resetTextureBufferSize() {
diff --git a/src/com/android/camera/DisableCameraReceiver.java b/src/com/android/camera/DisableCameraReceiver.java
index aea6ec5..5237c1d 100644
--- a/src/com/android/camera/DisableCameraReceiver.java
+++ b/src/com/android/camera/DisableCameraReceiver.java
@@ -30,7 +30,7 @@
 // this receiver will be disabled, so it will not run again.
 public class DisableCameraReceiver extends BroadcastReceiver {
     private static final Log.Tag TAG = new Log.Tag("DisableCamRcver");
-    private static final boolean CHECK_BACK_CAMERA_ONLY = true;
+    private static final boolean CHECK_BACK_CAMERA_ONLY = false;
     private static final String ACTIVITIES[] = {
         "com.android.camera.CameraLauncher",
     };
diff --git a/src/com/android/camera/app/FirstRunDialog.java b/src/com/android/camera/app/FirstRunDialog.java
index d810c4b..91c0570 100644
--- a/src/com/android/camera/app/FirstRunDialog.java
+++ b/src/com/android/camera/app/FirstRunDialog.java
@@ -60,7 +60,7 @@
     /** The hardware manager. */
     private final OneCameraManager mOneCameraManager;
 
-    /** The app context. */
+    /** The activity context. */
     private final Context mContext;
 
     /** The resolution settings. */
@@ -81,13 +81,13 @@
      */
     public FirstRunDialog(
           AppController appController,
-          Context androidContext,
+          Context activityContext,
           ResolutionSetting resolutionSetting,
           SettingsManager settingManager,
           OneCameraManager hardwareManager,
           FirstRunDialogListener listener) {
         mAppController = appController;
-        mContext = androidContext;
+        mContext = activityContext;
         mResolutionSetting = resolutionSetting;
         mSettingsManager = settingManager;
         mOneCameraManager = hardwareManager;
diff --git a/src/com/android/camera/captureintent/resource/ResourceConstructedImpl.java b/src/com/android/camera/captureintent/resource/ResourceConstructedImpl.java
index 588b7d4..5e90f40 100644
--- a/src/com/android/camera/captureintent/resource/ResourceConstructedImpl.java
+++ b/src/com/android/camera/captureintent/resource/ResourceConstructedImpl.java
@@ -76,7 +76,7 @@
             AppController appController,
             FatalErrorHandler fatalErrorHandler) {
         final CameraFacingSetting cameraFacingSetting = new CameraFacingSetting(
-                context.getResources(), settingsManager, settingScopeNamespace);
+                context.getResources(), settingsManager, settingScopeNamespace, appController);
         final ResolutionSetting resolutionSetting = new ResolutionSetting(
                 settingsManager, oneCameraManager, context.getContentResolver());
         return new RefCountBase<ResourceConstructed>(new ResourceConstructedImpl(
diff --git a/src/com/android/camera/one/config/OneCameraFeatureConfigCreator.java b/src/com/android/camera/one/config/OneCameraFeatureConfigCreator.java
index 3e0fb9d..dc7f900 100644
--- a/src/com/android/camera/one/config/OneCameraFeatureConfigCreator.java
+++ b/src/com/android/camera/one/config/OneCameraFeatureConfigCreator.java
@@ -131,8 +131,12 @@
     }
 
     private static boolean supportsReprocessing(CameraCharacteristics characteristics) {
-        int maxNumInputStreams = characteristics.get(
+        Integer maxNumInputStreams = characteristics.get(
                 CameraCharacteristics.REQUEST_MAX_NUM_INPUT_STREAMS);
+        if (maxNumInputStreams == null) {
+            Log.e(TAG, "Camera does not have maximum number of input streams.");
+            return false;
+        }
         if (maxNumInputStreams == 0) {
             return false;
         }
diff --git a/src/com/android/camera/settings/CameraFacingSetting.java b/src/com/android/camera/settings/CameraFacingSetting.java
index 1881d7e..8227ad6 100644
--- a/src/com/android/camera/settings/CameraFacingSetting.java
+++ b/src/com/android/camera/settings/CameraFacingSetting.java
@@ -16,6 +16,7 @@
 
 package com.android.camera.settings;
 
+import com.android.camera.app.AppController;
 import com.android.camera.CameraActivity;
 import com.android.camera.one.OneCamera;
 import com.android.camera2.R;
@@ -40,18 +41,24 @@
     public CameraFacingSetting(
             Resources resources,
             SettingsManager settingsManager,
-            String moduleSettingScope) {
+            String moduleSettingScope,
+            AppController appController) {
         mSettingsManager = settingsManager;
 
         mSettingScope = SettingsManager.getModuleSettingScope(moduleSettingScope);
 
         mCameraFacingSettingKey = Keys.KEY_CAMERA_ID;
-        mCameraFacingBackValue =
-                Integer.parseInt(resources.getString(R.string.pref_camera_id_entry_back_value));
-        mCameraFacingFrontValue =
-                Integer.parseInt(resources.getString(R.string.pref_camera_id_entry_front_value));
         mCameraFacingDefaultValue =
                 Integer.parseInt(resources.getString(R.string.pref_camera_id_default));
+
+        if (appController.getCameraProvider().getCharacteristics(mCameraFacingDefaultValue).
+                isFacingFront()) {
+            mCameraFacingFrontValue = 0;
+            mCameraFacingBackValue = 1;
+        } else {
+            mCameraFacingBackValue = 0;
+            mCameraFacingFrontValue = 1;
+        }
     }
 
     @Override