Keep camera controls on the same physical side

Change-Id: I09c50650c77a89fadfeb376564ef43e750994f8a
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 664246a..9a45461 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -54,6 +54,7 @@
 import android.view.View;
 import android.view.ViewStub;
 import android.view.View.OnClickListener;
+import android.view.View.OnLayoutChangeListener;
 import android.view.ViewGroup;
 import android.view.WindowManager;
 import android.widget.FrameLayout;
@@ -206,6 +207,14 @@
         }
     };
 
+    private final View.OnLayoutChangeListener mLayoutChangeListener =
+            new View.OnLayoutChangeListener() {
+        @Override
+        public void onLayoutChange(View v, int left, int top, int right,
+                int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
+            onScreenSizeChanged(right - left, bottom - top);
+        }
+    };
     private final StringBuilder mBuilder = new StringBuilder();
     private final Formatter mFormatter = new Formatter(mBuilder);
     private final Object[] mFormatterArgs = new Object[1];
@@ -461,6 +470,7 @@
 
         mActivity.getLayoutInflater().inflate(R.layout.photo_module,
                 (ViewGroup) mRootView, true);
+        mRootView.addOnLayoutChangeListener(mLayoutChangeListener);
         if (ApiHelper.HAS_FACE_DETECTION) {
             ViewStub faceViewStub = (ViewStub) mRootView
                     .findViewById(R.id.face_view_stub);
@@ -586,8 +596,8 @@
         initializePhotoControl();
 
         // These depend on camera parameters.
-        int width = mActivity.getWindowManager().getDefaultDisplay().getWidth();
-        int height = mActivity.getWindowManager().getDefaultDisplay().getHeight();
+        int width = mRootView.getWidth();
+        int height = mRootView.getHeight();
         mFocusManager.setPreviewSize(width, height);
         // Full-screen screennail
         if (Util.getDisplayRotation(mActivity) % 180 == 0) {
@@ -604,6 +614,16 @@
         onFullScreenChanged(mActivity.isInCameraApp());
     }
 
+    public void onScreenSizeChanged(int width, int height) {
+        if (mFocusManager != null) mFocusManager.setPreviewSize(width, height);
+        // Full-screen screennail
+        if (Util.getDisplayRotation(mActivity) % 180 == 0) {
+            ((CameraScreenNail) mActivity.mCameraScreenNail).setPreviewFrameLayoutSize(width, height);
+        } else {
+            ((CameraScreenNail) mActivity.mCameraScreenNail).setPreviewFrameLayoutSize(height, width);
+        }
+    }
+
     private void initializePhotoControl() {
         loadCameraPreferences();
         if (mPhotoControl != null) {
@@ -1618,6 +1638,7 @@
         mHandler.removeMessages(OPEN_CAMERA_FAIL);
         mHandler.removeMessages(CAMERA_DISABLED);
 
+        mRootView.removeOnLayoutChangeListener(mLayoutChangeListener);
         mPendingSwitchCameraId = -1;
         if (mFocusManager != null) mFocusManager.removeMessages();
         MediaSaveService s = mActivity.getMediaSaveService();