Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cdc09855 authored by Arc Wang's avatar Arc Wang Committed by Android (Google) Code Review
Browse files

Merge "[Wi-Fi] Fix Wi-Fi QR code camera bug"

parents ac9fd3d4 cdfd1ff1
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -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);
+33 −7
Original line number Diff line number Diff line
@@ -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);
    }
}