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

Commit 8eda6847 authored by Arc Wang's avatar Arc Wang
Browse files

[Wi-Fi] Release the camera before opening

As per the Google's design mentioned at
https://developer.android.com/training/camera/cameradirect.html


Calling Camera.open() throws an exception
if the camera is already in use by another application,
so we wrap it in a try block one must release the camera before opening

Bug: 141662635
Test: Manual occurs once while testing 10 times
1.Open wifi settings,tap QR code icon
2.Make a incoming VoLTE call,tap incoming VoLTE call dialog
3.Check device
Signed-off-by: default avatarJeiFeng Lee <linger.lee@mediatek.com>

Change-Id: Ief62600af8b745cb4eae2e5ae277a2cebdda68eb
parent d0383725
Loading
Loading
Loading
Loading
+22 −11
Original line number Diff line number Diff line
@@ -288,33 +288,44 @@ public class QrCamera extends Handler {
                for (int i = 0; i < numberOfCameras; ++i) {
                    Camera.getCameraInfo(i, cameraInfo);
                    if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
                        releaseCamera();
                        mCamera = Camera.open(i);
                        mCamera.setPreviewTexture(surface);
                        mCameraOrientation = cameraInfo.orientation;
                        break;
                    }
                }
                if (mCamera == null) {
                    Log.e(TAG, "Cannot find available back camera.");
            } catch (RuntimeException e) {
                Log.e(TAG, "Fail to open camera: " + e);
                mCamera = null;
                mScannerCallback.handleCameraFailure();
                return false;
            }

            try {
                if (mCamera == null) {
                    throw new IOException("Cannot find available back camera");
                }
                mCamera.setPreviewTexture(surface);
                setCameraParameter();
                setTransformationMatrix();
                if (!startPreview()) {
                    Log.e(TAG, "Error to init Camera");
                    throw new IOException("Lost contex");
                }
            } catch (IOException ioe) {
                Log.e(TAG, "Fail to startPreview camera: " + ioe);
                mCamera = null;
                mScannerCallback.handleCameraFailure();
                return false;
            }
            return true;
            } catch (IOException e) {
                Log.e(TAG, "Error to init Camera");
                mCamera = null;
                mScannerCallback.handleCameraFailure();
                return false;
        }
    }

    private void releaseCamera() {
        if (mCamera != null) {
            mCamera.release();
            mCamera = null;
        }
    }

    /** Set transform matrix to crop and center the preview picture */