• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
setUp()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
getAvailabilityStatus_noFingerprintManger_DISABLED()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
getAvailabilityStatus_hasFingerprintManger_AVAILABLE()91     public void getAvailabilityStatus_hasFingerprintManger_AVAILABLE() {
92         when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
93 
94         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
95     }
96 
97     @Test
updateState_notSupported_shouldDoNothing()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
updateState_noFingerprint_shouldShowDefaultSummary()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
updateState_hasFingerprint_shouldShowSummary()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