summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWei-Ta Chen <weita@google.com>2011-11-15 17:18:12 -0800
committerWei-Ta Chen <weita@google.com>2011-11-15 18:01:37 -0800
commit2d3391e6be57aeeb7e713f25a484445660b101e3 (patch)
tree7bccbffd365e4e93aabaeaa7ffea3d248ac7e121 /src
parent948e75e8e3fd2ec98a08e65efdb6e5eb6d02c33b (diff)
downloadLegacyCamera-2d3391e6be57aeeb7e713f25a484445660b101e3.zip
LegacyCamera-2d3391e6be57aeeb7e713f25a484445660b101e3.tar.gz
LegacyCamera-2d3391e6be57aeeb7e713f25a484445660b101e3.tar.bz2
Update the panorama capturing progress correctly.
Fix an issue that the termination condition on the sweeping angle is broken. Fix another issue that the panning speed and sweeping angle does not consider the cases that users hold a device in portrait or panning the device vertically. Bug: 5623138 Change-Id: I9d1e2e5ad63a97beb8cfe2404974329c70d46991
Diffstat (limited to 'src')
-rwxr-xr-xsrc/com/android/camera/panorama/PanoramaActivity.java37
1 files changed, 20 insertions, 17 deletions
diff --git a/src/com/android/camera/panorama/PanoramaActivity.java b/src/com/android/camera/panorama/PanoramaActivity.java
index 6978477..93782a6 100755
--- a/src/com/android/camera/panorama/PanoramaActivity.java
+++ b/src/com/android/camera/panorama/PanoramaActivity.java
@@ -140,11 +140,6 @@ public class PanoramaActivity extends ActivityBase implements
private int mTraversedAngleX;
private int mTraversedAngleY;
private long mTimestamp;
- // Control variables for the terminate condition.
- private int mMinAngleX;
- private int mMaxAngleX;
- private int mMinAngleY;
- private int mMaxAngleY;
private RotateImageView mThumbnailView;
private Thumbnail mThumbnail;
@@ -165,6 +160,7 @@ public class PanoramaActivity extends ActivityBase implements
private boolean mCancelComputation;
private float[] mTransformMatrix;
private float mHorizontalViewAngle;
+ private float mVerticalViewAngle;
// Prefer FOCUS_MODE_INFINITY to FOCUS_MODE_CONTINUOUS_VIDEO because of
// getting a better image quality by the former.
@@ -410,8 +406,8 @@ public class PanoramaActivity extends ActivityBase implements
parameters.setRecordingHint(false);
- mHorizontalViewAngle = (((mDeviceOrientation / 90) % 2) == 0) ?
- parameters.getHorizontalViewAngle() : parameters.getVerticalViewAngle();
+ mHorizontalViewAngle = parameters.getHorizontalViewAngle();
+ mVerticalViewAngle = parameters.getVerticalViewAngle();
}
public int getPreviewBufSize() {
@@ -546,22 +542,23 @@ public class PanoramaActivity extends ActivityBase implements
mCompassValueXStart = mCompassValueXStartBuffer;
mCompassValueYStart = mCompassValueYStartBuffer;
- mMinAngleX = 0;
- mMaxAngleX = 0;
- mMinAngleY = 0;
- mMaxAngleY = 0;
mTimestamp = 0;
mMosaicFrameProcessor.setProgressListener(new MosaicFrameProcessor.ProgressListener() {
@Override
public void onProgress(boolean isFinished, float panningRateX, float panningRateY,
float progressX, float progressY) {
+ float accumulatedHorizontalAngle = progressX * mHorizontalViewAngle;
+ float accumulatedVerticalAngle = progressY * mVerticalViewAngle;
if (isFinished
- || (mMaxAngleX - mMinAngleX >= DEFAULT_SWEEP_ANGLE)
- || (mMaxAngleY - mMinAngleY >= DEFAULT_SWEEP_ANGLE)) {
+ || (Math.abs(accumulatedHorizontalAngle) >= DEFAULT_SWEEP_ANGLE)
+ || (Math.abs(accumulatedVerticalAngle) >= DEFAULT_SWEEP_ANGLE)) {
stopCapture(false);
} else {
- updateProgress(panningRateX, progressX, progressY);
+ float panningRateXInDegree = panningRateX * mHorizontalViewAngle;
+ float panningRateYInDegree = panningRateY * mVerticalViewAngle;
+ updateProgress(panningRateXInDegree, panningRateYInDegree,
+ accumulatedHorizontalAngle, accumulatedVerticalAngle);
}
}
});
@@ -630,19 +627,25 @@ public class PanoramaActivity extends ActivityBase implements
mRightIndicator.setEnabled(false);
}
- private void updateProgress(float panningRate, float progressX, float progressY) {
+ private void updateProgress(float panningRateXInDegree, float panningRateYInDegree,
+ float progressHorizontalAngle, float progressVerticalAngle) {
mMosaicView.setReady();
mMosaicView.requestRender();
// TODO: Now we just display warning message by the panning speed.
// Since we only support horizontal panning, we should display a warning message
// in UI when there're significant vertical movements.
- if (Math.abs(panningRate * mHorizontalViewAngle) > PANNING_SPEED_THRESHOLD) {
+ if ((Math.abs(panningRateXInDegree) > PANNING_SPEED_THRESHOLD)
+ || (Math.abs(panningRateYInDegree) > PANNING_SPEED_THRESHOLD)) {
showTooFastIndication();
} else {
hideTooFastIndication();
}
- mPanoProgressBar.setProgress((int) (progressX * mHorizontalViewAngle));
+ int angleInMajorDirection =
+ (Math.abs(progressHorizontalAngle) > Math.abs(progressVerticalAngle))
+ ? (int) progressHorizontalAngle
+ : (int) progressVerticalAngle;
+ mPanoProgressBar.setProgress((angleInMajorDirection));
}
private void createContentView() {