blob: 1a67576c218f73b91fc98bb11bf7124a8816ec3d [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
Pavel Grafov75c0a892017-05-18 17:28:27 +010019import static org.mockito.Mockito.mock;
20
Jonathan Scott367ebf42019-05-16 15:13:17 +010021import android.annotation.Nullable;
22import android.app.AppOpsManager;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070023import android.content.BroadcastReceiver;
Makoto Onukia52562c2015-10-01 16:12:31 -070024import android.content.ContentResolver;
Makoto Onukic9754cf2015-08-31 11:58:43 -070025import android.content.Context;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070026import android.content.Intent;
27import android.content.IntentFilter;
Bartosz Fabianowskib21b2412016-11-17 04:53:33 +010028import android.content.pm.ApplicationInfo;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070029import android.content.pm.PackageManager;
Bartosz Fabianowskib21b2412016-11-17 04:53:33 +010030import android.content.res.Resources;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070031import android.os.Bundle;
32import android.os.Handler;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070033import android.os.UserHandle;
Christine Franks361b8252017-06-23 18:12:46 -070034import android.os.UserManagerInternal;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070035import android.test.mock.MockContext;
Robin Lee7f5c91c2017-02-08 21:27:02 +000036import android.util.ArrayMap;
yuemingwe43cdf72017-10-12 16:52:11 +010037import android.util.ExceptionUtils;
38
Brett Chabotec6bcbc2018-11-05 21:21:35 -080039import androidx.annotation.NonNull;
40
yuemingwe43cdf72017-10-12 16:52:11 +010041import com.android.internal.util.FunctionalUtils;
Tony Mak2f26b792016-11-28 17:54:51 +000042
Makoto Onukib643fb02015-09-22 15:03:44 -070043import org.junit.Assert;
44
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070045import java.util.ArrayList;
46import java.util.List;
Robin Lee7f5c91c2017-02-08 21:27:02 +000047import java.util.Map;
Makoto Onukic9754cf2015-08-31 11:58:43 -070048
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070049/**
50 * Context used throughout DPMS tests.
51 */
52public class DpmMockContext extends MockContext {
53 /**
54 * User-id of a non-system user we use throughout unit tests.
55 */
56 public static final int CALLER_USER_HANDLE = 20;
Makoto Onukic9754cf2015-08-31 11:58:43 -070057
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070058 /**
Makoto Onukib643fb02015-09-22 15:03:44 -070059 * UID corresponding to {@link #CALLER_USER_HANDLE}.
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070060 */
Makoto Onukid932f762015-09-29 16:53:38 -070061 public static final int CALLER_UID = UserHandle.getUid(CALLER_USER_HANDLE, 20123);
Makoto Onukic9754cf2015-08-31 11:58:43 -070062
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070063 /**
Eran Messeribb271892018-10-17 18:27:50 +010064 * UID corresponding to {@link #CALLER_USER_HANDLE}.
65 */
66 public static final int CALLER_MANAGED_PROVISIONING_UID = UserHandle.getUid(CALLER_USER_HANDLE,
67 20125);
68
69 /**
Makoto Onukib643fb02015-09-22 15:03:44 -070070 * UID used when a caller is on the system user.
71 */
Makoto Onukid932f762015-09-29 16:53:38 -070072 public static final int CALLER_SYSTEM_USER_UID = 20321;
Makoto Onukib643fb02015-09-22 15:03:44 -070073
74 /**
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070075 * PID of the caller.
76 */
77 public static final int CALLER_PID = 22222;
78
79 /**
80 * UID of the system server.
81 */
82 public static final int SYSTEM_UID = android.os.Process.SYSTEM_UID;
83
84 /**
85 * PID of the system server.
86 */
87 public static final int SYSTEM_PID = 11111;
88
Nicolas Prevot45d29072017-01-18 16:11:19 +000089 public static final String ANOTHER_PACKAGE_NAME = "com.another.package.name";
Nicolas Prevot45d29072017-01-18 16:11:19 +000090 public static final int ANOTHER_UID = UserHandle.getUid(UserHandle.USER_SYSTEM, 18434);
91
Eran Messeribb271892018-10-17 18:27:50 +010092 public static final String DELEGATE_PACKAGE_NAME = "com.delegate.package.name";
93 public static final int DELEGATE_CERT_INSTALLER_UID = UserHandle.getUid(UserHandle.USER_SYSTEM,
94 18437);
95
Pavel Grafov75c0a892017-05-18 17:28:27 +010096 private final MockSystemServices mMockSystemServices;
97
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070098 public static class MockBinder {
Makoto Onukif76b06a2015-09-22 15:03:44 -070099 public int callingUid = CALLER_UID;
100 public int callingPid = CALLER_PID;
Robin Lee2c68dad2017-03-17 12:50:24 +0000101 public final Map<Integer, List<String>> callingPermissions = new ArrayMap<>();
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700102
103 public long clearCallingIdentity() {
Makoto Onukif76b06a2015-09-22 15:03:44 -0700104 final long token = (((long) callingUid) << 32) | (callingPid);
105 callingUid = SYSTEM_UID;
106 callingPid = SYSTEM_PID;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700107 return token;
108 }
109
110 public void restoreCallingIdentity(long token) {
Makoto Onukif76b06a2015-09-22 15:03:44 -0700111 callingUid = (int) (token >> 32);
112 callingPid = (int) token;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700113 }
114
yuemingwe43cdf72017-10-12 16:52:11 +0100115 public void withCleanCallingIdentity(@NonNull FunctionalUtils.ThrowingRunnable action) {
116 long callingIdentity = clearCallingIdentity();
117 Throwable throwableToPropagate = null;
118 try {
Eugene Susla2f5ee712017-06-23 17:25:24 -0700119 action.runOrThrow();
yuemingwe43cdf72017-10-12 16:52:11 +0100120 } catch (Throwable throwable) {
121 throwableToPropagate = throwable;
122 } finally {
123 restoreCallingIdentity(callingIdentity);
124 if (throwableToPropagate != null) {
125 throw ExceptionUtils.propagate(throwableToPropagate);
126 }
127 }
128 }
129
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700130 public int getCallingUid() {
Makoto Onukif76b06a2015-09-22 15:03:44 -0700131 return callingUid;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700132 }
133
134 public int getCallingPid() {
Makoto Onukif76b06a2015-09-22 15:03:44 -0700135 return callingPid;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700136 }
137
138 public UserHandle getCallingUserHandle() {
139 return new UserHandle(UserHandle.getUserId(getCallingUid()));
140 }
141
142 public boolean isCallerUidMyUid() {
Makoto Onukif76b06a2015-09-22 15:03:44 -0700143 return callingUid == SYSTEM_UID;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700144 }
Makoto Onukic9754cf2015-08-31 11:58:43 -0700145 }
146
Pavel Grafov75c0a892017-05-18 17:28:27 +0100147 private final Context realTestContext;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700148
149 /**
150 * Use this instance to verify unimplemented methods such as {@link #sendBroadcast}.
151 * (Spying on {@code this} instance will confuse mockito somehow and I got weired "wrong number
152 * of arguments" exceptions.)
153 */
154 public final Context spiedContext;
155
156 public final MockBinder binder;
Bartosz Fabianowskib21b2412016-11-17 04:53:33 +0100157 public final Resources resources;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700158
Robin Lee2c68dad2017-03-17 12:50:24 +0000159 /** TODO: Migrate everything to use {@link #permissions} to avoid confusion. */
160 @Deprecated
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700161 public final List<String> callerPermissions = new ArrayList<>();
162
Robin Lee2c68dad2017-03-17 12:50:24 +0000163 /** Less confusing alias for {@link #callerPermissions}. */
164 public final List<String> permissions = callerPermissions;
165
Bartosz Fabianowskib21b2412016-11-17 04:53:33 +0100166 public String packageName = null;
167
168 public ApplicationInfo applicationInfo = null;
169
Pavel Grafov75c0a892017-05-18 17:28:27 +0100170 public DpmMockContext(MockSystemServices mockSystemServices, Context context) {
171 mMockSystemServices = mockSystemServices;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700172 realTestContext = context;
Makoto Onukid932f762015-09-29 16:53:38 -0700173
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700174 binder = new MockBinder();
Bartosz Fabianowskib21b2412016-11-17 04:53:33 +0100175 resources = mock(Resources.class);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700176 spiedContext = mock(Context.class);
Robin Lee2c68dad2017-03-17 12:50:24 +0000177 }
178
Makoto Onukic9754cf2015-08-31 11:58:43 -0700179 @Override
Bartosz Fabianowskib21b2412016-11-17 04:53:33 +0100180 public Resources getResources() {
181 return resources;
182 }
183
184 @Override
185 public Resources.Theme getTheme() {
186 return spiedContext.getTheme();
187 }
188
189 @Override
190 public String getPackageName() {
191 if (packageName != null) {
192 return packageName;
193 }
194 return super.getPackageName();
195 }
196
197 @Override
198 public ApplicationInfo getApplicationInfo() {
199 if (applicationInfo != null) {
200 return applicationInfo;
201 }
202 return super.getApplicationInfo();
203 }
204
205 @Override
Makoto Onukic9754cf2015-08-31 11:58:43 -0700206 public Object getSystemService(String name) {
207 switch (name) {
Robin Leed2a73ed2016-12-19 09:07:16 +0000208 case Context.ALARM_SERVICE:
Pavel Grafov75c0a892017-05-18 17:28:27 +0100209 return mMockSystemServices.alarmManager;
Neil Fuller3aedd492019-11-23 11:33:57 +0000210 case Context.TIME_DETECTOR_SERVICE:
211 return mMockSystemServices.timeDetector;
Makoto Onukic9754cf2015-08-31 11:58:43 -0700212 case Context.USER_SERVICE:
Pavel Grafov75c0a892017-05-18 17:28:27 +0100213 return mMockSystemServices.userManager;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700214 case Context.POWER_SERVICE:
Pavel Grafov75c0a892017-05-18 17:28:27 +0100215 return mMockSystemServices.powerManager;
Makoto Onukia31ebbc2015-11-23 17:15:21 -0800216 case Context.WIFI_SERVICE:
Pavel Grafov75c0a892017-05-18 17:28:27 +0100217 return mMockSystemServices.wifiManager;
Makoto Onuki606da772016-12-15 14:26:55 -0800218 case Context.ACCOUNT_SERVICE:
Pavel Grafov75c0a892017-05-18 17:28:27 +0100219 return mMockSystemServices.accountManager;
Makoto Onukic9754cf2015-08-31 11:58:43 -0700220 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700221 throw new UnsupportedOperationException();
222 }
223
224 @Override
Makoto Onuki72a3a0c2015-09-25 16:01:43 -0700225 public String getSystemServiceName(Class<?> serviceClass) {
226 return realTestContext.getSystemServiceName(serviceClass);
227 }
228
229 @Override
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700230 public PackageManager getPackageManager() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100231 return mMockSystemServices.packageManager;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700232 }
233
Christine Franks361b8252017-06-23 18:12:46 -0700234 public UserManagerInternal getUserManagerInternal() {
235 return mMockSystemServices.userManagerInternal;
236 }
237
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700238 @Override
239 public void enforceCallingOrSelfPermission(String permission, String message) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100240 if (UserHandle.isSameApp(binder.getCallingUid(), SYSTEM_UID)) {
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700241 return; // Assume system has all permissions.
242 }
Robin Lee2c68dad2017-03-17 12:50:24 +0000243 List<String> permissions = binder.callingPermissions.get(binder.getCallingUid());
244 if (permissions == null) {
245 // TODO: delete the following line. to do this without breaking any tests, first it's
246 // necessary to remove all tests that set it directly.
247 permissions = callerPermissions;
Pavel Grafov75c0a892017-05-18 17:28:27 +0100248 // throw new UnsupportedOperationException(
249 // "Caller UID " + binder.getCallingUid() + " doesn't exist");
Robin Lee2c68dad2017-03-17 12:50:24 +0000250 }
251 if (!permissions.contains(permission)) {
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700252 throw new SecurityException("Caller doesn't have " + permission + " : " + message);
253 }
254 }
255
256 @Override
257 public void sendBroadcast(Intent intent) {
258 spiedContext.sendBroadcast(intent);
259 }
260
261 @Override
262 public void sendBroadcast(Intent intent, String receiverPermission) {
263 spiedContext.sendBroadcast(intent, receiverPermission);
264 }
265
266 @Override
267 public void sendBroadcastMultiplePermissions(Intent intent, String[] receiverPermissions) {
268 spiedContext.sendBroadcastMultiplePermissions(intent, receiverPermissions);
269 }
270
271 @Override
Tyler Gunnf955e562018-04-26 14:43:31 -0700272 public void sendBroadcastAsUserMultiplePermissions(Intent intent, UserHandle user,
273 String[] receiverPermissions) {
274 spiedContext.sendBroadcastAsUserMultiplePermissions(intent, user, receiverPermissions);
275 }
276
277 @Override
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700278 public void sendBroadcast(Intent intent, String receiverPermission, Bundle options) {
279 spiedContext.sendBroadcast(intent, receiverPermission, options);
280 }
281
282 @Override
283 public void sendBroadcast(Intent intent, String receiverPermission, int appOp) {
284 spiedContext.sendBroadcast(intent, receiverPermission, appOp);
285 }
286
287 @Override
288 public void sendOrderedBroadcast(Intent intent, String receiverPermission) {
289 spiedContext.sendOrderedBroadcast(intent, receiverPermission);
290 }
291
292 @Override
293 public void sendOrderedBroadcast(Intent intent, String receiverPermission,
294 BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
295 String initialData, Bundle initialExtras) {
296 spiedContext.sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler,
297 initialCode, initialData, initialExtras);
298 }
299
300 @Override
301 public void sendOrderedBroadcast(Intent intent, String receiverPermission, Bundle options,
302 BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
303 String initialData, Bundle initialExtras) {
304 spiedContext.sendOrderedBroadcast(intent, receiverPermission, options, resultReceiver,
305 scheduler,
306 initialCode, initialData, initialExtras);
307 }
308
309 @Override
310 public void sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp,
311 BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
312 String initialData, Bundle initialExtras) {
313 spiedContext.sendOrderedBroadcast(intent, receiverPermission, appOp, resultReceiver,
314 scheduler,
315 initialCode, initialData, initialExtras);
316 }
317
318 @Override
319 public void sendBroadcastAsUser(Intent intent, UserHandle user) {
Makoto Onukib643fb02015-09-22 15:03:44 -0700320 if (binder.callingPid != SYSTEM_PID) {
321 // Unless called as the system process, can only call if the target user is the
322 // calling user.
323 // (The actual check is more complex; we may need to change it later.)
324 Assert.assertEquals(UserHandle.getUserId(binder.getCallingUid()), user.getIdentifier());
325 }
326
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700327 spiedContext.sendBroadcastAsUser(intent, user);
328 }
329
330 @Override
Jonathan Scott367ebf42019-05-16 15:13:17 +0100331 public void sendBroadcastAsUser(Intent intent,
332 UserHandle user, @Nullable String receiverPermission, @Nullable Bundle options) {
333 spiedContext.sendBroadcastAsUser(intent, user, receiverPermission, options);
334 }
335
336 @Override
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700337 public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission) {
338 spiedContext.sendBroadcastAsUser(intent, user, receiverPermission);
339 }
340
341 @Override
342 public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission,
343 int appOp) {
344 spiedContext.sendBroadcastAsUser(intent, user, receiverPermission, appOp);
345 }
346
347 @Override
348 public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
349 String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
350 int initialCode, String initialData, Bundle initialExtras) {
Jonathan Scott367ebf42019-05-16 15:13:17 +0100351 sendOrderedBroadcastAsUser(
352 intent, user, receiverPermission, AppOpsManager.OP_NONE, resultReceiver,
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700353 scheduler, initialCode, initialData, initialExtras);
354 }
355
356 @Override
357 public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
358 String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
359 Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
Jonathan Scott367ebf42019-05-16 15:13:17 +0100360 sendOrderedBroadcastAsUser(
361 intent, user, receiverPermission, appOp, null, resultReceiver,
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700362 scheduler, initialCode, initialData, initialExtras);
363 }
364
365 @Override
366 public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
367 String receiverPermission, int appOp, Bundle options, BroadcastReceiver resultReceiver,
368 Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
369 spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, options,
370 resultReceiver, scheduler, initialCode, initialData, initialExtras);
Jonathan Scott367ebf42019-05-16 15:13:17 +0100371 resultReceiver.onReceive(spiedContext, intent);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700372 }
373
374 @Override
375 public void sendStickyBroadcast(Intent intent) {
376 spiedContext.sendStickyBroadcast(intent);
377 }
378
379 @Override
380 public void sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver,
381 Handler scheduler, int initialCode, String initialData, Bundle initialExtras) {
382 spiedContext.sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode,
383 initialData, initialExtras);
384 }
385
386 @Override
387 public void removeStickyBroadcast(Intent intent) {
388 spiedContext.removeStickyBroadcast(intent);
389 }
390
391 @Override
392 public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
393 spiedContext.sendStickyBroadcastAsUser(intent, user);
394 }
395
396 @Override
397 public void sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle user,
398 BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
399 String initialData, Bundle initialExtras) {
400 spiedContext.sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver, scheduler, initialCode,
401 initialData, initialExtras);
402 }
403
404 @Override
405 public void removeStickyBroadcastAsUser(Intent intent, UserHandle user) {
406 spiedContext.removeStickyBroadcastAsUser(intent, user);
407 }
408
409 @Override
410 public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100411 mMockSystemServices.registerReceiver(receiver, filter, null);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700412 return spiedContext.registerReceiver(receiver, filter);
413 }
414
415 @Override
416 public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter,
417 String broadcastPermission, Handler scheduler) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100418 mMockSystemServices.registerReceiver(receiver, filter, scheduler);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700419 return spiedContext.registerReceiver(receiver, filter, broadcastPermission, scheduler);
420 }
421
422 @Override
423 public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user,
424 IntentFilter filter, String broadcastPermission, Handler scheduler) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100425 mMockSystemServices.registerReceiver(receiver, filter, scheduler);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700426 return spiedContext.registerReceiverAsUser(receiver, user, filter, broadcastPermission,
427 scheduler);
428 }
429
430 @Override
431 public void unregisterReceiver(BroadcastReceiver receiver) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100432 mMockSystemServices.unregisterReceiver(receiver);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700433 spiedContext.unregisterReceiver(receiver);
Makoto Onukic9754cf2015-08-31 11:58:43 -0700434 }
Makoto Onukia52562c2015-10-01 16:12:31 -0700435
436 @Override
Robin Lee7f5c91c2017-02-08 21:27:02 +0000437 public Context createPackageContextAsUser(String packageName, int flags, UserHandle user)
438 throws PackageManager.NameNotFoundException {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100439 return mMockSystemServices.createPackageContextAsUser(packageName, flags, user);
Robin Lee7f5c91c2017-02-08 21:27:02 +0000440 }
441
442 @Override
Makoto Onukia52562c2015-10-01 16:12:31 -0700443 public ContentResolver getContentResolver() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100444 return mMockSystemServices.contentResolver;
Makoto Onukia52562c2015-10-01 16:12:31 -0700445 }
Bartosz Fabianowskib21b2412016-11-17 04:53:33 +0100446
447 @Override
448 public int getUserId() {
449 return UserHandle.getUserId(binder.getCallingUid());
450 }
Eran Messeribb271892018-10-17 18:27:50 +0100451
452 @Override
453 public int checkCallingPermission(String permission) {
454 return spiedContext.checkCallingPermission(permission);
455 }
Makoto Onukic9754cf2015-08-31 11:58:43 -0700456}