From 99415f05141c5190f5d06eceaf816a913c3f47ae Mon Sep 17 00:00:00 2001 From: joshmccloskey Date: Wed, 16 Sep 2020 19:47:34 -0700 Subject: [PATCH] Read and cache features when user switches Bug: 163830899 Test: Verified feature is stored to secure setting. 1. Flashed device to QDA release build 2. Verified require_attention was being reported as 1 3. Flashed to most recent change, verified require_attention setting was upated to 0. Change-Id: Ibb1fe6ee3d2e6674b4e335341a3278d2cf0f61b0 Merged-In: I0187e27b641edf0836fa187530cb2a193082fe5d --- .../server/biometrics/face/FaceService.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/biometrics/face/FaceService.java b/services/core/java/com/android/server/biometrics/face/FaceService.java index e5a1898459a2e..281f4b6b1d513 100644 --- a/services/core/java/com/android/server/biometrics/face/FaceService.java +++ b/services/core/java/com/android/server/biometrics/face/FaceService.java @@ -33,6 +33,7 @@ import android.content.Intent; import android.content.pm.UserInfo; import android.hardware.biometrics.BiometricAuthenticator; import android.hardware.biometrics.BiometricConstants; +import android.hardware.biometrics.BiometricFaceConstants; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.IBiometricServiceLockoutResetCallback; import android.hardware.biometrics.IBiometricServiceReceiverInternal; @@ -604,6 +605,8 @@ public class FaceService extends BiometricServiceBase { return false; } + getFeature(userId, BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION, + null /* receiver */, opPackageName); return FaceService.this.hasEnrolledBiometrics(userId); } @@ -692,7 +695,20 @@ public class FaceService extends BiometricServiceBase { if (mDaemon != null) { try { OptionalBool result = mDaemon.getFeature(feature, faceId); - receiver.onFeatureGet(result.status == Status.OK, feature, result.value); + if (receiver != null) { + receiver.onFeatureGet(result.status == Status.OK, + feature, result.value); + } + + if (result.status == Status.OK + && feature == BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION) { + final int settingsValue = result.value ? 1 : 0; + Slog.d(TAG, "Updating attention value for user: " + mCurrentUserId + + " to value: " + settingsValue); + Settings.Secure.putIntForUser(getContext().getContentResolver(), + Settings.Secure.FACE_UNLOCK_ATTENTION_REQUIRED, + settingsValue, mCurrentUserId); + } } catch (RemoteException e) { Slog.e(getTag(), "Unable to getRequireAttention", e); }