Merge "Add HTC One picture resolutions" into gb-ub-photos-bryce
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 5b35271..e88645d 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -1628,6 +1628,8 @@
                     return; // Exiting, so no need to get the surface texture.
                 }
                 mUI.setSurfaceTexture(screenNail.getSurfaceTexture());
+            } else {
+                updatePreviewSize(screenNail);
             }
             mCameraDevice.setDisplayOrientation(mCameraDisplayOrientation);
             Object st = mUI.getSurfaceTexture();
@@ -1649,6 +1651,21 @@
         }
     }
 
+    private void updatePreviewSize(CameraScreenNail snail) {
+        Size size = mParameters.getPreviewSize();
+        int w = size.width;
+        int h = size.height;
+        if (mCameraDisplayOrientation % 180 != 0) {
+            w = size.height;
+            h = size.width;
+        }
+        if (snail.getWidth() != w || snail.getHeight() != h) {
+            snail.setSize(w, h);
+        }
+        snail.enableAspectRatioClamping();
+        mActivity.notifyScreenNailChanged();
+    }
+
     @Override
     public void stopPreview() {
         if (mCameraDevice != null && mCameraState != PREVIEW_STOPPED) {
@@ -1742,10 +1759,14 @@
         Size original = mParameters.getPreviewSize();
         if (!original.equals(optimalSize)) {
             mParameters.setPreviewSize(optimalSize.width, optimalSize.height);
-
             // Zoom related settings will be changed for different preview
             // sizes, so set and read the parameters to get latest values
-            mCameraDevice.setParameters(mParameters);
+            if (mHandler.getLooper() == Looper.myLooper()) {
+                // On UI thread only, not when camera starts up
+                setupPreview();
+            } else {
+                mCameraDevice.setParameters(mParameters);
+            }
             mParameters = mCameraDevice.getParameters();
         }
         Log.v(TAG, "Preview size is " + optimalSize.width + "x" + optimalSize.height);