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

Commit af63fc24 authored by TreeHugger Robot's avatar TreeHugger Robot 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-mr1-dev
parents 0d378e04 82792cc5
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1222,6 +1222,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
@@ -16,12 +16,15 @@

package com.android.settings.dashboard.suggestions;


import android.app.ActivityManager;

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 android.provider.Settings.Secure;

import com.android.internal.logging.nano.MetricsProto;
@@ -59,6 +62,7 @@ import java.util.List;
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;
@@ -84,6 +88,12 @@ public class SuggestionFeatureProviderImplTest {
    private Tile mSuggestion;
    @Mock
    private ActivityManager mActivityManager;
    @Mock
    private PackageManager mPackageManager;
    @Mock
    private FingerprintManager mFingerprintManager;
    @Mock
    private SharedPreferences mSharedPreferences;

    private FakeFeatureFactory mFactory;
    private SuggestionFeatureProviderImpl mProvider;
@@ -93,9 +103,14 @@ 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);
        when(mContext.getSystemService(Context.ACTIVITY_SERVICE)).thenReturn(mActivityManager);
        when(mActivityManager.isLowRamDevice()).thenReturn(false);

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

@@ -210,39 +225,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
@@ -360,6 +392,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() {
        stubFingerprintSupported(false);
@@ -101,6 +112,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