[Wi-Fi] Fix Wi-Fi QR code camera bug
Should not setPreviewSize from the value of getBestPictureSize. Bug: 142630420 Test: QrCameraTest manual: visually make sure QR code scanner image not distorted. Change-Id: I280beddac95ed65118af802c396d15da306e029b
This commit is contained in:
@@ -80,14 +80,16 @@ public class QrCamera extends Handler {
|
||||
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 @@ public class QrCamera extends Handler {
|
||||
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);
|
||||
|
@@ -18,14 +18,19 @@ package com.android.settings.wifi.qrcode;
|
||||
|
||||
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.RGBLuminanceSource;
|
||||
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.mockito.Mock;
|
||||
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 @@ public class QrCameraTest {
|
||||
|
||||
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 @@ public class QrCameraTest {
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user