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


import com.android.settings.R;
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.DatabaseIndexingUtils;
import com.android.settings.search.InlineSwitchPayload;
import com.android.settings.search.InlineSwitchPayload;
import com.android.settings.search.ResultPayload;
import com.android.settings.search.ResultPayload;
@@ -50,7 +50,7 @@ public class SwipeToNotificationPreferenceController extends GesturePreferenceCo
    }
    }


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


+56 −19
Original line number Original line 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 com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.never;
@@ -29,7 +30,10 @@ import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;

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


    private FakeFeatureFactory mFactory;
    private FakeFeatureFactory mFactory;
    private SuggestionFeatureProviderImpl mProvider;
    private SuggestionFeatureProviderImpl mProvider;
@@ -81,7 +91,12 @@ public class SuggestionFeatureProviderImplTest {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        FakeFeatureFactory.setupForTest(mContext);
        FakeFeatureFactory.setupForTest(mContext);
        mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(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);
        when(mContext.getApplicationContext()).thenReturn(RuntimeEnvironment.application);

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


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


    @Test
    @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() {
    public void isSuggestionCompleted_swipeToNotification_trueWhenNotAvailable() {
        SettingsShadowResources.overrideResource(
        stubFingerprintSupported(true);
                com.android.internal.R.bool.config_supportSystemNavigationKeys, false);
        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
        when(mContext.getResources().
                getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys))
                .thenReturn(false);


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


    @Test
    @Test
    @Config(shadows = SettingsShadowResources.class)
    public void isSuggestionCompleted_swipeToNotification_falseWhenNotVisited() {
    public void isSuggestionCompleted_swipeToNotification_falseWhenNotVisited() {
        SettingsShadowResources.overrideResource(
        stubFingerprintSupported(true);
                com.android.internal.R.bool.config_supportSystemNavigationKeys, 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.
        // No stored value in shared preferences if not visited yet.


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


    @Test
    @Test
    @Config(shadows = SettingsShadowResources.class)
    public void isSuggestionCompleted_swipeToNotification_trueWhenVisited() {
    public void isSuggestionCompleted_swipeToNotification_trueWhenVisited() {
        SettingsShadowResources.overrideResource(
        stubFingerprintSupported(true);
                com.android.internal.R.bool.config_supportSystemNavigationKeys, true);
        when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
        mProvider.getSharedPrefs(RuntimeEnvironment.application).edit().putBoolean(
        when(mContext.getResources().
                SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit();
                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,
        assertThat(mProvider.isSuggestionCompleted(mContext,
                new ComponentName(RuntimeEnvironment.application,
                new ComponentName(mContext, SwipeToNotificationSuggestionActivity.class))).isTrue();
                        SwipeToNotificationSuggestionActivity.class))).isTrue();
    }
    }


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


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

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


Loading