summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/Camera.java
diff options
context:
space:
mode:
authorWu-cheng Li <wuchengli@google.com>2011-02-18 15:12:47 +0800
committerWu-cheng Li <wuchengli@google.com>2011-02-18 16:02:25 +0800
commit232700d54651dcaefb378dc22bdb008a9815d1cd (patch)
tree5156271a4bb4607542dd9e70c5b230e87240b4d0 /src/com/android/camera/Camera.java
parent56178dab31ef40c6465312466981778f39c1f355 (diff)
downloadLegacyCamera-232700d54651dcaefb378dc22bdb008a9815d1cd.zip
LegacyCamera-232700d54651dcaefb378dc22bdb008a9815d1cd.tar.gz
LegacyCamera-232700d54651dcaefb378dc22bdb008a9815d1cd.tar.bz2
Fix wrong preview orientation when device is held upside down.
Suppose a user opens camera app and press home to exit. The user holds the device upside down and opens camera again. The animation takes some time so camera app will get the old rotation value in onResume and surfaceChanged. Besides, framework does not have a callback for it. The solution is to poll the rotation value for 5 seconds. If it changes, restart the preview. bug:3362860 Change-Id: I065e8601e321361d8db405f9c587ec2a5bce050c
Diffstat (limited to 'src/com/android/camera/Camera.java')
-rw-r--r--src/com/android/camera/Camera.java25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 12f1b3b..cb082a0 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -55,6 +55,7 @@ import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.MessageQueue;
+import android.os.SystemClock;
import android.provider.MediaStore;
import android.provider.Settings;
import android.provider.MediaStore.Images.ImageColumns;
@@ -105,6 +106,7 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
private static final int RESTART_PREVIEW = 3;
private static final int CLEAR_SCREEN_DELAY = 4;
private static final int SET_CAMERA_PARAMETERS_WHEN_IDLE = 5;
+ private static final int CHECK_DISPLAY_ROTATION = 6;
// The subset of parameters we need to update in setCameraParameters().
private static final int UPDATE_PARAM_INITIALIZE = 1;
@@ -229,6 +231,7 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
private long mPostViewPictureCallbackTime;
private long mRawPictureCallbackTime;
private long mJpegPictureCallbackTime;
+ private long mOnResumeTime;
private long mPicturesRemaining;
private byte[] mJpegImageData;
@@ -293,6 +296,22 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
setCameraParametersWhenIdle(0);
break;
}
+
+ case CHECK_DISPLAY_ROTATION: {
+ // Restart the preview if display rotation has changed.
+ // Sometimes this happens when the device is held upside
+ // down and camera app is opened. Rotation animation will
+ // take some time and the rotation value we have got may be
+ // wrong. Framework does not have a callback for this now.
+ if (Util.getDisplayRotation(Camera.this) != mDisplayRotation
+ && isCameraIdle()) {
+ restartPreview();
+ }
+ if (SystemClock.uptimeMillis() - mOnResumeTime < 5000) {
+ mHandler.sendEmptyMessageDelayed(CHECK_DISPLAY_ROTATION, 100);
+ }
+ break;
+ }
}
}
}
@@ -1428,6 +1447,11 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
}
}
keepScreenOnAwhile();
+
+ if (mPreviewing) {
+ mOnResumeTime = SystemClock.uptimeMillis();
+ mHandler.sendEmptyMessageDelayed(CHECK_DISPLAY_ROTATION, 100);
+ }
}
@Override
@@ -1479,6 +1503,7 @@ public class Camera extends NoSearchActivity implements View.OnClickListener,
// Remove the messages in the event queue.
mHandler.removeMessages(RESTART_PREVIEW);
mHandler.removeMessages(FIRST_TIME_INIT);
+ mHandler.removeMessages(CHECK_DISPLAY_ROTATION);
super.onPause();
}