summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorWu-cheng Li <wuchengli@google.com>2009-06-06 16:53:44 +0800
committerWu-cheng Li <wuchengli@google.com>2009-06-08 16:37:40 +0800
commit95fc5b2c5b14bb81332570f6d74f75cd63ea04b5 (patch)
tree0ab39d6f90b1588481c92a6b2c0c3685347f2d79 /src/com
parente6378074f505cb459f3a945b2ab8a46b09e0906d (diff)
downloadLegacyCamera-95fc5b2c5b14bb81332570f6d74f75cd63ea04b5.zip
LegacyCamera-95fc5b2c5b14bb81332570f6d74f75cd63ea04b5.tar.gz
LegacyCamera-95fc5b2c5b14bb81332570f6d74f75cd63ea04b5.tar.bz2
Add camera zoom UI.
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/camera/Camera.java138
1 files changed, 116 insertions, 22 deletions
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index f77c622..e35cea1 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -55,6 +55,7 @@ import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.MotionEvent;
import android.view.OrientationEventListener;
import android.view.SurfaceHolder;
import android.view.View;
@@ -66,6 +67,7 @@ import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.widget.Toast;
+import android.widget.ZoomButtonsController;
import java.io.File;
import java.io.FileNotFoundException;
@@ -73,6 +75,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
+import java.util.StringTokenizer;
/**
* Activity of the Camera which used to see preview and take pictures.
@@ -107,8 +110,11 @@ public class Camera extends Activity implements View.OnClickListener,
public static final int MENU_SAVE_CAMERA_VIDEO_DONE = 37;
private android.hardware.Camera.Parameters mParameters;
+ private int mZoomIndex = 0; // The index of the current zoom value.
+ private String[] mZoomValues; // All possible zoom values.
// The parameter strings to communicate with camera driver.
+ public static final String PARM_ZOOM = "zoom";
public static final String PARM_WHITE_BALANCE = "whitebalance";
public static final String PARM_EFFECT = "effect";
public static final String PARM_BRIGHTNESS = "exposure-offset";
@@ -120,6 +126,7 @@ public class Camera extends Activity implements View.OnClickListener,
public static final String PARM_GPS_LONGITUDE = "gps-longitude";
public static final String PARM_GPS_ALTITUDE = "gps-altitude";
public static final String PARM_GPS_TIMESTAMP = "gps-timestamp";
+ public static final String SUPPORTED_ZOOM = "zoom-values";
public static final String SUPPORTED_WHITE_BALANCE = "whitebalance-values";
public static final String SUPPORTED_EFFECT = "effect-values";
public static final String SUPPORTED_BRIGHTNESS = "exposure-offset-values";
@@ -140,17 +147,31 @@ public class Camera extends Activity implements View.OnClickListener,
private android.hardware.Camera mCameraDevice;
private VideoPreview mSurfaceView;
private SurfaceHolder mSurfaceHolder = null;
+ private ShutterButton mShutterButton;
+ private FocusRectangle mFocusRectangle;
+ private ImageView mGpsIndicator;
+ private ToneGenerator mFocusToneGenerator;
+ private ZoomButtonsController mZoomButtons;
+
+ // mPostCaptureAlert, mLastPictureButton, mThumbController
+ // are non-null only if isImageCaptureIntent() is true.
+ private View mPostCaptureAlert;
+ private ImageView mLastPictureButton;
+ private ThumbnailController mThumbController;
private int mOriginalViewFinderWidth, mOriginalViewFinderHeight;
private int mViewFinderWidth, mViewFinderHeight;
- private boolean mPreviewing = false;
private Capturer mCaptureObject;
private ImageCapture mImageCapture = null;
- private boolean mPausing = false;
- private boolean mFirstTimeInitialized = false;
- private boolean mPendingFirstTimeInit = false;
+ private boolean mPreviewing;
+ private boolean mPausing;
+ private boolean mFirstTimeInitialized;
+ private boolean mPendingFirstTimeInit;
+ private boolean mKeepAndRestartPreview;
+ private boolean mIsImageCaptureIntent;
+ private boolean mRecordLocation;
private static final int FOCUS_NOT_STARTED = 0;
private static final int FOCUSING = 1;
@@ -166,12 +187,6 @@ public class Camera extends Activity implements View.OnClickListener,
private LocationManager mLocationManager = null;
- private ShutterButton mShutterButton;
-
- private FocusRectangle mFocusRectangle;
- private ImageView mGpsIndicator;
- private ToneGenerator mFocusToneGenerator;
-
// Use OneShotPreviewCallback to measure the time between
// JpegPictureCallback and preview.
private final OneShotPreviewCallback mOneShotPreviewCallback =
@@ -188,7 +203,6 @@ public class Camera extends Activity implements View.OnClickListener,
private long mRawPictureCallbackTime;
private long mJpegPictureCallbackTime;
private int mPicturesRemaining;
- private boolean mRecordLocation;
//Add the camera latency time
public static long mAutoFocusTime;
@@ -200,16 +214,6 @@ public class Camera extends Activity implements View.OnClickListener,
// Focus mode. Options are pref_camera_focusmode_entryvalues.
private String mFocusMode;
- private boolean mKeepAndRestartPreview;
-
- private boolean mIsImageCaptureIntent;
-
- // mPostCaptureAlert, mLastPictureButton, mThumbController
- // are non-null only if isImageCaptureIntent() is true.
- private View mPostCaptureAlert;
- private ImageView mLastPictureButton;
- private ThumbnailController mThumbController;
-
private final Handler mHandler = new MainHandler();
private interface Capturer {
@@ -326,6 +330,8 @@ public class Camera extends Activity implements View.OnClickListener,
initializeFocusTone();
+ initializeZoom();
+
mFirstTimeInitialized = true;
}
@@ -345,6 +351,70 @@ public class Camera extends Activity implements View.OnClickListener,
initializeFocusTone();
}
+ private void initializeZoom() {
+ String zoomValuesStr = mParameters.get(SUPPORTED_ZOOM);
+ if (zoomValuesStr == null) return;
+
+ mZoomValues = getZoomValues(zoomValuesStr);
+ if (mZoomValues == null) return;
+
+ mZoomButtons = new ZoomButtonsController(mSurfaceView);
+ mZoomButtons.setAutoDismissed(true);
+ mZoomButtons.setOnZoomListener(
+ new ZoomButtonsController.OnZoomListener() {
+ public void onVisibilityChanged(boolean visible) {
+ if (visible) {
+ updateZoomButtonsEnabled();
+ }
+ }
+
+ public void onZoom(boolean zoomIn) {
+ if (zoomIn) {
+ zoomIn();
+ } else {
+ zoomOut();
+ }
+ updateZoomButtonsEnabled();
+ }
+ });
+ }
+
+ private void zoomIn() {
+ if (mZoomIndex < mZoomValues.length - 1) {
+ mZoomIndex++;
+ mParameters.set(PARM_ZOOM, mZoomValues[mZoomIndex]);
+ mCameraDevice.setParameters(mParameters);
+ }
+ }
+
+ private void zoomOut() {
+ if (mZoomIndex > 0) {
+ mZoomIndex--;
+ mParameters.set(PARM_ZOOM, mZoomValues[mZoomIndex]);
+ mCameraDevice.setParameters(mParameters);
+ }
+ }
+
+ private void updateZoomButtonsEnabled() {
+ mZoomButtons.setZoomInEnabled(mZoomIndex < mZoomValues.length - 1);
+ mZoomButtons.setZoomOutEnabled(mZoomIndex > 0);
+ }
+
+ private String[] getZoomValues(String zoomValuesStr) {
+ ArrayList<String> list = new ArrayList<String>();
+ String[] zoomValues = null;
+ StringTokenizer tokenizer = new StringTokenizer(zoomValuesStr, ",");
+
+ while (tokenizer.hasMoreElements()) {
+ list.add(tokenizer.nextToken());
+ }
+ if (list.size() > 0) {
+ zoomValues = list.toArray(new String[list.size()]);
+ }
+ return zoomValues;
+ }
+
+
LocationListener [] mLocationListeners = new LocationListener[] {
new LocationListener(LocationManager.GPS_PROVIDER),
new LocationListener(LocationManager.NETWORK_PROVIDER)
@@ -767,7 +837,6 @@ public class Camera extends Activity implements View.OnClickListener,
return m;
}
- /** Called with the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -1113,6 +1182,12 @@ public class Camera extends Activity implements View.OnClickListener,
mImageCapture.clearLastBitmap();
mImageCapture = null;
+ // This is necessary to make the ZoomButtonsController unregister
+ // its configuration change receiver.
+ if (mZoomButtons != null) {
+ mZoomButtons.setVisible(false);
+ }
+
// Remove the messages in the event queue.
mHandler.removeMessages(CLEAR_SCREEN_DELAY);
mHandler.removeMessages(RESTART_PREVIEW);
@@ -1232,6 +1307,20 @@ public class Camera extends Activity implements View.OnClickListener,
return super.onKeyUp(keyCode, event);
}
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ if (mPausing) return true;
+
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ if (mZoomButtons != null) {
+ mZoomButtons.setVisible(true);
+ }
+ return true;
+ }
+ return super.onTouchEvent(event);
+ }
+
private void doSnap() {
// If the user has half-pressed the shutter and focus is completed, we
// can take the photo right away. If the focus mode is infinity, we can
@@ -1457,6 +1546,11 @@ public class Camera extends Activity implements View.OnClickListener,
getString(R.string.pref_camera_iso_default));
mParameters.set(PARM_ISO, iso);
+ // Set zoom.
+ if (mZoomValues != null) {
+ mParameters.set(PARM_ZOOM, mZoomValues[mZoomIndex]);
+ }
+
mCameraDevice.setParameters(mParameters);
}