1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.fingerprint; 18 19 import static com.android.settings.core.BasePreferenceController.AVAILABLE; 20 import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; 21 import static com.google.common.truth.Truth.assertThat; 22 import static org.mockito.ArgumentMatchers.anyInt; 23 import static org.mockito.Mockito.mock; 24 import static org.mockito.Mockito.spy; 25 import static org.mockito.Mockito.when; 26 27 import android.content.Context; 28 import android.content.pm.PackageManager; 29 import android.hardware.fingerprint.Fingerprint; 30 import android.hardware.fingerprint.FingerprintManager; 31 import android.os.UserManager; 32 import android.support.v7.preference.Preference; 33 34 import com.android.internal.widget.LockPatternUtils; 35 import com.android.settings.R; 36 import com.android.settings.testutils.FakeFeatureFactory; 37 import com.android.settings.testutils.SettingsRobolectricTestRunner; 38 39 import org.junit.Before; 40 import org.junit.Test; 41 import org.junit.runner.RunWith; 42 import org.mockito.Mock; 43 import org.mockito.MockitoAnnotations; 44 import org.robolectric.RuntimeEnvironment; 45 import org.robolectric.shadows.ShadowApplication; 46 47 import java.util.Collections; 48 49 @RunWith(SettingsRobolectricTestRunner.class) 50 public class FingerprintStatusPreferenceControllerTest { 51 52 @Mock 53 private LockPatternUtils mLockPatternUtils; 54 @Mock 55 private FingerprintManager mFingerprintManager; 56 @Mock 57 private UserManager mUm; 58 @Mock 59 private PackageManager mPackageManager; 60 61 private FakeFeatureFactory mFeatureFactory; 62 private Context mContext; 63 private FingerprintStatusPreferenceController mController; 64 private Preference mPreference; 65 66 @Before 67 public void setUp() { 68 MockitoAnnotations.initMocks(this); 69 mContext = spy(RuntimeEnvironment.application); 70 when(mContext.getPackageManager()).thenReturn(mPackageManager); 71 when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)).thenReturn(true); 72 ShadowApplication.getInstance().setSystemService(Context.FINGERPRINT_SERVICE, 73 mFingerprintManager); 74 ShadowApplication.getInstance().setSystemService(Context.USER_SERVICE, mUm); 75 mPreference = new Preference(mContext); 76 mFeatureFactory = FakeFeatureFactory.setupForTest(); 77 when(mFeatureFactory.securityFeatureProvider.getLockPatternUtils(mContext)) 78 .thenReturn(mLockPatternUtils); 79 when(mUm.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[] {1234}); 80 mController = new FingerprintStatusPreferenceController(mContext); 81 } 82 83 @Test 84 public void getAvailabilityStatus_noFingerprintManger_DISABLED() { 85 when(mFingerprintManager.isHardwareDetected()).thenReturn(false); 86 87 assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); 88 } 89 90 @Test 91 public void getAvailabilityStatus_hasFingerprintManger_AVAILABLE() { 92 when(mFingerprintManager.isHardwareDetected()).thenReturn(true); 93 94 assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); 95 } 96 97 @Test 98 public void updateState_notSupported_shouldDoNothing() { 99 when(mFingerprintManager.isHardwareDetected()).thenReturn(false); 100 101 mController.updateState(mPreference); 102 103 assertThat(mPreference.isVisible()).isFalse(); 104 } 105 106 @Test 107 public void updateState_noFingerprint_shouldShowDefaultSummary() { 108 when(mFingerprintManager.isHardwareDetected()).thenReturn(true); 109 110 mController.updateState(mPreference); 111 112 assertThat(mPreference.getSummary()).isEqualTo( 113 mContext.getString(R.string.security_settings_fingerprint_preference_summary_none)); 114 assertThat(mPreference.isVisible()).isTrue(); 115 assertThat(mPreference.getOnPreferenceClickListener()).isNotNull(); 116 } 117 118 @Test 119 public void updateState_hasFingerprint_shouldShowSummary() { 120 when(mFingerprintManager.isHardwareDetected()).thenReturn(true); 121 when(mFingerprintManager.getEnrolledFingerprints(anyInt())) 122 .thenReturn(Collections.singletonList(mock(Fingerprint.class))); 123 124 mController.updateState(mPreference); 125 126 assertThat(mPreference.getSummary()).isEqualTo(mContext.getResources().getQuantityString( 127 R.plurals.security_settings_fingerprint_preference_summary, 1, 1)); 128 assertThat(mPreference.isVisible()).isTrue(); 129 assertThat(mPreference.getOnPreferenceClickListener()).isNotNull(); 130 } 131 } 132