diff --git a/src/com/android/settings/biometrics/face/FaceSettings.java b/src/com/android/settings/biometrics/face/FaceSettings.java index a493ae01dc9..04df11a17b1 100644 --- a/src/com/android/settings/biometrics/face/FaceSettings.java +++ b/src/com/android/settings/biometrics/face/FaceSettings.java @@ -95,9 +95,20 @@ public class FaceSettings extends DashboardFragment { private final FaceSettingsEnrollButtonPreferenceController.Listener mEnrollListener = intent -> startActivityForResult(intent, ENROLL_REQUEST); - public static boolean isAvailable(Context context) { + /** + * @param context + * @return true if the Face hardware is detected. + */ + public static boolean isFaceHardwareDetected(Context context) { FaceManager manager = Utils.getFaceManagerOrNull(context); - return manager != null && manager.isHardwareDetected(); + boolean isHardwareDetected = false; + if (manager == null) { + Log.d(TAG, "FaceManager is null"); + } else { + isHardwareDetected = manager.isHardwareDetected(); + Log.d(TAG, "FaceManager is not null. Hardware detected: " + isHardwareDetected); + } + return manager != null && isHardwareDetected; } @Override @@ -126,7 +137,7 @@ public class FaceSettings extends DashboardFragment { super.onCreate(savedInstanceState); final Context context = getPrefContext(); - if (!isAvailable(context)) { + if (!isFaceHardwareDetected(context)) { Log.w(TAG, "no faceManager, finish this"); finish(); return; @@ -273,7 +284,7 @@ public class FaceSettings extends DashboardFragment { @Override protected List createPreferenceControllers(Context context) { - if (!isAvailable(context)) { + if (!isFaceHardwareDetected(context)) { return null; } mControllers = buildPreferenceControllers(context, getSettingsLifecycle()); @@ -314,7 +325,7 @@ public class FaceSettings extends DashboardFragment { @Override public List createPreferenceControllers( Context context) { - if (isAvailable(context)) { + if (isFaceHardwareDetected(context)) { return buildPreferenceControllers(context, null /* lifecycle */); } else { return null; @@ -323,7 +334,7 @@ public class FaceSettings extends DashboardFragment { @Override protected boolean isPageSearchEnabled(Context context) { - if (isAvailable(context)) { + if (isFaceHardwareDetected(context)) { return hasEnrolledBiometrics(context); } @@ -333,7 +344,10 @@ public class FaceSettings extends DashboardFragment { @Override public List getNonIndexableKeys(Context context) { final List keys = super.getNonIndexableKeys(context); - if (isAvailable(context)) { + final boolean isFaceHardwareDetected = isFaceHardwareDetected(context); + Log.d(TAG, "Get non indexable keys. isFaceHardwareDetected: " + + isFaceHardwareDetected + ", size:" + keys.size()); + if (isFaceHardwareDetected) { final boolean hasEnrolled = hasEnrolledBiometrics(context); keys.add(hasEnrolled ? PREF_KEY_ENROLL_FACE_UNLOCK : PREF_KEY_DELETE_FACE_DATA); diff --git a/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java index a54171e8c42..bde146b19cd 100644 --- a/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java @@ -22,10 +22,10 @@ import android.content.Context; import android.hardware.face.FaceManager; import android.provider.Settings; -import com.android.settings.Utils; - import androidx.preference.Preference; +import com.android.settings.Utils; + /** * Preference controller for Face settings page controlling the ability to use * Face authentication in apps (through BiometricPrompt). @@ -51,7 +51,7 @@ public class FaceSettingsAppPreferenceController extends FaceSettingsPreferenceC @Override public boolean isChecked() { - if (!FaceSettings.isAvailable(mContext)) { + if (!FaceSettings.isFaceHardwareDetected(mContext)) { return false; } return Settings.Secure.getIntForUser( @@ -67,7 +67,7 @@ public class FaceSettingsAppPreferenceController extends FaceSettingsPreferenceC @Override public void updateState(Preference preference) { super.updateState(preference); - if (!FaceSettings.isAvailable(mContext)) { + if (!FaceSettings.isFaceHardwareDetected(mContext)) { preference.setEnabled(false); } else if (!mFaceManager.hasEnrolledTemplates(getUserId())) { preference.setEnabled(false); diff --git a/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java index e5fee758be5..200c0b949ec 100644 --- a/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java @@ -93,7 +93,7 @@ public class FaceSettingsAttentionPreferenceController extends FaceSettingsPrefe @Override public boolean isChecked() { - if (!FaceSettings.isAvailable(mContext)) { + if (!FaceSettings.isFaceHardwareDetected(mContext)) { return true; } // Set to disabled until we know the true value. diff --git a/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java index c65cd23342e..c5157421132 100644 --- a/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java @@ -25,7 +25,6 @@ import android.provider.Settings; import androidx.preference.Preference; import com.android.settings.Utils; -import com.android.settings.core.TogglePreferenceController; /** * Preference controller giving the user an option to always require confirmation. @@ -65,7 +64,7 @@ public class FaceSettingsConfirmPreferenceController extends FaceSettingsPrefere @Override public void updateState(Preference preference) { super.updateState(preference); - if (!FaceSettings.isAvailable(mContext)) { + if (!FaceSettings.isFaceHardwareDetected(mContext)) { preference.setEnabled(false); } else if (!mFaceManager.hasEnrolledTemplates(getUserId())) { preference.setEnabled(false); diff --git a/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java index 7e7a748faec..8ee7ffd57ce 100644 --- a/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsKeyguardPreferenceController.java @@ -53,7 +53,7 @@ public class FaceSettingsKeyguardPreferenceController extends FaceSettingsPrefer @Override public boolean isChecked() { - if (!FaceSettings.isAvailable(mContext)) { + if (!FaceSettings.isFaceHardwareDetected(mContext)) { return false; } else if (getRestrictingAdmin() != null) { return false; @@ -77,7 +77,7 @@ public class FaceSettingsKeyguardPreferenceController extends FaceSettingsPrefer public void updateState(Preference preference) { EnforcedAdmin admin; super.updateState(preference); - if (!FaceSettings.isAvailable(mContext)) { + if (!FaceSettings.isFaceHardwareDetected(mContext)) { preference.setEnabled(false); } else if ((admin = getRestrictingAdmin()) != null) { ((RestrictedSwitchPreference) preference).setDisabledByAdmin(admin); diff --git a/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java index 5c46a3d9cc9..0a2757b5cbd 100644 --- a/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsLockscreenBypassPreferenceController.java @@ -47,7 +47,7 @@ public class FaceSettingsLockscreenBypassPreferenceController @Override public boolean isChecked() { - if (!FaceSettings.isAvailable(mContext)) { + if (!FaceSettings.isFaceHardwareDetected(mContext)) { return false; } else if (getRestrictingAdmin() != null) { return false; @@ -69,7 +69,7 @@ public class FaceSettingsLockscreenBypassPreferenceController public void updateState(Preference preference) { EnforcedAdmin admin; super.updateState(preference); - if (!FaceSettings.isAvailable(mContext)) { + if (!FaceSettings.isFaceHardwareDetected(mContext)) { preference.setEnabled(false); } else if ((admin = getRestrictingAdmin()) != null) { ((RestrictedSwitchPreference) preference).setDisabledByAdmin(admin); diff --git a/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java index a4da7597929..6c9806043d4 100644 --- a/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java @@ -165,7 +165,7 @@ public class FaceSettingsRemoveButtonPreferenceController extends BasePreference .findViewById(R.id.security_settings_face_settings_remove_button); mButton.setOnClickListener(this); - if (!FaceSettings.isAvailable(mContext)) { + if (!FaceSettings.isFaceHardwareDetected(mContext)) { mButton.setEnabled(false); } else { mButton.setEnabled(!mRemoving); diff --git a/src/com/android/settings/biometrics/face/FaceStatusPreferenceController.java b/src/com/android/settings/biometrics/face/FaceStatusPreferenceController.java index cb82b5e8563..648da9b6ef7 100644 --- a/src/com/android/settings/biometrics/face/FaceStatusPreferenceController.java +++ b/src/com/android/settings/biometrics/face/FaceStatusPreferenceController.java @@ -41,7 +41,7 @@ public class FaceStatusPreferenceController extends BiometricStatusPreferenceCon @Override protected boolean isDeviceSupported() { - return mFaceManager != null && mFaceManager.isHardwareDetected(); + return FaceSettings.isFaceHardwareDetected(mContext); } @Override diff --git a/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java b/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java index 8e7031d9cee..49a9de62827 100644 --- a/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java +++ b/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java @@ -21,6 +21,7 @@ import static android.provider.Settings.Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENA import android.content.Context; import android.provider.Settings; +import android.util.Log; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; @@ -31,6 +32,7 @@ import com.android.settings.overlay.FeatureFactory; public class AssistGestureSettingsPreferenceController extends GesturePreferenceController { + private static final String TAG = "AssistGesture"; private static final String PREF_KEY_VIDEO = "gesture_assist_video"; private static final String SECURE_KEY_ASSIST = ASSIST_GESTURE_ENABLED; @@ -55,8 +57,11 @@ public class AssistGestureSettingsPreferenceController extends GesturePreference @Override public int getAvailabilityStatus() { - final boolean isAvailable = mAssistOnly ? mFeatureProvider.isSupported(mContext) - : mFeatureProvider.isSensorAvailable(mContext); + final boolean isSupported = mFeatureProvider.isSupported(mContext); + final boolean isSensorAvailable = mFeatureProvider.isSensorAvailable(mContext); + final boolean isAvailable = mAssistOnly ? isSupported : isSensorAvailable; + Log.d(TAG, "mAssistOnly:" + mAssistOnly + ", isSupported:" + isSupported + + ", isSensorAvailable:" + isSensorAvailable); return isAvailable ? AVAILABLE : UNSUPPORTED_ON_DEVICE; }