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);
+    }
 }
