From 856b34dabc5d5ab0422afee117a595ef1bff30f3 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Tue, 2 Apr 2019 20:01:05 -0700 Subject: [PATCH] Set/Get features with new interface Bug: 127382095 Test: Builds Change-Id: Ideb252989a49eec88b8ee7f3ce6ea4f9d85bb3bc --- ...SettingsAttentionPreferenceController.java | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java index da7e9b5354f..77e1532aa01 100644 --- a/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java @@ -18,6 +18,8 @@ package com.android.settings.biometrics.face; import android.content.Context; import android.hardware.face.FaceManager; +import android.hardware.face.FaceManager.GetFeatureCallback; +import android.hardware.face.FaceManager.SetFeatureCallback; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; @@ -37,6 +39,28 @@ public class FaceSettingsAttentionPreferenceController extends TogglePreferenceC private FaceManager mFaceManager; private SwitchPreference mPreference; + private final SetFeatureCallback mSetFeatureCallback = new SetFeatureCallback() { + @Override + public void onCompleted(boolean success, int feature) { + if (feature == FaceManager.FEATURE_REQUIRE_ATTENTION) { + mPreference.setEnabled(true); + if (!success) { + mPreference.setChecked(!mPreference.isChecked()); + } + } + } + }; + + private final GetFeatureCallback mGetFeatureCallback = new GetFeatureCallback() { + @Override + public void onCompleted(boolean success, int feature, boolean value) { + if (feature == FaceManager.FEATURE_REQUIRE_ATTENTION && success) { + mPreference.setEnabled(true); + mPreference.setChecked(value); + } + } + }; + public FaceSettingsAttentionPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); mFaceManager = Utils.getFaceManagerOrNull(context); @@ -64,12 +88,22 @@ public class FaceSettingsAttentionPreferenceController extends TogglePreferenceC if (!FaceSettings.isAvailable(mContext)) { return true; } - return mFaceManager.getFeature(FaceManager.FEATURE_REQUIRE_ATTENTION); + // Set to disabled until we know the true value. + mPreference.setEnabled(false); + mFaceManager.getFeature(FaceManager.FEATURE_REQUIRE_ATTENTION, mGetFeatureCallback); + + // Ideally returns a cached value. + return true; } @Override public boolean setChecked(boolean isChecked) { - mFaceManager.setFeature(FaceManager.FEATURE_REQUIRE_ATTENTION, isChecked, mToken); + // Optimistically update state and set to disabled until we know it succeeded. + mPreference.setEnabled(false); + mPreference.setChecked(isChecked); + + mFaceManager.setFeature(FaceManager.FEATURE_REQUIRE_ATTENTION, isChecked, mToken, + mSetFeatureCallback); return true; }