Remove face/fignerprint search if not present
Test: Verified manually with a device that if face/fingerprint are not present they do not show up. Fixes: 350599580 Flag: EXEMPT bugfix Change-Id: I6a691d2985e4839336e9c08dfa6c97abe23f43f2
This commit is contained in:
committed by
Joshua Mccloskey
parent
441a202444
commit
ed59922ca8
@@ -18,7 +18,8 @@
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:title="@string/security_settings_fingerprint_preference_title">
|
||||
android:title="@string/security_settings_fingerprint_preference_title"
|
||||
settings:searchable="false">
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="security_settings_fingerprints_enrolled"
|
||||
|
@@ -159,11 +159,27 @@ public class FingerprintSettings extends SubSettings {
|
||||
|
||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||
new BaseSearchIndexProvider(R.xml.security_settings_fingerprint) {
|
||||
|
||||
@Override
|
||||
protected boolean isPageSearchEnabled(Context context) {
|
||||
return super.isPageSearchEnabled(context) &&
|
||||
hasEnrolledFingerprints(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AbstractPreferenceController>
|
||||
createPreferenceControllers(Context context) {
|
||||
return createThePreferenceControllers(context);
|
||||
}
|
||||
|
||||
private boolean hasEnrolledFingerprints(Context context) {
|
||||
final FingerprintManager fingerprintManager =
|
||||
Utils.getFingerprintManagerOrNull(context);
|
||||
if (fingerprintManager != null) {
|
||||
return fingerprintManager.hasEnrolledTemplates(UserHandle.myUserId());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
private static List<AbstractPreferenceController> createThePreferenceControllers(Context
|
||||
|
@@ -15,10 +15,15 @@
|
||||
*/
|
||||
package com.android.settings.security;
|
||||
|
||||
import static com.android.settings.biometrics.face.FaceSettings.isFaceHardwareDetected;
|
||||
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.isFingerprintHardwareDetected;
|
||||
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.biometrics.combination.CombinedBiometricStatusPreferenceController;
|
||||
import com.android.settings.biometrics.face.FaceStatusPreferenceController;
|
||||
@@ -45,6 +50,10 @@ public class SecuritySettings extends DashboardFragment {
|
||||
public static final int CHANGE_TRUST_AGENT_SETTINGS = 126;
|
||||
public static final int UNIFY_LOCK_CONFIRM_PROFILE_REQUEST = 129;
|
||||
public static final int UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 130;
|
||||
@VisibleForTesting
|
||||
static final String KEY_FINGERPRINT_SETTINGS = "fingerprint_settings";
|
||||
@VisibleForTesting
|
||||
static final String KEY_FACE_SETTINGS = "face_settings";
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
@@ -131,6 +140,18 @@ public class SecuritySettings extends DashboardFragment {
|
||||
.hasAlternativeSecuritySettingsFragment()
|
||||
&& !SafetyCenterManagerWrapper.get().isEnabled(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getNonIndexableKeys(Context context) {
|
||||
final List<String> keys = super.getNonIndexableKeys(context);
|
||||
if (!isFingerprintHardwareDetected(context)) {
|
||||
keys.add(KEY_FINGERPRINT_SETTINGS);
|
||||
}
|
||||
if (!isFaceHardwareDetected(context)) {
|
||||
keys.add(KEY_FACE_SETTINGS);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
|
@@ -40,6 +40,7 @@ import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.hardware.biometrics.BiometricManager;
|
||||
import android.hardware.biometrics.ComponentInfoInternal;
|
||||
@@ -67,6 +68,7 @@ import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.settings.password.ChooseLockSettingsHelper;
|
||||
import com.android.settings.password.ConfirmDeviceCredentialActivity;
|
||||
import com.android.settings.search.BaseSearchIndexProvider;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settings.testutils.shadow.ShadowFragment;
|
||||
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
|
||||
@@ -114,6 +116,8 @@ public class FingerprintSettingsFragmentTest {
|
||||
@Mock
|
||||
private FragmentTransaction mFragmentTransaction;
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private BiometricManager mBiometricManager;
|
||||
|
||||
@Captor
|
||||
@@ -283,6 +287,16 @@ public class FingerprintSettingsFragmentTest {
|
||||
assertThat(mFragment.isVisible()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNotIndexable_whenDisabled() {
|
||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||
doReturn(false)
|
||||
.when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
|
||||
|
||||
final BaseSearchIndexProvider provider = FingerprintSettingsFragment.SEARCH_INDEX_DATA_PROVIDER;
|
||||
assertThat(provider.getDynamicRawDataToIndex(mContext, true)).isEmpty();
|
||||
}
|
||||
|
||||
@Ignore("b/353726774")
|
||||
@Test
|
||||
public void testAddButtonWorksAfterRemovalError() {
|
||||
|
@@ -339,6 +339,30 @@ public class SecuritySettingsTest {
|
||||
assertThat(mPreferenceCombined.isVisible()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noFace_isNotIndexable() throws Exception {
|
||||
when(mFaceManager.isHardwareDetected()).thenReturn(false);
|
||||
final BaseSearchIndexProvider indexProvider = SecuritySettings.SEARCH_INDEX_DATA_PROVIDER;
|
||||
|
||||
final List<String> allXmlKeys = TestUtils.getAllXmlKeys(mContext, indexProvider);
|
||||
final List<String> nonIndexableKeys = indexProvider.getNonIndexableKeys(mContext);
|
||||
allXmlKeys.removeAll(nonIndexableKeys);
|
||||
|
||||
assertThat(allXmlKeys).doesNotContain(SecuritySettings.KEY_FACE_SETTINGS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noFingerprint_isNotIndexable() throws Exception {
|
||||
when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
|
||||
final BaseSearchIndexProvider indexProvider = SecuritySettings.SEARCH_INDEX_DATA_PROVIDER;
|
||||
|
||||
final List<String> allXmlKeys = TestUtils.getAllXmlKeys(mContext, indexProvider);
|
||||
final List<String> nonIndexableKeys = indexProvider.getNonIndexableKeys(mContext);
|
||||
allXmlKeys.removeAll(nonIndexableKeys);
|
||||
|
||||
assertThat(allXmlKeys).doesNotContain(SecuritySettings.KEY_FINGERPRINT_SETTINGS);
|
||||
}
|
||||
|
||||
boolean isFacePrefAvailable(List<AbstractPreferenceController> controllers) {
|
||||
return controllers.stream().filter(
|
||||
controller -> controller instanceof FaceStatusPreferenceController
|
||||
|
Reference in New Issue
Block a user