summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/Camera.java
diff options
context:
space:
mode:
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();
}