blob: 8e2ef703f3c676e2702bacba41d030333508740a [file] [log] [blame]
Makoto Onukic9754cf2015-08-31 11:58:43 -07001/*
2 * Copyright (C) 2015 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
17package com.android.server.devicepolicy;
18
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070019import com.android.internal.widget.LockPatternUtils;
20
21import android.app.IActivityManager;
22import android.app.NotificationManager;
Makoto Onukib643fb02015-09-22 15:03:44 -070023import android.app.backup.IBackupManager;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070024import android.content.BroadcastReceiver;
Makoto Onukia52562c2015-10-01 16:12:31 -070025import android.content.ContentResolver;
Makoto Onukic9754cf2015-08-31 11:58:43 -070026import android.content.Context;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070027import android.content.Intent;
28import android.content.IntentFilter;
Makoto Onukif76b06a2015-09-22 15:03:44 -070029import android.content.pm.IPackageManager;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070030import android.content.pm.PackageManager;
Fyodor Kupolovcb6fd802015-11-05 14:27:06 -080031import android.content.pm.PackageManagerInternal;
Makoto Onukid932f762015-09-29 16:53:38 -070032import android.content.pm.UserInfo;
Makoto Onukib643fb02015-09-22 15:03:44 -070033import android.media.IAudioService;
Makoto Onukia31ebbc2015-11-23 17:15:21 -080034import android.net.wifi.WifiManager;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070035import android.os.Bundle;
36import android.os.Handler;
37import android.os.PowerManager.WakeLock;
38import android.os.PowerManagerInternal;
39import android.os.UserHandle;
Makoto Onukic9754cf2015-08-31 11:58:43 -070040import android.os.UserManager;
Makoto Onuki068c54a2015-10-13 14:34:03 -070041import android.os.UserManagerInternal;
Makoto Onukid4c9e542016-02-25 18:17:30 -080042import android.os.storage.StorageManager;
Mahaver Chopra1216ae52016-03-11 15:39:48 +000043import android.telephony.TelephonyManager;
Makoto Onukia52562c2015-10-01 16:12:31 -070044import android.test.mock.MockContentResolver;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070045import android.test.mock.MockContext;
46import android.view.IWindowManager;
47
Makoto Onukib643fb02015-09-22 15:03:44 -070048import org.junit.Assert;
Makoto Onuki2a3c3da2016-02-18 14:25:30 -080049import org.mockito.invocation.InvocationOnMock;
50import org.mockito.stubbing.Answer;
Makoto Onukib643fb02015-09-22 15:03:44 -070051
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070052import java.io.File;
53import java.util.ArrayList;
54import java.util.List;
Makoto Onukic9754cf2015-08-31 11:58:43 -070055
Makoto Onuki2a3c3da2016-02-18 14:25:30 -080056import static org.mockito.Matchers.anyInt;
Makoto Onukid932f762015-09-29 16:53:38 -070057import static org.mockito.Matchers.eq;
Makoto Onukic9754cf2015-08-31 11:58:43 -070058import static org.mockito.Mockito.mock;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070059import static org.mockito.Mockito.spy;
Makoto Onukid932f762015-09-29 16:53:38 -070060import static org.mockito.Mockito.when;
Makoto Onukic9754cf2015-08-31 11:58:43 -070061
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070062/**
63 * Context used throughout DPMS tests.
64 */
65public class DpmMockContext extends MockContext {
66 /**
67 * User-id of a non-system user we use throughout unit tests.
68 */
69 public static final int CALLER_USER_HANDLE = 20;
Makoto Onukic9754cf2015-08-31 11:58:43 -070070
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070071 /**
Makoto Onukib643fb02015-09-22 15:03:44 -070072 * UID corresponding to {@link #CALLER_USER_HANDLE}.
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070073 */
Makoto Onukid932f762015-09-29 16:53:38 -070074 public static final int CALLER_UID = UserHandle.getUid(CALLER_USER_HANDLE, 20123);
Makoto Onukic9754cf2015-08-31 11:58:43 -070075
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070076 /**
Makoto Onukib643fb02015-09-22 15:03:44 -070077 * UID used when a caller is on the system user.
78 */
Makoto Onukid932f762015-09-29 16:53:38 -070079 public static final int CALLER_SYSTEM_USER_UID = 20321;
Makoto Onukib643fb02015-09-22 15:03:44 -070080
81 /**
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070082 * PID of the caller.
83 */
84 public static final int CALLER_PID = 22222;
85
86 /**
87 * UID of the system server.
88 */
89 public static final int SYSTEM_UID = android.os.Process.SYSTEM_UID;
90
91 /**
92 * PID of the system server.
93 */
94 public static final int SYSTEM_PID = 11111;
95
96 public static class MockBinder {
Makoto Onukif76b06a2015-09-22 15:03:44 -070097 public int callingUid = CALLER_UID;
98 public int callingPid = CALLER_PID;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070099
100 public long clearCallingIdentity() {
Makoto Onukif76b06a2015-09-22 15:03:44 -0700101 final long token = (((long) callingUid) << 32) | (callingPid);
102 callingUid = SYSTEM_UID;
103 callingPid = SYSTEM_PID;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700104 return token;
105 }
106
107 public void restoreCallingIdentity(long token) {
Makoto Onukif76b06a2015-09-22 15:03:44 -0700108 callingUid = (int) (token >> 32);
109 callingPid = (int) token;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700110 }
111
112 public int getCallingUid() {
Makoto Onukif76b06a2015-09-22 15:03:44 -0700113 return callingUid;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700114 }
115
116 public int getCallingPid() {
Makoto Onukif76b06a2015-09-22 15:03:44 -0700117 return callingPid;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700118 }
119
120 public UserHandle getCallingUserHandle() {
121 return new UserHandle(UserHandle.getUserId(getCallingUid()));
122 }
123
124 public boolean isCallerUidMyUid() {
Makoto Onukif76b06a2015-09-22 15:03:44 -0700125 return callingUid == SYSTEM_UID;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700126 }
Makoto Onukic9754cf2015-08-31 11:58:43 -0700127 }
128
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700129 public static class EnvironmentForMock {
130 public File getUserSystemDirectory(int userId) {
131 return null;
132 }
133 }
134
135 public static class PowerManagerForMock {
136 public WakeLock newWakeLock(int levelAndFlags, String tag) {
137 return null;
138 }
139
140 public void goToSleep(long time, int reason, int flags) {
141 }
Mahaver Chopraf8373b52015-12-23 14:42:18 +0000142
143 public void reboot(String reason) {
144 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700145 }
146
Makoto Onukif76b06a2015-09-22 15:03:44 -0700147 public static class SystemPropertiesForMock {
148 public boolean getBoolean(String key, boolean def) {
149 return false;
150 }
151
152 public long getLong(String key, long def) {
153 return 0;
154 }
155
156 public String get(String key, String def) {
157 return null;
158 }
159
160 public String get(String key) {
161 return null;
162 }
163
164 public void set(String key, String value) {
165 }
166 }
167
Makoto Onukib643fb02015-09-22 15:03:44 -0700168 public static class UserManagerForMock {
169 public boolean isSplitSystemUser() {
170 return false;
171 }
172 }
173
Makoto Onukia4f11972015-10-01 13:19:58 -0700174 public static class SettingsForMock {
175 int settingsSecureGetIntForUser(String name, int def, int userHandle) {
176 return 0;
177 }
178
179 void settingsSecurePutIntForUser(String name, int value, int userHandle) {
180 }
181
182 void settingsSecurePutStringForUser(String name, String value, int userHandle) {
183 }
184
185 void settingsGlobalPutStringForUser(String name, String value, int userHandle) {
186 }
187
188 void settingsSecurePutInt(String name, int value) {
189 }
190
191 void settingsGlobalPutInt(String name, int value) {
192 }
193
194 void settingsSecurePutString(String name, String value) {
195 }
196
197 void settingsGlobalPutString(String name, String value) {
198 }
Makoto Onuki3f3657a2016-01-28 14:44:18 -0800199
200 int settingsGlobalGetInt(String name, int def) {
201 return 0;
202 }
203
204 void securityLogSetLoggingEnabledProperty(boolean enabled) {
205 }
Rubin Xu49caead2016-02-02 18:00:28 +0000206
207 public boolean securityLogGetLoggingEnabledProperty() {
208 return false;
209 }
210
211 public boolean securityLogIsLoggingEnabled() {
212 return false;
213 }
Makoto Onukia4f11972015-10-01 13:19:58 -0700214 }
215
Makoto Onukid4c9e542016-02-25 18:17:30 -0800216 public static class StorageManagerForMock {
217 public boolean isFileBasedEncryptionEnabled() {
218 return false;
219 }
220
221 public boolean isNonDefaultBlockEncrypted() {
222 return false;
223 }
224
225 public boolean isEncrypted() {
226 return false;
227 }
228
229 public boolean isEncryptable() {
230 return false;
231 }
232 }
233
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700234 public final Context realTestContext;
235
236 /**
237 * Use this instance to verify unimplemented methods such as {@link #sendBroadcast}.
238 * (Spying on {@code this} instance will confuse mockito somehow and I got weired "wrong number
239 * of arguments" exceptions.)
240 */
241 public final Context spiedContext;
242
Makoto Onukid932f762015-09-29 16:53:38 -0700243 public final File dataDir;
244 public final File systemUserDataDir;
245
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700246 public final MockBinder binder;
247 public final EnvironmentForMock environment;
Makoto Onukif76b06a2015-09-22 15:03:44 -0700248 public final SystemPropertiesForMock systemProperties;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700249 public final UserManager userManager;
Makoto Onuki068c54a2015-10-13 14:34:03 -0700250 public final UserManagerInternal userManagerInternal;
Fyodor Kupolovcb6fd802015-11-05 14:27:06 -0800251 public final PackageManagerInternal packageManagerInternal;
Makoto Onukib643fb02015-09-22 15:03:44 -0700252 public final UserManagerForMock userManagerForMock;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700253 public final PowerManagerForMock powerManager;
254 public final PowerManagerInternal powerManagerInternal;
255 public final NotificationManager notificationManager;
256 public final IWindowManager iwindowManager;
257 public final IActivityManager iactivityManager;
Makoto Onukif76b06a2015-09-22 15:03:44 -0700258 public final IPackageManager ipackageManager;
Makoto Onukib643fb02015-09-22 15:03:44 -0700259 public final IBackupManager ibackupManager;
260 public final IAudioService iaudioService;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700261 public final LockPatternUtils lockPatternUtils;
Makoto Onukid4c9e542016-02-25 18:17:30 -0800262 public final StorageManagerForMock storageManager;
Makoto Onukia31ebbc2015-11-23 17:15:21 -0800263 public final WifiManager wifiManager;
Makoto Onukia4f11972015-10-01 13:19:58 -0700264 public final SettingsForMock settings;
Makoto Onukia52562c2015-10-01 16:12:31 -0700265 public final MockContentResolver contentResolver;
Mahaver Chopra1216ae52016-03-11 15:39:48 +0000266 public final TelephonyManager telephonyManager;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700267
268 /** Note this is a partial mock, not a real mock. */
269 public final PackageManager packageManager;
270
271 public final List<String> callerPermissions = new ArrayList<>();
272
Makoto Onukid932f762015-09-29 16:53:38 -0700273 private final ArrayList<UserInfo> mUserInfos = new ArrayList<>();
274
275 public DpmMockContext(Context context, File dataDir) {
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700276 realTestContext = context;
Makoto Onukid932f762015-09-29 16:53:38 -0700277
278 this.dataDir = dataDir;
279 DpmTestUtils.clearDir(dataDir);
280
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700281 binder = new MockBinder();
282 environment = mock(EnvironmentForMock.class);
Makoto Onukif76b06a2015-09-22 15:03:44 -0700283 systemProperties= mock(SystemPropertiesForMock.class);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700284 userManager = mock(UserManager.class);
Makoto Onuki068c54a2015-10-13 14:34:03 -0700285 userManagerInternal = mock(UserManagerInternal.class);
Makoto Onukib643fb02015-09-22 15:03:44 -0700286 userManagerForMock = mock(UserManagerForMock.class);
Fyodor Kupolovcb6fd802015-11-05 14:27:06 -0800287 packageManagerInternal = mock(PackageManagerInternal.class);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700288 powerManager = mock(PowerManagerForMock.class);
289 powerManagerInternal = mock(PowerManagerInternal.class);
290 notificationManager = mock(NotificationManager.class);
291 iwindowManager = mock(IWindowManager.class);
292 iactivityManager = mock(IActivityManager.class);
Makoto Onukif76b06a2015-09-22 15:03:44 -0700293 ipackageManager = mock(IPackageManager.class);
Makoto Onukib643fb02015-09-22 15:03:44 -0700294 ibackupManager = mock(IBackupManager.class);
295 iaudioService = mock(IAudioService.class);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700296 lockPatternUtils = mock(LockPatternUtils.class);
Makoto Onukid4c9e542016-02-25 18:17:30 -0800297 storageManager = mock(StorageManagerForMock.class);
Makoto Onukia31ebbc2015-11-23 17:15:21 -0800298 wifiManager = mock(WifiManager.class);
Makoto Onukia4f11972015-10-01 13:19:58 -0700299 settings = mock(SettingsForMock.class);
Mahaver Chopra1216ae52016-03-11 15:39:48 +0000300 telephonyManager = mock(TelephonyManager.class);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700301
302 // Package manager is huge, so we use a partial mock instead.
303 packageManager = spy(context.getPackageManager());
304
305 spiedContext = mock(Context.class);
Makoto Onukid932f762015-09-29 16:53:38 -0700306
Makoto Onukia52562c2015-10-01 16:12:31 -0700307 contentResolver = new MockContentResolver();
308
Makoto Onukid932f762015-09-29 16:53:38 -0700309 // Add the system user
310 systemUserDataDir = addUser(UserHandle.USER_SYSTEM, UserInfo.FLAG_PRIMARY);
311
312 // System user is always running.
Makoto Onukia52562c2015-10-01 16:12:31 -0700313 setUserRunning(UserHandle.USER_SYSTEM, true);
Makoto Onukid932f762015-09-29 16:53:38 -0700314 }
315
316 public File addUser(int userId, int flags) {
317
318 // Set up (default) UserInfo for CALLER_USER_HANDLE.
319 final UserInfo uh = new UserInfo(userId, "user" + userId, flags);
320 when(userManager.getUserInfo(eq(userId))).thenReturn(uh);
321
322 mUserInfos.add(uh);
323 when(userManager.getUsers()).thenReturn(mUserInfos);
Makoto Onuki2a3c3da2016-02-18 14:25:30 -0800324 when(userManager.getUserInfo(anyInt())).thenAnswer(
325 new Answer<UserInfo>() {
326 @Override
327 public UserInfo answer(InvocationOnMock invocation) throws Throwable {
328 final int userId = (int) invocation.getArguments()[0];
329 for (UserInfo ui : mUserInfos) {
330 if (ui.id == userId) {
331 return ui;
332 }
333 }
334 return null;
335 }
336 }
337 );
338 when(userManager.getProfiles(anyInt())).thenAnswer(
339 new Answer<List<UserInfo>>() {
340 @Override
341 public List<UserInfo> answer(InvocationOnMock invocation) throws Throwable {
342 final int userId = (int) invocation.getArguments()[0];
343 final ArrayList<UserInfo> ret = new ArrayList<UserInfo>();
344 UserInfo parent = null;
345 for (UserInfo ui : mUserInfos) {
346 if (ui.id == userId) {
347 parent = ui;
348 break;
349 }
350 }
351 if (parent == null) {
352 return ret;
353 }
354 ret.add(parent);
355 for (UserInfo ui : mUserInfos) {
356 if (ui.id == userId) {
357 continue;
358 }
359 if (ui.profileGroupId != UserInfo.NO_PROFILE_GROUP_ID
360 && ui.profileGroupId == parent.profileGroupId) {
361 ret.add(ui);
362 }
363 }
364 return ret;
365 }
366 }
367 );
Makoto Onukid932f762015-09-29 16:53:38 -0700368
369 // Create a data directory.
370 final File dir = new File(dataDir, "user" + userId);
371 DpmTestUtils.clearDir(dir);
372
373 when(environment.getUserSystemDirectory(eq(userId))).thenReturn(dir);
374 return dir;
375 }
376
377 /**
378 * Add multiple users at once. They'll all have flag 0.
379 */
380 public void addUsers(int... userIds) {
381 for (int userId : userIds) {
382 addUser(userId, 0);
383 }
Makoto Onukic9754cf2015-08-31 11:58:43 -0700384 }
385
Makoto Onukia52562c2015-10-01 16:12:31 -0700386 public void setUserRunning(int userId, boolean isRunning) {
387 when(userManager.isUserRunning(MockUtils.checkUserHandle(userId)))
388 .thenReturn(isRunning);
389 }
390
Makoto Onukic9754cf2015-08-31 11:58:43 -0700391 @Override
392 public Object getSystemService(String name) {
393 switch (name) {
394 case Context.USER_SERVICE:
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700395 return userManager;
396 case Context.POWER_SERVICE:
397 return powerManager;
Makoto Onukia31ebbc2015-11-23 17:15:21 -0800398 case Context.WIFI_SERVICE:
399 return wifiManager;
Makoto Onukic9754cf2015-08-31 11:58:43 -0700400 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700401 throw new UnsupportedOperationException();
402 }
403
404 @Override
Makoto Onuki72a3a0c2015-09-25 16:01:43 -0700405 public String getSystemServiceName(Class<?> serviceClass) {
406 return realTestContext.getSystemServiceName(serviceClass);
407 }
408
409 @Override
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700410 public PackageManager getPackageManager() {
411 return packageManager;
412 }
413
414 @Override
415 public void enforceCallingOrSelfPermission(String permission, String message) {
416 if (binder.getCallingUid() == SYSTEM_UID) {
417 return; // Assume system has all permissions.
418 }
419 if (!callerPermissions.contains(permission)) {
420 throw new SecurityException("Caller doesn't have " + permission + " : " + message);
421 }
422 }
423
424 @Override
425 public void sendBroadcast(Intent intent) {
426 spiedContext.sendBroadcast(intent);
427 }
428
429 @Override
430 public void sendBroadcast(Intent intent, String receiverPermission) {
431 spiedContext.sendBroadcast(intent, receiverPermission);
432 }
433
434 @Override
435 public void sendBroadcastMultiplePermissions(Intent intent, String[] receiverPermissions) {
436 spiedContext.sendBroadcastMultiplePermissions(intent, receiverPermissions);
437 }
438
439 @Override
440 public void sendBroadcast(Intent intent, String receiverPermission, Bundle options) {
441 spiedContext.sendBroadcast(intent, receiverPermission, options);
442 }
443
444 @Override
445 public void sendBroadcast(Intent intent, String receiverPermission, int appOp) {
446 spiedContext.sendBroadcast(intent, receiverPermission, appOp);
447 }
448
449 @Override
450 public void sendOrderedBroadcast(Intent intent, String receiverPermission) {
451 spiedContext.sendOrderedBroadcast(intent, receiverPermission);
452 }
453
454 @Override
455 public void sendOrderedBroadcast(Intent intent, String receiverPermission,
456 BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
457 String initialData, Bundle initialExtras) {
458 spiedContext.sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler,
459 initialCode, initialData, initialExtras);
460 }
461
462 @Override
463 public void sendOrderedBroadcast(Intent intent, String receiverPermission, Bundle options,
464 BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
465 String initialData, Bundle initialExtras) {
466 spiedContext.sendOrderedBroadcast(intent, receiverPermission, options, resultReceiver,
467 scheduler,
468 initialCode, initialData, initialExtras);
469 }
470
471 @Override
472 public void sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp,
473 BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
474 String initialData, Bundle initialExtras) {
475 spiedContext.sendOrderedBroadcast(intent, receiverPermission, appOp, resultReceiver,
476 scheduler,
477 initialCode, initialData, initialExtras);
478 }
479
480 @Override
481 public void sendBroadcastAsUser(Intent intent, UserHandle user) {
Makoto Onukib643fb02015-09-22 15:03:44 -0700482 if (binder.callingPid != SYSTEM_PID) {
483 // Unless called as the system process, can only call if the target user is the
484 // calling user.
485 // (The actual check is more complex; we may need to change it later.)
486 Assert.assertEquals(UserHandle.getUserId(binder.getCallingUid()), user.getIdentifier());
487 }
488
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700489 spiedContext.sendBroadcastAsUser(intent, user);
490 }
491
492 @Override
493 public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission) {
494 spiedContext.sendBroadcastAsUser(intent, user, receiverPermission);
495 }
496
497 @Override
498 public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission,
499 int appOp) {
500 spiedContext.sendBroadcastAsUser(intent, user, receiverPermission, appOp);
501 }
502
503 @Override
504 public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
505 String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
506 int initialCode, String initialData, Bundle initialExtras) {
507 spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver,
508 scheduler, initialCode, initialData, initialExtras);
509 }
510
511 @Override
512 public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
513 String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
514 Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
515 spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp,
516 resultReceiver,
517 scheduler, initialCode, initialData, initialExtras);
518 }
519
520 @Override
521 public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
522 String receiverPermission, int appOp, Bundle options, BroadcastReceiver resultReceiver,
523 Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
524 spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, options,
525 resultReceiver, scheduler, initialCode, initialData, initialExtras);
526 }
527
528 @Override
529 public void sendStickyBroadcast(Intent intent) {
530 spiedContext.sendStickyBroadcast(intent);
531 }
532
533 @Override
534 public void sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver,
535 Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
536 spiedContext.sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode,
537 initialData, initialExtras);
538 }
539
540 @Override
541 public void removeStickyBroadcast(Intent intent) {
542 spiedContext.removeStickyBroadcast(intent);
543 }
544
545 @Override
546 public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
547 spiedContext.sendStickyBroadcastAsUser(intent, user);
548 }
549
550 @Override
551 public void sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle user,
552 BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
553 String initialData, Bundle initialExtras) {
554 spiedContext.sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver, scheduler, initialCode,
555 initialData, initialExtras);
556 }
557
558 @Override
559 public void removeStickyBroadcastAsUser(Intent intent, UserHandle user) {
560 spiedContext.removeStickyBroadcastAsUser(intent, user);
561 }
562
563 @Override
564 public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
565 return spiedContext.registerReceiver(receiver, filter);
566 }
567
568 @Override
569 public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter,
570 String broadcastPermission, Handler scheduler) {
571 return spiedContext.registerReceiver(receiver, filter, broadcastPermission, scheduler);
572 }
573
574 @Override
575 public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user,
576 IntentFilter filter, String broadcastPermission, Handler scheduler) {
577 return spiedContext.registerReceiverAsUser(receiver, user, filter, broadcastPermission,
578 scheduler);
579 }
580
581 @Override
582 public void unregisterReceiver(BroadcastReceiver receiver) {
583 spiedContext.unregisterReceiver(receiver);
Makoto Onukic9754cf2015-08-31 11:58:43 -0700584 }
Makoto Onukia52562c2015-10-01 16:12:31 -0700585
586 @Override
587 public ContentResolver getContentResolver() {
588 return contentResolver;
589 }
Makoto Onukic9754cf2015-08-31 11:58:43 -0700590}