From e8e2610f112103e77ffc4b583a752302921131d6 Mon Sep 17 00:00:00 2001 From: Doris Liu Date: Tue, 9 Jul 2013 13:09:11 -0700 Subject: [PATCH] Fix preview thumb and touch target out of sync Also ensure video module respects system orientation lock Bug: 9626888 Change-Id: I4d7406c37878446e65d0ad1de3bc6b300acb1b23 (cherry picked from commit dfc939b80f45d969a44caca4bd397ab0828c562d) --- src/com/android/camera/Util.java | 6 ++++++ src/com/android/camera/VideoModule.java | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/com/android/camera/Util.java b/src/com/android/camera/Util.java index ed42de85a..44af42531 100644 --- a/src/com/android/camera/Util.java +++ b/src/com/android/camera/Util.java @@ -39,6 +39,7 @@ import android.location.Location; import android.net.Uri; import android.os.Build; import android.os.ParcelFileDescriptor; +import android.provider.Settings; import android.telephony.TelephonyManager; import android.util.DisplayMetrics; import android.util.FloatMath; @@ -375,6 +376,11 @@ public class Util { return x; } + public static boolean systemRotationLocked(Activity activity) { + return Settings.System.getInt(activity.getContentResolver(), + Settings.System.ACCELEROMETER_ROTATION, 0) == 0; + } + public static int getDisplayRotation(Activity activity) { int rotation = activity.getWindowManager().getDefaultDisplay() .getRotation(); diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java index 2c654fc29..2eb3d1bad 100644 --- a/src/com/android/camera/VideoModule.java +++ b/src/com/android/camera/VideoModule.java @@ -583,6 +583,11 @@ public class VideoModule implements CameraModule, // back to use SurfaceTexture for preview and we need to stop then start // the preview. This will cause the preview flicker since the preview // will not be continuous for a short period of time. + + // Get orientation directly from display rotation to make sure it's up + // to date. OnConfigurationChanged callback usually kicks in a bit later, if + // device is rotated during recording. + mDisplayRotation = Util.getDisplayRotation(mActivity); ((CameraScreenNail) mActivity.mCameraScreenNail).animateCapture(mDisplayRotation); mUI.enablePreviewThumb(true); @@ -1537,7 +1542,9 @@ public class VideoModule implements CameraModule, mUI.enableCameraControls(false); mMediaRecorderRecording = true; - mActivity.getOrientationManager().lockOrientation(); + if (!Util.systemRotationLocked(mActivity)) { + mActivity.getOrientationManager().lockOrientation(); + } mRecordingStartTime = SystemClock.uptimeMillis(); mUI.showRecordingUI(true, mParameters.isZoomSupported()); @@ -1612,7 +1619,9 @@ public class VideoModule implements CameraModule, fail = true; } mMediaRecorderRecording = false; - mActivity.getOrientationManager().unlockOrientation(); + if (!Util.systemRotationLocked(mActivity)) { + mActivity.getOrientationManager().unlockOrientation(); + } // If the activity is paused, this means activity is interrupted // during recording. Release the camera as soon as possible because -- 2.11.0