• 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.wifi;
18 
19 import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
20 import static android.Manifest.permission.ACCESS_FINE_LOCATION;
21 import static android.os.UserManager.DISALLOW_ADD_WIFI_CONFIG;
22 import static android.os.UserManager.DISALLOW_CONFIG_WIFI;
23 
24 import static com.android.settings.wifi.WifiDialogActivity.REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER;
25 import static com.android.settings.wifi.WifiDialogActivity.RESULT_CONNECTED;
26 import static com.android.settings.wifi.WifiDialogActivity.RESULT_OK;
27 
28 import static com.google.common.truth.Truth.assertThat;
29 
30 import static org.mockito.ArgumentMatchers.any;
31 import static org.mockito.ArgumentMatchers.anyLong;
32 import static org.mockito.Mockito.doNothing;
33 import static org.mockito.Mockito.mock;
34 import static org.mockito.Mockito.never;
35 import static org.mockito.Mockito.spy;
36 import static org.mockito.Mockito.verify;
37 import static org.mockito.Mockito.when;
38 
39 import android.app.KeyguardManager;
40 import android.content.Intent;
41 import android.content.pm.PackageManager;
42 import android.net.wifi.WifiConfiguration;
43 import android.net.wifi.WifiManager;
44 import android.os.UserManager;
45 
46 import com.android.settings.testutils.FakeFeatureFactory;
47 import com.android.settingslib.wifi.AccessPoint;
48 import com.android.wifitrackerlib.NetworkDetailsTracker;
49 import com.android.wifitrackerlib.WifiEntry;
50 
51 import com.google.android.setupcompat.util.WizardManagerHelper;
52 
53 import org.junit.Before;
54 import org.junit.Test;
55 import org.junit.runner.RunWith;
56 import org.mockito.Mock;
57 import org.mockito.MockitoAnnotations;
58 import org.robolectric.Robolectric;
59 import org.robolectric.RobolectricTestRunner;
60 
61 @RunWith(RobolectricTestRunner.class)
62 public class WifiDialogActivityTest {
63 
64     static final String CALLING_PACKAGE = "calling_package";
65     static final int REQUEST_CODE = REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER;
66     private static final String SSID = "SSID";
67 
68     @Mock
69     UserManager mUserManager;
70     @Mock
71     PackageManager mPackageManager;
72     @Mock
73     WifiDialog mWifiDialog;
74     @Mock
75     WifiConfiguration mWifiConfiguration;
76     @Mock
77     AccessPoint mAccessPoint;
78     @Mock
79     WifiDialog2 mWifiDialog2;
80     @Mock
81     WifiConfigController2 mWifiConfiguration2;
82     @Mock
83     WifiEntry mWifiEntry;
84     @Mock
85     Intent mResultData;
86     @Mock
87     WifiConfigController mController;
88     @Mock
89     KeyguardManager mKeyguardManager;
90 
91     WifiDialogActivity mActivity;
92 
93     @Before
setUp()94     public void setUp() {
95         MockitoAnnotations.initMocks(this);
96         when(mWifiDialog.getController()).thenReturn(mController);
97         mWifiConfiguration.SSID = SSID;
98         when(mController.getConfig()).thenReturn(mWifiConfiguration);
99         when(mController.getAccessPoint()).thenReturn(mAccessPoint);
100         when(mWifiDialog2.getController()).thenReturn(mWifiConfiguration2);
101         when(mWifiConfiguration2.getWifiEntry()).thenReturn(mWifiEntry);
102         when(mWifiEntry.canConnect()).thenReturn(true);
103         FakeFeatureFactory.setupForTest();
104         WifiTrackerLibProvider mockWifiTrackerLibProvider =
105                 FakeFeatureFactory.getFeatureFactory().getWifiTrackerLibProvider();
106         when(mockWifiTrackerLibProvider.createNetworkDetailsTracker(
107                 any(), any(), any(), any(), any(), anyLong(), anyLong(), any())
108         ).thenReturn(mock(NetworkDetailsTracker.class));
109 
110         mActivity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
111         when(mActivity.getSystemService(UserManager.class)).thenReturn(mUserManager);
112 
113         when(mActivity.getSystemService(KeyguardManager.class)).thenReturn(mKeyguardManager);
114     }
115 
116     @Test
onSubmit_shouldConnectToNetwork()117     public void onSubmit_shouldConnectToNetwork() {
118         mActivity.onSubmit(mWifiDialog);
119 
120         WifiManager wifiManager = mActivity.getSystemService(WifiManager.class);
121         assertThat(wifiManager.getConnectionInfo().getSSID()).isEqualTo("\"SSID\"");
122     }
123 
124     @Test
onSubmit_noPermissionForResult_setResultWithoutData()125     public void onSubmit_noPermissionForResult_setResultWithoutData() {
126         when(mActivity.hasPermissionForResult()).thenReturn(false);
127 
128         mActivity.onSubmit(mWifiDialog);
129 
130         verify(mActivity).setResult(RESULT_CONNECTED, null);
131     }
132 
133     @Test
onSubmit_hasPermissionForResult_setResultWithData()134     public void onSubmit_hasPermissionForResult_setResultWithData() {
135         when(mActivity.hasPermissionForResult()).thenReturn(true);
136         when(mActivity.createResultData(any(), any())).thenReturn(mResultData);
137 
138         mActivity.onSubmit(mWifiDialog);
139 
140         verify(mActivity).setResult(RESULT_CONNECTED, mResultData);
141     }
142 
143     @Test
onSubmit2_noPermissionForResult_setResultWithoutData()144     public void onSubmit2_noPermissionForResult_setResultWithoutData() {
145         when(mActivity.hasPermissionForResult()).thenReturn(false);
146 
147         mActivity.onSubmit(mWifiDialog2);
148 
149         verify(mActivity).setResult(RESULT_CONNECTED, null);
150     }
151 
152     @Test
onSubmit2_hasPermissionForResult_setResultWithData()153     public void onSubmit2_hasPermissionForResult_setResultWithData() {
154         when(mActivity.hasPermissionForResult()).thenReturn(true);
155         when(mActivity.createResultData(any(), any())).thenReturn(mResultData);
156 
157         mActivity.onSubmit(mWifiDialog2);
158 
159         verify(mActivity).setResult(RESULT_CONNECTED, mResultData);
160     }
161 
162     @Test
onSubmit2_whenConnectForCallerIsTrue_shouldConnectToNetwork()163     public void onSubmit2_whenConnectForCallerIsTrue_shouldConnectToNetwork() {
164         final Intent intent = new Intent("com.android.settings.WIFI_DIALOG");
165         intent.putExtra(WifiDialogActivity.KEY_CHOSEN_WIFIENTRY_KEY, "FAKE_KEY");
166         intent.putExtra(WifiDialogActivity.KEY_CONNECT_FOR_CALLER, true);
167         mActivity = spy(Robolectric.buildActivity(WifiDialogActivity.class, intent).setup().get());
168 
169         mActivity.onSubmit(mWifiDialog2);
170 
171         verify(mWifiEntry).connect(any());
172     }
173 
174     @Test
onSubmit_whenConnectForCallerIsFalse_shouldNotConnectToNetwork()175     public void onSubmit_whenConnectForCallerIsFalse_shouldNotConnectToNetwork() {
176         final Intent intent = new Intent();
177         intent.putExtra(WifiDialogActivity.KEY_CONNECT_FOR_CALLER, false);
178         mActivity = spy(Robolectric.buildActivity(WifiDialogActivity.class, intent).setup().get());
179 
180         mActivity.onSubmit(mWifiDialog);
181 
182         WifiManager wifiManager = mActivity.getSystemService(WifiManager.class);
183         assertThat(wifiManager.getConnectionInfo().getSSID()).isEqualTo(WifiManager.UNKNOWN_SSID);
184     }
185 
186     @Test
onSubmit2_whenConnectForCallerIsFalse_shouldNotConnectToNetwork()187     public void onSubmit2_whenConnectForCallerIsFalse_shouldNotConnectToNetwork() {
188         final Intent intent = new Intent("com.android.settings.WIFI_DIALOG");
189         intent.putExtra(WifiDialogActivity.KEY_CHOSEN_WIFIENTRY_KEY, "FAKE_KEY");
190         intent.putExtra(WifiDialogActivity.KEY_CONNECT_FOR_CALLER, false);
191         mActivity = spy(Robolectric.buildActivity(WifiDialogActivity.class, intent).setup().get());
192 
193         mActivity.onSubmit(mWifiDialog2);
194 
195         verify(mWifiEntry, never()).connect(any());
196     }
197 
198     @Test
onStart_whenLaunchInSetupFlow_shouldCreateDialogWithSuwTheme()199     public void onStart_whenLaunchInSetupFlow_shouldCreateDialogWithSuwTheme() {
200         final Intent intent = new Intent();
201         intent.putExtra(WifiDialogActivity.KEY_CONNECT_FOR_CALLER, false);
202         intent.putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true);
203         intent.putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true);
204         mActivity = spy(Robolectric.buildActivity(WifiDialogActivity.class, intent).create().get());
205         doNothing().when(mActivity).createDialogWithSuwTheme();
206 
207         mActivity.onStart();
208 
209         verify(mActivity).createDialogWithSuwTheme();
210     }
211 
212     @Test
onActivityResult_noPermissionForResult_setResultWithoutData()213     public void onActivityResult_noPermissionForResult_setResultWithoutData() {
214         when(mActivity.hasPermissionForResult()).thenReturn(false);
215 
216         mActivity.onActivityResult(REQUEST_CODE, RESULT_OK, mResultData);
217 
218         verify(mActivity).setResult(RESULT_CONNECTED);
219     }
220 
221     @Test
onActivityResult_hasPermissionForResult_setResultWithData()222     public void onActivityResult_hasPermissionForResult_setResultWithData() {
223         when(mActivity.hasPermissionForResult()).thenReturn(true);
224 
225         mActivity.onActivityResult(REQUEST_CODE, RESULT_OK, mResultData);
226 
227         verify(mActivity).setResult(RESULT_CONNECTED, mResultData);
228     }
229 
230     @Test
isConfigWifiAllowed_hasNoUserRestriction_returnTrue()231     public void isConfigWifiAllowed_hasNoUserRestriction_returnTrue() {
232         when(mUserManager.hasUserRestriction(DISALLOW_CONFIG_WIFI)).thenReturn(false);
233 
234         assertThat(mActivity.isConfigWifiAllowed()).isTrue();
235     }
236 
237     @Test
isConfigWifiAllowed_hasUserRestriction_returnFalse()238     public void isConfigWifiAllowed_hasUserRestriction_returnFalse() {
239         when(mUserManager.hasUserRestriction(DISALLOW_CONFIG_WIFI)).thenReturn(true);
240 
241         assertThat(mActivity.isConfigWifiAllowed()).isFalse();
242     }
243 
244     @Test
isAddWifiConfigAllowed_hasNoUserRestriction_returnTrue()245     public void isAddWifiConfigAllowed_hasNoUserRestriction_returnTrue() {
246         when(mUserManager.hasUserRestriction(DISALLOW_ADD_WIFI_CONFIG)).thenReturn(false);
247 
248         assertThat(mActivity.isAddWifiConfigAllowed()).isTrue();
249     }
250 
251     @Test
isAddWifiConfigAllowed_hasUserRestriction_returnFalse()252     public void isAddWifiConfigAllowed_hasUserRestriction_returnFalse() {
253         when(mUserManager.hasUserRestriction(DISALLOW_ADD_WIFI_CONFIG)).thenReturn(true);
254 
255         assertThat(mActivity.isAddWifiConfigAllowed()).isFalse();
256     }
257 
258     @Test
hasPermissionForResult_noCallingPackage_returnFalse()259     public void hasPermissionForResult_noCallingPackage_returnFalse() {
260         when(mActivity.getCallingPackage()).thenReturn(null);
261 
262         final boolean result = mActivity.hasPermissionForResult();
263 
264         assertThat(result).isFalse();
265     }
266 
267     @Test
hasPermissionForResult_noPermission_returnFalse()268     public void hasPermissionForResult_noPermission_returnFalse() {
269         when(mActivity.getCallingPackage()).thenReturn(null);
270         when(mPackageManager.checkPermission(ACCESS_COARSE_LOCATION, CALLING_PACKAGE))
271                 .thenReturn(PackageManager.PERMISSION_DENIED);
272         when(mPackageManager.checkPermission(ACCESS_FINE_LOCATION, CALLING_PACKAGE))
273                 .thenReturn(PackageManager.PERMISSION_DENIED);
274 
275         final boolean result = mActivity.hasPermissionForResult();
276 
277         assertThat(result).isFalse();
278     }
279 
280     @Test
hasPermissionForResult_hasCoarseLocationPermission_returnFalse()281     public void hasPermissionForResult_hasCoarseLocationPermission_returnFalse() {
282         when(mActivity.getCallingPackage()).thenReturn(CALLING_PACKAGE);
283         when(mActivity.getPackageManager()).thenReturn(mPackageManager);
284         when(mPackageManager.checkPermission(ACCESS_COARSE_LOCATION, CALLING_PACKAGE))
285                 .thenReturn(PackageManager.PERMISSION_GRANTED);
286         when(mPackageManager.checkPermission(ACCESS_FINE_LOCATION, CALLING_PACKAGE))
287                 .thenReturn(PackageManager.PERMISSION_DENIED);
288 
289         final boolean result = mActivity.hasPermissionForResult();
290 
291         assertThat(result).isFalse();
292     }
293 
294     @Test
hasPermissionForResult_hasFineLocationPermission_returnTrue()295     public void hasPermissionForResult_hasFineLocationPermission_returnTrue() {
296         when(mActivity.getCallingPackage()).thenReturn(CALLING_PACKAGE);
297         when(mActivity.getPackageManager()).thenReturn(mPackageManager);
298         when(mPackageManager.checkPermission(ACCESS_COARSE_LOCATION, CALLING_PACKAGE))
299                 .thenReturn(PackageManager.PERMISSION_DENIED);
300         when(mPackageManager.checkPermission(ACCESS_FINE_LOCATION, CALLING_PACKAGE))
301                 .thenReturn(PackageManager.PERMISSION_GRANTED);
302 
303         final boolean result = mActivity.hasPermissionForResult();
304 
305         assertThat(result).isTrue();
306     }
307 
308     @Test
hasPermissionForResult_haveBothLocationPermissions_returnTrue()309     public void hasPermissionForResult_haveBothLocationPermissions_returnTrue() {
310         when(mActivity.getCallingPackage()).thenReturn(CALLING_PACKAGE);
311         when(mActivity.getPackageManager()).thenReturn(mPackageManager);
312         when(mPackageManager.checkPermission(ACCESS_COARSE_LOCATION, CALLING_PACKAGE))
313                 .thenReturn(PackageManager.PERMISSION_GRANTED);
314         when(mPackageManager.checkPermission(ACCESS_FINE_LOCATION, CALLING_PACKAGE))
315                 .thenReturn(PackageManager.PERMISSION_GRANTED);
316 
317         final boolean result = mActivity.hasPermissionForResult();
318 
319         assertThat(result).isTrue();
320     }
321 
322     @Test
dismissDialog_hasDialog_dialogDismiss()323     public void dismissDialog_hasDialog_dialogDismiss() {
324         mActivity.mDialog = mWifiDialog;
325         mActivity.mDialog2 = mWifiDialog2;
326 
327         mActivity.dismissDialog();
328 
329         verify(mWifiDialog).dismiss();
330         verify(mWifiDialog2).dismiss();
331     }
332 
333     @Test
onKeyguardLockedStateChanged_keyguardIsNotLocked_doNotDismissDialog()334     public void onKeyguardLockedStateChanged_keyguardIsNotLocked_doNotDismissDialog() {
335         WifiDialogActivity.LockScreenMonitor lockScreenMonitor =
336                 new WifiDialogActivity.LockScreenMonitor(mActivity);
337 
338         lockScreenMonitor.onKeyguardLockedStateChanged(false /* isKeyguardLocked */);
339 
340         verify(mActivity, never()).dismissDialog();
341     }
342 
343     @Test
onKeyguardLockedStateChanged_keyguardIsLocked_dismissDialog()344     public void onKeyguardLockedStateChanged_keyguardIsLocked_dismissDialog() {
345         WifiDialogActivity.LockScreenMonitor lockScreenMonitor =
346                 new WifiDialogActivity.LockScreenMonitor(mActivity);
347 
348         lockScreenMonitor.onKeyguardLockedStateChanged(true /* isKeyguardLocked */);
349 
350         verify(mActivity).dismissDialog();
351     }
352 }
353