DpmMockContext.java revision 1216ae5d023e8f6e4f158a447a5764288e4ccc3e
1c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki/* 2c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * Copyright (C) 2015 The Android Open Source Project 3c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * 4c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 5c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * you may not use this file except in compliance with the License. 6c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * You may obtain a copy of the License at 7c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * 8c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 9c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * 10c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * Unless required by applicable law or agreed to in writing, software 11c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 12c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * See the License for the specific language governing permissions and 14c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki * limitations under the License. 15c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki */ 16c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki 17c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onukipackage com.android.server.devicepolicy; 18c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki 19cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport com.android.internal.widget.LockPatternUtils; 20cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 21cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.app.IActivityManager; 22cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.app.NotificationManager; 23b643fb0e67460344ade2e3db92738999f8168496Makoto Onukiimport android.app.backup.IBackupManager; 24cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.content.BroadcastReceiver; 25a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onukiimport android.content.ContentResolver; 26c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onukiimport android.content.Context; 27cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.content.Intent; 28cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.content.IntentFilter; 29f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onukiimport android.content.pm.IPackageManager; 30cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.content.pm.PackageManager; 31cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17cccFyodor Kupolovimport android.content.pm.PackageManagerInternal; 32d932f7689d799b07a6776bc7c59749f672528239Makoto Onukiimport android.content.pm.UserInfo; 33b643fb0e67460344ade2e3db92738999f8168496Makoto Onukiimport android.media.IAudioService; 34a31ebbc439364a4993e79fd385cf6373408a42feMakoto Onukiimport android.net.wifi.WifiManager; 35cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.os.Bundle; 36cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.os.Handler; 37cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.os.PowerManager.WakeLock; 38cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.os.PowerManagerInternal; 39cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.os.UserHandle; 40c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onukiimport android.os.UserManager; 41068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onukiimport android.os.UserManagerInternal; 42d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onukiimport android.os.storage.StorageManager; 431216ae5d023e8f6e4f158a447a5764288e4ccc3eMahaver Chopraimport android.telephony.TelephonyManager; 44a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onukiimport android.test.mock.MockContentResolver; 45cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.test.mock.MockContext; 46cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.view.IWindowManager; 47cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 48b643fb0e67460344ade2e3db92738999f8168496Makoto Onukiimport org.junit.Assert; 492a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onukiimport org.mockito.invocation.InvocationOnMock; 502a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onukiimport org.mockito.stubbing.Answer; 51b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki 52cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport java.io.File; 53cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport java.util.ArrayList; 54cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport java.util.List; 55c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki 562a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onukiimport static org.mockito.Matchers.anyInt; 57d932f7689d799b07a6776bc7c59749f672528239Makoto Onukiimport static org.mockito.Matchers.eq; 58c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onukiimport static org.mockito.Mockito.mock; 59cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport static org.mockito.Mockito.spy; 60d932f7689d799b07a6776bc7c59749f672528239Makoto Onukiimport static org.mockito.Mockito.when; 61c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki 62cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki/** 63cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * Context used throughout DPMS tests. 64cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki */ 65cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukipublic class DpmMockContext extends MockContext { 66cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki /** 67cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * User-id of a non-system user we use throughout unit tests. 68cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki */ 69cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public static final int CALLER_USER_HANDLE = 20; 70c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki 71cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki /** 72b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki * UID corresponding to {@link #CALLER_USER_HANDLE}. 73cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki */ 74d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki public static final int CALLER_UID = UserHandle.getUid(CALLER_USER_HANDLE, 20123); 75c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki 76cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki /** 77b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki * UID used when a caller is on the system user. 78b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki */ 79d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki public static final int CALLER_SYSTEM_USER_UID = 20321; 80b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki 81b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki /** 82cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * PID of the caller. 83cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki */ 84cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public static final int CALLER_PID = 22222; 85cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 86cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki /** 87cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * UID of the system server. 88cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki */ 89cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public static final int SYSTEM_UID = android.os.Process.SYSTEM_UID; 90cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 91cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki /** 92cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * PID of the system server. 93cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki */ 94cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public static final int SYSTEM_PID = 11111; 95cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 96cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public static class MockBinder { 97f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki public int callingUid = CALLER_UID; 98f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki public int callingPid = CALLER_PID; 99cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 100cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public long clearCallingIdentity() { 101f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki final long token = (((long) callingUid) << 32) | (callingPid); 102f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki callingUid = SYSTEM_UID; 103f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki callingPid = SYSTEM_PID; 104cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return token; 105cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 106cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 107cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void restoreCallingIdentity(long token) { 108f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki callingUid = (int) (token >> 32); 109f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki callingPid = (int) token; 110cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 111cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 112cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public int getCallingUid() { 113f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki return callingUid; 114cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 115cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 116cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public int getCallingPid() { 117f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki return callingPid; 118cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 119cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 120cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public UserHandle getCallingUserHandle() { 121cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return new UserHandle(UserHandle.getUserId(getCallingUid())); 122cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 123cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 124cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public boolean isCallerUidMyUid() { 125f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki return callingUid == SYSTEM_UID; 126cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 127c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki } 128c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki 129cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public static class EnvironmentForMock { 130cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public File getUserSystemDirectory(int userId) { 131cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return null; 132cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 133cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 134cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 135cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public static class PowerManagerForMock { 136cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public WakeLock newWakeLock(int levelAndFlags, String tag) { 137cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return null; 138cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 139cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 140cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void goToSleep(long time, int reason, int flags) { 141cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 142f8373b5afc6dd25350bbca7093178807f1cc9ed6Mahaver Chopra 143f8373b5afc6dd25350bbca7093178807f1cc9ed6Mahaver Chopra public void reboot(String reason) { 144f8373b5afc6dd25350bbca7093178807f1cc9ed6Mahaver Chopra } 145cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 146cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 147f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki public static class SystemPropertiesForMock { 148f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki public boolean getBoolean(String key, boolean def) { 149f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki return false; 150f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki } 151f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki 152f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki public long getLong(String key, long def) { 153f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki return 0; 154f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki } 155f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki 156f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki public String get(String key, String def) { 157f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki return null; 158f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki } 159f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki 160f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki public String get(String key) { 161f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki return null; 162f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki } 163f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki 164f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki public void set(String key, String value) { 165f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki } 166f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki } 167f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki 168b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki public static class UserManagerForMock { 169b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki public boolean isSplitSystemUser() { 170b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki return false; 171b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki } 172b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki } 173b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki 174a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki public static class SettingsForMock { 175a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki int settingsSecureGetIntForUser(String name, int def, int userHandle) { 176a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki return 0; 177a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 178a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 179a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki void settingsSecurePutIntForUser(String name, int value, int userHandle) { 180a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 181a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 182a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki void settingsSecurePutStringForUser(String name, String value, int userHandle) { 183a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 184a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 185a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki void settingsGlobalPutStringForUser(String name, String value, int userHandle) { 186a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 187a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 188a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki void settingsSecurePutInt(String name, int value) { 189a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 190a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 191a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki void settingsGlobalPutInt(String name, int value) { 192a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 193a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 194a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki void settingsSecurePutString(String name, String value) { 195a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 196a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 197a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki void settingsGlobalPutString(String name, String value) { 198a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 1993f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki 2003f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki int settingsGlobalGetInt(String name, int def) { 2013f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki return 0; 2023f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki } 2033f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki 2043f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki void securityLogSetLoggingEnabledProperty(boolean enabled) { 2053f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki } 20649caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu 20749caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu public boolean securityLogGetLoggingEnabledProperty() { 20849caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu return false; 20949caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu } 21049caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu 21149caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu public boolean securityLogIsLoggingEnabled() { 21249caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu return false; 21349caead1c2608f57ac6c260396c6bfd058b921aeRubin Xu } 214a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 215a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 216d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki public static class StorageManagerForMock { 217d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki public boolean isFileBasedEncryptionEnabled() { 218d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki return false; 219d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki } 220d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki 221d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki public boolean isNonDefaultBlockEncrypted() { 222d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki return false; 223d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki } 224d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki 225d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki public boolean isEncrypted() { 226d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki return false; 227d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki } 228d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki 229d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki public boolean isEncryptable() { 230d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki return false; 231d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki } 232d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki } 233d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki 234cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final Context realTestContext; 235cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 236cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki /** 237cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * Use this instance to verify unimplemented methods such as {@link #sendBroadcast}. 238cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * (Spying on {@code this} instance will confuse mockito somehow and I got weired "wrong number 239cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki * of arguments" exceptions.) 240cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki */ 241cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final Context spiedContext; 242cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 243d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki public final File dataDir; 244d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki public final File systemUserDataDir; 245d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 246cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final MockBinder binder; 247cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final EnvironmentForMock environment; 248f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki public final SystemPropertiesForMock systemProperties; 249cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final UserManager userManager; 250068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki public final UserManagerInternal userManagerInternal; 251cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17cccFyodor Kupolov public final PackageManagerInternal packageManagerInternal; 252b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki public final UserManagerForMock userManagerForMock; 253cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final PowerManagerForMock powerManager; 254cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final PowerManagerInternal powerManagerInternal; 255cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final NotificationManager notificationManager; 256cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final IWindowManager iwindowManager; 257cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final IActivityManager iactivityManager; 258f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki public final IPackageManager ipackageManager; 259b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki public final IBackupManager ibackupManager; 260b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki public final IAudioService iaudioService; 261cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final LockPatternUtils lockPatternUtils; 262d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki public final StorageManagerForMock storageManager; 263a31ebbc439364a4993e79fd385cf6373408a42feMakoto Onuki public final WifiManager wifiManager; 264a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki public final SettingsForMock settings; 265a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki public final MockContentResolver contentResolver; 2661216ae5d023e8f6e4f158a447a5764288e4ccc3eMahaver Chopra public final TelephonyManager telephonyManager; 267cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 268cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki /** Note this is a partial mock, not a real mock. */ 269cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final PackageManager packageManager; 270cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 271cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public final List<String> callerPermissions = new ArrayList<>(); 272cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 273d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki private final ArrayList<UserInfo> mUserInfos = new ArrayList<>(); 274d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 275d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki public DpmMockContext(Context context, File dataDir) { 276cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki realTestContext = context; 277d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 278d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki this.dataDir = dataDir; 279d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki DpmTestUtils.clearDir(dataDir); 280d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 281cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki binder = new MockBinder(); 282cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki environment = mock(EnvironmentForMock.class); 283f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki systemProperties= mock(SystemPropertiesForMock.class); 284cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki userManager = mock(UserManager.class); 285068c54a5be697c3df4657dcda33cd17c4b547710Makoto Onuki userManagerInternal = mock(UserManagerInternal.class); 286b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki userManagerForMock = mock(UserManagerForMock.class); 287cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17cccFyodor Kupolov packageManagerInternal = mock(PackageManagerInternal.class); 288cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki powerManager = mock(PowerManagerForMock.class); 289cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki powerManagerInternal = mock(PowerManagerInternal.class); 290cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki notificationManager = mock(NotificationManager.class); 291cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki iwindowManager = mock(IWindowManager.class); 292cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki iactivityManager = mock(IActivityManager.class); 293f76b06a6b546f430cf85e561858ed12eedc32b81Makoto Onuki ipackageManager = mock(IPackageManager.class); 294b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki ibackupManager = mock(IBackupManager.class); 295b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki iaudioService = mock(IAudioService.class); 296cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki lockPatternUtils = mock(LockPatternUtils.class); 297d4c9e541ec7110d3c842d6f92c3ec6beb0b6d997Makoto Onuki storageManager = mock(StorageManagerForMock.class); 298a31ebbc439364a4993e79fd385cf6373408a42feMakoto Onuki wifiManager = mock(WifiManager.class); 299a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki settings = mock(SettingsForMock.class); 3001216ae5d023e8f6e4f158a447a5764288e4ccc3eMahaver Chopra telephonyManager = mock(TelephonyManager.class); 301cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 302cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki // Package manager is huge, so we use a partial mock instead. 303cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki packageManager = spy(context.getPackageManager()); 304cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 305cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext = mock(Context.class); 306d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 307a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki contentResolver = new MockContentResolver(); 308a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki 309d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki // Add the system user 310d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki systemUserDataDir = addUser(UserHandle.USER_SYSTEM, UserInfo.FLAG_PRIMARY); 311d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 312d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki // System user is always running. 313a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki setUserRunning(UserHandle.USER_SYSTEM, true); 314d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki } 315d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 316d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki public File addUser(int userId, int flags) { 317d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 318d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki // Set up (default) UserInfo for CALLER_USER_HANDLE. 319d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki final UserInfo uh = new UserInfo(userId, "user" + userId, flags); 320d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki when(userManager.getUserInfo(eq(userId))).thenReturn(uh); 321d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 322d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki mUserInfos.add(uh); 323d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki when(userManager.getUsers()).thenReturn(mUserInfos); 3242a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki when(userManager.getUserInfo(anyInt())).thenAnswer( 3252a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki new Answer<UserInfo>() { 3262a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki @Override 3272a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki public UserInfo answer(InvocationOnMock invocation) throws Throwable { 3282a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki final int userId = (int) invocation.getArguments()[0]; 3292a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki for (UserInfo ui : mUserInfos) { 3302a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki if (ui.id == userId) { 3312a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki return ui; 3322a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3332a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3342a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki return null; 3352a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3362a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3372a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki ); 3382a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki when(userManager.getProfiles(anyInt())).thenAnswer( 3392a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki new Answer<List<UserInfo>>() { 3402a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki @Override 3412a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki public List<UserInfo> answer(InvocationOnMock invocation) throws Throwable { 3422a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki final int userId = (int) invocation.getArguments()[0]; 3432a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki final ArrayList<UserInfo> ret = new ArrayList<UserInfo>(); 3442a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki UserInfo parent = null; 3452a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki for (UserInfo ui : mUserInfos) { 3462a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki if (ui.id == userId) { 3472a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki parent = ui; 3482a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki break; 3492a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3502a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3512a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki if (parent == null) { 3522a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki return ret; 3532a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3542a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki ret.add(parent); 3552a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki for (UserInfo ui : mUserInfos) { 3562a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki if (ui.id == userId) { 3572a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki continue; 3582a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3592a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki if (ui.profileGroupId != UserInfo.NO_PROFILE_GROUP_ID 3602a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki && ui.profileGroupId == parent.profileGroupId) { 3612a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki ret.add(ui); 3622a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3632a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3642a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki return ret; 3652a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3662a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3672a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki ); 368d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 369d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki // Create a data directory. 370d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki final File dir = new File(dataDir, "user" + userId); 371d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki DpmTestUtils.clearDir(dir); 372d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 373d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki when(environment.getUserSystemDirectory(eq(userId))).thenReturn(dir); 374d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki return dir; 375d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki } 376d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 377d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki /** 378d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki * Add multiple users at once. They'll all have flag 0. 379d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki */ 380d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki public void addUsers(int... userIds) { 381d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki for (int userId : userIds) { 382d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki addUser(userId, 0); 383d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki } 384c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki } 385c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki 386a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki public void setUserRunning(int userId, boolean isRunning) { 387a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki when(userManager.isUserRunning(MockUtils.checkUserHandle(userId))) 388a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki .thenReturn(isRunning); 389a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki } 390a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki 391c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki @Override 392c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki public Object getSystemService(String name) { 393c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki switch (name) { 394c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki case Context.USER_SERVICE: 395cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return userManager; 396cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki case Context.POWER_SERVICE: 397cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return powerManager; 398a31ebbc439364a4993e79fd385cf6373408a42feMakoto Onuki case Context.WIFI_SERVICE: 399a31ebbc439364a4993e79fd385cf6373408a42feMakoto Onuki return wifiManager; 400c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki } 401cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki throw new UnsupportedOperationException(); 402cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 403cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 404cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 40572a3a0c7d24f629bca38ee2652491307e4e706daMakoto Onuki public String getSystemServiceName(Class<?> serviceClass) { 40672a3a0c7d24f629bca38ee2652491307e4e706daMakoto Onuki return realTestContext.getSystemServiceName(serviceClass); 40772a3a0c7d24f629bca38ee2652491307e4e706daMakoto Onuki } 40872a3a0c7d24f629bca38ee2652491307e4e706daMakoto Onuki 40972a3a0c7d24f629bca38ee2652491307e4e706daMakoto Onuki @Override 410cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public PackageManager getPackageManager() { 411cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return packageManager; 412cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 413cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 414cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 415cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void enforceCallingOrSelfPermission(String permission, String message) { 416cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki if (binder.getCallingUid() == SYSTEM_UID) { 417cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return; // Assume system has all permissions. 418cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 419cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki if (!callerPermissions.contains(permission)) { 420cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki throw new SecurityException("Caller doesn't have " + permission + " : " + message); 421cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 422cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 423cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 424cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 425cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcast(Intent intent) { 426cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcast(intent); 427cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 428cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 429cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 430cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcast(Intent intent, String receiverPermission) { 431cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcast(intent, receiverPermission); 432cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 433cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 434cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 435cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcastMultiplePermissions(Intent intent, String[] receiverPermissions) { 436cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcastMultiplePermissions(intent, receiverPermissions); 437cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 438cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 439cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 440cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcast(Intent intent, String receiverPermission, Bundle options) { 441cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcast(intent, receiverPermission, options); 442cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 443cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 444cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 445cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcast(Intent intent, String receiverPermission, int appOp) { 446cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcast(intent, receiverPermission, appOp); 447cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 448cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 449cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 450cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcast(Intent intent, String receiverPermission) { 451cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcast(intent, receiverPermission); 452cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 453cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 454cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 455cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcast(Intent intent, String receiverPermission, 456cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, 457cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String initialData, Bundle initialExtras) { 458cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, 459cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki initialCode, initialData, initialExtras); 460cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 461cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 462cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 463cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcast(Intent intent, String receiverPermission, Bundle options, 464cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, 465cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String initialData, Bundle initialExtras) { 466cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcast(intent, receiverPermission, options, resultReceiver, 467cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki scheduler, 468cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki initialCode, initialData, initialExtras); 469cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 470cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 471cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 472cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp, 473cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, 474cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String initialData, Bundle initialExtras) { 475cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcast(intent, receiverPermission, appOp, resultReceiver, 476cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki scheduler, 477cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki initialCode, initialData, initialExtras); 478cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 479cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 480cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 481cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcastAsUser(Intent intent, UserHandle user) { 482b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki if (binder.callingPid != SYSTEM_PID) { 483b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki // Unless called as the system process, can only call if the target user is the 484b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki // calling user. 485b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki // (The actual check is more complex; we may need to change it later.) 486b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki Assert.assertEquals(UserHandle.getUserId(binder.getCallingUid()), user.getIdentifier()); 487b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki } 488b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki 489cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcastAsUser(intent, user); 490cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 491cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 492cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 493cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission) { 494cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcastAsUser(intent, user, receiverPermission); 495cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 496cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 497cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 498cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission, 499cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki int appOp) { 500cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcastAsUser(intent, user, receiverPermission, appOp); 501cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 502cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 503cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 504cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 505cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, 506cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki int initialCode, String initialData, Bundle initialExtras) { 507cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver, 508cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki scheduler, initialCode, initialData, initialExtras); 509cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 510cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 511cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 512cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 513cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String receiverPermission, int appOp, BroadcastReceiver resultReceiver, 514cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki Handler scheduler, int initialCode, String initialData, Bundle initialExtras) { 515cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, 516cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki resultReceiver, 517cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki scheduler, initialCode, initialData, initialExtras); 518cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 519cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 520cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 521cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 522cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String receiverPermission, int appOp, Bundle options, BroadcastReceiver resultReceiver, 523cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki Handler scheduler, int initialCode, String initialData, Bundle initialExtras) { 524cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, options, 525cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki resultReceiver, scheduler, initialCode, initialData, initialExtras); 526cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 527cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 528cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 529cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendStickyBroadcast(Intent intent) { 530cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendStickyBroadcast(intent); 531cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 532cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 533cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 534cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver, 535cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki Handler scheduler, int initialCode, String initialData, Bundle initialExtras) { 536cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, 537cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki initialData, initialExtras); 538cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 539cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 540cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 541cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void removeStickyBroadcast(Intent intent) { 542cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.removeStickyBroadcast(intent); 543cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 544cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 545cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 546cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) { 547cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendStickyBroadcastAsUser(intent, user); 548cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 549cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 550cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 551cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle user, 552cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, 553cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String initialData, Bundle initialExtras) { 554cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver, scheduler, initialCode, 555cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki initialData, initialExtras); 556cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 557cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 558cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 559cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void removeStickyBroadcastAsUser(Intent intent, UserHandle user) { 560cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.removeStickyBroadcastAsUser(intent, user); 561cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 562cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 563cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 564cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { 565cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return spiedContext.registerReceiver(receiver, filter); 566cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 567cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 568cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 569cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, 570cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String broadcastPermission, Handler scheduler) { 571cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return spiedContext.registerReceiver(receiver, filter, broadcastPermission, scheduler); 572cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 573cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 574cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 575cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, 576cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki IntentFilter filter, String broadcastPermission, Handler scheduler) { 577cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return spiedContext.registerReceiverAsUser(receiver, user, filter, broadcastPermission, 578cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki scheduler); 579cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 580cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 581cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 582cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void unregisterReceiver(BroadcastReceiver receiver) { 583cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.unregisterReceiver(receiver); 584c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki } 585a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki 586a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki @Override 587a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki public ContentResolver getContentResolver() { 588a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki return contentResolver; 589a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki } 590c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki} 591