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

Commit 5e707ccb authored by Kevin Chyn's avatar Kevin Chyn Committed by Android (Google) Code Review
Browse files

Merge "Fingerprint swipe settings and suggestions should not show if hardware...

Merge "Fingerprint swipe settings and suggestions should not show if hardware unavailable" into oc-dr1-dev
parents 8f5de15b 2a2dcb52
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1253,6 +1253,11 @@ public final class Utils extends com.android.settingslib.Utils {
        }
    }

    public static boolean hasFingerprintHardware(Context context) {
        FingerprintManager fingerprintManager = getFingerprintManagerOrNull(context);
        return fingerprintManager != null && fingerprintManager.isHardwareDetected();
    }

    /**
     * Launches an intent which may optionally have a user id defined.
     * @param fragment Fragment to use to launch the activity.
+5 −3
Original line number Diff line number Diff line
@@ -65,12 +65,14 @@ public class SuggestionsChecks {
        } else if (className.equals(WifiCallingSuggestionActivity.class.getName())) {
            return isWifiCallingUnavailableOrEnabled();
        } else if (className.equals(FingerprintSuggestionActivity.class.getName())) {
            return isNotSingleFingerprintEnrolled() || !isFingerprintEnabled();
            return !Utils.hasFingerprintHardware(mContext) || !isFingerprintEnabled()
                    || isNotSingleFingerprintEnrolled();
        } else if (className.equals(ScreenLockSuggestionActivity.class.getName())) {
            return isDeviceSecured();
        } else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) {
            FingerprintManager manager = Utils.getFingerprintManagerOrNull(mContext);
            if (manager == null || !isFingerprintEnabled()) {
            final FingerprintManager manager = Utils.getFingerprintManagerOrNull(mContext);
            if (manager == null || !isFingerprintEnabled()
                    || !Utils.hasFingerprintHardware(mContext)) {
                return true;
            }
            return manager.hasEnrolledFingerprints();
+2 −2
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ import android.provider.Settings;
import android.support.v7.preference.Preference;

import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.Utils;
import com.android.settings.search.DatabaseIndexingUtils;
import com.android.settings.search.InlineSwitchPayload;
import com.android.settings.search.ResultPayload;
@@ -50,7 +50,7 @@ public class SwipeToNotificationPreferenceController extends GesturePreferenceCo
    }

    private static boolean isGestureAvailable(Context context) {
        return context.getResources()
        return Utils.hasFingerprintHardware(context) && context.getResources()
                .getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys);
    }

+56 −19
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settings.dashboard.suggestions;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.never;
@@ -29,7 +30,10 @@ import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Settings.AmbientDisplaySuggestionActivity;
@@ -72,6 +76,12 @@ public class SuggestionFeatureProviderImplTest {
    private SuggestionParser mSuggestionParser;
    @Mock
    private Tile mSuggestion;
    @Mock
    private PackageManager mPackageManager;
    @Mock
    private FingerprintManager mFingerprintManager;
    @Mock
    private SharedPreferences mSharedPreferences;

    private FakeFeatureFactory mFactory;
    private SuggestionFeatureProviderImpl mProvider;
@@ -81,7 +91,12 @@ public class SuggestionFeatureProviderImplTest {
        MockitoAnnotations.initMocks(this);
        FakeFeatureFactory.setupForTest(mContext);
        mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
        when(mContext.getPackageManager()).thenReturn(mPackageManager);
        // Explicit casting to object due to MockitoCast bug
        when((Object) mContext.getSystemService(FingerprintManager.class))
                .thenReturn(mFingerprintManager);
        when(mContext.getApplicationContext()).thenReturn(RuntimeEnvironment.application);

        mSuggestion.intent = new Intent().setClassName("pkg", "cls");
        mSuggestion.category = "category";

@@ -196,39 +211,56 @@ public class SuggestionFeatureProviderImplTest {
    }

    @Test
    @Config(shadows = SettingsShadowResources.class)
    public void isSuggestionCompleted_swipeToNotification_trueWhenNotHardwareNotAvailable() {
        stubFingerprintSupported(true);
        when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
        when(mContext.getResources().
                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
                .thenReturn(true);

        assertThat(mProvider.isSuggestionCompleted(mContext,
                new ComponentName(mContext, SwipeToNotificationSuggestionActivity.class))).isTrue();
    }

    @Test
    public void isSuggestionCompleted_swipeToNotification_trueWhenNotAvailable() {
        SettingsShadowResources.overrideResource(
                com.android.internal.R.bool.config_supportSystemNavigationKeys, false);
        stubFingerprintSupported(true);
        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
        when(mContext.getResources().
                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
                .thenReturn(false);

        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
                new ComponentName(RuntimeEnvironment.application,
                        SwipeToNotificationSuggestionActivity.class))).isTrue();
        assertThat(mProvider.isSuggestionCompleted(mContext,
                new ComponentName(mContext, SwipeToNotificationSuggestionActivity.class))).isTrue();
    }

    @Test
    @Config(shadows = SettingsShadowResources.class)
    public void isSuggestionCompleted_swipeToNotification_falseWhenNotVisited() {
        SettingsShadowResources.overrideResource(
                com.android.internal.R.bool.config_supportSystemNavigationKeys, true);
        stubFingerprintSupported(true);
        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
        when(mContext.getResources().
                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
                .thenReturn(true);
        // No stored value in shared preferences if not visited yet.

        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
                new ComponentName(RuntimeEnvironment.application,
        assertThat(mProvider.isSuggestionCompleted(mContext,
                new ComponentName(mContext,
                        SwipeToNotificationSuggestionActivity.class))).isFalse();
    }

    @Test
    @Config(shadows = SettingsShadowResources.class)
    public void isSuggestionCompleted_swipeToNotification_trueWhenVisited() {
        SettingsShadowResources.overrideResource(
                com.android.internal.R.bool.config_supportSystemNavigationKeys, true);
        mProvider.getSharedPrefs(RuntimeEnvironment.application).edit().putBoolean(
                SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit();
        stubFingerprintSupported(true);
        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
        when(mContext.getResources().
                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
                .thenReturn(true);
        when(mContext.getSharedPreferences(anyString(), anyInt())).thenReturn(mSharedPreferences);
        when(mSharedPreferences.getBoolean(
                SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE, false)).thenReturn(true);

        assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application,
                new ComponentName(RuntimeEnvironment.application,
                        SwipeToNotificationSuggestionActivity.class))).isTrue();
        assertThat(mProvider.isSuggestionCompleted(mContext,
                new ComponentName(mContext, SwipeToNotificationSuggestionActivity.class))).isTrue();
    }

    @Test
@@ -313,6 +345,11 @@ public class SuggestionFeatureProviderImplTest {
                        PackageManager.DONT_KILL_APP);
    }

    private void stubFingerprintSupported(boolean enabled) {
        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT))
                .thenReturn(enabled);
    }

    @Test
    public void filterExclusiveSuggestions_shouldOnlyKeepFirst3() {
        final List<Tile> suggestions = new ArrayList<>();
+12 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ public class SuggestionsChecksTest {
    public void testFingerprintEnrollmentIntroductionIsCompleteWhenFingerprintAdded() {
        stubFingerprintSupported(true);
        when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(true);
        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
        Tile tile = createFingerprintTile();
        assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isTrue();
    }
@@ -86,10 +87,20 @@ public class SuggestionsChecksTest {
    public void testFingerprintEnrollmentIntroductionIsNotCompleteWhenNoFingerprintAdded() {
        stubFingerprintSupported(true);
        when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(false);
        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
        Tile tile = createFingerprintTile();
        assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isFalse();
    }

    @Test
    public void testFingerprintEnrollmentIntroductionIsCompleteWhenHardwareNotDetected() {
        stubFingerprintSupported(true);
        when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(false);
        when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
        Tile tile = createFingerprintTile();
        assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isTrue();
    }


    @Test
    public void testFingerprintEnrollmentIntroductionIsCompleteWhenFingerprintNotSupported() {
@@ -102,6 +113,7 @@ public class SuggestionsChecksTest {
    public void testFingerprintEnrollmentIntroductionIsCompleteWhenFingerprintDisabled() {
        stubFingerprintSupported(true);
        when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(false);
        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
        when(mDevicePolicyManager.getKeyguardDisabledFeatures(any(), anyInt()))
                .thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);

Loading