CameraSettings.java revision 82ded2070a47fff16e1de1c78b516eb25888b91e
1/* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.camera; 18 19import android.content.SharedPreferences; 20import android.content.SharedPreferences.OnSharedPreferenceChangeListener; 21import android.hardware.Camera.Parameters; 22import android.os.Bundle; 23import android.preference.ListPreference; 24import android.preference.PreferenceActivity; 25 26import java.util.ArrayList; 27import java.util.StringTokenizer; 28 29/** 30 * CameraSettings 31 */ 32public class CameraSettings extends PreferenceActivity implements 33 OnSharedPreferenceChangeListener { 34 public static final String KEY_VIDEO_QUALITY = 35 "pref_camera_videoquality_key"; 36 public static final String KEY_VIDEO_DURATION = 37 "pref_camera_video_duration_key"; 38 public static final String KEY_WHITE_BALANCE = 39 "pref_camera_whitebalance_key"; 40 public static final String KEY_EFFECT = "pref_camera_effect_key"; 41 public static final String KEY_BRIGHTNESS = "pref_camera_brightness_key"; 42 public static final String KEY_PICTURE_SIZE = "pref_camera_picturesize_key"; 43 public static final String KEY_JPEG_QUALITY = "pref_camera_jpegquality_key"; 44 public static final String KEY_FOCUS_MODE = "pref_camera_focusmode_key"; 45 public static final String KEY_ISO = "pref_camera_iso_key"; 46 public static final boolean DEFAULT_VIDEO_QUALITY_VALUE = true; 47 public static final int DEFAULT_VIDEO_DURATION_VALUE = 1; // 1 minute 48 49 private ListPreference mVideoQuality; 50 private ListPreference mVideoDuration; 51 private ListPreference mWhiteBalance; 52 private ListPreference mEffect; 53 private ListPreference mBrightness; 54 private ListPreference mPictureSize; 55 private ListPreference mJpegQuality; 56 private ListPreference mFocusMode; 57 private ListPreference mIso; 58 private Parameters mParameters; 59 60 @Override 61 public void onCreate(Bundle icicle) { 62 super.onCreate(icicle); 63 addPreferencesFromResource(R.xml.camera_preferences); 64 65 initUI(); 66 } 67 68 @Override 69 protected void onResume() { 70 super.onResume(); 71 72 updateVideoQualitySummary(); 73 updateVideoDurationSummary(); 74 updateWhiteBalanceSummary(); 75 updateEffectSummary(); 76 updateBrightnessSummary(); 77 updatePictureSizeSummary(); 78 updateJpegQualitySummary(); 79 updateFocusModeSummary(); 80 updateIsoSummary(); 81 } 82 83 private void initUI() { 84 mVideoQuality = (ListPreference) findPreference(KEY_VIDEO_QUALITY); 85 mVideoDuration = (ListPreference) findPreference(KEY_VIDEO_DURATION); 86 mWhiteBalance = (ListPreference) findPreference(KEY_WHITE_BALANCE); 87 mEffect = (ListPreference) findPreference(KEY_EFFECT); 88 mBrightness = (ListPreference) findPreference(KEY_BRIGHTNESS); 89 90 mPictureSize = (ListPreference) findPreference(KEY_PICTURE_SIZE); 91 mJpegQuality = (ListPreference) findPreference(KEY_JPEG_QUALITY); 92 mFocusMode = (ListPreference) findPreference(KEY_FOCUS_MODE); 93 mIso = (ListPreference) findPreference(KEY_ISO); 94 getPreferenceScreen().getSharedPreferences(). 95 registerOnSharedPreferenceChangeListener(this); 96 97 // Get parameters. 98 android.hardware.Camera device = android.hardware.Camera.open(); 99 mParameters = device.getParameters(); 100 device.release(); 101 102 // Create white balance settings. 103 createSettings(mWhiteBalance, Camera.SUPPORTED_WHITE_BALANCE, 104 R.array.pref_camera_whitebalance_entries, 105 R.array.pref_camera_whitebalance_entryvalues); 106 107 // Create effect settings. 108 createSettings(mEffect, Camera.SUPPORTED_EFFECT, 109 R.array.pref_camera_effect_entries, 110 R.array.pref_camera_effect_entryvalues); 111 112 // Create brightness settings. 113 createSettings(mBrightness, Camera.SUPPORTED_BRIGHTNESS, 114 R.array.pref_camera_brightness_entries, 115 R.array.pref_camera_brightness_entryvalues); 116 117 // Create picture size settings. 118 createSettings(mPictureSize, Camera.SUPPORTED_PICTURE_SIZE, 119 R.array.pref_camera_picturesize_entries, 120 R.array.pref_camera_picturesize_entryvalues); 121 122 // Create iso settings. 123 createSettings(mIso, Camera.SUPPORTED_ISO, 124 R.array.pref_camera_iso_entries, 125 R.array.pref_camera_iso_entryvalues); 126 127 // Set default JPEG quality value if it is empty. 128 if (mJpegQuality.getValue() == null) { 129 mJpegQuality.setValue(getString( 130 R.string.pref_camera_jpegquality_default)); 131 } 132 133 // Set default focus mode value if it is empty. 134 if (mFocusMode.getValue() == null) { 135 mFocusMode.setValue(getString( 136 R.string.pref_camera_focusmode_default)); 137 } 138 } 139 140 private void createSettings( 141 ListPreference pref, String paramName, int prefEntriesResId, 142 int prefEntryValuesResId) { 143 // Disable the preference if the parameter is not supported. 144 String supportedParamStr = mParameters.get(paramName); 145 if (supportedParamStr == null) { 146 pref.setEnabled(false); 147 return; 148 } 149 150 // Get the supported parameter settings. 151 StringTokenizer tokenizer = new StringTokenizer(supportedParamStr, ","); 152 ArrayList<CharSequence> supportedParam = new ArrayList<CharSequence>(); 153 while (tokenizer.hasMoreElements()) { 154 supportedParam.add(tokenizer.nextToken()); 155 } 156 157 // Prepare setting entries and entry values. 158 String[] allEntries = getResources().getStringArray(prefEntriesResId); 159 String[] allEntryValues = getResources().getStringArray( 160 prefEntryValuesResId); 161 ArrayList<CharSequence> entries = new ArrayList<CharSequence>(); 162 ArrayList<CharSequence> entryValues = new ArrayList<CharSequence>(); 163 for (int i = 0, len = allEntryValues.length; i < len; i++) { 164 int found = supportedParam.indexOf(allEntryValues[i]); 165 if (found != -1) { 166 entries.add(allEntries[i]); 167 entryValues.add(allEntryValues[i]); 168 } 169 } 170 171 // Set entries and entry values to list preference. 172 pref.setEntries(entries.toArray(new CharSequence[entries.size()])); 173 pref.setEntryValues(entryValues.toArray( 174 new CharSequence[entryValues.size()])); 175 176 // Set the value to the first entry if it is invalid. 177 String value = pref.getValue(); 178 int index = pref.findIndexOfValue(value); 179 if (index == -1) { 180 pref.setValueIndex(0); 181 } 182 } 183 184 private void updateVideoQualitySummary() { 185 mVideoQuality.setSummary(mVideoQuality.getEntry()); 186 } 187 188 private void updateVideoDurationSummary() { 189 mVideoDuration.setSummary(mVideoDuration.getEntry()); 190 } 191 192 private void updateWhiteBalanceSummary() { 193 mWhiteBalance.setSummary(mWhiteBalance.getEntry()); 194 } 195 196 private void updateEffectSummary() { 197 mEffect.setSummary(mEffect.getEntry()); 198 } 199 200 private void updateBrightnessSummary() { 201 mBrightness.setSummary(mBrightness.getEntry()); 202 } 203 204 private void updatePictureSizeSummary() { 205 mPictureSize.setSummary(mPictureSize.getEntry()); 206 } 207 208 private void updateJpegQualitySummary() { 209 mJpegQuality.setSummary(mJpegQuality.getEntry()); 210 } 211 212 private void updateFocusModeSummary() { 213 mFocusMode.setSummary(mFocusMode.getEntry()); 214 } 215 216 private void updateIsoSummary() { 217 mIso.setSummary(mIso.getEntry()); 218 } 219 220 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 221 String key) { 222 if (key.equals(KEY_VIDEO_QUALITY)) { 223 updateVideoQualitySummary(); 224 } else if (key.equals(KEY_VIDEO_DURATION)) { 225 updateVideoDurationSummary(); 226 } else if (key.equals(KEY_WHITE_BALANCE)) { 227 updateWhiteBalanceSummary(); 228 } else if (key.equals(KEY_EFFECT)) { 229 updateEffectSummary(); 230 } else if (key.equals(KEY_PICTURE_SIZE)) { 231 updatePictureSizeSummary(); 232 } else if (key.equals(KEY_JPEG_QUALITY)) { 233 updateJpegQualitySummary(); 234 } else if (key.equals(KEY_FOCUS_MODE)) { 235 updateFocusModeSummary(); 236 } else if (key.equals(KEY_BRIGHTNESS)) { 237 updateBrightnessSummary(); 238 } else if (key.equals(KEY_ISO)) { 239 updateIsoSummary(); 240 } 241 } 242} 243