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

Commit 069aff57 authored by Diya Bera's avatar Diya Bera
Browse files

Check only connected cameras for biometrics

Flag: EXEMPT test fix
Fixes: 394123247
Test: N/A (Unable to add test since CameraManager is a final class and cannot be mocked)

Change-Id: Idc7ca5a789bc20a20ec489743038c6b503bf402d
parent 70c77dcf
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -20,12 +20,16 @@ import static android.hardware.SensorPrivacyManager.Sensors.CAMERA;

import android.annotation.NonNull;
import android.hardware.SensorPrivacyManager;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.util.Log;

import java.util.concurrent.ConcurrentHashMap;

public class BiometricCameraManagerImpl implements BiometricCameraManager {

    private static final String TAG = "BiometricCameraManager";

    private final CameraManager mCameraManager;
    private final SensorPrivacyManager mSensorPrivacyManager;
    private final ConcurrentHashMap<String, Boolean> mIsCameraAvailable = new ConcurrentHashMap<>();
@@ -52,12 +56,18 @@ public class BiometricCameraManagerImpl implements BiometricCameraManager {

    @Override
    public boolean isAnyCameraUnavailable() {
        for (String cameraId : mIsCameraAvailable.keySet()) {
            if (!mIsCameraAvailable.get(cameraId)) {
        try {
            for (String cameraId : mCameraManager.getCameraIdList()) {
                if (!mIsCameraAvailable.getOrDefault(cameraId, true)) {
                    return true;
                }
            }
            return false;
        } catch (CameraAccessException e) {
            Log.e(TAG, "Camera exception thrown when trying to determine availability: ", e);
            //If face HAL is unable to get access to a camera, it will return an error.
            return false;
        }
    }

    @Override