diff options
Diffstat (limited to 'src/com/android/camera/CameraSettings.java')
-rw-r--r-- | src/com/android/camera/CameraSettings.java | 268 |
1 files changed, 82 insertions, 186 deletions
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index 7ed5461..1888e32 100644 --- a/src/com/android/camera/CameraSettings.java +++ b/src/com/android/camera/CameraSettings.java @@ -1,167 +1,109 @@ -/* - * Copyright (C) 2007 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. - */ - package com.android.camera; +import android.app.Activity; +import android.content.Context; import android.content.SharedPreferences; -import android.content.SharedPreferences.OnSharedPreferenceChangeListener; -import android.content.res.Resources; import android.hardware.Camera.Parameters; import android.hardware.Camera.Size; -import android.os.Bundle; import android.os.SystemProperties; import android.preference.ListPreference; import android.preference.Preference; -import android.preference.PreferenceActivity; import android.preference.PreferenceGroup; +import android.preference.PreferenceManager; +import android.preference.PreferenceScreen; import java.util.ArrayList; import java.util.List; -/** - * CameraSettings - */ -public class CameraSettings extends PreferenceActivity implements - OnSharedPreferenceChangeListener { +public class CameraSettings { + private static final int FIRST_REQUEST_CODE = 100; + private static final int NOT_FOUND = -1; + + public static final String KEY_VERSION = "pref_version_key"; + public static final String KEY_RECORD_LOCATION = + "pref_camera_recordlocation_key"; public static final String KEY_VIDEO_QUALITY = "pref_camera_videoquality_key"; public static final String KEY_VIDEO_DURATION = "pref_camera_video_duration_key"; - public static final String KEY_VERSION = "pref_version_key"; - public static final int CURRENT_VERSION = 1; public static final String KEY_PICTURE_SIZE = "pref_camera_picturesize_key"; public static final String KEY_JPEG_QUALITY = "pref_camera_jpegquality_key"; public static final String KEY_FOCUS_MODE = "pref_camera_focusmode_key"; public static final String KEY_FLASH_MODE = "pref_camera_flashmode_key"; + public static final String KEY_COLOR_EFFECT = "pref_camera_coloreffect_key"; public static final String KEY_WHITE_BALANCE = "pref_camera_whitebalance_key"; - public static final String KEY_COLOR_EFFECT = "pref_camera_coloreffect_key"; public static final String KEY_SCENE_MODE = "pref_camera_scenemode_key"; - - public static final boolean DEFAULT_VIDEO_QUALITY_VALUE = true; - - // MMS video length - public static final int DEFAULT_VIDEO_DURATION_VALUE = -1; + public static final int CURRENT_VERSION = 1; // max mms video duration in seconds. public static final int MMS_VIDEO_DURATION = SystemProperties.getInt("ro.media.enc.lprof.duration", 60); - private ListPreference mVideoQuality; - private ListPreference mVideoDuration; - private ListPreference mPictureSize; - private ListPreference mJpegQuality; - private ListPreference mFocusMode; - private ListPreference mWhiteBalance; - private ListPreference mColorEffect; - private ListPreference mSceneMode; - private Parameters mParameters; - - @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - addPreferencesFromResource(R.xml.camera_preferences); - - initUI(); - } - - @Override - protected void onResume() { - super.onResume(); - - updateVideoQualitySummary(); - updateVideoDurationSummary(); - updatePictureSizeSummary(); - updateJpegQualitySummary(); - updateFocusModeSummary(); - updateWhiteBalanceSummary(); - updateEffectSummary(); - updateSceneModeSummary(); - } + public static final boolean DEFAULT_VIDEO_QUALITY_VALUE = true; - private ArrayList<String> sizeToStr(List<Size> sizes) { - if (sizes == null) return null; + // MMS video length + public static final int DEFAULT_VIDEO_DURATION_VALUE = -1; - ArrayList<String> sizesInString = new ArrayList<String>(); - for (Size size : sizes) { - sizesInString.add("" + size.width + "x" + size.height); + private static final String TAG = "CameraSettings"; + + private final Context mContext; + private final Parameters mParameters; + private final PreferenceManager mManager; + + public CameraSettings(Activity activity, Parameters parameters) { + mContext = activity; + mParameters = parameters; + mManager = new PreferenceManager(activity, FIRST_REQUEST_CODE); + } + + public PreferenceScreen getPreferenceScreen(int preferenceRes) { + PreferenceScreen screen = mManager.createPreferenceScreen(mContext); + mManager.inflateFromResource(mContext, preferenceRes, screen); + initPreference(screen); + return screen; + } + + private void initPreference(PreferenceScreen screen) { + ListPreference videoDuration = + (ListPreference) screen.findPreference(KEY_VIDEO_DURATION); + ListPreference pictureSize = + (ListPreference) screen.findPreference(KEY_PICTURE_SIZE); + ListPreference whiteBalance = + (ListPreference) screen.findPreference(KEY_WHITE_BALANCE); + ListPreference colorEffect = + (ListPreference) screen.findPreference(KEY_COLOR_EFFECT); + ListPreference sceneMode = + (ListPreference) screen.findPreference(KEY_SCENE_MODE); + + // Since the screen could be loaded from different resources, we need + // to check if the preference is available here + if (videoDuration != null) { + // Modify video duration settings. + // The first entry is for MMS video duration, and we need to fill + // in the device-dependent value (in seconds). + CharSequence[] entries = videoDuration.getEntries(); + entries[0] = String.format( + entries[0].toString(), MMS_VIDEO_DURATION); } - return sizesInString; - } - private void initUI() { - mVideoQuality = (ListPreference) findPreference(KEY_VIDEO_QUALITY); - mVideoDuration = (ListPreference) findPreference(KEY_VIDEO_DURATION); - mPictureSize = (ListPreference) findPreference(KEY_PICTURE_SIZE); - mJpegQuality = (ListPreference) findPreference(KEY_JPEG_QUALITY); - mFocusMode = (ListPreference) findPreference(KEY_FOCUS_MODE); - mWhiteBalance = (ListPreference) findPreference(KEY_WHITE_BALANCE); - mColorEffect = (ListPreference) findPreference(KEY_COLOR_EFFECT); - mSceneMode = (ListPreference) findPreference(KEY_SCENE_MODE); - - SharedPreferences pref = getPreferenceScreen().getSharedPreferences(); - upgradePreferences(pref); - pref.registerOnSharedPreferenceChangeListener(this); - - // Get parameters. - android.hardware.Camera device; - try { - device = CameraHolder.instance().open(); - } catch (CameraHardwareException e) { - Resources ress = getResources(); - Util.showFatalErrorAndFinish(this, - ress.getString(R.string.camera_error_title), - ress.getString(R.string.cannot_connect_camera)); - return; + // Filter out unsupported settings / options + if (pictureSize != null) { + filterUnsupportedOptions(screen, pictureSize, sizeListToStringList( + mParameters.getSupportedPictureSizes())); } - mParameters = device.getParameters(); - CameraHolder.instance().release(); - - // Create picture size settings. - List<Size> pictureSizes = mParameters.getSupportedPictureSizes(); - ArrayList<String> pictureSizesInString = sizeToStr(pictureSizes); - createSettings(mPictureSize, pictureSizesInString); - - // Create white balance settings. - createSettings(mWhiteBalance, mParameters.getSupportedWhiteBalance()); - - // Create color effect settings. - createSettings(mColorEffect, mParameters.getSupportedColorEffects()); - - // Create scene mode settings. - createSettings(mSceneMode, mParameters.getSupportedSceneModes()); - - // Modify video duration settings. - // The first entry is for MMS video duration, and we need to fill in the - // device-dependent value (in seconds). - CharSequence[] entries = mVideoDuration.getEntries(); - entries[0] = String.format(entries[0].toString(), MMS_VIDEO_DURATION); - - // Set default JPEG quality value if it is empty. - if (mJpegQuality.getValue() == null) { - mJpegQuality.setValue(getString( - R.string.pref_camera_jpegquality_default)); + if (whiteBalance != null) { + filterUnsupportedOptions(screen, + whiteBalance, mParameters.getSupportedWhiteBalance()); } - - // Set default focus mode value if it is empty. - if (mFocusMode.getValue() == null) { - mFocusMode.setValue(getString( - R.string.pref_camera_focusmode_default)); + if (colorEffect != null) { + filterUnsupportedOptions(screen, + colorEffect, mParameters.getSupportedColorEffects()); + } + if (sceneMode != null) { + filterUnsupportedOptions(screen, + sceneMode, mParameters.getSupportedSceneModes()); } - getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } private boolean removePreference(PreferenceGroup group, Preference remove) { @@ -178,11 +120,12 @@ public class CameraSettings extends PreferenceActivity implements return false; } - private void createSettings( - ListPreference pref, List<String> supportedParam) { + private void filterUnsupportedOptions(PreferenceScreen screen, + ListPreference pref, List<String> supported) { + // Remove the preference if the parameter is not supported. - if (supportedParam == null) { - removePreference(getPreferenceScreen(), pref); + if (supported == null) { + removePreference(screen, pref); return; } @@ -192,8 +135,7 @@ public class CameraSettings extends PreferenceActivity implements ArrayList<CharSequence> entries = new ArrayList<CharSequence>(); ArrayList<CharSequence> entryValues = new ArrayList<CharSequence>(); for (int i = 0, len = allEntryValues.length; i < len; i++) { - int found = supportedParam.indexOf(allEntryValues[i]); - if (found != -1) { + if (supported.indexOf(allEntryValues[i].toString()) != NOT_FOUND) { entries.add(allEntries[i]); entryValues.add(allEntryValues[i]); } @@ -206,63 +148,17 @@ public class CameraSettings extends PreferenceActivity implements // Set the value to the first entry if it is invalid. String value = pref.getValue(); - int index = pref.findIndexOfValue(value); - if (index == -1) { + if (pref.findIndexOfValue(value) == NOT_FOUND) { pref.setValueIndex(0); } } - private void updateVideoQualitySummary() { - mVideoQuality.setSummary(mVideoQuality.getEntry()); - } - - private void updateVideoDurationSummary() { - mVideoDuration.setSummary(mVideoDuration.getEntry()); - } - - private void updatePictureSizeSummary() { - mPictureSize.setSummary(mPictureSize.getEntry()); - } - - private void updateJpegQualitySummary() { - mJpegQuality.setSummary(mJpegQuality.getEntry()); - } - - private void updateWhiteBalanceSummary() { - mWhiteBalance.setSummary(mWhiteBalance.getEntry()); - } - - private void updateSceneModeSummary() { - mSceneMode.setSummary(mSceneMode.getEntry()); - } - - private void updateFocusModeSummary() { - mFocusMode.setSummary(mFocusMode.getEntry()); - } - - private void updateEffectSummary() { - mColorEffect.setSummary(mColorEffect.getEntry()); - } - - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, - String key) { - if (key.equals(KEY_VIDEO_QUALITY)) { - updateVideoQualitySummary(); - } else if (key.equals(KEY_VIDEO_DURATION)) { - updateVideoDurationSummary(); - } else if (key.equals(KEY_PICTURE_SIZE)) { - updatePictureSizeSummary(); - } else if (key.equals(KEY_JPEG_QUALITY)) { - updateJpegQualitySummary(); - } else if (key.equals(KEY_FOCUS_MODE)) { - updateFocusModeSummary(); - } else if (key.equals(KEY_WHITE_BALANCE)) { - updateWhiteBalanceSummary(); - } else if (key.equals(KEY_COLOR_EFFECT)) { - updateEffectSummary(); - } else if (key.equals(KEY_SCENE_MODE)) { - updateSceneModeSummary(); + private static List<String> sizeListToStringList(List<Size> sizes) { + ArrayList<String> list = new ArrayList<String>(); + for (Size size : sizes) { + list.add(String.format("%dx%d", size.width, size.height)); } + return list; } public static void upgradePreferences(SharedPreferences pref) { |