Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed59922c authored by Joshua McCloskey's avatar Joshua McCloskey Committed by Joshua Mccloskey
Browse files

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
parent 441a2024
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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"
+16 −0
Original line number Diff line number Diff line
@@ -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
+21 −0
Original line number Diff line number Diff line
@@ -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
+14 −0
Original line number Diff line number Diff line
@@ -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() {
+24 −0
Original line number Diff line number Diff line
@@ -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