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
|
<PreferenceScreen
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
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
|
<PreferenceCategory
|
||||||
android:key="security_settings_fingerprints_enrolled"
|
android:key="security_settings_fingerprints_enrolled"
|
||||||
|
@@ -159,11 +159,27 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
|
|
||||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
new BaseSearchIndexProvider(R.xml.security_settings_fingerprint) {
|
new BaseSearchIndexProvider(R.xml.security_settings_fingerprint) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isPageSearchEnabled(Context context) {
|
||||||
|
return super.isPageSearchEnabled(context) &&
|
||||||
|
hasEnrolledFingerprints(context);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AbstractPreferenceController>
|
public List<AbstractPreferenceController>
|
||||||
createPreferenceControllers(Context context) {
|
createPreferenceControllers(Context context) {
|
||||||
return createThePreferenceControllers(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
|
private static List<AbstractPreferenceController> createThePreferenceControllers(Context
|
||||||
|
@@ -15,10 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.security;
|
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.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.biometrics.combination.CombinedBiometricStatusPreferenceController;
|
import com.android.settings.biometrics.combination.CombinedBiometricStatusPreferenceController;
|
||||||
import com.android.settings.biometrics.face.FaceStatusPreferenceController;
|
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 CHANGE_TRUST_AGENT_SETTINGS = 126;
|
||||||
public static final int UNIFY_LOCK_CONFIRM_PROFILE_REQUEST = 129;
|
public static final int UNIFY_LOCK_CONFIRM_PROFILE_REQUEST = 129;
|
||||||
public static final int UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 130;
|
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
|
@Override
|
||||||
public int getMetricsCategory() {
|
public int getMetricsCategory() {
|
||||||
@@ -131,6 +140,18 @@ public class SecuritySettings extends DashboardFragment {
|
|||||||
.hasAlternativeSecuritySettingsFragment()
|
.hasAlternativeSecuritySettingsFragment()
|
||||||
&& !SafetyCenterManagerWrapper.get().isEnabled(context);
|
&& !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
|
@Override
|
||||||
|
@@ -40,6 +40,7 @@ import static org.robolectric.Shadows.shadowOf;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
import android.hardware.biometrics.BiometricManager;
|
import android.hardware.biometrics.BiometricManager;
|
||||||
import android.hardware.biometrics.ComponentInfoInternal;
|
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.ChooseLockSettingsHelper;
|
||||||
import com.android.settings.password.ConfirmDeviceCredentialActivity;
|
import com.android.settings.password.ConfirmDeviceCredentialActivity;
|
||||||
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
import com.android.settings.testutils.shadow.ShadowFragment;
|
import com.android.settings.testutils.shadow.ShadowFragment;
|
||||||
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
|
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
|
||||||
@@ -114,6 +116,8 @@ public class FingerprintSettingsFragmentTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private FragmentTransaction mFragmentTransaction;
|
private FragmentTransaction mFragmentTransaction;
|
||||||
@Mock
|
@Mock
|
||||||
|
private PackageManager mPackageManager;
|
||||||
|
@Mock
|
||||||
private BiometricManager mBiometricManager;
|
private BiometricManager mBiometricManager;
|
||||||
|
|
||||||
@Captor
|
@Captor
|
||||||
@@ -283,6 +287,16 @@ public class FingerprintSettingsFragmentTest {
|
|||||||
assertThat(mFragment.isVisible()).isTrue();
|
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")
|
@Ignore("b/353726774")
|
||||||
@Test
|
@Test
|
||||||
public void testAddButtonWorksAfterRemovalError() {
|
public void testAddButtonWorksAfterRemovalError() {
|
||||||
|
@@ -339,6 +339,30 @@ public class SecuritySettingsTest {
|
|||||||
assertThat(mPreferenceCombined.isVisible()).isFalse();
|
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) {
|
boolean isFacePrefAvailable(List<AbstractPreferenceController> controllers) {
|
||||||
return controllers.stream().filter(
|
return controllers.stream().filter(
|
||||||
controller -> controller instanceof FaceStatusPreferenceController
|
controller -> controller instanceof FaceStatusPreferenceController
|
||||||
|
Reference in New Issue
Block a user