Merge "Fix UI janky in privacy settings"
diff --git a/src/com/android/settings/wifi/qrcode/QrCamera.java b/src/com/android/settings/wifi/qrcode/QrCamera.java
index 3e9c0b2..21be399 100644
--- a/src/com/android/settings/wifi/qrcode/QrCamera.java
+++ b/src/com/android/settings/wifi/qrcode/QrCamera.java
@@ -80,14 +80,16 @@
         HINTS.put(DecodeHintType.POSSIBLE_FORMATS, FORMATS);
     }
 
-    private Camera mCamera;
+    @VisibleForTesting
+    Camera mCamera;
     private Size mPreviewSize;
     private WeakReference<Context> mContext;
     private ScannerCallback mScannerCallback;
     private MultiFormatReader mReader;
     private DecodingTask mDecodeTask;
     private int mCameraOrientation;
-    private Camera.Parameters mParameters;
+    @VisibleForTesting
+    Camera.Parameters mParameters;
 
     public QrCamera(Context context, ScannerCallback callback) {
         mContext =  new WeakReference<Context>(context);
@@ -171,12 +173,13 @@
         boolean isValid(String qrCode);
     }
 
-    private void setCameraParameter() {
+    @VisibleForTesting
+    void setCameraParameter() {
         mParameters = mCamera.getParameters();
         mPreviewSize = getBestPreviewSize(mParameters);
         mParameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
         Size pictureSize = getBestPictureSize(mParameters);
-        mParameters.setPreviewSize(pictureSize.getWidth(), pictureSize.getHeight());
+        mParameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
 
         if (mParameters.getSupportedFlashModes().contains(Parameters.FLASH_MODE_OFF)) {
             mParameters.setFlashMode(Parameters.FLASH_MODE_OFF);
diff --git a/tests/robotests/src/com/android/settings/wifi/qrcode/QrCameraTest.java b/tests/robotests/src/com/android/settings/wifi/qrcode/QrCameraTest.java
index 3f67137..de0df73 100644
--- a/tests/robotests/src/com/android/settings/wifi/qrcode/QrCameraTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/qrcode/QrCameraTest.java
@@ -18,14 +18,19 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Matrix;
 import android.graphics.Rect;
 import android.graphics.SurfaceTexture;
-import android.util.Size;
+import android.hardware.Camera;
+import android.hardware.Camera.Parameters;
+import android.hardware.Camera.Size;
 
 import com.google.zxing.BinaryBitmap;
 import com.google.zxing.LuminanceSource;
@@ -33,9 +38,6 @@
 import com.google.zxing.WriterException;
 import com.google.zxing.common.HybridBinarizer;
 
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -43,6 +45,12 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
 @RunWith(RobolectricTestRunner.class)
 public class QrCameraTest {
 
@@ -58,12 +66,12 @@
 
     private class ScannerTestCallback implements QrCamera.ScannerCallback {
         @Override
-        public Size getViewSize() {
-            return new Size(0, 0);
+        public android.util.Size getViewSize() {
+            return new android.util.Size(0, 0);
         }
 
         @Override
-        public Rect getFramePosition(Size previewSize, int cameraOrientation) {
+        public Rect getFramePosition(android.util.Size previewSize, int cameraOrientation) {
             return new Rect(0,0,0,0);
         }
 
@@ -147,4 +155,22 @@
 
         assertThat(mQrCode).isEqualTo(unicodeTest);
     }
+
+    @Test
+    public void setCameraParameter_shouldSetParameters() {
+        mCamera.mCamera = mock(Camera.class);
+        Parameters parameters = mock(Camera.Parameters.class);
+        Size size = mCamera.mCamera.new Size(1920, 1440);
+        List<Camera.Size> sizes = new ArrayList<>(Arrays.asList(size));
+        when(parameters.getPreviewSize()).thenReturn(size);
+        when(parameters.getSupportedPreviewSizes()).thenReturn(sizes);
+        when(parameters.getSupportedPictureSizes()).thenReturn(sizes);
+        when(mCamera.mCamera.getParameters()).thenReturn(parameters);
+
+        mCamera.setCameraParameter();
+
+        verify(mCamera.mParameters).setPreviewSize(anyInt(), anyInt());
+        verify(mCamera.mParameters).setPictureSize(anyInt(), anyInt());
+        verify(mCamera.mCamera).setParameters(mCamera.mParameters);
+    }
 }