1cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki/*
2cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * Copyright (C) 2015 The Android Open Source Project
3cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki *
4cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * Licensed under the Apache License, Version 2.0 (the "License");
5cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * you may not use this file except in compliance with the License.
6cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * You may obtain a copy of the License at
7cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki *
8cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki *      http://www.apache.org/licenses/LICENSE-2.0
9cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki *
10cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * Unless required by applicable law or agreed to in writing, software
11cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * distributed under the License is distributed on an "AS IS" BASIS,
12cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * See the License for the specific language governing permissions and
14cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * limitations under the License.
15cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki */
16cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukipackage com.android.server.devicepolicy;
17cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
18cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.app.IActivityManager;
19cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.app.NotificationManager;
20b643fb0e67460344ade2e3db92738999f8168496Makoto Onukiimport android.app.backup.IBackupManager;
21f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onukiimport android.content.pm.IPackageManager;
22cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17cccFyodor Kupolovimport android.content.pm.PackageManagerInternal;
233e794afb82228199c0a83bed5463dbeb3c48dd62Victor Changimport android.database.ContentObserver;
24b643fb0e67460344ade2e3db92738999f8168496Makoto Onukiimport android.media.IAudioService;
253e794afb82228199c0a83bed5463dbeb3c48dd62Victor Changimport android.net.Uri;
26cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.os.Looper;
27cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.os.PowerManagerInternal;
28cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.os.UserHandle;
29cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.os.UserManager;
30068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onukiimport android.os.UserManagerInternal;
311216ae5d023e8f6e4f158a447a5764288e4ccc3eMahaver Chopraimport android.telephony.TelephonyManager;
323e794afb82228199c0a83bed5463dbeb3c48dd62Victor Changimport android.util.ArrayMap;
333e794afb82228199c0a83bed5463dbeb3c48dd62Victor Changimport android.util.Pair;
34cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.view.IWindowManager;
35cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
363e794afb82228199c0a83bed5463dbeb3c48dd62Victor Changimport com.android.internal.widget.LockPatternUtils;
37cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
383e794afb82228199c0a83bed5463dbeb3c48dd62Victor Changimport java.io.File;
393e794afb82228199c0a83bed5463dbeb3c48dd62Victor Changimport java.util.Map;
40cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
41cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki/**
42cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * Overrides {@link #DevicePolicyManagerService} for dependency injection.
43cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki */
44cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukipublic class DevicePolicyManagerServiceTestable extends DevicePolicyManagerService {
45cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki    /**
46cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki     * Overrides {@link #Owners} for dependency injection.
47cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki     */
48cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki    public static class OwnersTestable extends Owners {
49cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        public static final String LEGACY_FILE = "legacy.xml";
50cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        public static final String DEVICE_OWNER_FILE = "device_owner2.xml";
51cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        public static final String PROFILE_OWNER_FILE_BASE = "profile_owner.xml";
52cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
53f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki        private final File mLegacyFile;
54f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki        private final File mDeviceOwnerFile;
55f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki        private final File mProfileOwnerBase;
56cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
57d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki        public OwnersTestable(DpmMockContext context) {
58c29f62c7388f550da2c7368c5dbc0aec7d1564feMakoto Onuki            super(context.userManager, context.userManagerInternal, context.packageManagerInternal);
59d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki            mLegacyFile = new File(context.dataDir, LEGACY_FILE);
60d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki            mDeviceOwnerFile = new File(context.dataDir, DEVICE_OWNER_FILE);
61d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki            mProfileOwnerBase = new File(context.dataDir, PROFILE_OWNER_FILE_BASE);
62cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        }
63cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
64cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        @Override
65cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        File getLegacyConfigFileWithTestOverride() {
66cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki            return mLegacyFile;
67cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        }
68cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
69cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        @Override
70cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        File getDeviceOwnerFileWithTestOverride() {
71cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki            return mDeviceOwnerFile;
72cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        }
73cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
74cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        @Override
75cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        File getProfileOwnerFileWithTestOverride(int userId) {
76cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki            return new File(mDeviceOwnerFile.getAbsoluteFile() + "-" + userId);
77cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki        }
78cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki    }
79cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
80b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki    public final DpmMockContext context;
813e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang    private final MockInjector mMockInjector;
82cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
83cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki    public DevicePolicyManagerServiceTestable(DpmMockContext context, File dataDir) {
84b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        this(new MockInjector(context, dataDir));
85b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki    }
86cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
87b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki    private DevicePolicyManagerServiceTestable(MockInjector injector) {
88b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        super(injector);
893e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        mMockInjector = injector;
90b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        this.context = injector.context;
91b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki    }
92cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
933e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang
943e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang    public void notifyChangeToContentObserver(Uri uri, int userHandle) {
953e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        ContentObserver co = mMockInjector.mContentObservers
963e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang                .get(new Pair<Uri, Integer>(uri, userHandle));
973e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        if (co != null) {
983e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang            co.onChange(false, uri, userHandle); // notify synchronously
993e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        }
1003e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang
1013e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        // Notify USER_ALL observer too.
1023e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        co = mMockInjector.mContentObservers
1033e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang                .get(new Pair<Uri, Integer>(uri, UserHandle.USER_ALL));
1043e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        if (co != null) {
1053e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang            co.onChange(false, uri, userHandle); // notify synchronously
1063e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        }
1073e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang    }
1083e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang
1093e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang
110b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki    private static class MockInjector extends Injector {
111cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
112b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        public final DpmMockContext context;
113cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
114b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        public final File dataDir;
115cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
1163e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        // Key is a pair of uri and userId
1173e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        private final Map<Pair<Uri, Integer>, ContentObserver> mContentObservers = new ArrayMap<>();
1183e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang
119b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        private MockInjector(DpmMockContext context, File dataDir) {
120b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            super(context);
121b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            this.context = context;
122b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            this.dataDir = dataDir;
123b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
124cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
125b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
126b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        Owners newOwners() {
127d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki            return new OwnersTestable(context);
128b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
129cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
130b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
131b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        UserManager getUserManager() {
132b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.userManager;
133b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
134cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
135b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
136068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki        UserManagerInternal getUserManagerInternal() {
137068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki            return context.userManagerInternal;
138068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki        }
139068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki
140068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki        @Override
141cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17cccFyodor Kupolov        PackageManagerInternal getPackageManagerInternal() {
142cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17cccFyodor Kupolov            return context.packageManagerInternal;
143cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17cccFyodor Kupolov        }
144cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17cccFyodor Kupolov
145cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17cccFyodor Kupolov        @Override
146b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        PowerManagerInternal getPowerManagerInternal() {
147b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.powerManagerInternal;
148b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
149f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki
150b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
151b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        NotificationManager getNotificationManager() {
152b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.notificationManager;
153b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
154cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
155b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
156b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        IWindowManager getIWindowManager() {
157b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.iwindowManager;
158b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
159cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
160b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
161219bbafc3fa40dae163d652365cc4a97d613011fMakoto Onuki        IActivityManager getIActivityManager() {
162b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.iactivityManager;
163b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
164cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
165b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
166b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        IPackageManager getIPackageManager() {
167b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.ipackageManager;
168b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
169cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
170b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
171b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        IBackupManager getIBackupManager() {
172b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.ibackupManager;
173b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
174cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
175b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
176b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        IAudioService getIAudioService() {
177b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.iaudioService;
178b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
179cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
180b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
181b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        Looper getMyLooper() {
182b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return Looper.getMainLooper();
183b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
184cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
185b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
186b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        LockPatternUtils newLockPatternUtils() {
187b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.lockPatternUtils;
188b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
189cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
190b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
191d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        boolean storageManagerIsFileBasedEncryptionEnabled() {
192d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki            return context.storageManager.isFileBasedEncryptionEnabled();
193d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        }
194d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki
195d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        @Override
196d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        boolean storageManagerIsNonDefaultBlockEncrypted() {
197d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki            return context.storageManager.isNonDefaultBlockEncrypted();
198d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        }
199d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki
200d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        @Override
201d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        boolean storageManagerIsEncrypted() {
202d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki            return context.storageManager.isEncrypted();
203d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        }
204d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki
205d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        @Override
206d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        boolean storageManagerIsEncryptable() {
207d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki            return context.storageManager.isEncryptable();
208d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        }
209d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki
210d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki        @Override
211b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        String getDevicePolicyFilePathForSystemUser() {
212068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki            return context.systemUserDataDir.getAbsolutePath() + "/";
213b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
214cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
215b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
216b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        long binderClearCallingIdentity() {
217b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.binder.clearCallingIdentity();
218b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
219cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
220b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
221b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        void binderRestoreCallingIdentity(long token) {
222b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            context.binder.restoreCallingIdentity(token);
223b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
224f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki
225b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
226b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        int binderGetCallingUid() {
227b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.binder.getCallingUid();
228b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
229cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki
230b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
231b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        int binderGetCallingPid() {
232b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.binder.getCallingPid();
233b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
234f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki
235b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
236b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        UserHandle binderGetCallingUserHandle() {
237b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.binder.getCallingUserHandle();
238b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
239f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki
240b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
241b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        boolean binderIsCallingUidMyUid() {
242b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.binder.isCallerUidMyUid();
243b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
244b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki
245b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
246b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        File environmentGetUserSystemDirectory(int userId) {
247b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.environment.getUserSystemDirectory(userId);
248b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
249b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki
250b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
251b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        void powerManagerGoToSleep(long time, int reason, int flags) {
252b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            context.powerManager.goToSleep(time, reason, flags);
253b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
254b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki
255b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
256f8373b5afc6dd25350bbca7093178807f1cc9ed6Mahaver Chopra        void powerManagerReboot(String reason) {
257f8373b5afc6dd25350bbca7093178807f1cc9ed6Mahaver Chopra            context.powerManager.reboot(reason);
258f8373b5afc6dd25350bbca7093178807f1cc9ed6Mahaver Chopra        }
259f8373b5afc6dd25350bbca7093178807f1cc9ed6Mahaver Chopra
260f8373b5afc6dd25350bbca7093178807f1cc9ed6Mahaver Chopra        @Override
261b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        boolean systemPropertiesGetBoolean(String key, boolean def) {
262b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.systemProperties.getBoolean(key, def);
263b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
264b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki
265b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
266b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        long systemPropertiesGetLong(String key, long def) {
267b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.systemProperties.getLong(key, def);
268b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
269f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki
270b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
271b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        String systemPropertiesGet(String key, String def) {
272b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.systemProperties.get(key, def);
273b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
274b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki
275b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
276b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        String systemPropertiesGet(String key) {
277b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.systemProperties.get(key);
278b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
279b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki
280b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
281b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        void systemPropertiesSet(String key, String value) {
282b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            context.systemProperties.set(key, value);
283b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
284b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki
285b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        @Override
286b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        boolean userManagerIsSplitSystemUser() {
287b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki            return context.userManagerForMock.isSplitSystemUser();
288b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki        }
289a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki
290a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        @Override
2913e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        void registerContentObserver(Uri uri, boolean notifyForDescendents,
2923e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang                ContentObserver observer, int userHandle) {
2933e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang            mContentObservers.put(new Pair<Uri, Integer>(uri, userHandle), observer);
2943e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        }
2953e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang
2963e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang        @Override
297a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        int settingsSecureGetIntForUser(String name, int def, int userHandle) {
298a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki            return context.settings.settingsSecureGetIntForUser(name, def, userHandle);
299a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        }
300a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki
301a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        @Override
302a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        void settingsSecurePutIntForUser(String name, int value, int userHandle) {
303a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki            context.settings.settingsSecurePutIntForUser(name, value, userHandle);
304a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        }
305a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki
306a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        @Override
307a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        void settingsSecurePutStringForUser(String name, String value, int userHandle) {
308a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki            context.settings.settingsSecurePutStringForUser(name, value, userHandle);
309a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        }
310a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki
311a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        @Override
312a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        void settingsGlobalPutStringForUser(String name, String value, int userHandle) {
313a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki            context.settings.settingsGlobalPutStringForUser(name, value, userHandle);
314a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        }
315a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki
316a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        @Override
317a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        void settingsSecurePutInt(String name, int value) {
318a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki            context.settings.settingsSecurePutInt(name, value);
319a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        }
320a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki
321a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        @Override
322a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        void settingsGlobalPutInt(String name, int value) {
323a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki            context.settings.settingsGlobalPutInt(name, value);
324a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        }
325a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki
326a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        @Override
327a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        void settingsSecurePutString(String name, String value) {
328a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki            context.settings.settingsSecurePutString(name, value);
329a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        }
330a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki
331a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        @Override
332a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        void settingsGlobalPutString(String name, String value) {
333a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki            context.settings.settingsGlobalPutString(name, value);
334a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki        }
3353f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki
3363f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki        @Override
3373f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki        int settingsGlobalGetInt(String name, int def) {
3383f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki            return context.settings.settingsGlobalGetInt(name, def);
3393f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki        }
3403f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki
3413f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki        @Override
3423f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki        void securityLogSetLoggingEnabledProperty(boolean enabled) {
3433f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki            context.settings.securityLogSetLoggingEnabledProperty(enabled);
3443f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki        }
34549caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu
34649caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu        @Override
34749caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu        boolean securityLogGetLoggingEnabledProperty() {
34849caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu            return context.settings.securityLogGetLoggingEnabledProperty();
34949caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu        }
35049caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu
35149caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu        @Override
35249caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu        boolean securityLogIsLoggingEnabled() {
35349caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu            return context.settings.securityLogIsLoggingEnabled();
35449caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu        }
3551216ae5d023e8f6e4f158a447a5764288e4ccc3eMahaver Chopra
3561216ae5d023e8f6e4f158a447a5764288e4ccc3eMahaver Chopra        @Override
3571216ae5d023e8f6e4f158a447a5764288e4ccc3eMahaver Chopra        TelephonyManager getTelephonyManager() {
3581216ae5d023e8f6e4f158a447a5764288e4ccc3eMahaver Chopra            return context.telephonyManager;
3591216ae5d023e8f6e4f158a447a5764288e4ccc3eMahaver Chopra        }
360cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki    }
361cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki}
362