[Biometric Onboarding & Edu] Update face settings page

- Added a feature provider for face settings page in FaceFeatureProvider
  for customization
- When face is deleted, disabled the settings buttons instead of hiding
  them.
- Updated new UX style for add/remove face button.

Bug: 370940762
Test: atest FaceSettingsEnrollButtonPreferenceControllerTest
            FaceSettingsFooterPreferenceControllerTest
Test: manual - 1. Enroll face
               2. Go Face Settings page and remove face
	       3. Enroll face again
Flag: com.android.settings.flags.biometrics_onboarding_education

Change-Id: I490e647523eeff2dd1a58aab07f638e3e5e0ffb8
This commit is contained in:
Shawn Lin
2025-01-27 05:16:39 +00:00
parent d6e99d3783
commit d747235a4c
14 changed files with 394 additions and 54 deletions

View File

@@ -19,9 +19,11 @@ package com.android.settings.biometrics.face;
import static android.provider.Settings.Secure.FACE_KEYGUARD_ENABLED;
import android.content.Context;
import android.hardware.face.FaceManager;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.preference.Preference;
import com.android.settings.Utils;
import com.android.settings.biometrics.activeunlock.ActiveUnlockStatusUtils;
@@ -32,9 +34,12 @@ public class FaceSettingsKeyguardUnlockPreferenceController extends
private static final int OFF = 0;
private static final int DEFAULT = ON;
private FaceManager mFaceManager;
public FaceSettingsKeyguardUnlockPreferenceController(
@NonNull Context context, @NonNull String key) {
super(context, key);
mFaceManager = Utils.getFaceManagerOrNull(context);
}
@Override
@@ -49,6 +54,20 @@ public class FaceSettingsKeyguardUnlockPreferenceController extends
FACE_KEYGUARD_ENABLED, isChecked ? ON : OFF, getUserId());
}
@Override
public void updateState(Preference preference) {
super.updateState(preference);
if (!FaceSettings.isFaceHardwareDetected(mContext)) {
preference.setEnabled(false);
} else if (!mFaceManager.hasEnrolledTemplates(getUserId())) {
preference.setEnabled(false);
} else if (getRestrictingAdmin() != null) {
preference.setEnabled(false);
} else {
preference.setEnabled(true);
}
}
@Override
public int getAvailabilityStatus() {
final ActiveUnlockStatusUtils activeUnlockStatusUtils =