2 * Copyright (C) 2017 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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
16 package com.android.settings.wifi;
18 import static com.google.common.truth.Truth.assertThat;
20 import static org.mockito.ArgumentMatchers.any;
21 import static org.mockito.ArgumentMatchers.anyInt;
22 import static org.mockito.ArgumentMatchers.eq;
23 import static org.mockito.Mockito.doNothing;
24 import static org.mockito.Mockito.doReturn;
25 import static org.mockito.Mockito.mock;
26 import static org.mockito.Mockito.spy;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.when;
30 import android.app.Activity;
31 import android.content.ContentResolver;
32 import android.content.Context;
33 import android.content.Intent;
34 import android.content.res.Resources;
35 import android.os.Bundle;
36 import android.os.PowerManager;
37 import android.os.UserManager;
38 import android.provider.Settings;
40 import android.view.ContextMenu;
41 import android.view.View;
42 import androidx.fragment.app.FragmentActivity;
43 import androidx.preference.Preference;
45 import com.android.settings.R;
46 import com.android.settings.datausage.DataUsagePreference;
47 import com.android.settings.search.SearchIndexableRaw;
48 import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
49 import com.android.settingslib.wifi.AccessPoint;
50 import com.android.settingslib.wifi.WifiTracker;
52 import org.junit.Before;
53 import org.junit.Test;
54 import org.junit.runner.RunWith;
55 import org.mockito.Mock;
56 import org.mockito.MockitoAnnotations;
57 import org.robolectric.RobolectricTestRunner;
58 import org.robolectric.RuntimeEnvironment;
59 import org.robolectric.annotation.Config;
61 import java.util.List;
63 @RunWith(RobolectricTestRunner.class)
64 public class WifiSettingsTest {
66 private static final int NUM_NETWORKS = 4;
69 private WifiTracker mWifiTracker;
71 private PowerManager mPowerManager;
73 private DataUsagePreference mDataUsagePreference;
74 private Context mContext;
75 private WifiSettings mWifiSettings;
79 MockitoAnnotations.initMocks(this);
80 mContext = spy(RuntimeEnvironment.application);
82 mWifiSettings = spy(new WifiSettings());
83 doReturn(mContext).when(mWifiSettings).getContext();
84 doReturn(mPowerManager).when(mContext).getSystemService(PowerManager.class);
85 mWifiSettings.mAddWifiNetworkPreference = new AddWifiNetworkPreference(mContext);
86 mWifiSettings.mSavedNetworksPreference = new Preference(mContext);
87 mWifiSettings.mConfigureWifiSettingsPreference = new Preference(mContext);
88 mWifiSettings.mWifiTracker = mWifiTracker;
92 public void testSearchIndexProvider_shouldIndexFragmentTitle() {
93 final List<SearchIndexableRaw> indexRes =
94 WifiSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext,
97 assertThat(indexRes).isNotNull();
98 assertThat(indexRes.get(0).key).isEqualTo(WifiSettings.DATA_KEY_REFERENCE);
102 @Config(qualifiers = "mcc999")
103 public void testSearchIndexProvider_ifWifiSettingsNotVisible_shouldNotIndexFragmentTitle() {
104 final List<SearchIndexableRaw> indexRes =
105 WifiSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext,
108 assertThat(indexRes).isEmpty();
112 public void addNetworkFragmentSendResult_onActivityResult_shouldHandleEvent() {
113 final WifiSettings wifiSettings = spy(new WifiSettings());
114 final Intent intent = new Intent();
115 doNothing().when(wifiSettings).handleAddNetworkRequest(anyInt(), any(Intent.class));
117 wifiSettings.onActivityResult(WifiSettings.ADD_NETWORK_REQUEST, Activity.RESULT_OK, intent);
119 verify(wifiSettings).handleAddNetworkRequest(anyInt(), any(Intent.class));
123 public void setAdditionalSettingsSummaries_hasSavedNetwork_preferenceVisible() {
124 when(mWifiTracker.getNumSavedNetworks()).thenReturn(NUM_NETWORKS);
126 mWifiSettings.setAdditionalSettingsSummaries();
128 assertThat(mWifiSettings.mSavedNetworksPreference.isVisible()).isTrue();
129 assertThat(mWifiSettings.mSavedNetworksPreference.getSummary()).isEqualTo(
130 mContext.getResources().getQuantityString(
131 R.plurals.wifi_saved_access_points_summary,
132 NUM_NETWORKS, NUM_NETWORKS));
136 public void setAdditionalSettingsSummaries_noSavedNetwork_preferenceInvisible() {
137 when(mWifiTracker.getNumSavedNetworks()).thenReturn(0);
139 mWifiSettings.setAdditionalSettingsSummaries();
141 assertThat(mWifiSettings.mSavedNetworksPreference.isVisible()).isFalse();
145 public void setAdditionalSettingsSummaries_wifiWakeupEnabled_displayOn() {
146 final ContentResolver contentResolver = mContext.getContentResolver();
147 Settings.Global.putInt(contentResolver, Settings.Global.WIFI_WAKEUP_ENABLED, 1);
148 Settings.Global.putInt(contentResolver, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 1);
149 Settings.Global.putInt(contentResolver, Settings.Global.AIRPLANE_MODE_ON, 0);
150 when(mPowerManager.isPowerSaveMode()).thenReturn(false);
152 mWifiSettings.setAdditionalSettingsSummaries();
154 assertThat(mWifiSettings.mConfigureWifiSettingsPreference.getSummary()).isEqualTo(
155 mContext.getString(R.string.wifi_configure_settings_preference_summary_wakeup_on));
159 public void setAdditionalSettingsSummaries_wifiWakeupDisabled_displayOff() {
160 final ContentResolver contentResolver = mContext.getContentResolver();
161 Settings.Global.putInt(contentResolver, Settings.Global.WIFI_WAKEUP_ENABLED, 0);
163 mWifiSettings.setAdditionalSettingsSummaries();
165 assertThat(mWifiSettings.mConfigureWifiSettingsPreference.getSummary()).isEqualTo(
166 mContext.getString(R.string.wifi_configure_settings_preference_summary_wakeup_off));
170 public void checkAddWifiNetworkPrefernce_preferenceVisible() {
171 assertThat(mWifiSettings.mAddWifiNetworkPreference.isVisible()).isTrue();
172 assertThat(mWifiSettings.mAddWifiNetworkPreference.getTitle()).isEqualTo(
173 mContext.getString(R.string.wifi_add_network));
176 private void setUpForOnCreate() {
177 final FragmentActivity activity = mock(FragmentActivity.class);
178 when(mWifiSettings.getActivity()).thenReturn(activity);
179 final Resources.Theme theme = mContext.getTheme();
180 when(activity.getTheme()).thenReturn(theme);
181 UserManager userManager = mock(UserManager.class);
182 when(activity.getSystemService(Context.USER_SERVICE))
183 .thenReturn(userManager);
185 when(mWifiSettings.findPreference(WifiSettings.PREF_KEY_DATA_USAGE))
186 .thenReturn(mDataUsagePreference);
190 @Config(shadows = {ShadowDataUsageUtils.class})
191 public void checkDataUsagePreference_perferenceInvisibleIfWifiNotSupported() {
193 ShadowDataUsageUtils.IS_WIFI_SUPPORTED = false;
195 mWifiSettings.onCreate(Bundle.EMPTY);
197 verify(mDataUsagePreference).setVisible(false);
201 @Config(shadows = {ShadowDataUsageUtils.class})
202 public void checkDataUsagePreference_perferenceVisibleIfWifiSupported() {
204 ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true;
206 mWifiSettings.onCreate(Bundle.EMPTY);
208 verify(mDataUsagePreference).setVisible(true);
209 verify(mDataUsagePreference).setTemplate(any(), eq(0) /*subId*/, eq(null) /*service*/);
213 public void onCreateContextMenu_shouldHaveForgetMenuForConnectedAccessPreference() {
214 final FragmentActivity mockActivity = mock(FragmentActivity.class);
215 when(mockActivity.getApplicationContext()).thenReturn(mContext);
216 when(mWifiSettings.getActivity()).thenReturn(mockActivity);
218 final AccessPoint accessPoint = mock(AccessPoint.class);
219 when(accessPoint.isConnectable()).thenReturn(false);
220 when(accessPoint.isSaved()).thenReturn(true);
221 when(accessPoint.isActive()).thenReturn(true);
223 final ConnectedAccessPointPreference connectedPreference =
224 mWifiSettings.createConnectedAccessPointPreference(accessPoint, mContext);
225 final View view = mock(View.class);
226 when(view.getTag()).thenReturn(connectedPreference);
228 final ContextMenu menu = mock(ContextMenu.class);
229 mWifiSettings.onCreateContextMenu(menu, view, null /* info */);
231 verify(menu).add(anyInt(), eq(WifiSettings.MENU_ID_FORGET), anyInt(), anyInt());