| /* |
| * 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.content.SharedPreferences; |
| import android.content.SharedPreferences.OnSharedPreferenceChangeListener; |
| import android.hardware.Camera.Parameters; |
| import android.os.Bundle; |
| import android.preference.ListPreference; |
| import android.preference.Preference; |
| import android.preference.PreferenceActivity; |
| import android.preference.PreferenceGroup; |
| |
| import java.util.ArrayList; |
| import java.util.StringTokenizer; |
| |
| /** |
| * CameraSettings |
| */ |
| public class CameraSettings extends PreferenceActivity implements |
| OnSharedPreferenceChangeListener { |
| 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_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 boolean DEFAULT_VIDEO_QUALITY_VALUE = true; |
| public static final int DEFAULT_VIDEO_DURATION_VALUE = 1; // 1 minute |
| |
| private ListPreference mVideoQuality; |
| private ListPreference mVideoDuration; |
| private ListPreference mPictureSize; |
| private ListPreference mJpegQuality; |
| private ListPreference mFocusMode; |
| private ListPreference mFlashMode; |
| 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(); |
| updateFlashModeSummary(); |
| } |
| |
| 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); |
| mFlashMode = (ListPreference) findPreference(KEY_FLASH_MODE); |
| getPreferenceScreen().getSharedPreferences(). |
| registerOnSharedPreferenceChangeListener(this); |
| |
| // Get parameters. |
| android.hardware.Camera device = CameraHolder.instance().open(); |
| mParameters = device.getParameters(); |
| CameraHolder.instance().release(); |
| |
| // Create picture size settings. |
| createSettings(mPictureSize, Camera.SUPPORTED_PICTURE_SIZE); |
| |
| // Set default JPEG quality value if it is empty. |
| if (mJpegQuality.getValue() == null) { |
| mJpegQuality.setValue(getString( |
| R.string.pref_camera_jpegquality_default)); |
| } |
| |
| // Set default focus mode value if it is empty. |
| if (mFocusMode.getValue() == null) { |
| mFocusMode.setValue(getString( |
| R.string.pref_camera_focusmode_default)); |
| } |
| |
| // Create flash mode settings. |
| createSettings(mFlashMode, Camera.SUPPORTED_FLASH_MODE); |
| } |
| |
| private boolean removePreference(PreferenceGroup group, Preference remove) { |
| if (group.removePreference(remove)) return true; |
| |
| for (int i = 0; i < group.getPreferenceCount(); i++) { |
| final Preference child = group.getPreference(i); |
| if (child instanceof PreferenceGroup) { |
| if (removePreference((PreferenceGroup)child, remove)) { |
| return true; |
| } |
| } |
| } |
| return false; |
| } |
| |
| private void createSettings(ListPreference pref, String paramName) { |
| // Remove the preference if the parameter is not supported. |
| String supportedParamStr = mParameters.get(paramName); |
| if (supportedParamStr == null) { |
| removePreference(getPreferenceScreen(), pref); |
| return; |
| } |
| |
| // Get the supported parameter settings. |
| StringTokenizer tokenizer = new StringTokenizer(supportedParamStr, ","); |
| ArrayList<CharSequence> supportedParam = new ArrayList<CharSequence>(); |
| while (tokenizer.hasMoreElements()) { |
| supportedParam.add(tokenizer.nextToken()); |
| } |
| |
| // Prepare setting entries and entry values. |
| CharSequence[] allEntries = pref.getEntries(); |
| CharSequence[] allEntryValues = pref.getEntryValues(); |
| 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) { |
| entries.add(allEntries[i]); |
| entryValues.add(allEntryValues[i]); |
| } |
| } |
| |
| // Set entries and entry values to list preference. |
| pref.setEntries(entries.toArray(new CharSequence[entries.size()])); |
| pref.setEntryValues(entryValues.toArray( |
| new CharSequence[entryValues.size()])); |
| |
| // Set the value to the first entry if it is invalid. |
| String value = pref.getValue(); |
| int index = pref.findIndexOfValue(value); |
| if (index == -1) { |
| 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 updateFocusModeSummary() { |
| mFocusMode.setSummary(mFocusMode.getEntry()); |
| } |
| |
| private void updateFlashModeSummary() { |
| mFlashMode.setSummary(mFlashMode.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_FLASH_MODE)) { |
| updateFlashModeSummary(); |
| } |
| } |
| } |