16e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown/* 26e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Copyright (C) 2015 The Android Open Source Project 36e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * 46e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 56e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * you may not use this file except in compliance with the License. 66e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * You may obtain a copy of the License at 76e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * 86e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 96e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * 106e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Unless required by applicable law or agreed to in writing, software 116e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 126e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * See the License for the specific language governing permissions and 146e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * limitations under the License. 156e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown */ 166e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 176e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownpackage android.app; 186e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 196e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport com.android.internal.app.IAppOpsService; 20a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishraimport com.android.internal.app.ISoundTriggerService; 216e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport com.android.internal.appwidget.IAppWidgetService; 226e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport com.android.internal.os.IDropBoxManagerService; 236e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 246e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.accounts.AccountManager; 256e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.accounts.IAccountManager; 266e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.app.admin.DevicePolicyManager; 276e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.app.job.IJobScheduler; 286e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.app.job.JobScheduler; 296e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.app.trust.TrustManager; 306e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.app.usage.IUsageStatsManager; 319c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Banimport android.app.usage.NetworkStatsManager; 326e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.app.usage.UsageStatsManager; 336e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.appwidget.AppWidgetManager; 346e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.bluetooth.BluetoothManager; 356e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.content.ClipboardManager; 366e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.content.Context; 376e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.content.IRestrictionsManager; 386e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.content.RestrictionsManager; 396e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.content.pm.ILauncherApps; 406f7362d92573e4ae693bc513dca586d6a4eb087bMakoto Onukiimport android.content.pm.IShortcutService; 416e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.content.pm.LauncherApps; 426f7362d92573e4ae693bc513dca586d6a4eb087bMakoto Onukiimport android.content.pm.ShortcutManager; 436e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.content.res.Resources; 446e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.ConsumerIrManager; 456e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.ISerialManager; 466e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.SensorManager; 476e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.SerialManager; 486e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.SystemSensorManager; 496e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.camera2.CameraManager; 506e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.display.DisplayManager; 516e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.hdmi.HdmiControlManager; 526e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.hdmi.IHdmiControlService; 536e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.input.InputManager; 549ff7d2235427b211344fa58b608424805a21aa24Peng Xuimport android.hardware.location.ContextHubManager; 556e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.usb.IUsbManager; 566e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.hardware.usb.UsbManager; 572035ac85f61b0e7fa384d52fcfa99766424c122cEric Laurentimport android.hardware.radio.RadioManager; 586e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.location.CountryDetector; 596e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.location.ICountryDetector; 606e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.location.ILocationManager; 616e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.location.LocationManager; 626e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.media.AudioManager; 636e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.media.MediaRouter; 646e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.media.midi.IMidiManager; 656e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.media.midi.MidiManager; 666e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.media.projection.MediaProjectionManager; 676e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.media.session.MediaSessionManager; 68a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishraimport android.media.soundtrigger.SoundTriggerManager; 696e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.media.tv.ITvInputManager; 706e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.media.tv.TvInputManager; 716e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.ConnectivityManager; 72bf8cbb05e085c4504685883f3dd564f200405beaPaul Stewartimport android.net.ConnectivityThread; 736e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.EthernetManager; 746e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.IConnectivityManager; 756e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.IEthernetManager; 766e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.INetworkPolicyManager; 776e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.NetworkPolicyManager; 786e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.NetworkScoreManager; 796e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.nsd.INsdManager; 806e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.nsd.NsdManager; 816e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.wifi.IRttManager; 826e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.wifi.IWifiManager; 836e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.wifi.IWifiScanner; 846e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.wifi.RttManager; 856e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.wifi.WifiManager; 866e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.wifi.WifiScanner; 8720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohenimport android.net.wifi.nan.IWifiNanManager; 8820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohenimport android.net.wifi.nan.WifiNanManager; 896e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.wifi.p2p.IWifiP2pManager; 906e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.net.wifi.p2p.WifiP2pManager; 916e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.nfc.NfcManager; 926e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.BatteryManager; 936e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.DropBoxManager; 94965ecbbb3eb19007690c333ab3aa05e380deb633Polina Bondarenkoimport android.os.HardwarePropertiesManager; 956e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.IBinder; 96f8754ac2127f8adf40bd4731f39b16340acdb2f7Polina Bondarenkoimport android.os.IHardwarePropertiesManager; 976e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.IPowerManager; 98e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Baoimport android.os.IRecoverySystem; 996e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.IUserManager; 1006e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.PowerManager; 1016e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.Process; 102e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Baoimport android.os.RecoverySystem; 1036e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.ServiceManager; 1046e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.SystemVibrator; 1056e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.UserHandle; 1066e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.UserManager; 1076e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.Vibrator; 108713fec85b8612256211f09c62b8958a99fe5b9dbJoe Onoratoimport android.os.health.SystemHealthManager; 1096e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.os.storage.StorageManager; 1106e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.print.IPrintManager; 1116e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.print.PrintManager; 112ebbf205bc6e8292f74d8fc4652c70274a445f907Jim Millerimport android.hardware.fingerprint.FingerprintManager; 113ebbf205bc6e8292f74d8fc4652c70274a445f907Jim Millerimport android.hardware.fingerprint.IFingerprintService; 1146e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.service.persistentdata.IPersistentDataBlockService; 1156e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.service.persistentdata.PersistentDataBlockManager; 1166e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.telecom.TelecomManager; 1179a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseriimport android.telephony.CarrierConfigManager; 1186e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.telephony.SubscriptionManager; 1196e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.telephony.TelephonyManager; 1206e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.util.Log; 1216e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.view.ContextThemeWrapper; 1226e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.view.LayoutInflater; 1236711f3b34c2ad9c622f56a08b81e313795fe7647Adam Powellimport com.android.internal.policy.PhoneLayoutInflater; 1246e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.view.WindowManager; 1256e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.view.WindowManagerImpl; 1266e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.view.accessibility.AccessibilityManager; 1276e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.view.accessibility.CaptioningManager; 1286e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.view.inputmethod.InputMethodManager; 1296e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport android.view.textservice.TextServicesManager; 1306e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1316e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownimport java.util.HashMap; 1326e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1336e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown/** 1346e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Manages all of the system services that can be returned by {@link Context#getSystemService}. 1356e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Used by {@link ContextImpl}. 1366e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown */ 1376e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brownfinal class SystemServiceRegistry { 1386e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown private final static String TAG = "SystemServiceRegistry"; 1396e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1406e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // Service registry information. 1416e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // This information is never changed once static initialization has completed. 1426e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown private static final HashMap<Class<?>, String> SYSTEM_SERVICE_NAMES = 1436e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new HashMap<Class<?>, String>(); 1446e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown private static final HashMap<String, ServiceFetcher<?>> SYSTEM_SERVICE_FETCHERS = 1456e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new HashMap<String, ServiceFetcher<?>>(); 1466e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown private static int sServiceCacheSize; 1476e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1486e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // Not instantiable. 1496e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown private SystemServiceRegistry() { } 1506e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1516e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown static { 1526e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.ACCESSIBILITY_SERVICE, AccessibilityManager.class, 1536e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<AccessibilityManager>() { 1546e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 1556e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public AccessibilityManager createService(ContextImpl ctx) { 1566e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return AccessibilityManager.getInstance(ctx); 1576e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 1586e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1596e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.CAPTIONING_SERVICE, CaptioningManager.class, 1606e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<CaptioningManager>() { 1616e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 1626e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public CaptioningManager createService(ContextImpl ctx) { 1636e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new CaptioningManager(ctx); 1646e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 1656e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1666e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.ACCOUNT_SERVICE, AccountManager.class, 1676e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<AccountManager>() { 1686e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 1696e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public AccountManager createService(ContextImpl ctx) { 1706e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.ACCOUNT_SERVICE); 1716e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IAccountManager service = IAccountManager.Stub.asInterface(b); 1726e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new AccountManager(ctx, service); 1736e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 1746e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1756e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.ACTIVITY_SERVICE, ActivityManager.class, 1766e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<ActivityManager>() { 1776e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 1786e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public ActivityManager createService(ContextImpl ctx) { 1796e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new ActivityManager(ctx.getOuterContext(), ctx.mMainThread.getHandler()); 1806e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 1816e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1826e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.ALARM_SERVICE, AlarmManager.class, 1836e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<AlarmManager>() { 1846e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 1856e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public AlarmManager createService(ContextImpl ctx) { 1866e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.ALARM_SERVICE); 1876e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IAlarmManager service = IAlarmManager.Stub.asInterface(b); 1886e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new AlarmManager(service, ctx); 1896e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 1906e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1916e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.AUDIO_SERVICE, AudioManager.class, 1926e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<AudioManager>() { 1936e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 1946e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public AudioManager createService(ContextImpl ctx) { 1956e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new AudioManager(ctx); 1966e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 1976e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 1986e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.MEDIA_ROUTER_SERVICE, MediaRouter.class, 1996e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<MediaRouter>() { 2006e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 2016e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public MediaRouter createService(ContextImpl ctx) { 2026e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new MediaRouter(ctx); 2036e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2046e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2056e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.BLUETOOTH_SERVICE, BluetoothManager.class, 2066e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<BluetoothManager>() { 2076e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 2086e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public BluetoothManager createService(ContextImpl ctx) { 2096e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new BluetoothManager(ctx); 2106e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2116e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2126e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.HDMI_CONTROL_SERVICE, HdmiControlManager.class, 2136e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<HdmiControlManager>() { 2146e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 2156e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public HdmiControlManager createService() { 2166e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.HDMI_CONTROL_SERVICE); 2176e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new HdmiControlManager(IHdmiControlService.Stub.asInterface(b)); 2186e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2196e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2206e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.CLIPBOARD_SERVICE, ClipboardManager.class, 2216e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<ClipboardManager>() { 2226e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 2236e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public ClipboardManager createService(ContextImpl ctx) { 2246e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new ClipboardManager(ctx.getOuterContext(), 2256e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown ctx.mMainThread.getHandler()); 2266e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2276e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2286e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // The clipboard service moved to a new package. If someone asks for the old 2296e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // interface by class then we want to redirect over to the new interface instead 2306e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // (which extends it). 2316e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown SYSTEM_SERVICE_NAMES.put(android.text.ClipboardManager.class, Context.CLIPBOARD_SERVICE); 2326e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2336e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.CONNECTIVITY_SERVICE, ConnectivityManager.class, 234cf9597791edc284b179f3aeaa64e9d53b5abbf36Lorenzo Colitti new StaticApplicationContextServiceFetcher<ConnectivityManager>() { 2356e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 236ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti public ConnectivityManager createService(Context context) { 2376e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE); 238ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti IConnectivityManager service = IConnectivityManager.Stub.asInterface(b); 239ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti return new ConnectivityManager(context, service); 2406e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2416e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2426e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.COUNTRY_DETECTOR, CountryDetector.class, 2436e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<CountryDetector>() { 2446e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 2456e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public CountryDetector createService() { 2466e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.COUNTRY_DETECTOR); 2476e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new CountryDetector(ICountryDetector.Stub.asInterface(b)); 2486e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2496e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2506e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.DEVICE_POLICY_SERVICE, DevicePolicyManager.class, 2516e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<DevicePolicyManager>() { 2526e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 2536e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public DevicePolicyManager createService(ContextImpl ctx) { 254cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki return DevicePolicyManager.create(ctx); 2556e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2566e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2576e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.DOWNLOAD_SERVICE, DownloadManager.class, 2586e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<DownloadManager>() { 2596e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 2606e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public DownloadManager createService(ContextImpl ctx) { 26160cfad80bdf61db436643927337c2fb30186e99dJeff Sharkey return new DownloadManager(ctx); 2626e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2636e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2646e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.BATTERY_SERVICE, BatteryManager.class, 2656e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<BatteryManager>() { 2666e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 2676e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public BatteryManager createService() { 2686e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new BatteryManager(); 2696e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2706e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2716e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.NFC_SERVICE, NfcManager.class, 2726e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<NfcManager>() { 2736e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 2746e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public NfcManager createService(ContextImpl ctx) { 2756e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new NfcManager(ctx); 2766e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2776e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2786e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.DROPBOX_SERVICE, DropBoxManager.class, 279b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey new CachedServiceFetcher<DropBoxManager>() { 2806e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 281b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey public DropBoxManager createService(ContextImpl ctx) { 2826e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.DROPBOX_SERVICE); 2836e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IDropBoxManagerService service = IDropBoxManagerService.Stub.asInterface(b); 2846e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown if (service == null) { 2856e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // Don't return a DropBoxManager that will NPE upon use. 2866e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // This also avoids caching a broken DropBoxManager in 2876e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // getDropBoxManager during early boot, before the 2886e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // DROPBOX_SERVICE is registered. 2896e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return null; 2906e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 291b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey return new DropBoxManager(ctx, service); 2926e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 2936e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 2946e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.INPUT_SERVICE, InputManager.class, 2956e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<InputManager>() { 2966e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 2976e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public InputManager createService() { 2986e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return InputManager.getInstance(); 2996e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3006e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 3016e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.DISPLAY_SERVICE, DisplayManager.class, 3026e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<DisplayManager>() { 3036e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 3046e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public DisplayManager createService(ContextImpl ctx) { 3056e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new DisplayManager(ctx.getOuterContext()); 3066e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3076e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 3086e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.INPUT_METHOD_SERVICE, InputMethodManager.class, 3096e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<InputMethodManager>() { 3106e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 3116e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public InputMethodManager createService() { 3126e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return InputMethodManager.getInstance(); 3136e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3146e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 3156e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.TEXT_SERVICES_MANAGER_SERVICE, TextServicesManager.class, 3166e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<TextServicesManager>() { 3176e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 3186e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public TextServicesManager createService() { 3196e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return TextServicesManager.getInstance(); 3206e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3216e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 3226e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.KEYGUARD_SERVICE, KeyguardManager.class, 3236e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<KeyguardManager>() { 3246e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 3256e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public KeyguardManager createService() { 3266e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new KeyguardManager(); 3276e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3286e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 3296e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.LAYOUT_INFLATER_SERVICE, LayoutInflater.class, 3306e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<LayoutInflater>() { 3316e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 3326e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public LayoutInflater createService(ContextImpl ctx) { 3336e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new PhoneLayoutInflater(ctx.getOuterContext()); 3346e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3356e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 3366e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.LOCATION_SERVICE, LocationManager.class, 3376e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<LocationManager>() { 3386e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 3396e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public LocationManager createService(ContextImpl ctx) { 3406e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.LOCATION_SERVICE); 3416e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new LocationManager(ctx, ILocationManager.Stub.asInterface(b)); 3426e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3436e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 3446e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.NETWORK_POLICY_SERVICE, NetworkPolicyManager.class, 34516a16899505ec0a9ede5b76650bfb8817b3227c7Svet Ganov new CachedServiceFetcher<NetworkPolicyManager>() { 3466e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 34716a16899505ec0a9ede5b76650bfb8817b3227c7Svet Ganov public NetworkPolicyManager createService(ContextImpl ctx) { 34816a16899505ec0a9ede5b76650bfb8817b3227c7Svet Ganov return new NetworkPolicyManager(ctx, INetworkPolicyManager.Stub.asInterface( 3496e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown ServiceManager.getService(Context.NETWORK_POLICY_SERVICE))); 3506e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3516e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 3526e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.NOTIFICATION_SERVICE, NotificationManager.class, 3536e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<NotificationManager>() { 3546e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 3556e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public NotificationManager createService(ContextImpl ctx) { 3566e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown final Context outerContext = ctx.getOuterContext(); 3576e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new NotificationManager( 3586e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new ContextThemeWrapper(outerContext, 3596e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown Resources.selectSystemTheme(0, 3606e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown outerContext.getApplicationInfo().targetSdkVersion, 3616e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown com.android.internal.R.style.Theme_Dialog, 3626e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown com.android.internal.R.style.Theme_Holo_Dialog, 3636e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown com.android.internal.R.style.Theme_DeviceDefault_Dialog, 3646e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown com.android.internal.R.style.Theme_DeviceDefault_Light_Dialog)), 3656e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown ctx.mMainThread.getHandler()); 3666e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3676e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 3686e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.NSD_SERVICE, NsdManager.class, 3696e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<NsdManager>() { 3706e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 3716e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public NsdManager createService(ContextImpl ctx) { 3726e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.NSD_SERVICE); 3736e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown INsdManager service = INsdManager.Stub.asInterface(b); 3746e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new NsdManager(ctx.getOuterContext(), service); 3756e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3766e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 3776e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.POWER_SERVICE, PowerManager.class, 3786e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<PowerManager>() { 3796e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 3806e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public PowerManager createService(ContextImpl ctx) { 3816e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.POWER_SERVICE); 3826e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IPowerManager service = IPowerManager.Stub.asInterface(b); 3836e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown if (service == null) { 3846e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown Log.wtf(TAG, "Failed to get power manager service."); 3856e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 3866e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new PowerManager(ctx.getOuterContext(), 3876e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown service, ctx.mMainThread.getHandler()); 3886e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 3896e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 390e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao registerService(Context.RECOVERY_SERVICE, RecoverySystem.class, 391e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao new CachedServiceFetcher<RecoverySystem>() { 392e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao @Override 393e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao public RecoverySystem createService(ContextImpl ctx) { 394e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao IBinder b = ServiceManager.getService(Context.RECOVERY_SERVICE); 395e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao IRecoverySystem service = IRecoverySystem.Stub.asInterface(b); 396e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao if (service == null) { 397e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao Log.wtf(TAG, "Failed to get recovery service."); 398e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao } 399e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao return new RecoverySystem(service); 400e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao }}); 401e8a403d57c8ea540f8287cdaee8b90f0cf9626a3Tao Bao 4026e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.SEARCH_SERVICE, SearchManager.class, 4036e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<SearchManager>() { 4046e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4056e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public SearchManager createService(ContextImpl ctx) { 4066e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new SearchManager(ctx.getOuterContext(), 4076e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown ctx.mMainThread.getHandler()); 4086e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4096e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4106e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.SENSOR_SERVICE, SensorManager.class, 4116e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<SensorManager>() { 4126e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4136e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public SensorManager createService(ContextImpl ctx) { 4146e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new SystemSensorManager(ctx.getOuterContext(), 4156e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown ctx.mMainThread.getHandler().getLooper()); 4166e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4176e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4186e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.STATUS_BAR_SERVICE, StatusBarManager.class, 4196e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<StatusBarManager>() { 4206e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4216e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public StatusBarManager createService(ContextImpl ctx) { 4226e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new StatusBarManager(ctx.getOuterContext()); 4236e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4246e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4256e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.STORAGE_SERVICE, StorageManager.class, 4266e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<StorageManager>() { 4276e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4286e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public StorageManager createService(ContextImpl ctx) { 4294887789e44cdb16b042a35e8ec03983213e88ac6Jeff Sharkey return new StorageManager(ctx, ctx.mMainThread.getHandler().getLooper()); 4306e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4316e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4326e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.TELEPHONY_SERVICE, TelephonyManager.class, 4336e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<TelephonyManager>() { 4346e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4356e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public TelephonyManager createService(ContextImpl ctx) { 4366e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new TelephonyManager(ctx.getOuterContext()); 4376e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4386e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4396e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.TELEPHONY_SUBSCRIPTION_SERVICE, SubscriptionManager.class, 4406e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<SubscriptionManager>() { 4416e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4426e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public SubscriptionManager createService(ContextImpl ctx) { 4436e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new SubscriptionManager(ctx.getOuterContext()); 4446e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4456e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4469a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri registerService(Context.CARRIER_CONFIG_SERVICE, CarrierConfigManager.class, 4479a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri new CachedServiceFetcher<CarrierConfigManager>() { 4489a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri @Override 4499a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public CarrierConfigManager createService(ContextImpl ctx) { 4509a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri return new CarrierConfigManager(); 4519a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri }}); 4529a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 4536e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.TELECOM_SERVICE, TelecomManager.class, 4546e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<TelecomManager>() { 4556e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4566e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public TelecomManager createService(ContextImpl ctx) { 4576e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new TelecomManager(ctx.getOuterContext()); 4586e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4596e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4606e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.UI_MODE_SERVICE, UiModeManager.class, 4616e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<UiModeManager>() { 4626e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4636e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public UiModeManager createService(ContextImpl ctx) { 4646e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new UiModeManager(); 4656e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4666e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4676e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.USB_SERVICE, UsbManager.class, 4686e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<UsbManager>() { 4696e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4706e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public UsbManager createService(ContextImpl ctx) { 4716e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.USB_SERVICE); 4726e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new UsbManager(ctx, IUsbManager.Stub.asInterface(b)); 4736e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4746e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4756e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.SERIAL_SERVICE, SerialManager.class, 4766e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<SerialManager>() { 4776e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4786e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public SerialManager createService(ContextImpl ctx) { 4796e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.SERIAL_SERVICE); 4806e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new SerialManager(ctx, ISerialManager.Stub.asInterface(b)); 4816e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4826e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4836e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.VIBRATOR_SERVICE, Vibrator.class, 4846e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<Vibrator>() { 4856e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4866e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public Vibrator createService(ContextImpl ctx) { 4876e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new SystemVibrator(ctx); 4886e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4896e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4906e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.WALLPAPER_SERVICE, WallpaperManager.class, 4916e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<WallpaperManager>() { 4926e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 4936e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public WallpaperManager createService(ContextImpl ctx) { 4946e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new WallpaperManager(ctx.getOuterContext(), 4956e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown ctx.mMainThread.getHandler()); 4966e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 4976e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 4986e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.WIFI_SERVICE, WifiManager.class, 4996e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<WifiManager>() { 5006e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 5016e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public WifiManager createService(ContextImpl ctx) { 5026e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.WIFI_SERVICE); 5036e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IWifiManager service = IWifiManager.Stub.asInterface(b); 504bf8cbb05e085c4504685883f3dd564f200405beaPaul Stewart return new WifiManager(ctx.getOuterContext(), service, 505bf8cbb05e085c4504685883f3dd564f200405beaPaul Stewart ConnectivityThread.getInstanceLooper()); 5066e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 5076e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 5086e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.WIFI_P2P_SERVICE, WifiP2pManager.class, 5096e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<WifiP2pManager>() { 5106e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 5116e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public WifiP2pManager createService() { 5126e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.WIFI_P2P_SERVICE); 5136e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IWifiP2pManager service = IWifiP2pManager.Stub.asInterface(b); 5146e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new WifiP2pManager(service); 5156e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 5166e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 51720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen registerService(Context.WIFI_NAN_SERVICE, WifiNanManager.class, 51820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen new StaticServiceFetcher<WifiNanManager>() { 51920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen @Override 52020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public WifiNanManager createService() { 52120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen IBinder b = ServiceManager.getService(Context.WIFI_NAN_SERVICE); 52220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen IWifiNanManager service = IWifiNanManager.Stub.asInterface(b); 52320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen if (service == null) { 52420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return null; 52520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 52620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return new WifiNanManager(service); 52720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen }}); 52820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 5296e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.WIFI_SCANNING_SERVICE, WifiScanner.class, 5306e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<WifiScanner>() { 5316e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 5326e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public WifiScanner createService(ContextImpl ctx) { 5336e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.WIFI_SCANNING_SERVICE); 5346e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IWifiScanner service = IWifiScanner.Stub.asInterface(b); 53591312c7cb2df952424b16dc563bfe455661ceadaMitchell Wills return new WifiScanner(ctx.getOuterContext(), service, 53691312c7cb2df952424b16dc563bfe455661ceadaMitchell Wills ConnectivityThread.getInstanceLooper()); 5376e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 5386e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 5396e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.WIFI_RTT_SERVICE, RttManager.class, 5406e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<RttManager>() { 5416e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 5426e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public RttManager createService(ContextImpl ctx) { 5436e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.WIFI_RTT_SERVICE); 5446e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IRttManager service = IRttManager.Stub.asInterface(b); 545bd3353a6c41896ed74d53b056ca1aefb2196c979Wei Wang return new RttManager(ctx.getOuterContext(), service, 546bd3353a6c41896ed74d53b056ca1aefb2196c979Wei Wang ConnectivityThread.getInstanceLooper()); 5476e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 5486e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 5496e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.ETHERNET_SERVICE, EthernetManager.class, 5506e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<EthernetManager>() { 5516e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 5526e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public EthernetManager createService(ContextImpl ctx) { 5536e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.ETHERNET_SERVICE); 5546e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IEthernetManager service = IEthernetManager.Stub.asInterface(b); 5556e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new EthernetManager(ctx.getOuterContext(), service); 5566e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 5576e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 5586e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.WINDOW_SERVICE, WindowManager.class, 5596e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<WindowManager>() { 5606e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 5616e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public WindowManager createService(ContextImpl ctx) { 5624ece3d6bb18a609afcd0e82f0340b7d36ba24eeaAdam Lesinski return new WindowManagerImpl(ctx); 5636e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 5646e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 5656e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.USER_SERVICE, UserManager.class, 5666e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<UserManager>() { 5676e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 5686e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public UserManager createService(ContextImpl ctx) { 5696e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.USER_SERVICE); 5706e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IUserManager service = IUserManager.Stub.asInterface(b); 5716e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new UserManager(ctx, service); 5726e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 5736e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 5746e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.APP_OPS_SERVICE, AppOpsManager.class, 5756e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<AppOpsManager>() { 5766e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 5776e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public AppOpsManager createService(ContextImpl ctx) { 5786e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.APP_OPS_SERVICE); 5796e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IAppOpsService service = IAppOpsService.Stub.asInterface(b); 5806e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new AppOpsManager(ctx, service); 5816e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 5826e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 5836e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.CAMERA_SERVICE, CameraManager.class, 5846e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<CameraManager>() { 5856e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 5866e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public CameraManager createService(ContextImpl ctx) { 5876e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new CameraManager(ctx); 5886e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 5896e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 5906e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.LAUNCHER_APPS_SERVICE, LauncherApps.class, 5916e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<LauncherApps>() { 5926e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 5936e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public LauncherApps createService(ContextImpl ctx) { 5945ba0d3e3a3035b67d2ce3a59975145b1e0061ef4Makoto Onuki return new LauncherApps(ctx); 5956e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 5966e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 5976e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.RESTRICTIONS_SERVICE, RestrictionsManager.class, 5986e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<RestrictionsManager>() { 5996e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6006e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public RestrictionsManager createService(ContextImpl ctx) { 6016e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.RESTRICTIONS_SERVICE); 6026e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IRestrictionsManager service = IRestrictionsManager.Stub.asInterface(b); 6036e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new RestrictionsManager(ctx, service); 6046e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 6056e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 6066e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.PRINT_SERVICE, PrintManager.class, 6076e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<PrintManager>() { 6086e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6096e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public PrintManager createService(ContextImpl ctx) { 6106e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder iBinder = ServiceManager.getService(Context.PRINT_SERVICE); 6116e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IPrintManager service = IPrintManager.Stub.asInterface(iBinder); 6126e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new PrintManager(ctx.getOuterContext(), service, UserHandle.myUserId(), 6136e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown UserHandle.getAppId(Process.myUid())); 6146e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 6156e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 6166e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.CONSUMER_IR_SERVICE, ConsumerIrManager.class, 6176e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<ConsumerIrManager>() { 6186e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6196e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public ConsumerIrManager createService(ContextImpl ctx) { 6206e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new ConsumerIrManager(ctx); 6216e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 6226e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 6236e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.MEDIA_SESSION_SERVICE, MediaSessionManager.class, 6246e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<MediaSessionManager>() { 6256e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6266e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public MediaSessionManager createService(ContextImpl ctx) { 6276e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new MediaSessionManager(ctx); 6286e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 6296e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 6306e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.TRUST_SERVICE, TrustManager.class, 6316e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<TrustManager>() { 6326e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6336e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public TrustManager createService() { 6346e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.TRUST_SERVICE); 6356e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new TrustManager(b); 6366e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 6376e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 6386e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.FINGERPRINT_SERVICE, FingerprintManager.class, 6396e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<FingerprintManager>() { 6406e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6416e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public FingerprintManager createService(ContextImpl ctx) { 6426e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder binder = ServiceManager.getService(Context.FINGERPRINT_SERVICE); 6436e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IFingerprintService service = IFingerprintService.Stub.asInterface(binder); 6446e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new FingerprintManager(ctx.getOuterContext(), service); 6456e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 6466e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 6476e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.TV_INPUT_SERVICE, TvInputManager.class, 6486e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<TvInputManager>() { 6496e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6506e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public TvInputManager createService() { 6516e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder iBinder = ServiceManager.getService(Context.TV_INPUT_SERVICE); 6526e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown ITvInputManager service = ITvInputManager.Stub.asInterface(iBinder); 6536e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new TvInputManager(service, UserHandle.myUserId()); 6546e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 6556e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 6566e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.NETWORK_SCORE_SERVICE, NetworkScoreManager.class, 6576e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<NetworkScoreManager>() { 6586e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6596e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public NetworkScoreManager createService(ContextImpl ctx) { 6606e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new NetworkScoreManager(ctx); 6616e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 6626e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 6636e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.USAGE_STATS_SERVICE, UsageStatsManager.class, 6646e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<UsageStatsManager>() { 6656e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6666e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public UsageStatsManager createService(ContextImpl ctx) { 6676e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder iBinder = ServiceManager.getService(Context.USAGE_STATS_SERVICE); 6686e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IUsageStatsManager service = IUsageStatsManager.Stub.asInterface(iBinder); 6696e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new UsageStatsManager(ctx.getOuterContext(), service); 6706e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 6716e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 6729c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban registerService(Context.NETWORK_STATS_SERVICE, NetworkStatsManager.class, 6739c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban new CachedServiceFetcher<NetworkStatsManager>() { 6749c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban @Override 6759c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban public NetworkStatsManager createService(ContextImpl ctx) { 6769c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban return new NetworkStatsManager(ctx.getOuterContext()); 6779c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban }}); 6789c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban 6796e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.JOB_SCHEDULER_SERVICE, JobScheduler.class, 6806e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<JobScheduler>() { 6816e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6826e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public JobScheduler createService() { 6836e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.JOB_SCHEDULER_SERVICE); 6846e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new JobSchedulerImpl(IJobScheduler.Stub.asInterface(b)); 6856e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 6866e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 6876e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.PERSISTENT_DATA_BLOCK_SERVICE, PersistentDataBlockManager.class, 6886e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new StaticServiceFetcher<PersistentDataBlockManager>() { 6896e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 6906e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public PersistentDataBlockManager createService() { 6916e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.PERSISTENT_DATA_BLOCK_SERVICE); 6926e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IPersistentDataBlockService persistentDataBlockService = 6936e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IPersistentDataBlockService.Stub.asInterface(b); 6946e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown if (persistentDataBlockService != null) { 6956e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new PersistentDataBlockManager(persistentDataBlockService); 6966e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } else { 6976e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // not supported 6986e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return null; 6996e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 7006e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 7016e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 7026e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.MEDIA_PROJECTION_SERVICE, MediaProjectionManager.class, 7036e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<MediaProjectionManager>() { 7046e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 7056e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public MediaProjectionManager createService(ContextImpl ctx) { 7066e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new MediaProjectionManager(ctx); 7076e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 7086e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 7096e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.APPWIDGET_SERVICE, AppWidgetManager.class, 7106e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<AppWidgetManager>() { 7116e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 7126e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public AppWidgetManager createService(ContextImpl ctx) { 7136e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.APPWIDGET_SERVICE); 7146e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new AppWidgetManager(ctx, IAppWidgetService.Stub.asInterface(b)); 7156e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 7166e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 7176e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown registerService(Context.MIDI_SERVICE, MidiManager.class, 7186e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown new CachedServiceFetcher<MidiManager>() { 7196e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 7206e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public MidiManager createService(ContextImpl ctx) { 7216e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown IBinder b = ServiceManager.getService(Context.MIDI_SERVICE); 72247abda576e06612b8af7b80504fafdfc076aff2dRicardo Garcia if (b == null) { 72347abda576e06612b8af7b80504fafdfc076aff2dRicardo Garcia return null; 72447abda576e06612b8af7b80504fafdfc076aff2dRicardo Garcia } 725e0a6ca64fac5bd4f10139321604031816e90adb4Mike Lockwood return new MidiManager(IMidiManager.Stub.asInterface(b)); 7266e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown }}); 7272035ac85f61b0e7fa384d52fcfa99766424c122cEric Laurent 7282035ac85f61b0e7fa384d52fcfa99766424c122cEric Laurent registerService(Context.RADIO_SERVICE, RadioManager.class, 7292035ac85f61b0e7fa384d52fcfa99766424c122cEric Laurent new CachedServiceFetcher<RadioManager>() { 7302035ac85f61b0e7fa384d52fcfa99766424c122cEric Laurent @Override 7312035ac85f61b0e7fa384d52fcfa99766424c122cEric Laurent public RadioManager createService(ContextImpl ctx) { 7322035ac85f61b0e7fa384d52fcfa99766424c122cEric Laurent return new RadioManager(ctx); 7332035ac85f61b0e7fa384d52fcfa99766424c122cEric Laurent }}); 734a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishra 735965ecbbb3eb19007690c333ab3aa05e380deb633Polina Bondarenko registerService(Context.HARDWARE_PROPERTIES_SERVICE, HardwarePropertiesManager.class, 736965ecbbb3eb19007690c333ab3aa05e380deb633Polina Bondarenko new CachedServiceFetcher<HardwarePropertiesManager>() { 737965ecbbb3eb19007690c333ab3aa05e380deb633Polina Bondarenko @Override 738965ecbbb3eb19007690c333ab3aa05e380deb633Polina Bondarenko public HardwarePropertiesManager createService(ContextImpl ctx) { 739f8754ac2127f8adf40bd4731f39b16340acdb2f7Polina Bondarenko IBinder b = ServiceManager.getService(Context.HARDWARE_PROPERTIES_SERVICE); 740f8754ac2127f8adf40bd4731f39b16340acdb2f7Polina Bondarenko IHardwarePropertiesManager service = 741f8754ac2127f8adf40bd4731f39b16340acdb2f7Polina Bondarenko IHardwarePropertiesManager.Stub.asInterface(b); 742f8754ac2127f8adf40bd4731f39b16340acdb2f7Polina Bondarenko if (service == null) { 743f8754ac2127f8adf40bd4731f39b16340acdb2f7Polina Bondarenko Log.wtf(TAG, "Failed to get hardwareproperties service."); 744f8754ac2127f8adf40bd4731f39b16340acdb2f7Polina Bondarenko return null; 745f8754ac2127f8adf40bd4731f39b16340acdb2f7Polina Bondarenko } 746f8754ac2127f8adf40bd4731f39b16340acdb2f7Polina Bondarenko return new HardwarePropertiesManager(ctx, service); 747965ecbbb3eb19007690c333ab3aa05e380deb633Polina Bondarenko }}); 748a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishra 749a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishra registerService(Context.SOUND_TRIGGER_SERVICE, SoundTriggerManager.class, 750a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishra new CachedServiceFetcher<SoundTriggerManager>() { 751a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishra @Override 752a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishra public SoundTriggerManager createService(ContextImpl ctx) { 753a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishra IBinder b = ServiceManager.getService(Context.SOUND_TRIGGER_SERVICE); 754a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishra return new SoundTriggerManager(ctx, ISoundTriggerService.Stub.asInterface(b)); 755a772e5fc062c8de48cb9c1d61755110f6b2e189bArunesh Mishra }}); 7566f7362d92573e4ae693bc513dca586d6a4eb087bMakoto Onuki 7576f7362d92573e4ae693bc513dca586d6a4eb087bMakoto Onuki registerService(Context.SHORTCUT_SERVICE, ShortcutManager.class, 7586f7362d92573e4ae693bc513dca586d6a4eb087bMakoto Onuki new CachedServiceFetcher<ShortcutManager>() { 7595504622fb01ab9774b5e73d05f86ee03a8b68ab7Makoto Onuki @Override 7605504622fb01ab9774b5e73d05f86ee03a8b68ab7Makoto Onuki public ShortcutManager createService(ContextImpl ctx) { 7615ba0d3e3a3035b67d2ce3a59975145b1e0061ef4Makoto Onuki return new ShortcutManager(ctx); 7625504622fb01ab9774b5e73d05f86ee03a8b68ab7Makoto Onuki }}); 763713fec85b8612256211f09c62b8958a99fe5b9dbJoe Onorato 764713fec85b8612256211f09c62b8958a99fe5b9dbJoe Onorato registerService(Context.SYSTEM_HEALTH_SERVICE, SystemHealthManager.class, 765713fec85b8612256211f09c62b8958a99fe5b9dbJoe Onorato new CachedServiceFetcher<SystemHealthManager>() { 766713fec85b8612256211f09c62b8958a99fe5b9dbJoe Onorato @Override 767713fec85b8612256211f09c62b8958a99fe5b9dbJoe Onorato public SystemHealthManager createService(ContextImpl ctx) { 768713fec85b8612256211f09c62b8958a99fe5b9dbJoe Onorato return new SystemHealthManager(); 769713fec85b8612256211f09c62b8958a99fe5b9dbJoe Onorato }}); 7709ff7d2235427b211344fa58b608424805a21aa24Peng Xu 7719ff7d2235427b211344fa58b608424805a21aa24Peng Xu registerService(Context.CONTEXTHUB_SERVICE, ContextHubManager.class, 7729ff7d2235427b211344fa58b608424805a21aa24Peng Xu new CachedServiceFetcher<ContextHubManager>() { 7739ff7d2235427b211344fa58b608424805a21aa24Peng Xu @Override 7749ff7d2235427b211344fa58b608424805a21aa24Peng Xu public ContextHubManager createService(ContextImpl ctx) { 7759ff7d2235427b211344fa58b608424805a21aa24Peng Xu return new ContextHubManager(ctx.getOuterContext(), 7769ff7d2235427b211344fa58b608424805a21aa24Peng Xu ctx.mMainThread.getHandler().getLooper()); 7779ff7d2235427b211344fa58b608424805a21aa24Peng Xu }}); 7786e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 7796e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 7806e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown /** 7816e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Creates an array which is used to cache per-Context service instances. 7826e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown */ 7836e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public static Object[] createServiceCache() { 7846e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return new Object[sServiceCacheSize]; 7856e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 7866e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 7876e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown /** 7886e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Gets a system service from a given context. 7896e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown */ 7906e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public static Object getSystemService(ContextImpl ctx, String name) { 7916e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown ServiceFetcher<?> fetcher = SYSTEM_SERVICE_FETCHERS.get(name); 7926e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return fetcher != null ? fetcher.getService(ctx) : null; 7936e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 7946e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 7956e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown /** 796e3383cc4539921756232ae4f3f54e99b95fb20ccPaul McLean * Gets the name of the system-level service that is represented by the specified class. 7976e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown */ 7986e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public static String getSystemServiceName(Class<?> serviceClass) { 7996e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return SYSTEM_SERVICE_NAMES.get(serviceClass); 8006e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8016e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 8026e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown /** 8036e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Statically registers a system service with the context. 8046e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * This method must be called during static initialization only. 8056e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown */ 8066e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown private static <T> void registerService(String serviceName, Class<T> serviceClass, 8076e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown ServiceFetcher<T> serviceFetcher) { 8086e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown SYSTEM_SERVICE_NAMES.put(serviceClass, serviceName); 8096e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown SYSTEM_SERVICE_FETCHERS.put(serviceName, serviceFetcher); 8106e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8116e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 8126e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown /** 8136e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Base interface for classes that fetch services. 8146e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * These objects must only be created during static initialization. 8156e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown */ 8166e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown static abstract interface ServiceFetcher<T> { 8176e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown T getService(ContextImpl ctx); 8186e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8196e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 8206e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown /** 8216e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Override this class when the system service constructor needs a 8226e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * ContextImpl and should be cached and retained by that context. 8236e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown */ 8246e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown static abstract class CachedServiceFetcher<T> implements ServiceFetcher<T> { 8256e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown private final int mCacheIndex; 8266e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 8276e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public CachedServiceFetcher() { 8286e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown mCacheIndex = sServiceCacheSize++; 8296e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8306e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 8316e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 8326e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @SuppressWarnings("unchecked") 8336e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public final T getService(ContextImpl ctx) { 8346e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown final Object[] cache = ctx.mServiceCache; 8356e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown synchronized (cache) { 8366e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown // Fetch or create the service. 8376e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown Object service = cache[mCacheIndex]; 8386e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown if (service == null) { 8396e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown service = createService(ctx); 8406e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown cache[mCacheIndex] = service; 8416e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8426e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return (T)service; 8436e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8446e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8456e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 8466e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public abstract T createService(ContextImpl ctx); 8476e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8486e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 8496e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown /** 8506e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * Override this class when the system service does not need a ContextImpl 8516e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown * and should be cached and retained process-wide. 8526e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown */ 8536e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown static abstract class StaticServiceFetcher<T> implements ServiceFetcher<T> { 8546e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown private T mCachedInstance; 8556e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 8566e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown @Override 8576e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public final T getService(ContextImpl unused) { 8586e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown synchronized (StaticServiceFetcher.this) { 8596e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown if (mCachedInstance == null) { 8606e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown mCachedInstance = createService(); 8616e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8626e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown return mCachedInstance; 8636e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8646e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 8656e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown 8666e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown public abstract T createService(); 8676e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown } 868ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti 869ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti /** 870cf9597791edc284b179f3aeaa64e9d53b5abbf36Lorenzo Colitti * Like StaticServiceFetcher, creates only one instance of the service per application, but when 871cf9597791edc284b179f3aeaa64e9d53b5abbf36Lorenzo Colitti * creating the service for the first time, passes it the application context of the creating 872cf9597791edc284b179f3aeaa64e9d53b5abbf36Lorenzo Colitti * application. 873ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti * 874ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti * TODO: Delete this once its only user (ConnectivityManager) is known to work well in the 875ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti * case where multiple application components each have their own ConnectivityManager object. 876ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti */ 877cf9597791edc284b179f3aeaa64e9d53b5abbf36Lorenzo Colitti static abstract class StaticApplicationContextServiceFetcher<T> implements ServiceFetcher<T> { 878ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti private T mCachedInstance; 879ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti 880ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti @Override 881ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti public final T getService(ContextImpl ctx) { 882cf9597791edc284b179f3aeaa64e9d53b5abbf36Lorenzo Colitti synchronized (StaticApplicationContextServiceFetcher.this) { 883ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti if (mCachedInstance == null) { 8840ad9ab07fa0a106e55a423c837d306327045befeLorenzo Colitti Context appContext = ctx.getApplicationContext(); 8850ad9ab07fa0a106e55a423c837d306327045befeLorenzo Colitti // If the application context is null, we're either in the system process or 8860ad9ab07fa0a106e55a423c837d306327045befeLorenzo Colitti // it's the application context very early in app initialization. In both these 8870ad9ab07fa0a106e55a423c837d306327045befeLorenzo Colitti // cases, the passed-in ContextImpl will not be freed, so it's safe to pass it 8880ad9ab07fa0a106e55a423c837d306327045befeLorenzo Colitti // to the service. http://b/27532714 . 8890ad9ab07fa0a106e55a423c837d306327045befeLorenzo Colitti mCachedInstance = createService(appContext != null ? appContext : ctx); 890ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti } 891ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti return mCachedInstance; 892ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti } 893ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti } 894ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti 895ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti public abstract T createService(Context applicationContext); 896ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti } 897ffc42b0b7be29ee4118e0515d5ab024927bcb8caLorenzo Colitti 8986e53931f49f49245deef8622eb8e7dc6ccf04536Jeff Brown} 899