[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);
|
HINTS.put(DecodeHintType.POSSIBLE_FORMATS, FORMATS);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Camera mCamera;
|
@VisibleForTesting
|
||||||
|
Camera mCamera;
|
||||||
private Size mPreviewSize;
|
private Size mPreviewSize;
|
||||||
private WeakReference<Context> mContext;
|
private WeakReference<Context> mContext;
|
||||||
private ScannerCallback mScannerCallback;
|
private ScannerCallback mScannerCallback;
|
||||||
private MultiFormatReader mReader;
|
private MultiFormatReader mReader;
|
||||||
private DecodingTask mDecodeTask;
|
private DecodingTask mDecodeTask;
|
||||||
private int mCameraOrientation;
|
private int mCameraOrientation;
|
||||||
private Camera.Parameters mParameters;
|
@VisibleForTesting
|
||||||
|
Camera.Parameters mParameters;
|
||||||
|
|
||||||
public QrCamera(Context context, ScannerCallback callback) {
|
public QrCamera(Context context, ScannerCallback callback) {
|
||||||
mContext = new WeakReference<Context>(context);
|
mContext = new WeakReference<Context>(context);
|
||||||
@@ -171,12 +173,13 @@ public class QrCamera extends Handler {
|
|||||||
boolean isValid(String qrCode);
|
boolean isValid(String qrCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setCameraParameter() {
|
@VisibleForTesting
|
||||||
|
void setCameraParameter() {
|
||||||
mParameters = mCamera.getParameters();
|
mParameters = mCamera.getParameters();
|
||||||
mPreviewSize = getBestPreviewSize(mParameters);
|
mPreviewSize = getBestPreviewSize(mParameters);
|
||||||
mParameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
|
mParameters.setPreviewSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
|
||||||
Size pictureSize = getBestPictureSize(mParameters);
|
Size pictureSize = getBestPictureSize(mParameters);
|
||||||
mParameters.setPreviewSize(pictureSize.getWidth(), pictureSize.getHeight());
|
mParameters.setPictureSize(pictureSize.getWidth(), pictureSize.getHeight());
|
||||||
|
|
||||||
if (mParameters.getSupportedFlashModes().contains(Parameters.FLASH_MODE_OFF)) {
|
if (mParameters.getSupportedFlashModes().contains(Parameters.FLASH_MODE_OFF)) {
|
||||||
mParameters.setFlashMode(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 com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Matrix;
|
import android.graphics.Matrix;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.SurfaceTexture;
|
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.BinaryBitmap;
|
||||||
import com.google.zxing.LuminanceSource;
|
import com.google.zxing.LuminanceSource;
|
||||||
@@ -33,9 +38,6 @@ import com.google.zxing.RGBLuminanceSource;
|
|||||||
import com.google.zxing.WriterException;
|
import com.google.zxing.WriterException;
|
||||||
import com.google.zxing.common.HybridBinarizer;
|
import com.google.zxing.common.HybridBinarizer;
|
||||||
|
|
||||||
import java.util.concurrent.CountDownLatch;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -43,6 +45,12 @@ import org.mockito.Mock;
|
|||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
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)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class QrCameraTest {
|
public class QrCameraTest {
|
||||||
|
|
||||||
@@ -58,12 +66,12 @@ public class QrCameraTest {
|
|||||||
|
|
||||||
private class ScannerTestCallback implements QrCamera.ScannerCallback {
|
private class ScannerTestCallback implements QrCamera.ScannerCallback {
|
||||||
@Override
|
@Override
|
||||||
public Size getViewSize() {
|
public android.util.Size getViewSize() {
|
||||||
return new Size(0, 0);
|
return new android.util.Size(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Rect getFramePosition(Size previewSize, int cameraOrientation) {
|
public Rect getFramePosition(android.util.Size previewSize, int cameraOrientation) {
|
||||||
return new Rect(0,0,0,0);
|
return new Rect(0,0,0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,4 +155,22 @@ public class QrCameraTest {
|
|||||||
|
|
||||||
assertThat(mQrCode).isEqualTo(unicodeTest);
|
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