summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera
diff options
context:
space:
mode:
authorOwen Lin <owenlin@google.com>2009-09-10 14:43:42 +0800
committerOwen Lin <owenlin@google.com>2009-09-11 22:59:27 +0800
commit50c60047bf55be485fbcfa69bd0ff84e542f212a (patch)
treec76eab42bb128926adf947c7bf6d7f21f7987fb0 /src/com/android/camera
parent10fb5c8502759eb653b78e9a4c571b23a443ae0b (diff)
downloadLegacyCamera-50c60047bf55be485fbcfa69bd0ff84e542f212a.zip
LegacyCamera-50c60047bf55be485fbcfa69bd0ff84e542f212a.tar.gz
LegacyCamera-50c60047bf55be485fbcfa69bd0ff84e542f212a.tar.bz2
Enable the on-screen settings in Camcorder and also use different settings
in Camera and Camcorder. Change-Id: I2444a2c8f7a040b2b5fc449df0fc988fba1b7aaf
Diffstat (limited to 'src/com/android/camera')
-rw-r--r--src/com/android/camera/Camera.java4
-rw-r--r--src/com/android/camera/CameraSettingsHelper.java71
-rw-r--r--src/com/android/camera/VideoCamera.java112
3 files changed, 119 insertions, 68 deletions
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 65f42fb..c6c8395 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -1765,8 +1765,8 @@ public class Camera extends Activity implements View.OnClickListener,
findViewById(R.id.camera_preview));
CameraSettingsHelper helper =
new CameraSettingsHelper(Camera.this, mParameters);
- PreferenceScreen screen = helper.getPreferenceScreen();
- mSettings.setPreferenceScreen(screen);
+ mSettings.setPreferenceScreen(helper
+ .getPreferenceScreen(R.xml.camera_preferences));
}
mSettings.setVisible(true);
return true;
diff --git a/src/com/android/camera/CameraSettingsHelper.java b/src/com/android/camera/CameraSettingsHelper.java
index d7135d7..fb83765 100644
--- a/src/com/android/camera/CameraSettingsHelper.java
+++ b/src/com/android/camera/CameraSettingsHelper.java
@@ -43,33 +43,24 @@ public class CameraSettingsHelper {
private static final int DEFAULT_VIDEO_DURATION_VALUE = -1;
private static final String TAG = "CameraSettingsHelper";
-
private final Context mContext;
private final Parameters mParameters;
- private final PreferenceScreen mScreen;
+ private final PreferenceManager mManager;
public CameraSettingsHelper(Activity activity, Parameters parameters) {
mContext = activity;
mParameters = parameters;
- PreferenceManager manager =
- new PreferenceManager(activity, FIRST_REQUEST_CODE);
- mScreen = manager.createPreferenceScreen(activity);
- manager.inflateFromResource(
- activity, R.xml.camera_preferences, mScreen);
- initPreference(mScreen);
- }
-
- public PreferenceScreen getPreferenceScreen() {
- return mScreen;
+ mManager = new PreferenceManager(activity, FIRST_REQUEST_CODE);
}
- private void setDefaultIfNull(String key, int strRes) {
- ListPreference pref = (ListPreference) mScreen.findPreference(key);
- if (pref.getValue() == null) pref.setValue(mContext.getString(strRes));
+ 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 =
@@ -79,28 +70,36 @@ public class CameraSettingsHelper {
ListPreference colorEffect =
(ListPreference) screen.findPreference(KEY_COLOR_EFFECT);
ListPreference sceneMode =
- (ListPreference) screen.findPreference(KEY_SCENE_MODE);
-
- // 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);
+ (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);
+ }
// Filter out unsupported settings / options
- filterUnsupportedOptions(screen, pictureSize,
- sizeListToStringList(mParameters.getSupportedPictureSizes()));
- filterUnsupportedOptions(screen,
- whiteBalance, mParameters.getSupportedWhiteBalance());
- filterUnsupportedOptions(screen,
- colorEffect, mParameters.getSupportedColorEffects());
- filterUnsupportedOptions(screen,
- sceneMode, mParameters.getSupportedSceneModes());
-
- setDefaultIfNull(
- KEY_JPEG_QUALITY, R.string.pref_camera_jpegquality_default);
- setDefaultIfNull(
- KEY_FOCUS_MODE, R.string.pref_camera_focusmode_default);
+ if (pictureSize != null) {
+ filterUnsupportedOptions(screen, pictureSize, sizeListToStringList(
+ mParameters.getSupportedPictureSizes()));
+ }
+ if (whiteBalance != null) {
+ filterUnsupportedOptions(screen,
+ whiteBalance, mParameters.getSupportedWhiteBalance());
+ }
+ if (colorEffect != null) {
+ filterUnsupportedOptions(screen,
+ colorEffect, mParameters.getSupportedColorEffects());
+ }
+ if (sceneMode != null) {
+ filterUnsupportedOptions(screen,
+ sceneMode, mParameters.getSupportedSceneModes());
+ }
}
private boolean removePreference(PreferenceGroup group, Preference remove) {
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index 93cad4a..ca717f4 100644
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -25,9 +25,11 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
+import android.hardware.Camera.Parameters;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
@@ -75,7 +77,7 @@ import java.util.HashMap;
public class VideoCamera extends Activity implements View.OnClickListener,
ShutterButton.OnShutterButtonListener, SurfaceHolder.Callback,
MediaRecorder.OnErrorListener, MediaRecorder.OnInfoListener,
- Switcher.OnSwitchListener {
+ Switcher.OnSwitchListener, OnSharedPreferenceChangeListener {
private static final String TAG = "videocamera";
@@ -144,6 +146,8 @@ public class VideoCamera extends Activity implements View.OnClickListener,
private ArrayList<MenuItem> mGalleryItems = new ArrayList<MenuItem>();
private final Handler mHandler = new MainHandler();
+ private Parameters mParameters;
+ private OnScreenSettings mSettings;
// This Handler is used to post message back onto the main thread of the
// application
@@ -217,7 +221,9 @@ public class VideoCamera extends Activity implements View.OnClickListener,
mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
CameraSettings.upgradePreferences(mPreferences);
- readVideoSizePreference();
+
+ mPreferences.registerOnSharedPreferenceChangeListener(this);
+ readVideoPreferences();
/*
* To reduce startup time, we start the preview in another thread.
@@ -447,10 +453,10 @@ public class VideoCamera extends Activity implements View.OnClickListener,
: STORAGE_STATUS_OK;
}
- private void readVideoSizePreference() {
+ private void readVideoPreferences() {
boolean videoQualityHigh =
getBooleanPreference(CameraSettings.KEY_VIDEO_QUALITY,
- CameraSettings.DEFAULT_VIDEO_QUALITY_VALUE);
+ CameraSettings.DEFAULT_VIDEO_QUALITY_VALUE);
// Set video quality.
Intent intent = getIntent();
@@ -498,7 +504,7 @@ public class VideoCamera extends Activity implements View.OnClickListener,
super.onResume();
mPausing = false;
- readVideoSizePreference();
+ readVideoPreferences();
if (!mPreviewing && !mStartPreviewFail) {
try {
startPreview();
@@ -533,13 +539,6 @@ public class VideoCamera extends Activity implements View.OnClickListener,
}
}
- private void setCameraParameters() {
- android.hardware.Camera.Parameters param;
- param = mCameraDevice.getParameters();
- param.setPreviewSize(mProfile.mVideoWidth, mProfile.mVideoHeight);
- mCameraDevice.setParameters(param);
- }
-
private void setPreviewDisplay(SurfaceHolder holder) {
try {
mCameraDevice.setPreviewDisplay(holder);
@@ -562,8 +561,8 @@ public class VideoCamera extends Activity implements View.OnClickListener,
mCameraDevice = CameraHolder.instance().open();
}
+ mCameraDevice.lock();
setCameraParameters();
-
setPreviewDisplay(mSurfaceHolder);
try {
@@ -607,6 +606,10 @@ public class VideoCamera extends Activity implements View.OnClickListener,
mPausing = true;
+ if (mSettings != null && mSettings.isVisible()) {
+ mSettings.setVisible(false);
+ }
+
// This is similar to what mShutterButton.performClick() does,
// but not quite the same.
if (mMediaRecorderRecording) {
@@ -921,6 +924,7 @@ public class VideoCamera extends Activity implements View.OnClickListener,
mMediaRecorder.reset();
mMediaRecorder.release();
mMediaRecorder = null;
+ mRecorderInitialized = false;
}
}
@@ -1011,23 +1015,23 @@ public class VideoCamera extends Activity implements View.OnClickListener,
mGalleryItems.add(gallery);
MenuItem item = menu.add(Menu.NONE, Menu.NONE,
- MenuHelper.POSITION_CAMERA_SETTING,
- R.string.settings)
- .setOnMenuItemClickListener(
- new OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
- // Keep the camera instance for a while.
- // This avoids re-opening the camera and saves
- // time.
- CameraHolder.instance().keep();
-
- Intent intent = new Intent();
- intent.setClass(VideoCamera.this,
- CameraSettings.class);
- startActivity(intent);
- return true;
- }
- });
+ MenuHelper.POSITION_CAMERA_SETTING, R.string.settings)
+ .setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ public boolean onMenuItemClick(MenuItem item) {
+ if (mSettings == null) {
+ mSettings = new OnScreenSettings(
+ findViewById(R.id.camera_preview));
+ if (mParameters == null) {
+ mParameters = mCameraDevice.getParameters();
+ }
+ CameraSettingsHelper helper = new CameraSettingsHelper(
+ VideoCamera.this, mParameters);
+ mSettings.setPreferenceScreen(helper
+ .getPreferenceScreen(R.xml.video_preferences));
+ }
+ mSettings.setVisible(true);
+ return true;
+ }});
item.setIcon(android.R.drawable.ic_menu_preferences);
}
@@ -1341,6 +1345,29 @@ public class VideoCamera extends Activity implements View.OnClickListener,
mHandler.sendEmptyMessageDelayed(UPDATE_RECORD_TIME, 1000);
}
+ private void setCameraParameters() {
+ mParameters = mCameraDevice.getParameters();
+
+ mParameters.setPreviewSize(mProfile.mVideoWidth, mProfile.mVideoHeight);
+
+ // Set white balance parameter.
+ if (mParameters.getSupportedWhiteBalance() != null) {
+ String whiteBalance = mPreferences.getString(
+ CameraSettings.KEY_WHITE_BALANCE,
+ getString(R.string.pref_camera_whitebalance_default));
+ mParameters.setWhiteBalance(whiteBalance);
+ }
+
+ // Set color effect parameter.
+ if (mParameters.getSupportedColorEffects() != null) {
+ String colorEffect = mPreferences.getString(
+ CameraSettings.KEY_COLOR_EFFECT,
+ getString(R.string.pref_camera_coloreffect_default));
+ mParameters.setColorEffect(colorEffect);
+ }
+ mCameraDevice.setParameters(mParameters);
+ }
+
public boolean onSwitchChanged(Switcher source, boolean onOff) {
if (onOff == SWITCH_CAMERA) {
MenuHelper.gotoCameraMode(this);
@@ -1348,6 +1375,31 @@ public class VideoCamera extends Activity implements View.OnClickListener,
}
return true;
}
+
+ public void onSharedPreferenceChanged(
+ SharedPreferences preferences, String key) {
+ // ignore the events after "onPause()" or preview has not started yet
+ if (mPausing) return;
+
+ if (CameraSettings.KEY_VIDEO_DURATION.equals(key)
+ || CameraSettings.KEY_VIDEO_QUALITY.equals(key)) {
+ readVideoPreferences();
+ }
+
+ // If mCameraDevice is not ready then we can set the parameter in
+ // startPreview().
+ if (mCameraDevice == null) return;
+
+ // we need lock the camera device before writing parameters
+ releaseMediaRecorder();
+ if (mCameraDevice.lock() == 0) {
+ setCameraParameters();
+ mCameraDevice.unlock();
+ } else {
+ Log.e(TAG, "unable to lock camera to set parameters");
+ }
+ initializeRecorder();
+ }
}
//