• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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.development;
18 
19 import static com.android.settings.development.DevelopmentOptionsActivityRequestCodes.REQUEST_CODE_ENABLE_OEM_UNLOCK;
20 import static com.google.common.truth.Truth.assertThat;
21 import static org.mockito.Mockito.doNothing;
22 import static org.mockito.Mockito.doReturn;
23 import static org.mockito.Mockito.mock;
24 import static org.mockito.Mockito.spy;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.when;
27 
28 import android.app.Activity;
29 import android.app.FragmentManager;
30 import android.content.Context;
31 import android.content.res.Resources;
32 import android.os.UserManager;
33 import android.service.oemlock.OemLockManager;
34 import android.support.v7.preference.PreferenceScreen;
35 import android.telephony.TelephonyManager;
36 
37 import com.android.settings.testutils.SettingsRobolectricTestRunner;
38 import com.android.settingslib.RestrictedSwitchPreference;
39 
40 import org.junit.Before;
41 import org.junit.Test;
42 import org.junit.runner.RunWith;
43 import org.mockito.Answers;
44 import org.mockito.Mock;
45 import org.mockito.MockitoAnnotations;
46 
47 @RunWith(SettingsRobolectricTestRunner.class)
48 public class OemUnlockPreferenceControllerTest {
49 
50     @Mock
51     private Context mContext;
52     @Mock
53     private Activity mActivity;
54     @Mock
55     private DevelopmentSettingsDashboardFragment mFragment;
56     @Mock
57     private RestrictedSwitchPreference mPreference;
58     @Mock
59     private PreferenceScreen mPreferenceScreen;
60     @Mock
61     private OemLockManager mOemLockManager;
62     @Mock
63     private UserManager mUserManager;
64     @Mock
65     private TelephonyManager mTelephonyManager;
66     @Mock
67     private Resources mResources;
68     private OemUnlockPreferenceController mController;
69 
70     @Before
setup()71     public void setup() {
72         MockitoAnnotations.initMocks(this);
73         when(mContext.getSystemService(Context.OEM_LOCK_SERVICE)).thenReturn(mOemLockManager);
74         when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
75         when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
76         when(mContext.getResources()).thenReturn(mResources);
77         mController = new OemUnlockPreferenceController(mContext, mActivity, mFragment);
78         when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
79             .thenReturn(mPreference);
80         when(mFragment.getChildFragmentManager())
81             .thenReturn(mock(FragmentManager.class, Answers.RETURNS_DEEP_STUBS));
82         mController.displayPreference(mPreferenceScreen);
83     }
84 
85     @Test
isAvailable_shouldReturnTrueWhenOemLockManagerIsNotNull()86     public void isAvailable_shouldReturnTrueWhenOemLockManagerIsNotNull() {
87         boolean returnValue = mController.isAvailable();
88 
89         assertThat(returnValue).isTrue();
90     }
91 
92     @Test
isAvailable_shouldReturnFalseWhenOemLockManagerIsNull()93     public void isAvailable_shouldReturnFalseWhenOemLockManagerIsNull() {
94         when(mContext.getSystemService(Context.OEM_LOCK_SERVICE)).thenReturn(null);
95         mController = new OemUnlockPreferenceController(mContext, mActivity, mFragment);
96         boolean returnValue = mController.isAvailable();
97 
98         assertThat(returnValue).isFalse();
99     }
100 
101     @Test
onPreferenceChanged_turnOnUnlock()102     public void onPreferenceChanged_turnOnUnlock() {
103         mController = spy(mController);
104         doReturn(false).when(mController).showKeyguardConfirmation(mResources,
105                 REQUEST_CODE_ENABLE_OEM_UNLOCK);
106         doNothing().when(mController).confirmEnableOemUnlock();
107 
108         mController.onPreferenceChange(null, true);
109 
110         verify(mController).confirmEnableOemUnlock();
111     }
112 
113     @Test
onPreferenceChanged_turnOffUnlock()114     public void onPreferenceChanged_turnOffUnlock() {
115         mController = spy(mController);
116         mController.onPreferenceChange(null, false);
117         doReturn(false).when(mController).isBootloaderUnlocked();
118 
119         verify(mFragment).getChildFragmentManager();
120     }
121 
122     @Test
updateState_preferenceShouldBeCheckedAndShouldBeDisabled()123     public void updateState_preferenceShouldBeCheckedAndShouldBeDisabled() {
124         mController = spy(mController);
125         doReturn(true).when(mController).isOemUnlockedAllowed();
126         doReturn(true).when(mController).isOemUnlockAllowedByUserAndCarrier();
127         doReturn(true).when(mController).isBootloaderUnlocked();
128 
129         mController.updateState(mPreference);
130 
131         verify(mPreference).setChecked(true);
132         verify(mPreference).setEnabled(false);
133     }
134 
135     @Test
updateState_preferenceShouldBeUncheckedAndShouldBeDisabled()136     public void updateState_preferenceShouldBeUncheckedAndShouldBeDisabled() {
137         mController = spy(mController);
138         doReturn(false).when(mController).isOemUnlockedAllowed();
139         doReturn(true).when(mController).isOemUnlockAllowedByUserAndCarrier();
140         doReturn(true).when(mController).isBootloaderUnlocked();
141 
142         mController.updateState(mPreference);
143 
144         verify(mPreference).setChecked(false);
145         verify(mPreference).setEnabled(false);
146     }
147 
148     @Test
updateState_preferenceShouldBeCheckedAndShouldBeEnabled()149     public void updateState_preferenceShouldBeCheckedAndShouldBeEnabled() {
150         mController = spy(mController);
151         doReturn(true).when(mController).isOemUnlockedAllowed();
152         doReturn(true).when(mController).isOemUnlockAllowedByUserAndCarrier();
153         doReturn(false).when(mController).isBootloaderUnlocked();
154 
155         mController.updateState(mPreference);
156 
157         verify(mPreference).setChecked(true);
158         verify(mPreference).setEnabled(true);
159     }
160 
161     @Test
onActivityResult_shouldReturnTrue()162     public void onActivityResult_shouldReturnTrue() {
163         final boolean result = mController.onActivityResult(REQUEST_CODE_ENABLE_OEM_UNLOCK,
164                 Activity.RESULT_OK, null);
165 
166         assertThat(result).isTrue();
167     }
168 
169     @Test
onActivityResult_shouldReturnFalse()170     public void onActivityResult_shouldReturnFalse() {
171         final boolean result = mController.onActivityResult(123454, 1434, null);
172 
173         assertThat(result).isFalse();
174     }
175 
176     @Test
onDeveloperOptionsEnabled_preferenceShouldCheckRestriction()177     public void onDeveloperOptionsEnabled_preferenceShouldCheckRestriction() {
178         mController = spy(mController);
179         doReturn(false).when(mController).isOemUnlockAllowedByUserAndCarrier();
180         doReturn(false).when(mController).isBootloaderUnlocked();
181         when(mPreference.isEnabled()).thenReturn(true);
182 
183         mController.onDeveloperOptionsEnabled();
184 
185         verify(mPreference).checkRestrictionAndSetDisabled(UserManager.DISALLOW_FACTORY_RESET);
186 
187     }
188 
189     @Test
onOemUnlockConfirmed_oemManagerShouldSetUnlockAllowedByUser()190     public void onOemUnlockConfirmed_oemManagerShouldSetUnlockAllowedByUser() {
191         mController.onOemUnlockConfirmed();
192 
193         verify(mOemLockManager).setOemUnlockAllowedByUser(true);
194     }
195 }
196