diff options
author | Owen Lin <owenlin@google.com> | 2009-09-10 14:43:42 +0800 |
---|---|---|
committer | Owen Lin <owenlin@google.com> | 2009-09-11 22:59:27 +0800 |
commit | 50c60047bf55be485fbcfa69bd0ff84e542f212a (patch) | |
tree | c76eab42bb128926adf947c7bf6d7f21f7987fb0 /src/com/android/camera | |
parent | 10fb5c8502759eb653b78e9a4c571b23a443ae0b (diff) | |
download | LegacyCamera-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.java | 4 | ||||
-rw-r--r-- | src/com/android/camera/CameraSettingsHelper.java | 71 | ||||
-rw-r--r-- | src/com/android/camera/VideoCamera.java | 112 |
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(); + } } // |