blob: e8663a2f2a228625bfdbddcf974ef8b120b28010 [file] [log] [blame]
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -07001/*
2 * Copyright (C) 2014 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
Jeremy Joslinf621bc92017-02-16 11:11:57 -080017package com.android.server;
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -070018
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080019import static junit.framework.Assert.assertEquals;
20import static junit.framework.Assert.assertNotNull;
21import static junit.framework.Assert.assertNull;
22import static junit.framework.Assert.assertTrue;
23
24import static org.junit.Assert.assertFalse;
25import static org.mockito.Matchers.any;
Jeremy Joslin9925c6a2017-03-06 10:39:35 -080026import static org.mockito.Matchers.anyInt;
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080027import static org.mockito.Matchers.eq;
28import static org.mockito.Mockito.never;
29import static org.mockito.Mockito.verify;
Jeremy Joslinb8418ac82016-12-06 07:42:38 -080030import static org.mockito.Mockito.when;
31
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -070032import android.Manifest.permission;
Jeremy Joslin37e877b2017-02-02 11:06:14 -080033import android.content.ComponentName;
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -070034import android.content.Context;
35import android.content.Intent;
Amin Shaikhbc9a8e62017-02-02 15:39:12 -080036import android.content.pm.ActivityInfo;
Jeff Davidsonc7415532014-06-23 18:15:34 -070037import android.content.pm.ApplicationInfo;
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -070038import android.content.pm.PackageManager;
39import android.content.pm.ResolveInfo;
Jeremy Joslindd251ef2016-03-14 11:17:41 -070040import android.content.pm.ServiceInfo;
Jeremy Joslinb8418ac82016-12-06 07:42:38 -080041import android.content.res.Resources;
Jeremy Joslinf621bc92017-02-16 11:11:57 -080042import android.net.NetworkScoreManager;
43import android.net.NetworkScorerAppData;
Amin Shaikhbc9a8e62017-02-02 15:39:12 -080044import android.os.Bundle;
Jeremy Joslinb8418ac82016-12-06 07:42:38 -080045import android.provider.Settings;
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080046import android.support.test.runner.AndroidJUnit4;
Jeremy Joslin37e877b2017-02-02 11:06:14 -080047
Jeremy Joslinb8418ac82016-12-06 07:42:38 -080048import com.android.internal.R;
Jeremy Joslin37e877b2017-02-02 11:06:14 -080049
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080050import org.junit.Before;
51import org.junit.Test;
52import org.junit.runner.RunWith;
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -070053import org.mockito.Mock;
54import org.mockito.Mockito;
55import org.mockito.MockitoAnnotations;
Paul Duffin192bb0b2017-03-09 18:49:41 +000056import org.mockito.compat.ArgumentMatcher;
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -070057
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080058import java.util.ArrayList;
Jeremy Joslin37e877b2017-02-02 11:06:14 -080059import java.util.List;
60
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080061@RunWith(AndroidJUnit4.class)
62public class NetworkScorerAppManagerTest {
Stephen Chen8b1339a2017-02-28 18:11:34 -080063 private static String MOCK_SERVICE_LABEL = "Mock Service";
64 private static String MOCK_OVERRIDEN_SERVICE_LABEL = "Mock Service Label Override";
65
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -070066 @Mock private Context mMockContext;
67 @Mock private PackageManager mMockPm;
Jeremy Joslinb8418ac82016-12-06 07:42:38 -080068 @Mock private Resources mResources;
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080069 @Mock private NetworkScorerAppManager.SettingsFacade mSettingsFacade;
Amin Shaikhaa09aa02016-11-21 17:27:53 -080070 private NetworkScorerAppManager mNetworkScorerAppManager;
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080071 private List<ResolveInfo> mAvailableServices;
Amin Shaikhaa09aa02016-11-21 17:27:53 -080072
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080073 @Before
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -070074 public void setUp() throws Exception {
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -070075 MockitoAnnotations.initMocks(this);
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080076 mAvailableServices = new ArrayList<>();
Jeremy Joslinb8418ac82016-12-06 07:42:38 -080077 when(mMockContext.getPackageManager()).thenReturn(mMockPm);
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080078 when(mMockPm.queryIntentServices(Mockito.argThat(new ArgumentMatcher<Intent>() {
79 @Override
Paul Duffin192bb0b2017-03-09 18:49:41 +000080 public boolean matchesObject(Object object) {
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080081 Intent intent = (Intent) object;
82 return NetworkScoreManager.ACTION_RECOMMEND_NETWORKS.equals(intent.getAction());
83 }
84 }), eq(PackageManager.GET_META_DATA))).thenReturn(mAvailableServices);
Jeremy Joslinb8418ac82016-12-06 07:42:38 -080085 when(mMockContext.getResources()).thenReturn(mResources);
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080086
87 mNetworkScorerAppManager = new NetworkScorerAppManager(mMockContext, mSettingsFacade);
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -070088 }
89
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080090 @Test
Jeremy Joslinb8418ac82016-12-06 07:42:38 -080091 public void testGetActiveScorer_providerAvailable() throws Exception {
Jeremy Joslin37e877b2017-02-02 11:06:14 -080092 final ComponentName recoComponent = new ComponentName("package1", "class1");
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -080093 setNetworkRecoPackageSetting(recoComponent.getPackageName());
Jeremy Joslin37e877b2017-02-02 11:06:14 -080094 mockScoreNetworksGranted(recoComponent.getPackageName());
95 mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */);
Jeremy Joslinb8418ac82016-12-06 07:42:38 -080096
Jeremy Joslinb8418ac82016-12-06 07:42:38 -080097 final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
98 assertNotNull(activeScorer);
Jeremy Joslin37e877b2017-02-02 11:06:14 -080099 assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800100 assertEquals(924, activeScorer.packageUid);
Stephen Chen8b1339a2017-02-28 18:11:34 -0800101 assertEquals(MOCK_SERVICE_LABEL, activeScorer.getRecommendationServiceLabel());
102 }
103
104 @Test
105 public void testGetActiveScorer_providerAvailable_serviceLabelOverride() throws Exception {
106 final ComponentName recoComponent = new ComponentName("package1", "class1");
107 setNetworkRecoPackageSetting(recoComponent.getPackageName());
108 mockScoreNetworksGranted(recoComponent.getPackageName());
109 mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
110 null /* enableUseOpenWifiPackageActivityPackage*/, true /* serviceLabelOverride */);
111
112 final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
113 assertNotNull(activeScorer);
114 assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
115 assertEquals(924, activeScorer.packageUid);
116 assertEquals(MOCK_OVERRIDEN_SERVICE_LABEL, activeScorer.getRecommendationServiceLabel());
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800117 }
118
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800119 @Test
120 public void testGetActiveScorer_permissionMissing() throws Exception {
121 final ComponentName recoComponent = new ComponentName("package1", "class1");
122 setNetworkRecoPackageSetting(recoComponent.getPackageName());
123 mockScoreNetworksDenied(recoComponent.getPackageName());
124 mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */);
125
126 final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
127 assertNull(activeScorer);
128 }
129
130 @Test
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800131 public void testGetActiveScorer_providerAvailable_enableUseOpenWifiActivityNotSet()
132 throws Exception {
133 final ComponentName recoComponent = new ComponentName("package1", "class1");
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800134 setNetworkRecoPackageSetting(recoComponent.getPackageName());
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800135 mockScoreNetworksGranted(recoComponent.getPackageName());
136 mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
137 null /* enableUseOpenWifiPackageActivityPackage*/);
138
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800139 final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
140 assertNotNull(activeScorer);
141 assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
142 assertEquals(924, activeScorer.packageUid);
143 assertNull(activeScorer.getEnableUseOpenWifiActivity());
144 }
145
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800146 @Test
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800147 public void testGetActiveScorer_providerAvailable_enableUseOpenWifiActivityNotResolved()
148 throws Exception {
149 final ComponentName recoComponent = new ComponentName("package1", "class1");
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800150 setNetworkRecoPackageSetting(recoComponent.getPackageName());
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800151 mockScoreNetworksGranted(recoComponent.getPackageName());
152 mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
153 "package2" /* enableUseOpenWifiPackageActivityPackage*/);
154
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800155 final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
156 assertNotNull(activeScorer);
157 assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
158 assertEquals(924, activeScorer.packageUid);
159 assertNull(activeScorer.getEnableUseOpenWifiActivity());
160 }
161
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800162 @Test
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800163 public void testGetActiveScorer_providerAvailable_enableUseOpenWifiActivityResolved()
164 throws Exception {
165 final ComponentName recoComponent = new ComponentName("package1", "class1");
166 final ComponentName enableUseOpenWifiComponent = new ComponentName("package2", "class2");
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800167 setNetworkRecoPackageSetting(recoComponent.getPackageName());
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800168 mockScoreNetworksGranted(recoComponent.getPackageName());
169 mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */,
170 enableUseOpenWifiComponent.getPackageName());
171 mockEnableUseOpenWifiActivity(enableUseOpenWifiComponent);
172
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800173 final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
174 assertNotNull(activeScorer);
175 assertEquals(recoComponent, activeScorer.getRecommendationServiceComponent());
176 assertEquals(924, activeScorer.packageUid);
177 assertEquals(enableUseOpenWifiComponent, activeScorer.getEnableUseOpenWifiActivity());
178 }
179
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800180 @Test
181 public void testGetActiveScorer_packageSettingIsNull()
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800182 throws Exception {
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800183 // NETWORK_RECOMMENDATIONS_PACKAGE is null
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800184
185 final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
186 assertNull(activeScorer);
187 }
188
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800189 @Test
190 public void testGetActiveScorer_packageSettingIsInvalid() throws Exception {
Jeremy Joslin37e877b2017-02-02 11:06:14 -0800191 final ComponentName recoComponent = new ComponentName("package1", "class1");
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800192 setDefaultNetworkRecommendationPackage(recoComponent.getPackageName());
Jeremy Joslin37e877b2017-02-02 11:06:14 -0800193 mockScoreNetworksGranted(recoComponent.getPackageName());
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800194 // NETWORK_RECOMMENDATIONS_PACKAGE is set to a package that isn't a recommender.
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800195
196 final NetworkScorerAppData activeScorer = mNetworkScorerAppManager.getActiveScorer();
197 assertNull(activeScorer);
198 }
199
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800200 @Test
201 public void testSetActiveScorer_noChange() throws Exception {
202 String packageName = "package";
203 setNetworkRecoPackageSetting(packageName);
204
205 assertTrue(mNetworkScorerAppManager.setActiveScorer(packageName));
206 verify(mSettingsFacade, never()).putString(any(), any(), any());
207 }
208
209 @Test
Jeremy Joslin9925c6a2017-03-06 10:39:35 -0800210 public void testSetActiveScorer_nullPackage_validDefault() throws Exception {
211 String packageName = "package";
212 String defaultPackage = "defaultPackage";
213 setNetworkRecoPackageSetting(packageName);
214 setDefaultNetworkRecommendationPackage(defaultPackage);
215 final ComponentName recoComponent = new ComponentName(defaultPackage, "class1");
216 mockScoreNetworksGranted(recoComponent.getPackageName());
217 mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */, null);
218
219 assertTrue(mNetworkScorerAppManager.setActiveScorer(null));
220 verify(mSettingsFacade).putString(mMockContext,
221 Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE, defaultPackage);
222 }
223
224 @Test
225 public void testSetActiveScorer_nullPackage_invalidDefault() throws Exception {
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800226 String packageName = "package";
227 String defaultPackage = "defaultPackage";
228 setNetworkRecoPackageSetting(packageName);
229 setDefaultNetworkRecommendationPackage(defaultPackage);
230
Jeremy Joslin9925c6a2017-03-06 10:39:35 -0800231 assertFalse(mNetworkScorerAppManager.setActiveScorer(null));
232 verify(mSettingsFacade, never()).putString(any(),
233 eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE), any());
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800234 }
235
236 @Test
237 public void testSetActiveScorer_validPackage() throws Exception {
238 String packageName = "package";
239 String newPackage = "newPackage";
240 setNetworkRecoPackageSetting(packageName);
241 final ComponentName recoComponent = new ComponentName(newPackage, "class1");
242 mockScoreNetworksGranted(recoComponent.getPackageName());
243 mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */, null);
244
245 assertTrue(mNetworkScorerAppManager.setActiveScorer(newPackage));
246 verify(mSettingsFacade).putString(mMockContext,
247 Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE, newPackage);
248 }
249
250 @Test
251 public void testSetActiveScorer_invalidPackage() throws Exception {
252 String packageName = "package";
253 String newPackage = "newPackage";
254 setNetworkRecoPackageSetting(packageName);
255 // newPackage doesn't resolve to a valid recommender
256
257 assertFalse(mNetworkScorerAppManager.setActiveScorer(newPackage));
258 verify(mSettingsFacade, never()).putString(any(), any(), any());
259 }
260
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800261 @Test
Jeremy Joslin9925c6a2017-03-06 10:39:35 -0800262 public void testUpdateState_recommendationsForcedOff() throws Exception {
263 setRecommendationsEnabledSetting(NetworkScoreManager.RECOMMENDATIONS_ENABLED_FORCED_OFF);
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800264
Jeremy Joslin9925c6a2017-03-06 10:39:35 -0800265 mNetworkScorerAppManager.updateState();
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800266
Jeremy Joslin9925c6a2017-03-06 10:39:35 -0800267 verify(mSettingsFacade, never()).getString(any(),
268 eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE));
269 verify(mSettingsFacade, never()).putInt(any(),
270 eq(Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED), anyInt());
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800271 }
272
273 @Test
Jeremy Joslin9925c6a2017-03-06 10:39:35 -0800274 public void testUpdateState_currentPackageValid() throws Exception {
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800275 String packageName = "package";
276 setNetworkRecoPackageSetting(packageName);
277 final ComponentName recoComponent = new ComponentName(packageName, "class1");
278 mockScoreNetworksGranted(recoComponent.getPackageName());
279 mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */, null);
280
Jeremy Joslin9925c6a2017-03-06 10:39:35 -0800281 mNetworkScorerAppManager.updateState();
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800282
Jeremy Joslin9925c6a2017-03-06 10:39:35 -0800283 verify(mSettingsFacade, never()).putString(any(),
284 eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE), any());
285 verify(mSettingsFacade).putInt(mMockContext,
286 Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
287 NetworkScoreManager.RECOMMENDATIONS_ENABLED_ON);
288 }
289
290 @Test
291 public void testUpdateState_currentPackageNotValid_validDefault() throws Exception {
292 String defaultPackage = "defaultPackage";
293 setDefaultNetworkRecommendationPackage(defaultPackage);
294 final ComponentName recoComponent = new ComponentName(defaultPackage, "class1");
295 mockScoreNetworksGranted(recoComponent.getPackageName());
296 mockRecommendationServiceAvailable(recoComponent, 924 /* packageUid */, null);
297
298 mNetworkScorerAppManager.updateState();
299
300 verify(mSettingsFacade).putString(mMockContext,
301 Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE, defaultPackage);
302 verify(mSettingsFacade).putInt(mMockContext,
303 Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
304 NetworkScoreManager.RECOMMENDATIONS_ENABLED_ON);
305 }
306
307 @Test
308 public void testUpdateState_currentPackageNotValid_invalidDefault() throws Exception {
309 String defaultPackage = "defaultPackage";
310 setDefaultNetworkRecommendationPackage(defaultPackage);
311 setNetworkRecoPackageSetting("currentPackage");
312
313 mNetworkScorerAppManager.updateState();
314
315 verify(mSettingsFacade).putString(mMockContext,
316 Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE, defaultPackage);
317 verify(mSettingsFacade).putInt(mMockContext,
318 Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED,
319 NetworkScoreManager.RECOMMENDATIONS_ENABLED_OFF);
320 }
321
322 @Test
323 public void testUpdateState_currentPackageNotValid_sameAsDefault() throws Exception {
324 String defaultPackage = "defaultPackage";
325 setDefaultNetworkRecommendationPackage(defaultPackage);
326 setNetworkRecoPackageSetting(defaultPackage);
327
328 mNetworkScorerAppManager.updateState();
329
330 verify(mSettingsFacade, never()).putString(any(),
331 eq(Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE), any());
332 }
333
334 private void setRecommendationsEnabledSetting(int value) {
335 when(mSettingsFacade.getInt(eq(mMockContext),
336 eq(Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED), anyInt())).thenReturn(value);
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800337 }
338
339 private void setNetworkRecoPackageSetting(String packageName) {
340 when(mSettingsFacade.getString(mMockContext,
341 Settings.Global.NETWORK_RECOMMENDATIONS_PACKAGE)).thenReturn(packageName);
342 }
343
344 private void setDefaultNetworkRecommendationPackage(String name) {
345 when(mResources.getString(R.string.config_defaultNetworkRecommendationProviderPackage))
346 .thenReturn(name);
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800347 }
Jeff Davidsonb6646a82014-06-27 16:24:42 -0700348
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800349 private void mockScoreNetworksGranted(String packageName) {
350 when(mMockPm.checkPermission(permission.SCORE_NETWORKS, packageName))
351 .thenReturn(PackageManager.PERMISSION_GRANTED);
352 }
353
354 private void mockScoreNetworksDenied(String packageName) {
355 when(mMockPm.checkPermission(permission.SCORE_NETWORKS, packageName))
356 .thenReturn(PackageManager.PERMISSION_DENIED);
357 }
358
Jeremy Joslin37e877b2017-02-02 11:06:14 -0800359 private void mockRecommendationServiceAvailable(final ComponentName compName, int packageUid) {
Stephen Chen8b1339a2017-02-28 18:11:34 -0800360 mockRecommendationServiceAvailable(compName, packageUid, null, false);
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800361 }
362
363 private void mockRecommendationServiceAvailable(final ComponentName compName, int packageUid,
364 String enableUseOpenWifiActivityPackage) {
Stephen Chen8b1339a2017-02-28 18:11:34 -0800365 mockRecommendationServiceAvailable(
366 compName, packageUid, enableUseOpenWifiActivityPackage, false);
367 }
368
369 private void mockRecommendationServiceAvailable(final ComponentName compName, int packageUid,
370 String enableUseOpenWifiActivityPackage, boolean serviceLabelOverride) {
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800371 final ResolveInfo serviceInfo = new ResolveInfo();
372 serviceInfo.serviceInfo = new ServiceInfo();
Jeremy Joslin37e877b2017-02-02 11:06:14 -0800373 serviceInfo.serviceInfo.name = compName.getClassName();
374 serviceInfo.serviceInfo.packageName = compName.getPackageName();
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800375 serviceInfo.serviceInfo.applicationInfo = new ApplicationInfo();
376 serviceInfo.serviceInfo.applicationInfo.uid = packageUid;
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800377 if (enableUseOpenWifiActivityPackage != null) {
378 serviceInfo.serviceInfo.metaData = new Bundle();
379 serviceInfo.serviceInfo.metaData.putString(
380 NetworkScoreManager.USE_OPEN_WIFI_PACKAGE_META_DATA,
381 enableUseOpenWifiActivityPackage);
382 }
Stephen Chen8b1339a2017-02-28 18:11:34 -0800383 if (serviceLabelOverride) {
384 if (serviceInfo.serviceInfo.metaData == null) {
385 serviceInfo.serviceInfo.metaData = new Bundle();
386 }
387 serviceInfo.serviceInfo.metaData.putString(
388 NetworkScoreManager.RECOMMENDATION_SERVICE_LABEL_META_DATA,
389 MOCK_OVERRIDEN_SERVICE_LABEL);
390 } else {
391 serviceInfo.serviceInfo.nonLocalizedLabel = MOCK_SERVICE_LABEL;
392 }
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800393
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800394 final int flags = PackageManager.GET_META_DATA;
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800395 when(mMockPm.resolveService(
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -0700396 Mockito.argThat(new ArgumentMatcher<Intent>() {
397 @Override
Paul Duffin192bb0b2017-03-09 18:49:41 +0000398 public boolean matchesObject(Object object) {
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -0700399 Intent intent = (Intent) object;
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800400 return NetworkScoreManager.ACTION_RECOMMEND_NETWORKS
401 .equals(intent.getAction())
Jeremy Joslin37e877b2017-02-02 11:06:14 -0800402 && compName.getPackageName().equals(intent.getPackage());
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -0700403 }
Jeremy Joslinb8418ac82016-12-06 07:42:38 -0800404 }), Mockito.eq(flags))).thenReturn(serviceInfo);
Jeremy Joslinee3fb5c2017-02-13 13:44:11 -0800405
406 mAvailableServices.add(serviceInfo);
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -0700407 }
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800408
409 private void mockEnableUseOpenWifiActivity(final ComponentName useOpenWifiComp) {
410 final ResolveInfo resolveActivityInfo = new ResolveInfo();
411 resolveActivityInfo.activityInfo = new ActivityInfo();
412 resolveActivityInfo.activityInfo.name = useOpenWifiComp.getClassName();
413 resolveActivityInfo.activityInfo.packageName = useOpenWifiComp.getPackageName();
414
415 final int flags = 0;
416 when(mMockPm.resolveActivity(
417 Mockito.argThat(new ArgumentMatcher<Intent>() {
418 @Override
Paul Duffin192bb0b2017-03-09 18:49:41 +0000419 public boolean matchesObject(Object object) {
Amin Shaikhbc9a8e62017-02-02 15:39:12 -0800420 Intent intent = (Intent) object;
421 return NetworkScoreManager.ACTION_CUSTOM_ENABLE.equals(intent.getAction())
422 && useOpenWifiComp.getPackageName().equals(intent.getPackage());
423 }
424 }), Mockito.eq(flags))).thenReturn(resolveActivityInfo);
425 }
Jeff Davidsondd6fd1e2014-04-14 15:14:30 -0700426}