From 0ba8eaaa5d26f0a806e7bc987676bbc29ad1085c Mon Sep 17 00:00:00 2001 From: Doris Liu Date: Wed, 16 Oct 2013 12:51:02 -0700 Subject: Fix shutter covering pie menu Bug: 11247988 Change-Id: I2018075a0b8adf7cacb302774ed64df92fc2fa7c --- src/com/android/camera/PhotoUI.java | 3 +-- src/com/android/camera/ui/RotatableLayout.java | 25 ++++--------------------- src/com/android/camera/util/CameraUtil.java | 23 +++++++++++++++++++++++ 3 files changed, 28 insertions(+), 23 deletions(-) (limited to 'src/com/android/camera') diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index 58df43657..e7a458ac6 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -764,8 +764,6 @@ public class PhotoUI implements PieListener, mLocationDialog.dismiss(); } mLocationDialog = null; - mPreviewWidth = 0; - mPreviewHeight = 0; } public void initDisplayChangeListener() { @@ -842,6 +840,7 @@ public class PhotoUI implements PieListener, @Override public void onDisplayChanged() { + Log.d(TAG, "Device flip detected."); mCameraControls.checkLayoutFlip(); mController.updateCameraOrientation(); } diff --git a/src/com/android/camera/ui/RotatableLayout.java b/src/com/android/camera/ui/RotatableLayout.java index 04c36331d..6867e6a8b 100644 --- a/src/com/android/camera/ui/RotatableLayout.java +++ b/src/com/android/camera/ui/RotatableLayout.java @@ -19,11 +19,8 @@ package com.android.camera.ui; import android.app.Activity; import android.content.Context; import android.content.res.Configuration; -import android.graphics.Point; import android.util.AttributeSet; -import android.view.Display; import android.view.Gravity; -import android.view.Surface; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -73,14 +70,16 @@ public class RotatableLayout extends FrameLayout { // we need to rotate the view if necessary. After that, onConfigurationChanged // call will track all the subsequent device rotation. if (mPrevRotation == UNKOWN_ORIENTATION) { - calculateDefaultOrientation(); + mIsDefaultToPortrait = CameraUtil.isDefaultToPortrait((Activity) getContext()); if (mIsDefaultToPortrait) { // Natural orientation for tablet is landscape mPrevRotation = mInitialOrientation == Configuration.ORIENTATION_PORTRAIT ? 0 : 90; } else { + // When tablet orientation is 0 or 270 (i.e. getUnifiedOrientation + // = 0 or 90), we load the layout resource without any rotation. mPrevRotation = mInitialOrientation == Configuration.ORIENTATION_LANDSCAPE ? - 0 : 90; + 0 : 270; } // check if there is any rotation before the view is attached to window @@ -88,22 +87,6 @@ public class RotatableLayout extends FrameLayout { } } - private void calculateDefaultOrientation() { - Display currentDisplay = getDisplay(); - Point displaySize = new Point(); - currentDisplay.getSize(displaySize); - int orientation = currentDisplay.getRotation(); - int naturalWidth, naturalHeight; - if (orientation == Surface.ROTATION_0 || orientation == Surface.ROTATION_180) { - naturalWidth = displaySize.x; - naturalHeight = displaySize.y; - } else { - naturalWidth = displaySize.y; - naturalHeight = displaySize.x; - } - mIsDefaultToPortrait = naturalWidth < naturalHeight; - } - private void rotateIfNeeded() { if (mPrevRotation == UNKOWN_ORIENTATION) { return; diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java index 458ae04f2..eff0c4078 100644 --- a/src/com/android/camera/util/CameraUtil.java +++ b/src/com/android/camera/util/CameraUtil.java @@ -43,6 +43,7 @@ import android.telephony.TelephonyManager; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; +import android.view.Display; import android.view.OrientationEventListener; import android.view.Surface; import android.view.View; @@ -411,6 +412,28 @@ public class CameraUtil { return 0; } + /** + * Calculate the default orientation of the device based on the width and + * height of the display when rotation = 0 (i.e. natural width and height) + * @param activity the activity context + * @return whether the default orientation of the device is portrait + */ + public static boolean isDefaultToPortrait(Activity activity) { + Display currentDisplay = activity.getWindowManager().getDefaultDisplay(); + Point displaySize = new Point(); + currentDisplay.getSize(displaySize); + int orientation = currentDisplay.getRotation(); + int naturalWidth, naturalHeight; + if (orientation == Surface.ROTATION_0 || orientation == Surface.ROTATION_180) { + naturalWidth = displaySize.x; + naturalHeight = displaySize.y; + } else { + naturalWidth = displaySize.y; + naturalHeight = displaySize.x; + } + return naturalWidth < naturalHeight; + } + public static int getDisplayOrientation(int degrees, int cameraId) { // See android.hardware.Camera.setDisplayOrientation for // documentation. -- cgit v1.2.3