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; 421216ae5d023e8f6e4f158a447a5764288e4ccc3eMahaver Chopraimport android.telephony.TelephonyManager; 43a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onukiimport android.test.mock.MockContentResolver; 44cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.test.mock.MockContext; 45cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport android.view.IWindowManager; 46cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 47b643fb0e67460344ade2e3db92738999f8168496Makoto Onukiimport org.junit.Assert; 482a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onukiimport org.mockito.invocation.InvocationOnMock; 492a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onukiimport org.mockito.stubbing.Answer; 50b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki 51cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport java.io.File; 52cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport java.util.ArrayList; 53cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukiimport java.util.List; 54c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki 553e794afb82228199c0a83bed5463dbeb3c48dd62Victor Changimport static org.mockito.Matchers.anyBoolean; 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 { 1753e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang public int settingsSecureGetIntForUser(String name, int def, int userHandle) { 176a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki return 0; 177a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 178a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 1793e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang public void settingsSecurePutIntForUser(String name, int value, int userHandle) { 180a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 181a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 1823e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang public void settingsSecurePutStringForUser(String name, String value, int userHandle) { 183a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 184a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 1853e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang public void settingsGlobalPutStringForUser(String name, String value, int userHandle) { 186a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 187a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 1883e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang public void settingsSecurePutInt(String name, int value) { 189a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 190a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 1913e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang public void settingsGlobalPutInt(String name, int value) { 192a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 193a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 1943e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang public void settingsSecurePutString(String name, String value) { 195a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 196a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki 1973e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang public void settingsGlobalPutString(String name, String value) { 198a4f119790e32fcce56586e7324d508e35cb30a2aMakoto Onuki } 1993f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki 2003e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang public int settingsGlobalGetInt(String name, int value) { 2013f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki return 0; 2023f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki } 2033f3657a61b54d495bf2e692289eb92a48fe5a0b2Makoto Onuki 2043e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang public 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); 3243e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang when(userManager.getUsers(anyBoolean())).thenReturn(mUserInfos); 3253e794afb82228199c0a83bed5463dbeb3c48dd62Victor Chang when(userManager.isUserRunning(eq(new UserHandle(userId)))).thenReturn(true); 3262a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki when(userManager.getUserInfo(anyInt())).thenAnswer( 3272a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki new Answer<UserInfo>() { 3282a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki @Override 3292a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki public UserInfo answer(InvocationOnMock invocation) throws Throwable { 3302a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki final int userId = (int) invocation.getArguments()[0]; 3312a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki for (UserInfo ui : mUserInfos) { 3322a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki if (ui.id == userId) { 3332a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki return ui; 3342a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3352a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3362a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki return null; 3372a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3382a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3392a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki ); 3402a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki when(userManager.getProfiles(anyInt())).thenAnswer( 3412a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki new Answer<List<UserInfo>>() { 3422a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki @Override 3432a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki public List<UserInfo> answer(InvocationOnMock invocation) throws Throwable { 3442a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki final int userId = (int) invocation.getArguments()[0]; 3457f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov return getProfiles(userId); 3467f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov } 3477f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov } 3487f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov ); 3497f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov when(userManager.getProfileIdsWithDisabled(anyInt())).thenAnswer( 3507f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov new Answer<int[]>() { 3517f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov @Override 3527f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov public int[] answer(InvocationOnMock invocation) throws Throwable { 3537f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov final int userId = (int) invocation.getArguments()[0]; 3547f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov List<UserInfo> profiles = getProfiles(userId); 3557f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov int[] results = new int[profiles.size()]; 3567f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov for (int i = 0; i < results.length; i++) { 3577f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov results[i] = profiles.get(i).id; 3582a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3597f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov return results; 3602a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3612a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki } 3622a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6Makoto Onuki ); 363d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 3647f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov 365d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki // Create a data directory. 366d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki final File dir = new File(dataDir, "user" + userId); 367d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki DpmTestUtils.clearDir(dir); 368d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 369d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki when(environment.getUserSystemDirectory(eq(userId))).thenReturn(dir); 370d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki return dir; 371d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki } 372d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki 3737f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov private List<UserInfo> getProfiles(int userId) { 3747f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov final ArrayList<UserInfo> ret = new ArrayList<UserInfo>(); 3757f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov UserInfo parent = null; 3767f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov for (UserInfo ui : mUserInfos) { 3777f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov if (ui.id == userId) { 3787f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov parent = ui; 3797f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov break; 3807f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov } 3817f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov } 3827f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov if (parent == null) { 3837f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov return ret; 3847f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov } 3857f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov ret.add(parent); 3867f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov for (UserInfo ui : mUserInfos) { 3877f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov if (ui.id == userId) { 3887f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov continue; 3897f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov } 3907f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov if (ui.profileGroupId != UserInfo.NO_PROFILE_GROUP_ID 3917f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov && ui.profileGroupId == parent.profileGroupId) { 3927f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov ret.add(ui); 3937f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov } 3947f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov } 3957f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov return ret; 3967f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov } 3977f98aa4aa93497692f200c553d2d6fff402e3de2Fyodor Kupolov 398d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki /** 399d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki * Add multiple users at once. They'll all have flag 0. 400d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki */ 401d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki public void addUsers(int... userIds) { 402d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki for (int userId : userIds) { 403d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki addUser(userId, 0); 404d932f7689d799b07a6776bc7c59749f672528239Makoto Onuki } 405c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki } 406c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki 407a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki public void setUserRunning(int userId, boolean isRunning) { 408a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki when(userManager.isUserRunning(MockUtils.checkUserHandle(userId))) 409a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki .thenReturn(isRunning); 410a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki } 411a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki 412c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki @Override 413c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki public Object getSystemService(String name) { 414c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki switch (name) { 415c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki case Context.USER_SERVICE: 416cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return userManager; 417cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki case Context.POWER_SERVICE: 418cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return powerManager; 419a31ebbc439364a4993e79fd385cf6373408a42feMakoto Onuki case Context.WIFI_SERVICE: 420a31ebbc439364a4993e79fd385cf6373408a42feMakoto Onuki return wifiManager; 421c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki } 422cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki throw new UnsupportedOperationException(); 423cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 424cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 425cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 42672a3a0c7d24f629bca38ee2652491307e4e706daMakoto Onuki public String getSystemServiceName(Class<?> serviceClass) { 42772a3a0c7d24f629bca38ee2652491307e4e706daMakoto Onuki return realTestContext.getSystemServiceName(serviceClass); 42872a3a0c7d24f629bca38ee2652491307e4e706daMakoto Onuki } 42972a3a0c7d24f629bca38ee2652491307e4e706daMakoto Onuki 43072a3a0c7d24f629bca38ee2652491307e4e706daMakoto Onuki @Override 431cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public PackageManager getPackageManager() { 432cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return packageManager; 433cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 434cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 435cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 436cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void enforceCallingOrSelfPermission(String permission, String message) { 437cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki if (binder.getCallingUid() == SYSTEM_UID) { 438cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return; // Assume system has all permissions. 439cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 440cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki if (!callerPermissions.contains(permission)) { 441cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki throw new SecurityException("Caller doesn't have " + permission + " : " + message); 442cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 443cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 444cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 445cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 446cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcast(Intent intent) { 447cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcast(intent); 448cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 449cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 450cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 451cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcast(Intent intent, String receiverPermission) { 452cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcast(intent, receiverPermission); 453cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 454cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 455cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 456cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcastMultiplePermissions(Intent intent, String[] receiverPermissions) { 457cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcastMultiplePermissions(intent, receiverPermissions); 458cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 459cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 460cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 461cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcast(Intent intent, String receiverPermission, Bundle options) { 462cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcast(intent, receiverPermission, options); 463cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 464cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 465cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 466cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcast(Intent intent, String receiverPermission, int appOp) { 467cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcast(intent, receiverPermission, appOp); 468cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 469cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 470cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 471cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcast(Intent intent, String receiverPermission) { 472cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcast(intent, receiverPermission); 473cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 474cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 475cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 476cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcast(Intent intent, String receiverPermission, 477cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, 478cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String initialData, Bundle initialExtras) { 479cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, 480cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki initialCode, initialData, initialExtras); 481cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 482cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 483cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 484cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcast(Intent intent, String receiverPermission, Bundle options, 485cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, 486cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String initialData, Bundle initialExtras) { 487cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcast(intent, receiverPermission, options, resultReceiver, 488cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki scheduler, 489cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki initialCode, initialData, initialExtras); 490cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 491cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 492cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 493cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp, 494cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, 495cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String initialData, Bundle initialExtras) { 496cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcast(intent, receiverPermission, appOp, resultReceiver, 497cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki scheduler, 498cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki initialCode, initialData, initialExtras); 499cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 500cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 501cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 502cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcastAsUser(Intent intent, UserHandle user) { 503b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki if (binder.callingPid != SYSTEM_PID) { 504b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki // Unless called as the system process, can only call if the target user is the 505b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki // calling user. 506b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki // (The actual check is more complex; we may need to change it later.) 507b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki Assert.assertEquals(UserHandle.getUserId(binder.getCallingUid()), user.getIdentifier()); 508b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki } 509b643fb0e67460344ade2e3db92738999f8168496Makoto Onuki 510cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcastAsUser(intent, user); 511cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 512cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 513cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 514cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission) { 515cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcastAsUser(intent, user, receiverPermission); 516cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 517cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 518cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 519cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendBroadcastAsUser(Intent intent, UserHandle user, String receiverPermission, 520cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki int appOp) { 521cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendBroadcastAsUser(intent, user, receiverPermission, appOp); 522cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 523cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 524cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 525cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 526cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, 527cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki int initialCode, String initialData, Bundle initialExtras) { 528cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver, 529cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki scheduler, initialCode, initialData, initialExtras); 5303cb2b49f443a31b1bb043d0450e350b95acecc8bSuprabh Shukla resultReceiver.onReceive(spiedContext, intent); 531cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 532cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 533cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 534cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 535cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String receiverPermission, int appOp, BroadcastReceiver resultReceiver, 536cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki Handler scheduler, int initialCode, String initialData, Bundle initialExtras) { 537cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, 538cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki resultReceiver, 539cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki scheduler, initialCode, initialData, initialExtras); 540cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 541cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 542cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 543cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 544cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String receiverPermission, int appOp, Bundle options, BroadcastReceiver resultReceiver, 545cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki Handler scheduler, int initialCode, String initialData, Bundle initialExtras) { 546cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, options, 547cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki resultReceiver, scheduler, initialCode, initialData, initialExtras); 548cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 549cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 550cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 551cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendStickyBroadcast(Intent intent) { 552cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendStickyBroadcast(intent); 553cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 554cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 555cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 556cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver, 557cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki Handler scheduler, int initialCode, String initialData, Bundle initialExtras) { 558cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, 559cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki initialData, initialExtras); 560cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 561cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 562cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 563cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void removeStickyBroadcast(Intent intent) { 564cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.removeStickyBroadcast(intent); 565cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 566cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 567cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 568cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) { 569cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendStickyBroadcastAsUser(intent, user); 570cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 571cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 572cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 573cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void sendStickyOrderedBroadcastAsUser(Intent intent, UserHandle user, 574cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, 575cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String initialData, Bundle initialExtras) { 576cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver, scheduler, initialCode, 577cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki initialData, initialExtras); 578cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 579cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 580cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 581cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void removeStickyBroadcastAsUser(Intent intent, UserHandle user) { 582cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.removeStickyBroadcastAsUser(intent, user); 583cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 584cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 585cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 586cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { 587cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return spiedContext.registerReceiver(receiver, filter); 588cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 589cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 590cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 591cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, 592cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki String broadcastPermission, Handler scheduler) { 593cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return spiedContext.registerReceiver(receiver, filter, broadcastPermission, scheduler); 594cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 595cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 596cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 597cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, 598cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki IntentFilter filter, String broadcastPermission, Handler scheduler) { 599cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return spiedContext.registerReceiverAsUser(receiver, user, filter, broadcastPermission, 600cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki scheduler); 601cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki } 602cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki 603cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki @Override 604cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki public void unregisterReceiver(BroadcastReceiver receiver) { 605cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki spiedContext.unregisterReceiver(receiver); 606c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki } 607a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki 608a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki @Override 609a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki public ContentResolver getContentResolver() { 610a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki return contentResolver; 611a52562ca9a4144cf30e6d5c6ffe856cc8e284464Makoto Onuki } 612c9754cf0dfa66d39ce9ea0d2eeab5f7c442a9686Makoto Onuki} 613