Keep space for those empty icons but hide them if the feature is not
supported.

fix bug: http://b/2250438

Change-Id: I79eb9d575cf275c25decc6236b80f61ecfdf3042
diff --git a/res/layout/camera.xml b/res/layout/camera.xml
index b35761c..199208f 100644
--- a/res/layout/camera.xml
+++ b/res/layout/camera.xml
@@ -49,6 +49,8 @@
                     android:layout_marginLeft="10dp"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content">
+                <!-- Thsee icons should be in the same order as the
+                        on-screen menu items -->
                 <com.android.camera.IconIndicator
                         style="@style/IconIndicator"
                         android:id="@+id/gps_icon"
@@ -56,24 +58,24 @@
                         camera:icons="@array/gps_icons"/>
                 <com.android.camera.IconIndicator
                         style="@style/IconIndicator"
+                        android:id="@+id/flash_icon"
+                        camera:modes="@array/flash_modes"
+                        camera:icons="@array/flash_icons"/>
+                <com.android.camera.IconIndicator
+                        style="@style/IconIndicator"
                         android:id="@+id/scenemode_icon"
                         camera:modes="@array/scenemode_modes"
                         camera:icons="@array/scenemode_icons"/>
                 <com.android.camera.IconIndicator
                         style="@style/IconIndicator"
-                        android:id="@+id/focus_icon"
-                        camera:modes="@array/pref_camera_focusmode_entryvalues"
-                        camera:icons="@array/focusmode_icons"/>
-                <com.android.camera.IconIndicator
-                        style="@style/IconIndicator"
                         android:id="@+id/whitebalance_icon"
                         camera:modes="@array/pref_camera_whitebalance_entryvalues"
                         camera:icons="@array/whitebalance_icons"/>
                 <com.android.camera.IconIndicator
                         style="@style/IconIndicator"
-                        android:id="@+id/flash_icon"
-                        camera:modes="@array/pref_camera_flashmode_entryvalues"
-                        camera:icons="@array/flash_icons"/>
+                        android:id="@+id/focus_icon"
+                        camera:modes="@array/pref_camera_focusmode_entryvalues"
+                        camera:icons="@array/focusmode_icons"/>
             </LinearLayout>
         </FrameLayout>
     </com.android.camera.PreviewFrameLayout>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 22026a7..fd613ba 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -100,7 +100,7 @@
     </array>
 
     <array name="focusmode_icons">
-        <item>@null</item>
+        <item>@drawable/ic_viewfinder_empty</item>
         <item>@drawable/ic_viewfinder_focus_infinity</item>
         <item>@drawable/ic_viewfinder_focus_macro</item>
     </array>
@@ -134,10 +134,18 @@
         <item>@string/pref_camera_recordlocation_entry_on</item>
     </array>
 
+    <string-array name="flash_modes" translatable="false">
+        <item>auto</item>
+        <item>on</item>
+        <item>off</item>
+        <item>@string/pref_camera_flashmode_no_flash</item>
+    </string-array>
+
     <array name="flash_icons">
         <item>@drawable/ic_viewfinder_flash_auto</item>
         <item>@drawable/ic_viewfinder_flash_on</item>
-        <item>@null</item>
+        <item>@drawable/ic_viewfinder_flash_off</item>
+        <item>@drawable/ic_viewfinder_empty</item>
     </array>
 
     <string-array name="gps_modes" translatable="false">
@@ -146,7 +154,7 @@
     </string-array>
 
     <array name="gps_icons">
-        <item>@null</item>
+        <item>@drawable/ic_viewfinder_empty</item>
         <item>@drawable/ic_camera_sym_gps</item>
     </array>
 
@@ -176,7 +184,7 @@
     </array>
 
     <array name="whitebalance_icons">
-        <item>@null</item>
+        <item>@drawable/ic_viewfinder_empty</item>
         <item>@drawable/ic_viewfinder_wb_incandescent</item>
         <item>@drawable/ic_viewfinder_wb_daylight</item>
         <item>@drawable/ic_viewfinder_wb_fluorescent</item>
@@ -251,7 +259,7 @@
     </string-array>
 
     <array name="scenemode_icons">
-        <item>@null</item>
+        <item>@drawable/ic_viewfinder_empty</item>
         <item>@drawable/ic_viewfinder_scenemode</item>
     </array>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4b569a9..b40c1d9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -394,6 +394,9 @@
     <!-- Default flash mode setting.-->
     <string name="pref_camera_flashmode_default" translatable="false">auto</string>
 
+    <!-- Value for flash off setting-->
+    <string name="pref_camera_flashmode_no_flash" translatable="false">no_flash</string>
+
     <!-- Settings screen, Flash mode title -->
     <string name="pref_camera_flashmode_title">Flash mode</string>
 
diff --git a/res/values/styles.xml b/res/values/styles.xml
index e18658d..8311284 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -79,7 +79,6 @@
         <item name="android:windowExitAnimation">@null</item>
     </style>
     <style name="IconIndicator">
-        <item name="android:visibility">gone</item>
         <item name="android:layout_marginTop">10dp</item>
         <item name="android:layout_marginBottom">10dp</item>
         <item name="android:layout_width">wrap_content</item>
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 7e2d69b..3de6bae 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -981,6 +981,25 @@
         } catch (InterruptedException ex) {
             // ignore
         }
+        removeUnsupportedIndicators();
+    }
+
+    private void removeUnsupportedIndicators() {
+        if (mParameters.getSupportedFocusModes() == null) {
+            mFocusIndicator.setVisibility(View.GONE);
+        }
+
+        if (mParameters.getSupportedWhiteBalance() == null) {
+            mWhitebalanceIndicator.setVisibility(View.GONE);
+        }
+
+        if (mParameters.getSupportedFlashModes() == null) {
+            mFlashIndicator.setVisibility(View.GONE);
+        }
+
+        if (mParameters.getSupportedSceneModes() == null) {
+            mSceneModeIndicator.setVisibility(View.GONE);
+        }
     }
 
     private class GripperTouchListener implements View.OnTouchListener {
@@ -1825,7 +1844,8 @@
             } else {
                 flashMode = mParameters.getFlashMode();
                 if (flashMode == null) {
-                    flashMode = Parameters.FLASH_MODE_OFF;
+                    flashMode = getString(
+                            R.string.pref_camera_flashmode_no_flash);
                 }
             }
 
diff --git a/src/com/android/camera/IconIndicator.java b/src/com/android/camera/IconIndicator.java
index e4500e4..f21269e 100644
--- a/src/com/android/camera/IconIndicator.java
+++ b/src/com/android/camera/IconIndicator.java
@@ -40,7 +40,7 @@
         a.recycle();
 
         setModesAndIcons(modes, icons);
-        setImageDrawable(mIcons.length > 0 ? mIcons[0]: null);
+        setImageDrawable(mIcons.length > 0 ? mIcons[0] : null);
     }
 
     public IconIndicator(Context context, AttributeSet attrs) {
@@ -70,12 +70,7 @@
     public void setMode(String mode) {
         for (int i = 0, n = mModes.length; i < n; ++i) {
             if (mModes[i].equals(mode)) {
-                if (mIcons[i] != null) {
-                    setVisibility(View.VISIBLE);
-                    setImageDrawable(mIcons[i]);
-                } else {
-                    setVisibility(View.GONE);
-                }
+                setImageDrawable(mIcons[i]);
                 return;
             }
         }
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index f065f90..8effd3c 100644
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -325,6 +325,13 @@
         } catch (InterruptedException ex) {
             // ignore
         }
+        removeUnsupportedIndicators();
+    }
+
+    private void removeUnsupportedIndicators() {
+        if (mParameters.getSupportedWhiteBalance() == null) {
+            mWhitebalanceIndicator.setVisibility(View.GONE);
+        }
     }
 
     @Override