From 1741f5355a69d7b0b9f0d7cb957f0160fef750fa Mon Sep 17 00:00:00 2001 From: josephpv Date: Fri, 12 Jan 2024 14:27:45 +0000 Subject: [PATCH] In Private space settings when no face support show only fingerprint unlock This contains fix for PS biometrics issue in Pixel devices without face hardware support. In private space separate lock settings page - without face support only fingerprint unlock controller is shown - with face support controller for both face and fingerprint is shown. Screenshot: -Without Face support go/ss/qhDqdyqYLCTYaJq.png go/ss/4Jw54XKJPNYm4R6.png go/ss/5LPjRQ76cVPZy7j.png -if without Fingerprint go/ss/ACGqKU7j24G3Q9Q.png -With Face support go/ss/7jV385WCFsXajZM.png go/ss/ZrGTdiYUN5MFY3r.png go/ss/6QNKqaFuZvuMJZ9.png go/ss/9ZcSvXULHuPK2ps.png go/ss/7GfABcYE4h8BkCo.png Bug: 319794904 Test: Manual Change-Id: I053e8584d036ca0d6e3d8157d0fdef6d465492aa --- res/values/strings.xml | 4 +++ .../PrivateSpaceFacePreferenceController.java | 26 +++++++++++++++++++ ...eSpaceFingerprintPreferenceController.java | 26 +++++++++++++++++++ .../onelock/UseOneLockSettingsFragment.java | 13 +++++++++- 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 402f5263e51..2b21dac9209 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1225,6 +1225,10 @@ Use device screen lock Face & Fingerprint Unlock + + Fingerprint Unlock + + Face Unlock Tap to set up diff --git a/src/com/android/settings/privatespace/onelock/PrivateSpaceFacePreferenceController.java b/src/com/android/settings/privatespace/onelock/PrivateSpaceFacePreferenceController.java index cc22b87a0ec..2a5ff885dfd 100644 --- a/src/com/android/settings/privatespace/onelock/PrivateSpaceFacePreferenceController.java +++ b/src/com/android/settings/privatespace/onelock/PrivateSpaceFacePreferenceController.java @@ -20,8 +20,13 @@ import android.content.Context; import android.os.UserHandle; import android.util.Log; +import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; +import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.biometrics.combination.BiometricFaceStatusPreferenceController; import com.android.settings.privatespace.PrivateSpaceMaintainer; @@ -62,4 +67,25 @@ public class PrivateSpaceFacePreferenceController extends BiometricFaceStatusPre ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } + + @Override + public void updateState(@NonNull Preference preference) { + if (mLockPatternUtils.isSeparateProfileChallengeEnabled(getUserId())) { + super.updateState(preference); + preference.setEnabled(true); + } else { + preference.setSummary( + mContext.getString(R.string.lock_settings_profile_unified_summary)); + preference.setEnabled(false); + } + } + + @Override + public void displayPreference(@NonNull PreferenceScreen screen) { + super.displayPreference(screen); + Preference preference = screen.findPreference(getPreferenceKey()); + if (!Utils.isMultipleBiometricsSupported(mContext)) { + preference.setTitle(R.string.private_space_face_title); + } + } } diff --git a/src/com/android/settings/privatespace/onelock/PrivateSpaceFingerprintPreferenceController.java b/src/com/android/settings/privatespace/onelock/PrivateSpaceFingerprintPreferenceController.java index f2f08017421..b6c44574fc4 100644 --- a/src/com/android/settings/privatespace/onelock/PrivateSpaceFingerprintPreferenceController.java +++ b/src/com/android/settings/privatespace/onelock/PrivateSpaceFingerprintPreferenceController.java @@ -20,8 +20,13 @@ import android.content.Context; import android.os.UserHandle; import android.util.Log; +import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; +import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.biometrics.combination.BiometricFingerprintStatusPreferenceController; import com.android.settings.privatespace.PrivateSpaceMaintainer; @@ -64,4 +69,25 @@ public class PrivateSpaceFingerprintPreferenceController ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } + + @Override + public void updateState(@NonNull Preference preference) { + if (mLockPatternUtils.isSeparateProfileChallengeEnabled(getUserId())) { + super.updateState(preference); + preference.setEnabled(true); + } else { + preference.setSummary( + mContext.getString(R.string.lock_settings_profile_unified_summary)); + preference.setEnabled(false); + } + } + + @Override + public void displayPreference(@NonNull PreferenceScreen screen) { + super.displayPreference(screen); + Preference preference = screen.findPreference(getPreferenceKey()); + if (!Utils.isMultipleBiometricsSupported(mContext)) { + preference.setTitle(R.string.private_space_fingerprint_title); + } + } } diff --git a/src/com/android/settings/privatespace/onelock/UseOneLockSettingsFragment.java b/src/com/android/settings/privatespace/onelock/UseOneLockSettingsFragment.java index 6af6c38174f..413e02a16f8 100644 --- a/src/com/android/settings/privatespace/onelock/UseOneLockSettingsFragment.java +++ b/src/com/android/settings/privatespace/onelock/UseOneLockSettingsFragment.java @@ -24,6 +24,7 @@ import android.os.Bundle; import androidx.annotation.Nullable; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.privatespace.PrivateSpaceMaintainer; import com.android.settingslib.core.AbstractPreferenceController; @@ -71,7 +72,17 @@ public class UseOneLockSettingsFragment extends DashboardFragment { final List controllers = new ArrayList<>(); controllers.add(new UseOneLockControllerSwitch(context, this)); controllers.add(new PrivateSpaceLockController(context, this)); - controllers.add(new FaceFingerprintUnlockController(context, getSettingsLifecycle())); + if (Utils.isMultipleBiometricsSupported(context)) { + controllers.add(new FaceFingerprintUnlockController(context, getSettingsLifecycle())); + } else if (Utils.hasFingerprintHardware(context)) { + controllers.add( + new PrivateSpaceFingerprintPreferenceController( + context, "private_space_biometrics", getSettingsLifecycle())); + } else if (Utils.hasFaceHardware(context)) { + controllers.add( + new PrivateSpaceFacePreferenceController( + context, "private_space_biometrics", getSettingsLifecycle())); + } return controllers; }