diff options
-rw-r--r-- | src/com/android/camera/Camera.java | 30 | ||||
-rw-r--r-- | src/com/android/camera/CameraSettings.java | 15 |
2 files changed, 17 insertions, 28 deletions
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java index b6a7ac5..777a0b4 100644 --- a/src/com/android/camera/Camera.java +++ b/src/com/android/camera/Camera.java @@ -113,6 +113,7 @@ public class Camera extends Activity implements View.OnClickListener, public static final String ZOOM_SPEED = "99"; private Parameters mParameters; + private Parameters mInitialParameters; // The non-standard parameter strings to communicate with camera driver. // This will be removed in the future. @@ -973,27 +974,20 @@ public class Camera extends Activity implements View.OnClickListener, updateStorageHint(mPicturesRemaining); } - private boolean mScreenComplete = false; private void showOnScreenSettings() { if (mSettings == null) { mSettings = new OnScreenSettings( findViewById(R.id.camera_preview)); - CameraSettings helper = new CameraSettings(this, mParameters); + CameraSettings helper = + new CameraSettings(this, mInitialParameters); mSettings.setPreferenceScreen(helper .getPreferenceScreen(R.xml.camera_preferences)); mSettings.setOnVisibilityChangedListener(this); - // If the current screne mode is not auto, then the supported - // options is not complete, we need to read it again later. - // For example: in the scene mode "ACTION", the supported focus mode - // will change from {infinite, macro, auto} to {infinite}. String sceneMode = mParameters.getSceneMode(); - boolean autoSceneMode = sceneMode == null - || Parameters.SCENE_MODE_AUTO.equals(sceneMode); - mScreenComplete = autoSceneMode; - - if (autoSceneMode) { + if (sceneMode == null + || Parameters.SCENE_MODE_AUTO.equals(sceneMode)) { // If scene mode is auto, cancel override in settings mSettings.overrideSettings(CameraSettings.KEY_FLASH_MODE, null); mSettings.overrideSettings(CameraSettings.KEY_FOCUS_MODE, null); @@ -1516,6 +1510,7 @@ public class Camera extends Activity implements View.OnClickListener, private void ensureCameraDevice() throws CameraHardwareException { if (mCameraDevice == null) { mCameraDevice = CameraHolder.instance().open(); + mInitialParameters = mCameraDevice.getParameters(); } } @@ -1802,19 +1797,6 @@ public class Camera extends Activity implements View.OnClickListener, } mCameraDevice.setParameters(mParameters); - - // The complete preference has not been read, read it now - if (!mScreenComplete && mSettings != null) { - // The current scene mode is auto and thus the supported values - // of the three settings (flash mode, white balance, and focus - // mode) are complete now. If we didn't have the complete - // preference screen, read it now. - mScreenComplete = true; - mParameters = mCameraDevice.getParameters(); - CameraSettings helper = new CameraSettings(this, mParameters); - mSettings.setPreferenceScreen(helper - .getPreferenceScreen(R.xml.camera_preferences)); - } } // We post the runner because this function can be called from diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index e4737be..2cdce3a 100644 --- a/src/com/android/camera/CameraSettings.java +++ b/src/com/android/camera/CameraSettings.java @@ -126,6 +126,8 @@ public class CameraSettings { (ListPreference) screen.findPreference(KEY_SCENE_MODE); ListPreference flashMode = (ListPreference) screen.findPreference(KEY_FLASH_MODE); + ListPreference focusMode = + (ListPreference) screen.findPreference(KEY_FOCUS_MODE); // Since the screen could be loaded from different resources, we need // to check if the preference is available here @@ -159,6 +161,10 @@ public class CameraSettings { filterUnsupportedOptions(screen, flashMode, mParameters.getSupportedFlashModes()); } + if (focusMode != null) { + filterUnsupportedOptions(screen, + focusMode, mParameters.getSupportedFocusModes()); + } } private static boolean removePreference(PreferenceGroup group, @@ -179,14 +185,15 @@ public class CameraSettings { private void filterUnsupportedOptions(PreferenceScreen screen, ListPreference pref, List<String> supported) { - // Remove the preference if the parameter is not supported. - if (supported == null) { + CharSequence[] allEntries = pref.getEntries(); + + // Remove the preference if the parameter is not supported or there is + // only one options for the settings. + if (supported == null || allEntries.length <= 1) { removePreference(screen, pref); return; } - // Prepare setting entries and entry values. - CharSequence[] allEntries = pref.getEntries(); CharSequence[] allEntryValues = pref.getEntryValues(); Drawable[] allIcons = (pref instanceof IconListPreference) ? ((IconListPreference) pref).getIcons() |