blob: 06f138ba898b5c23e64f1eb5ecfc5cf1845ee5b8 [file] [log] [blame]
Makoto Onukicc4bbeb2015-09-17 10:28:24 -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 */
16package com.android.server.devicepolicy;
17
Alex Chaub6ef8692018-01-09 14:16:36 +000018import android.app.ActivityManagerInternal;
yuemingwe43cdf72017-10-12 16:52:11 +010019import android.app.AlarmManager;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070020import android.app.IActivityManager;
21import android.app.NotificationManager;
Robin Lee088d7aa2017-03-17 12:50:08 +000022import android.app.PendingIntent;
Makoto Onukib643fb02015-09-22 15:03:44 -070023import android.app.backup.IBackupManager;
Sudheer Shanka101c3532018-01-08 16:28:42 -080024import android.app.usage.UsageStatsManagerInternal;
Robin Lee088d7aa2017-03-17 12:50:08 +000025import android.content.Context;
26import android.content.Intent;
Makoto Onukif76b06a2015-09-22 15:03:44 -070027import android.content.pm.IPackageManager;
Fyodor Kupolovcb6fd802015-11-05 14:27:06 -080028import android.content.pm.PackageManagerInternal;
Victor Chang3e794af2016-03-04 13:48:17 +000029import android.database.ContentObserver;
Makoto Onukib643fb02015-09-22 15:03:44 -070030import android.media.IAudioService;
Bartosz Fabianowskib21b2412016-11-17 04:53:33 +010031import android.net.IIpConnectivityMetrics;
Victor Chang3e794af2016-03-04 13:48:17 +000032import android.net.Uri;
Robin Lee088d7aa2017-03-17 12:50:08 +000033import android.os.Bundle;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070034import android.os.Looper;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070035import android.os.PowerManagerInternal;
36import android.os.UserHandle;
37import android.os.UserManager;
Makoto Onuki068c54a2015-10-13 14:34:03 -070038import android.os.UserManagerInternal;
Robin Lee7f5c91c2017-02-08 21:27:02 +000039import android.security.KeyChain;
yuemingwe43cdf72017-10-12 16:52:11 +010040import android.support.annotation.NonNull;
Mahaver Chopra1216ae52016-03-11 15:39:48 +000041import android.telephony.TelephonyManager;
Victor Chang3e794af2016-03-04 13:48:17 +000042import android.util.ArrayMap;
Victor Chang3e794af2016-03-04 13:48:17 +000043import android.util.Pair;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070044import android.view.IWindowManager;
45
yuemingwe43cdf72017-10-12 16:52:11 +010046import com.android.internal.util.FunctionalUtils.ThrowingRunnable;
Victor Chang3e794af2016-03-04 13:48:17 +000047import com.android.internal.widget.LockPatternUtils;
Sudheer Shankac53c47f2018-01-16 12:01:00 -080048import com.android.server.net.NetworkPolicyManagerInternal;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070049
Victor Chang3e794af2016-03-04 13:48:17 +000050import java.io.File;
Esteban Talaverab88f42b2017-01-24 16:47:16 +000051import java.io.IOException;
Victor Chang3e794af2016-03-04 13:48:17 +000052import java.util.Map;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070053
54/**
55 * Overrides {@link #DevicePolicyManagerService} for dependency injection.
56 */
57public class DevicePolicyManagerServiceTestable extends DevicePolicyManagerService {
58 /**
59 * Overrides {@link #Owners} for dependency injection.
60 */
61 public static class OwnersTestable extends Owners {
62 public static final String LEGACY_FILE = "legacy.xml";
63 public static final String DEVICE_OWNER_FILE = "device_owner2.xml";
Pavel Grafov4f4f6f82017-03-28 13:44:04 +010064 public static final String PROFILE_OWNER_FILE = "profile_owner.xml";
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070065
Makoto Onukif76b06a2015-09-22 15:03:44 -070066 private final File mLegacyFile;
67 private final File mDeviceOwnerFile;
Pavel Grafov4f4f6f82017-03-28 13:44:04 +010068 private final File mUsersDataDir;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070069
Pavel Grafov75c0a892017-05-18 17:28:27 +010070 public OwnersTestable(MockSystemServices services) {
71 super(services.userManager, services.userManagerInternal,
72 services.packageManagerInternal);
73 mLegacyFile = new File(services.dataDir, LEGACY_FILE);
74 mDeviceOwnerFile = new File(services.dataDir, DEVICE_OWNER_FILE);
75 mUsersDataDir = new File(services.dataDir, "users");
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070076 }
77
78 @Override
79 File getLegacyConfigFileWithTestOverride() {
80 return mLegacyFile;
81 }
82
83 @Override
84 File getDeviceOwnerFileWithTestOverride() {
85 return mDeviceOwnerFile;
86 }
87
88 @Override
89 File getProfileOwnerFileWithTestOverride(int userId) {
Pavel Grafov4f4f6f82017-03-28 13:44:04 +010090 final File userDir = new File(mUsersDataDir, String.valueOf(userId));
91 return new File(userDir, PROFILE_OWNER_FILE);
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070092 }
93 }
94
Makoto Onukib643fb02015-09-22 15:03:44 -070095 public final DpmMockContext context;
Victor Chang3e794af2016-03-04 13:48:17 +000096 private final MockInjector mMockInjector;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -070097
Pavel Grafov75c0a892017-05-18 17:28:27 +010098 public DevicePolicyManagerServiceTestable(MockSystemServices services, DpmMockContext context) {
99 this(new MockInjector(services, context));
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700100 }
101
Makoto Onukib643fb02015-09-22 15:03:44 -0700102 private DevicePolicyManagerServiceTestable(MockInjector injector) {
103 super(injector);
Victor Chang3e794af2016-03-04 13:48:17 +0000104 mMockInjector = injector;
Makoto Onukib643fb02015-09-22 15:03:44 -0700105 this.context = injector.context;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700106 }
107
Alexandru-Andrei Rotaru7f31bb02017-09-07 16:29:48 +0100108 @Override
109 public boolean isPasswordBlacklisted(int userId, String password) {
110 return false;
111 }
112
Victor Chang3e794af2016-03-04 13:48:17 +0000113
114 public void notifyChangeToContentObserver(Uri uri, int userHandle) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100115 ContentObserver co = mMockInjector.mContentObservers.get(new Pair<>(uri, userHandle));
Victor Chang3e794af2016-03-04 13:48:17 +0000116 if (co != null) {
117 co.onChange(false, uri, userHandle); // notify synchronously
118 }
119
120 // Notify USER_ALL observer too.
Pavel Grafov75c0a892017-05-18 17:28:27 +0100121 co = mMockInjector.mContentObservers.get(new Pair<>(uri, UserHandle.USER_ALL));
Victor Chang3e794af2016-03-04 13:48:17 +0000122 if (co != null) {
123 co.onChange(false, uri, userHandle); // notify synchronously
124 }
125 }
126
127
Makoto Onukib643fb02015-09-22 15:03:44 -0700128 private static class MockInjector extends Injector {
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700129
Makoto Onukib643fb02015-09-22 15:03:44 -0700130 public final DpmMockContext context;
Pavel Grafov75c0a892017-05-18 17:28:27 +0100131 private final MockSystemServices services;
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700132
Victor Chang3e794af2016-03-04 13:48:17 +0000133 // Key is a pair of uri and userId
134 private final Map<Pair<Uri, Integer>, ContentObserver> mContentObservers = new ArrayMap<>();
135
Pavel Grafov75c0a892017-05-18 17:28:27 +0100136 private MockInjector(MockSystemServices services, DpmMockContext context) {
Makoto Onukib643fb02015-09-22 15:03:44 -0700137 super(context);
Pavel Grafov75c0a892017-05-18 17:28:27 +0100138 this.services = services;
Makoto Onukib643fb02015-09-22 15:03:44 -0700139 this.context = context;
Makoto Onukib643fb02015-09-22 15:03:44 -0700140 }
Makoto Onukif76b06a2015-09-22 15:03:44 -0700141
Makoto Onukib643fb02015-09-22 15:03:44 -0700142 @Override
143 Owners newOwners() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100144 return new OwnersTestable(services);
Makoto Onukib643fb02015-09-22 15:03:44 -0700145 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700146
Makoto Onukib643fb02015-09-22 15:03:44 -0700147 @Override
148 UserManager getUserManager() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100149 return services.userManager;
Makoto Onukib643fb02015-09-22 15:03:44 -0700150 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700151
Makoto Onukib643fb02015-09-22 15:03:44 -0700152 @Override
Makoto Onuki068c54a2015-10-13 14:34:03 -0700153 UserManagerInternal getUserManagerInternal() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100154 return services.userManagerInternal;
Makoto Onuki068c54a2015-10-13 14:34:03 -0700155 }
156
157 @Override
Sudheer Shanka101c3532018-01-08 16:28:42 -0800158 UsageStatsManagerInternal getUsageStatsManagerInternal() {
159 return services.usageStatsManagerInternal;
160 }
161
162 @Override
Sudheer Shankac53c47f2018-01-16 12:01:00 -0800163 NetworkPolicyManagerInternal getNetworkPolicyManagerInternal() {
164 return services.networkPolicyManagerInternal;
165 }
166
167 @Override
Fyodor Kupolovcb6fd802015-11-05 14:27:06 -0800168 PackageManagerInternal getPackageManagerInternal() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100169 return services.packageManagerInternal;
Fyodor Kupolovcb6fd802015-11-05 14:27:06 -0800170 }
171
172 @Override
Makoto Onukib643fb02015-09-22 15:03:44 -0700173 PowerManagerInternal getPowerManagerInternal() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100174 return services.powerManagerInternal;
Makoto Onukib643fb02015-09-22 15:03:44 -0700175 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700176
Makoto Onukib643fb02015-09-22 15:03:44 -0700177 @Override
178 NotificationManager getNotificationManager() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100179 return services.notificationManager;
Makoto Onukib643fb02015-09-22 15:03:44 -0700180 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700181
Makoto Onukib643fb02015-09-22 15:03:44 -0700182 @Override
Bartosz Fabianowskib21b2412016-11-17 04:53:33 +0100183 IIpConnectivityMetrics getIIpConnectivityMetrics() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100184 return services.iipConnectivityMetrics;
Bartosz Fabianowskib21b2412016-11-17 04:53:33 +0100185 }
186
187 @Override
Makoto Onukib643fb02015-09-22 15:03:44 -0700188 IWindowManager getIWindowManager() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100189 return services.iwindowManager;
Makoto Onukib643fb02015-09-22 15:03:44 -0700190 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700191
Makoto Onukib643fb02015-09-22 15:03:44 -0700192 @Override
Makoto Onuki219bbaf2015-11-12 01:38:47 +0000193 IActivityManager getIActivityManager() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100194 return services.iactivityManager;
Makoto Onukib643fb02015-09-22 15:03:44 -0700195 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700196
Makoto Onukib643fb02015-09-22 15:03:44 -0700197 @Override
Alex Chaub6ef8692018-01-09 14:16:36 +0000198 ActivityManagerInternal getActivityManagerInternal() {
199 return services.activityManagerInternal;
200 }
201
202 @Override
Makoto Onukib643fb02015-09-22 15:03:44 -0700203 IPackageManager getIPackageManager() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100204 return services.ipackageManager;
Makoto Onukib643fb02015-09-22 15:03:44 -0700205 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700206
Makoto Onukib643fb02015-09-22 15:03:44 -0700207 @Override
208 IBackupManager getIBackupManager() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100209 return services.ibackupManager;
Makoto Onukib643fb02015-09-22 15:03:44 -0700210 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700211
Makoto Onukib643fb02015-09-22 15:03:44 -0700212 @Override
213 IAudioService getIAudioService() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100214 return services.iaudioService;
Makoto Onukib643fb02015-09-22 15:03:44 -0700215 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700216
Makoto Onukib643fb02015-09-22 15:03:44 -0700217 @Override
218 Looper getMyLooper() {
219 return Looper.getMainLooper();
220 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700221
Makoto Onukib643fb02015-09-22 15:03:44 -0700222 @Override
yuemingwe43cdf72017-10-12 16:52:11 +0100223 AlarmManager getAlarmManager() {return services.alarmManager;}
224
225 @Override
Makoto Onukib643fb02015-09-22 15:03:44 -0700226 LockPatternUtils newLockPatternUtils() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100227 return services.lockPatternUtils;
Makoto Onukib643fb02015-09-22 15:03:44 -0700228 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700229
Makoto Onukib643fb02015-09-22 15:03:44 -0700230 @Override
Alexandru-Andrei Rotaru7f31bb02017-09-07 16:29:48 +0100231 PasswordBlacklist newPasswordBlacklist(File file) {
232 return services.passwordBlacklist;
233 }
234
235 @Override
Makoto Onukid4c9e542016-02-25 18:17:30 -0800236 boolean storageManagerIsFileBasedEncryptionEnabled() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100237 return services.storageManager.isFileBasedEncryptionEnabled();
Makoto Onukid4c9e542016-02-25 18:17:30 -0800238 }
239
240 @Override
241 boolean storageManagerIsNonDefaultBlockEncrypted() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100242 return services.storageManager.isNonDefaultBlockEncrypted();
Makoto Onukid4c9e542016-02-25 18:17:30 -0800243 }
244
245 @Override
246 boolean storageManagerIsEncrypted() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100247 return services.storageManager.isEncrypted();
Makoto Onukid4c9e542016-02-25 18:17:30 -0800248 }
249
250 @Override
251 boolean storageManagerIsEncryptable() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100252 return services.storageManager.isEncryptable();
Makoto Onukid4c9e542016-02-25 18:17:30 -0800253 }
254
255 @Override
Makoto Onukib643fb02015-09-22 15:03:44 -0700256 String getDevicePolicyFilePathForSystemUser() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100257 return services.systemUserDataDir.getAbsolutePath() + "/";
Makoto Onukib643fb02015-09-22 15:03:44 -0700258 }
Makoto Onukif76b06a2015-09-22 15:03:44 -0700259
Makoto Onukib643fb02015-09-22 15:03:44 -0700260 @Override
261 long binderClearCallingIdentity() {
262 return context.binder.clearCallingIdentity();
263 }
Makoto Onukif76b06a2015-09-22 15:03:44 -0700264
Makoto Onukib643fb02015-09-22 15:03:44 -0700265 @Override
266 void binderRestoreCallingIdentity(long token) {
267 context.binder.restoreCallingIdentity(token);
268 }
Makoto Onukif76b06a2015-09-22 15:03:44 -0700269
Makoto Onukib643fb02015-09-22 15:03:44 -0700270 @Override
yuemingwe43cdf72017-10-12 16:52:11 +0100271 void binderWithCleanCallingIdentity(@NonNull ThrowingRunnable action) {
272 context.binder.withCleanCallingIdentity(action);
273 }
274
275 @Override
Makoto Onukib643fb02015-09-22 15:03:44 -0700276 int binderGetCallingUid() {
277 return context.binder.getCallingUid();
278 }
Makoto Onukif76b06a2015-09-22 15:03:44 -0700279
Makoto Onukib643fb02015-09-22 15:03:44 -0700280 @Override
281 int binderGetCallingPid() {
282 return context.binder.getCallingPid();
283 }
284
285 @Override
286 UserHandle binderGetCallingUserHandle() {
287 return context.binder.getCallingUserHandle();
288 }
289
290 @Override
291 boolean binderIsCallingUidMyUid() {
292 return context.binder.isCallerUidMyUid();
293 }
294
295 @Override
296 File environmentGetUserSystemDirectory(int userId) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100297 return services.environment.getUserSystemDirectory(userId);
Makoto Onukib643fb02015-09-22 15:03:44 -0700298 }
299
300 @Override
301 void powerManagerGoToSleep(long time, int reason, int flags) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100302 services.powerManager.goToSleep(time, reason, flags);
Makoto Onukib643fb02015-09-22 15:03:44 -0700303 }
304
305 @Override
Mahaver Chopraf8373b52015-12-23 14:42:18 +0000306 void powerManagerReboot(String reason) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100307 services.powerManager.reboot(reason);
Mahaver Chopraf8373b52015-12-23 14:42:18 +0000308 }
309
310 @Override
yinxuf4f9cec2017-06-19 10:28:19 -0700311 void recoverySystemRebootWipeUserData(boolean shutdown, String reason, boolean force,
312 boolean wipeEuicc) throws IOException {
313 services.recoverySystem.rebootWipeUserData(shutdown, reason, force, wipeEuicc);
Esteban Talaverab88f42b2017-01-24 16:47:16 +0000314 }
315
316 @Override
Makoto Onukib643fb02015-09-22 15:03:44 -0700317 boolean systemPropertiesGetBoolean(String key, boolean def) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100318 return services.systemProperties.getBoolean(key, def);
Makoto Onukib643fb02015-09-22 15:03:44 -0700319 }
320
321 @Override
322 long systemPropertiesGetLong(String key, long def) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100323 return services.systemProperties.getLong(key, def);
Makoto Onukib643fb02015-09-22 15:03:44 -0700324 }
325
326 @Override
327 String systemPropertiesGet(String key, String def) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100328 return services.systemProperties.get(key, def);
Makoto Onukib643fb02015-09-22 15:03:44 -0700329 }
330
331 @Override
332 String systemPropertiesGet(String key) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100333 return services.systemProperties.get(key);
Makoto Onukib643fb02015-09-22 15:03:44 -0700334 }
335
336 @Override
337 void systemPropertiesSet(String key, String value) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100338 services.systemProperties.set(key, value);
Makoto Onukib643fb02015-09-22 15:03:44 -0700339 }
340
341 @Override
342 boolean userManagerIsSplitSystemUser() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100343 return services.userManagerForMock.isSplitSystemUser();
Makoto Onukib643fb02015-09-22 15:03:44 -0700344 }
Makoto Onukia4f11972015-10-01 13:19:58 -0700345
346 @Override
Robin Lee088d7aa2017-03-17 12:50:08 +0000347 PendingIntent pendingIntentGetActivityAsUser(Context context, int requestCode,
348 Intent intent, int flags, Bundle options, UserHandle user) {
349 return null;
350 }
351
352 @Override
Victor Chang3e794af2016-03-04 13:48:17 +0000353 void registerContentObserver(Uri uri, boolean notifyForDescendents,
354 ContentObserver observer, int userHandle) {
355 mContentObservers.put(new Pair<Uri, Integer>(uri, userHandle), observer);
356 }
357
358 @Override
Makoto Onukia4f11972015-10-01 13:19:58 -0700359 int settingsSecureGetIntForUser(String name, int def, int userHandle) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100360 return services.settings.settingsSecureGetIntForUser(name, def, userHandle);
Makoto Onukia4f11972015-10-01 13:19:58 -0700361 }
362
363 @Override
Bartosz Fabianowskiaff5e9c2017-01-25 06:09:13 +0100364 String settingsSecureGetStringForUser(String name, int userHandle) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100365 return services.settings.settingsSecureGetStringForUser(name, userHandle);
Bartosz Fabianowskiaff5e9c2017-01-25 06:09:13 +0100366 }
367
368 @Override
Makoto Onukia4f11972015-10-01 13:19:58 -0700369 void settingsSecurePutIntForUser(String name, int value, int userHandle) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100370 services.settings.settingsSecurePutIntForUser(name, value, userHandle);
Makoto Onukia4f11972015-10-01 13:19:58 -0700371 }
372
373 @Override
374 void settingsSecurePutStringForUser(String name, String value, int userHandle) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100375 services.settings.settingsSecurePutStringForUser(name, value, userHandle);
Makoto Onukia4f11972015-10-01 13:19:58 -0700376 }
377
378 @Override
379 void settingsGlobalPutStringForUser(String name, String value, int userHandle) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100380 services.settings.settingsGlobalPutStringForUser(name, value, userHandle);
Makoto Onukia4f11972015-10-01 13:19:58 -0700381 }
382
383 @Override
384 void settingsSecurePutInt(String name, int value) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100385 services.settings.settingsSecurePutInt(name, value);
Makoto Onukia4f11972015-10-01 13:19:58 -0700386 }
387
388 @Override
389 void settingsGlobalPutInt(String name, int value) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100390 services.settings.settingsGlobalPutInt(name, value);
Makoto Onukia4f11972015-10-01 13:19:58 -0700391 }
392
393 @Override
394 void settingsSecurePutString(String name, String value) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100395 services.settings.settingsSecurePutString(name, value);
Makoto Onukia4f11972015-10-01 13:19:58 -0700396 }
397
398 @Override
399 void settingsGlobalPutString(String name, String value) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100400 services.settings.settingsGlobalPutString(name, value);
Makoto Onukia4f11972015-10-01 13:19:58 -0700401 }
Makoto Onuki3f3657a2016-01-28 14:44:18 -0800402
403 @Override
yuemingw0de748d2017-11-15 19:22:27 +0000404 void settingsSystemPutString(String name, String value) {
405 services.settings.settingsSystemPutString(name, value);
406 }
407
408 @Override
Makoto Onuki3f3657a2016-01-28 14:44:18 -0800409 int settingsGlobalGetInt(String name, int def) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100410 return services.settings.settingsGlobalGetInt(name, def);
Makoto Onuki3f3657a2016-01-28 14:44:18 -0800411 }
412
413 @Override
Makoto Onuki09c529a2017-05-01 10:05:28 -0700414 String settingsGlobalGetString(String name) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100415 return services.settings.settingsGlobalGetString(name);
Makoto Onuki09c529a2017-05-01 10:05:28 -0700416 }
417
418 @Override
Makoto Onuki3f3657a2016-01-28 14:44:18 -0800419 void securityLogSetLoggingEnabledProperty(boolean enabled) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100420 services.settings.securityLogSetLoggingEnabledProperty(enabled);
Makoto Onuki3f3657a2016-01-28 14:44:18 -0800421 }
Rubin Xu49caead2016-02-02 18:00:28 +0000422
423 @Override
424 boolean securityLogGetLoggingEnabledProperty() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100425 return services.settings.securityLogGetLoggingEnabledProperty();
Rubin Xu49caead2016-02-02 18:00:28 +0000426 }
427
428 @Override
429 boolean securityLogIsLoggingEnabled() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100430 return services.settings.securityLogIsLoggingEnabled();
Rubin Xu49caead2016-02-02 18:00:28 +0000431 }
Mahaver Chopra1216ae52016-03-11 15:39:48 +0000432
433 @Override
434 TelephonyManager getTelephonyManager() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100435 return services.telephonyManager;
Mahaver Chopra1216ae52016-03-11 15:39:48 +0000436 }
Victor Chang3577ed22016-08-25 18:49:26 +0100437
438 @Override
439 boolean isBuildDebuggable() {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100440 return services.buildMock.isDebuggable;
Victor Chang3577ed22016-08-25 18:49:26 +0100441 }
Robin Lee7f5c91c2017-02-08 21:27:02 +0000442
443 @Override
444 KeyChain.KeyChainConnection keyChainBindAsUser(UserHandle user) {
Pavel Grafov75c0a892017-05-18 17:28:27 +0100445 return services.keyChainConnection;
Robin Lee7f5c91c2017-02-08 21:27:02 +0000446 }
Sudheer Shankac53c47f2018-01-16 12:01:00 -0800447
448 @Override
449 void postOnSystemServerInitThreadPool(Runnable runnable) {
450 runnable.run();
451 }
Makoto Onukicc4bbeb2015-09-17 10:28:24 -0700452 }
453}