summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/Activity.java7
-rw-r--r--core/java/android/app/KeyguardManager.java7
-rw-r--r--core/java/android/app/SearchManager.java9
-rw-r--r--core/java/android/app/SystemServiceRegistry.java249
-rw-r--r--core/java/android/app/UiModeManager.java5
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java23
-rw-r--r--core/java/android/app/usage/NetworkStatsManager.java5
-rw-r--r--core/java/android/content/ClipboardManager.java38
-rw-r--r--core/java/android/hardware/ConsumerIrManager.java5
-rw-r--r--core/java/android/hardware/input/InputManager.java9
-rw-r--r--core/java/android/hardware/location/ContextHubManager.java95
-rw-r--r--core/java/android/hardware/location/ContextHubService.java8
-rw-r--r--core/java/android/net/NetworkScoreManager.java8
-rw-r--r--core/java/android/os/BatteryManager.java12
-rw-r--r--core/java/android/os/ServiceManager.java32
-rw-r--r--core/java/android/os/health/SystemHealthManager.java9
-rw-r--r--core/java/android/os/storage/StorageManager.java10
-rw-r--r--core/java/android/view/inputmethod/InputMethodManager.java15
-rw-r--r--core/java/android/view/textservice/TextServicesManager.java73
19 files changed, 311 insertions, 308 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index a4c667f90852..5f8350f72a54 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -66,6 +66,7 @@ import android.os.Looper;
import android.os.Parcelable;
import android.os.PersistableBundle;
import android.os.RemoteException;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.os.StrictMode;
import android.os.SystemProperties;
import android.os.UserHandle;
@@ -5591,7 +5592,11 @@ public class Activity extends ContextThemeWrapper
return;
}
- mSearchManager = new SearchManager(this, null);
+ try {
+ mSearchManager = new SearchManager(this, null);
+ } catch (ServiceNotFoundException e) {
+ throw new IllegalStateException(e);
+ }
}
@Override
diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java
index 505e081bddb4..da99e8005f38 100644
--- a/core/java/android/app/KeyguardManager.java
+++ b/core/java/android/app/KeyguardManager.java
@@ -27,6 +27,7 @@ import android.os.RemoteException;
import android.os.IBinder;
import android.os.IUserManager;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.os.UserHandle;
import android.os.UserManager;
import android.view.IWindowManager;
@@ -192,12 +193,12 @@ public class KeyguardManager {
}
- KeyguardManager() {
+ KeyguardManager() throws ServiceNotFoundException {
mWM = WindowManagerGlobal.getWindowManagerService();
mTrustManager = ITrustManager.Stub.asInterface(
- ServiceManager.getService(Context.TRUST_SERVICE));
+ ServiceManager.getServiceOrThrow(Context.TRUST_SERVICE));
mUserManager = IUserManager.Stub.asInterface(
- ServiceManager.getService(Context.USER_SERVICE));
+ ServiceManager.getServiceOrThrow(Context.USER_SERVICE));
}
/**
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index ac4abf5c36a4..ee6a3acb6eee 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -31,6 +31,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
@@ -536,7 +537,7 @@ public class SearchManager
/**
* Reference to the shared system search service.
*/
- private static ISearchManager mService;
+ private final ISearchManager mService;
private final Context mContext;
@@ -547,11 +548,11 @@ public class SearchManager
private SearchDialog mSearchDialog;
- /*package*/ SearchManager(Context context, Handler handler) {
+ /*package*/ SearchManager(Context context, Handler handler) throws ServiceNotFoundException {
mContext = context;
mHandler = handler;
mService = ISearchManager.Stub.asInterface(
- ServiceManager.getService(Context.SEARCH_SERVICE));
+ ServiceManager.getServiceOrThrow(Context.SEARCH_SERVICE));
}
/**
@@ -620,7 +621,7 @@ public class SearchManager
return;
}
- UiModeManager uiModeManager = new UiModeManager();
+ final UiModeManager uiModeManager = mContext.getSystemService(UiModeManager.class);
// Don't show search dialog on televisions.
if (uiModeManager.getCurrentModeType() != Configuration.UI_MODE_TYPE_TELEVISION) {
ensureSearchDialog();
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 55744b935f51..e07198efec27 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -16,14 +16,10 @@
package android.app;
-import com.android.internal.app.IAppOpsService;
-import com.android.internal.app.ISoundTriggerService;
-import com.android.internal.appwidget.IAppWidgetService;
-import com.android.internal.os.IDropBoxManagerService;
-
import android.accounts.AccountManager;
import android.accounts.IAccountManager;
import android.app.admin.DevicePolicyManager;
+import android.app.admin.IDevicePolicyManager;
import android.app.job.IJobScheduler;
import android.app.job.JobScheduler;
import android.app.trust.TrustManager;
@@ -36,7 +32,6 @@ import android.content.ClipboardManager;
import android.content.Context;
import android.content.IRestrictionsManager;
import android.content.RestrictionsManager;
-import android.content.pm.ILauncherApps;
import android.content.pm.IShortcutService;
import android.content.pm.LauncherApps;
import android.content.pm.ShortcutManager;
@@ -48,13 +43,15 @@ import android.hardware.SerialManager;
import android.hardware.SystemSensorManager;
import android.hardware.camera2.CameraManager;
import android.hardware.display.DisplayManager;
+import android.hardware.fingerprint.FingerprintManager;
+import android.hardware.fingerprint.IFingerprintService;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlService;
import android.hardware.input.InputManager;
import android.hardware.location.ContextHubManager;
+import android.hardware.radio.RadioManager;
import android.hardware.usb.IUsbManager;
import android.hardware.usb.UsbManager;
-import android.hardware.radio.RadioManager;
import android.location.CountryDetector;
import android.location.ICountryDetector;
import android.location.ILocationManager;
@@ -90,8 +87,10 @@ import android.net.wifi.p2p.IWifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager;
import android.nfc.NfcManager;
import android.os.BatteryManager;
+import android.os.BatteryStats;
import android.os.DropBoxManager;
import android.os.HardwarePropertiesManager;
+import android.os.IBatteryPropertiesRegistrar;
import android.os.IBinder;
import android.os.IHardwarePropertiesManager;
import android.os.IPowerManager;
@@ -101,6 +100,7 @@ import android.os.PowerManager;
import android.os.Process;
import android.os.RecoverySystem;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.os.SystemVibrator;
import android.os.UserHandle;
import android.os.UserManager;
@@ -109,8 +109,6 @@ import android.os.health.SystemHealthManager;
import android.os.storage.StorageManager;
import android.print.IPrintManager;
import android.print.PrintManager;
-import android.hardware.fingerprint.FingerprintManager;
-import android.hardware.fingerprint.IFingerprintService;
import android.service.persistentdata.IPersistentDataBlockService;
import android.service.persistentdata.PersistentDataBlockManager;
import android.telecom.TelecomManager;
@@ -120,7 +118,6 @@ import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
-import com.android.internal.policy.PhoneLayoutInflater;
import android.view.WindowManager;
import android.view.WindowManagerImpl;
import android.view.accessibility.AccessibilityManager;
@@ -128,6 +125,13 @@ import android.view.accessibility.CaptioningManager;
import android.view.inputmethod.InputMethodManager;
import android.view.textservice.TextServicesManager;
+import com.android.internal.app.IAppOpsService;
+import com.android.internal.app.IBatteryStats;
+import com.android.internal.app.ISoundTriggerService;
+import com.android.internal.appwidget.IAppWidgetService;
+import com.android.internal.os.IDropBoxManagerService;
+import com.android.internal.policy.PhoneLayoutInflater;
+
import java.util.HashMap;
/**
@@ -135,7 +139,10 @@ import java.util.HashMap;
* Used by {@link ContextImpl}.
*/
final class SystemServiceRegistry {
- private final static String TAG = "SystemServiceRegistry";
+ private static final String TAG = "SystemServiceRegistry";
+
+ // When set, include stack traces when services aren't published
+ private static final boolean DEBUG_EARLY_CALLERS = true;
// Service registry information.
// This information is never changed once static initialization has completed.
@@ -166,8 +173,8 @@ final class SystemServiceRegistry {
registerService(Context.ACCOUNT_SERVICE, AccountManager.class,
new CachedServiceFetcher<AccountManager>() {
@Override
- public AccountManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.ACCOUNT_SERVICE);
+ public AccountManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.ACCOUNT_SERVICE);
IAccountManager service = IAccountManager.Stub.asInterface(b);
return new AccountManager(ctx, service);
}});
@@ -182,8 +189,8 @@ final class SystemServiceRegistry {
registerService(Context.ALARM_SERVICE, AlarmManager.class,
new CachedServiceFetcher<AlarmManager>() {
@Override
- public AlarmManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.ALARM_SERVICE);
+ public AlarmManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.ALARM_SERVICE);
IAlarmManager service = IAlarmManager.Stub.asInterface(b);
return new AlarmManager(service, ctx);
}});
@@ -212,15 +219,15 @@ final class SystemServiceRegistry {
registerService(Context.HDMI_CONTROL_SERVICE, HdmiControlManager.class,
new StaticServiceFetcher<HdmiControlManager>() {
@Override
- public HdmiControlManager createService() {
- IBinder b = ServiceManager.getService(Context.HDMI_CONTROL_SERVICE);
+ public HdmiControlManager createService() throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.HDMI_CONTROL_SERVICE);
return new HdmiControlManager(IHdmiControlService.Stub.asInterface(b));
}});
registerService(Context.CLIPBOARD_SERVICE, ClipboardManager.class,
new CachedServiceFetcher<ClipboardManager>() {
@Override
- public ClipboardManager createService(ContextImpl ctx) {
+ public ClipboardManager createService(ContextImpl ctx) throws ServiceNotFoundException {
return new ClipboardManager(ctx.getOuterContext(),
ctx.mMainThread.getHandler());
}});
@@ -233,8 +240,8 @@ final class SystemServiceRegistry {
registerService(Context.CONNECTIVITY_SERVICE, ConnectivityManager.class,
new StaticApplicationContextServiceFetcher<ConnectivityManager>() {
@Override
- public ConnectivityManager createService(Context context) {
- IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
+ public ConnectivityManager createService(Context context) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.CONNECTIVITY_SERVICE);
IConnectivityManager service = IConnectivityManager.Stub.asInterface(b);
return new ConnectivityManager(context, service);
}});
@@ -242,16 +249,17 @@ final class SystemServiceRegistry {
registerService(Context.COUNTRY_DETECTOR, CountryDetector.class,
new StaticServiceFetcher<CountryDetector>() {
@Override
- public CountryDetector createService() {
- IBinder b = ServiceManager.getService(Context.COUNTRY_DETECTOR);
+ public CountryDetector createService() throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.COUNTRY_DETECTOR);
return new CountryDetector(ICountryDetector.Stub.asInterface(b));
}});
registerService(Context.DEVICE_POLICY_SERVICE, DevicePolicyManager.class,
new CachedServiceFetcher<DevicePolicyManager>() {
@Override
- public DevicePolicyManager createService(ContextImpl ctx) {
- return DevicePolicyManager.create(ctx);
+ public DevicePolicyManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.DEVICE_POLICY_SERVICE);
+ return new DevicePolicyManager(ctx, IDevicePolicyManager.Stub.asInterface(b));
}});
registerService(Context.DOWNLOAD_SERVICE, DownloadManager.class,
@@ -264,8 +272,12 @@ final class SystemServiceRegistry {
registerService(Context.BATTERY_SERVICE, BatteryManager.class,
new StaticServiceFetcher<BatteryManager>() {
@Override
- public BatteryManager createService() {
- return new BatteryManager();
+ public BatteryManager createService() throws ServiceNotFoundException {
+ IBatteryStats stats = IBatteryStats.Stub.asInterface(
+ ServiceManager.getServiceOrThrow(BatteryStats.SERVICE_NAME));
+ IBatteryPropertiesRegistrar registrar = IBatteryPropertiesRegistrar.Stub
+ .asInterface(ServiceManager.getServiceOrThrow("batteryproperties"));
+ return new BatteryManager(stats, registrar);
}});
registerService(Context.NFC_SERVICE, NfcManager.class,
@@ -278,16 +290,9 @@ final class SystemServiceRegistry {
registerService(Context.DROPBOX_SERVICE, DropBoxManager.class,
new CachedServiceFetcher<DropBoxManager>() {
@Override
- public DropBoxManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.DROPBOX_SERVICE);
+ public DropBoxManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.DROPBOX_SERVICE);
IDropBoxManagerService service = IDropBoxManagerService.Stub.asInterface(b);
- if (service == null) {
- // Don't return a DropBoxManager that will NPE upon use.
- // This also avoids caching a broken DropBoxManager in
- // getDropBoxManager during early boot, before the
- // DROPBOX_SERVICE is registered.
- return null;
- }
return new DropBoxManager(ctx, service);
}});
@@ -322,7 +327,7 @@ final class SystemServiceRegistry {
registerService(Context.KEYGUARD_SERVICE, KeyguardManager.class,
new StaticServiceFetcher<KeyguardManager>() {
@Override
- public KeyguardManager createService() {
+ public KeyguardManager createService() throws ServiceNotFoundException {
return new KeyguardManager();
}});
@@ -336,17 +341,17 @@ final class SystemServiceRegistry {
registerService(Context.LOCATION_SERVICE, LocationManager.class,
new CachedServiceFetcher<LocationManager>() {
@Override
- public LocationManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.LOCATION_SERVICE);
+ public LocationManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.LOCATION_SERVICE);
return new LocationManager(ctx, ILocationManager.Stub.asInterface(b));
}});
registerService(Context.NETWORK_POLICY_SERVICE, NetworkPolicyManager.class,
new CachedServiceFetcher<NetworkPolicyManager>() {
@Override
- public NetworkPolicyManager createService(ContextImpl ctx) {
+ public NetworkPolicyManager createService(ContextImpl ctx) throws ServiceNotFoundException {
return new NetworkPolicyManager(ctx, INetworkPolicyManager.Stub.asInterface(
- ServiceManager.getService(Context.NETWORK_POLICY_SERVICE)));
+ ServiceManager.getServiceOrThrow(Context.NETWORK_POLICY_SERVICE)));
}});
registerService(Context.NOTIFICATION_SERVICE, NotificationManager.class,
@@ -368,8 +373,8 @@ final class SystemServiceRegistry {
registerService(Context.NSD_SERVICE, NsdManager.class,
new CachedServiceFetcher<NsdManager>() {
@Override
- public NsdManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.NSD_SERVICE);
+ public NsdManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.NSD_SERVICE);
INsdManager service = INsdManager.Stub.asInterface(b);
return new NsdManager(ctx.getOuterContext(), service);
}});
@@ -377,8 +382,8 @@ final class SystemServiceRegistry {
registerService(Context.POWER_SERVICE, PowerManager.class,
new CachedServiceFetcher<PowerManager>() {
@Override
- public PowerManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.POWER_SERVICE);
+ public PowerManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.POWER_SERVICE);
IPowerManager service = IPowerManager.Stub.asInterface(b);
if (service == null) {
Log.wtf(TAG, "Failed to get power manager service.");
@@ -390,8 +395,8 @@ final class SystemServiceRegistry {
registerService(Context.RECOVERY_SERVICE, RecoverySystem.class,
new CachedServiceFetcher<RecoverySystem>() {
@Override
- public RecoverySystem createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.RECOVERY_SERVICE);
+ public RecoverySystem createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.RECOVERY_SERVICE);
IRecoverySystem service = IRecoverySystem.Stub.asInterface(b);
if (service == null) {
Log.wtf(TAG, "Failed to get recovery service.");
@@ -402,7 +407,7 @@ final class SystemServiceRegistry {
registerService(Context.SEARCH_SERVICE, SearchManager.class,
new CachedServiceFetcher<SearchManager>() {
@Override
- public SearchManager createService(ContextImpl ctx) {
+ public SearchManager createService(ContextImpl ctx) throws ServiceNotFoundException {
return new SearchManager(ctx.getOuterContext(),
ctx.mMainThread.getHandler());
}});
@@ -425,7 +430,7 @@ final class SystemServiceRegistry {
registerService(Context.STORAGE_SERVICE, StorageManager.class,
new CachedServiceFetcher<StorageManager>() {
@Override
- public StorageManager createService(ContextImpl ctx) {
+ public StorageManager createService(ContextImpl ctx) throws ServiceNotFoundException {
return new StorageManager(ctx, ctx.mMainThread.getHandler().getLooper());
}});
@@ -460,23 +465,23 @@ final class SystemServiceRegistry {
registerService(Context.UI_MODE_SERVICE, UiModeManager.class,
new CachedServiceFetcher<UiModeManager>() {
@Override
- public UiModeManager createService(ContextImpl ctx) {
+ public UiModeManager createService(ContextImpl ctx) throws ServiceNotFoundException {
return new UiModeManager();
}});
registerService(Context.USB_SERVICE, UsbManager.class,
new CachedServiceFetcher<UsbManager>() {
@Override
- public UsbManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.USB_SERVICE);
+ public UsbManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.USB_SERVICE);
return new UsbManager(ctx, IUsbManager.Stub.asInterface(b));
}});
registerService(Context.SERIAL_SERVICE, SerialManager.class,
new CachedServiceFetcher<SerialManager>() {
@Override
- public SerialManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.SERIAL_SERVICE);
+ public SerialManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.SERIAL_SERVICE);
return new SerialManager(ctx, ISerialManager.Stub.asInterface(b));
}});
@@ -498,8 +503,8 @@ final class SystemServiceRegistry {
registerService(Context.WIFI_SERVICE, WifiManager.class,
new CachedServiceFetcher<WifiManager>() {
@Override
- public WifiManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.WIFI_SERVICE);
+ public WifiManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.WIFI_SERVICE);
IWifiManager service = IWifiManager.Stub.asInterface(b);
return new WifiManager(ctx.getOuterContext(), service,
ConnectivityThread.getInstanceLooper());
@@ -508,8 +513,8 @@ final class SystemServiceRegistry {
registerService(Context.WIFI_P2P_SERVICE, WifiP2pManager.class,
new StaticServiceFetcher<WifiP2pManager>() {
@Override
- public WifiP2pManager createService() {
- IBinder b = ServiceManager.getService(Context.WIFI_P2P_SERVICE);
+ public WifiP2pManager createService() throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.WIFI_P2P_SERVICE);
IWifiP2pManager service = IWifiP2pManager.Stub.asInterface(b);
return new WifiP2pManager(service);
}});
@@ -517,8 +522,8 @@ final class SystemServiceRegistry {
registerService(Context.WIFI_NAN_SERVICE, WifiNanManager.class,
new StaticServiceFetcher<WifiNanManager>() {
@Override
- public WifiNanManager createService() {
- IBinder b = ServiceManager.getService(Context.WIFI_NAN_SERVICE);
+ public WifiNanManager createService() throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.WIFI_NAN_SERVICE);
IWifiNanManager service = IWifiNanManager.Stub.asInterface(b);
if (service == null) {
return null;
@@ -529,8 +534,8 @@ final class SystemServiceRegistry {
registerService(Context.WIFI_SCANNING_SERVICE, WifiScanner.class,
new CachedServiceFetcher<WifiScanner>() {
@Override
- public WifiScanner createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.WIFI_SCANNING_SERVICE);
+ public WifiScanner createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.WIFI_SCANNING_SERVICE);
IWifiScanner service = IWifiScanner.Stub.asInterface(b);
return new WifiScanner(ctx.getOuterContext(), service,
ConnectivityThread.getInstanceLooper());
@@ -539,8 +544,8 @@ final class SystemServiceRegistry {
registerService(Context.WIFI_RTT_SERVICE, RttManager.class,
new CachedServiceFetcher<RttManager>() {
@Override
- public RttManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.WIFI_RTT_SERVICE);
+ public RttManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.WIFI_RTT_SERVICE);
IRttManager service = IRttManager.Stub.asInterface(b);
return new RttManager(ctx.getOuterContext(), service,
ConnectivityThread.getInstanceLooper());
@@ -549,8 +554,8 @@ final class SystemServiceRegistry {
registerService(Context.ETHERNET_SERVICE, EthernetManager.class,
new CachedServiceFetcher<EthernetManager>() {
@Override
- public EthernetManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.ETHERNET_SERVICE);
+ public EthernetManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.ETHERNET_SERVICE);
IEthernetManager service = IEthernetManager.Stub.asInterface(b);
return new EthernetManager(ctx.getOuterContext(), service);
}});
@@ -565,8 +570,8 @@ final class SystemServiceRegistry {
registerService(Context.USER_SERVICE, UserManager.class,
new CachedServiceFetcher<UserManager>() {
@Override
- public UserManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.USER_SERVICE);
+ public UserManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.USER_SERVICE);
IUserManager service = IUserManager.Stub.asInterface(b);
return new UserManager(ctx, service);
}});
@@ -574,8 +579,8 @@ final class SystemServiceRegistry {
registerService(Context.APP_OPS_SERVICE, AppOpsManager.class,
new CachedServiceFetcher<AppOpsManager>() {
@Override
- public AppOpsManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.APP_OPS_SERVICE);
+ public AppOpsManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.APP_OPS_SERVICE);
IAppOpsService service = IAppOpsService.Stub.asInterface(b);
return new AppOpsManager(ctx, service);
}});
@@ -597,8 +602,8 @@ final class SystemServiceRegistry {
registerService(Context.RESTRICTIONS_SERVICE, RestrictionsManager.class,
new CachedServiceFetcher<RestrictionsManager>() {
@Override
- public RestrictionsManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.RESTRICTIONS_SERVICE);
+ public RestrictionsManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.RESTRICTIONS_SERVICE);
IRestrictionsManager service = IRestrictionsManager.Stub.asInterface(b);
return new RestrictionsManager(ctx, service);
}});
@@ -606,8 +611,8 @@ final class SystemServiceRegistry {
registerService(Context.PRINT_SERVICE, PrintManager.class,
new CachedServiceFetcher<PrintManager>() {
@Override
- public PrintManager createService(ContextImpl ctx) {
- IBinder iBinder = ServiceManager.getService(Context.PRINT_SERVICE);
+ public PrintManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder iBinder = ServiceManager.getServiceOrThrow(Context.PRINT_SERVICE);
IPrintManager service = IPrintManager.Stub.asInterface(iBinder);
return new PrintManager(ctx.getOuterContext(), service, UserHandle.myUserId(),
UserHandle.getAppId(Process.myUid()));
@@ -616,7 +621,7 @@ final class SystemServiceRegistry {
registerService(Context.CONSUMER_IR_SERVICE, ConsumerIrManager.class,
new CachedServiceFetcher<ConsumerIrManager>() {
@Override
- public ConsumerIrManager createService(ContextImpl ctx) {
+ public ConsumerIrManager createService(ContextImpl ctx) throws ServiceNotFoundException {
return new ConsumerIrManager(ctx);
}});
@@ -630,16 +635,16 @@ final class SystemServiceRegistry {
registerService(Context.TRUST_SERVICE, TrustManager.class,
new StaticServiceFetcher<TrustManager>() {
@Override
- public TrustManager createService() {
- IBinder b = ServiceManager.getService(Context.TRUST_SERVICE);
+ public TrustManager createService() throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.TRUST_SERVICE);
return new TrustManager(b);
}});
registerService(Context.FINGERPRINT_SERVICE, FingerprintManager.class,
new CachedServiceFetcher<FingerprintManager>() {
@Override
- public FingerprintManager createService(ContextImpl ctx) {
- IBinder binder = ServiceManager.getService(Context.FINGERPRINT_SERVICE);
+ public FingerprintManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder binder = ServiceManager.getServiceOrThrow(Context.FINGERPRINT_SERVICE);
IFingerprintService service = IFingerprintService.Stub.asInterface(binder);
return new FingerprintManager(ctx.getOuterContext(), service);
}});
@@ -647,8 +652,8 @@ final class SystemServiceRegistry {
registerService(Context.TV_INPUT_SERVICE, TvInputManager.class,
new StaticServiceFetcher<TvInputManager>() {
@Override
- public TvInputManager createService() {
- IBinder iBinder = ServiceManager.getService(Context.TV_INPUT_SERVICE);
+ public TvInputManager createService() throws ServiceNotFoundException {
+ IBinder iBinder = ServiceManager.getServiceOrThrow(Context.TV_INPUT_SERVICE);
ITvInputManager service = ITvInputManager.Stub.asInterface(iBinder);
return new TvInputManager(service, UserHandle.myUserId());
}});
@@ -656,15 +661,15 @@ final class SystemServiceRegistry {
registerService(Context.NETWORK_SCORE_SERVICE, NetworkScoreManager.class,
new CachedServiceFetcher<NetworkScoreManager>() {
@Override
- public NetworkScoreManager createService(ContextImpl ctx) {
+ public NetworkScoreManager createService(ContextImpl ctx) throws ServiceNotFoundException {
return new NetworkScoreManager(ctx);
}});
registerService(Context.USAGE_STATS_SERVICE, UsageStatsManager.class,
new CachedServiceFetcher<UsageStatsManager>() {
@Override
- public UsageStatsManager createService(ContextImpl ctx) {
- IBinder iBinder = ServiceManager.getService(Context.USAGE_STATS_SERVICE);
+ public UsageStatsManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder iBinder = ServiceManager.getServiceOrThrow(Context.USAGE_STATS_SERVICE);
IUsageStatsManager service = IUsageStatsManager.Stub.asInterface(iBinder);
return new UsageStatsManager(ctx.getOuterContext(), service);
}});
@@ -672,23 +677,23 @@ final class SystemServiceRegistry {
registerService(Context.NETWORK_STATS_SERVICE, NetworkStatsManager.class,
new CachedServiceFetcher<NetworkStatsManager>() {
@Override
- public NetworkStatsManager createService(ContextImpl ctx) {
+ public NetworkStatsManager createService(ContextImpl ctx) throws ServiceNotFoundException {
return new NetworkStatsManager(ctx.getOuterContext());
}});
registerService(Context.JOB_SCHEDULER_SERVICE, JobScheduler.class,
new StaticServiceFetcher<JobScheduler>() {
@Override
- public JobScheduler createService() {
- IBinder b = ServiceManager.getService(Context.JOB_SCHEDULER_SERVICE);
+ public JobScheduler createService() throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.JOB_SCHEDULER_SERVICE);
return new JobSchedulerImpl(IJobScheduler.Stub.asInterface(b));
}});
registerService(Context.PERSISTENT_DATA_BLOCK_SERVICE, PersistentDataBlockManager.class,
new StaticServiceFetcher<PersistentDataBlockManager>() {
@Override
- public PersistentDataBlockManager createService() {
- IBinder b = ServiceManager.getService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
+ public PersistentDataBlockManager createService() throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.PERSISTENT_DATA_BLOCK_SERVICE);
IPersistentDataBlockService persistentDataBlockService =
IPersistentDataBlockService.Stub.asInterface(b);
if (persistentDataBlockService != null) {
@@ -709,19 +714,16 @@ final class SystemServiceRegistry {
registerService(Context.APPWIDGET_SERVICE, AppWidgetManager.class,
new CachedServiceFetcher<AppWidgetManager>() {
@Override
- public AppWidgetManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.APPWIDGET_SERVICE);
+ public AppWidgetManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.APPWIDGET_SERVICE);
return new AppWidgetManager(ctx, IAppWidgetService.Stub.asInterface(b));
}});
registerService(Context.MIDI_SERVICE, MidiManager.class,
new CachedServiceFetcher<MidiManager>() {
@Override
- public MidiManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.MIDI_SERVICE);
- if (b == null) {
- return null;
- }
+ public MidiManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.MIDI_SERVICE);
return new MidiManager(IMidiManager.Stub.asInterface(b));
}});
@@ -735,43 +737,41 @@ final class SystemServiceRegistry {
registerService(Context.HARDWARE_PROPERTIES_SERVICE, HardwarePropertiesManager.class,
new CachedServiceFetcher<HardwarePropertiesManager>() {
@Override
- public HardwarePropertiesManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.HARDWARE_PROPERTIES_SERVICE);
- IHardwarePropertiesManager service =
- IHardwarePropertiesManager.Stub.asInterface(b);
- if (service == null) {
- Log.wtf(TAG, "Failed to get hardwareproperties service.");
- return null;
- }
- return new HardwarePropertiesManager(ctx, service);
+ public HardwarePropertiesManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.HARDWARE_PROPERTIES_SERVICE);
+ IHardwarePropertiesManager service =
+ IHardwarePropertiesManager.Stub.asInterface(b);
+ return new HardwarePropertiesManager(ctx, service);
}});
registerService(Context.SOUND_TRIGGER_SERVICE, SoundTriggerManager.class,
new CachedServiceFetcher<SoundTriggerManager>() {
@Override
- public SoundTriggerManager createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(Context.SOUND_TRIGGER_SERVICE);
+ public SoundTriggerManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.SOUND_TRIGGER_SERVICE);
return new SoundTriggerManager(ctx, ISoundTriggerService.Stub.asInterface(b));
}});
registerService(Context.SHORTCUT_SERVICE, ShortcutManager.class,
new CachedServiceFetcher<ShortcutManager>() {
@Override
- public ShortcutManager createService(ContextImpl ctx) {
- return new ShortcutManager(ctx);
+ public ShortcutManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(Context.SHORTCUT_SERVICE);
+ return new ShortcutManager(ctx, IShortcutService.Stub.asInterface(b));
}});
registerService(Context.SYSTEM_HEALTH_SERVICE, SystemHealthManager.class,
new CachedServiceFetcher<SystemHealthManager>() {
@Override
- public SystemHealthManager createService(ContextImpl ctx) {
- return new SystemHealthManager();
+ public SystemHealthManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+ IBinder b = ServiceManager.getServiceOrThrow(BatteryStats.SERVICE_NAME);
+ return new SystemHealthManager(IBatteryStats.Stub.asInterface(b));
}});
registerService(Context.CONTEXTHUB_SERVICE, ContextHubManager.class,
new CachedServiceFetcher<ContextHubManager>() {
@Override
- public ContextHubManager createService(ContextImpl ctx) {
+ public ContextHubManager createService(ContextImpl ctx) throws ServiceNotFoundException {
return new ContextHubManager(ctx.getOuterContext(),
ctx.mMainThread.getHandler().getLooper());
}});
@@ -836,14 +836,18 @@ final class SystemServiceRegistry {
// Fetch or create the service.
Object service = cache[mCacheIndex];
if (service == null) {
- service = createService(ctx);
- cache[mCacheIndex] = service;
+ try {
+ service = createService(ctx);
+ cache[mCacheIndex] = service;
+ } catch (ServiceNotFoundException e) {
+ Log.w(TAG, e.getMessage(), DEBUG_EARLY_CALLERS ? e : null);
+ }
}
return (T)service;
}
}
- public abstract T createService(ContextImpl ctx);
+ public abstract T createService(ContextImpl ctx) throws ServiceNotFoundException;
}
/**
@@ -857,13 +861,17 @@ final class SystemServiceRegistry {
public final T getService(ContextImpl unused) {
synchronized (StaticServiceFetcher.this) {
if (mCachedInstance == null) {
- mCachedInstance = createService();
+ try {
+ mCachedInstance = createService();
+ } catch (ServiceNotFoundException e) {
+ Log.w(TAG, e.getMessage(), DEBUG_EARLY_CALLERS ? e : null);
+ }
}
return mCachedInstance;
}
}
- public abstract T createService();
+ public abstract T createService() throws ServiceNotFoundException;
}
/**
@@ -886,13 +894,16 @@ final class SystemServiceRegistry {
// it's the application context very early in app initialization. In both these
// cases, the passed-in ContextImpl will not be freed, so it's safe to pass it
// to the service. http://b/27532714 .
- mCachedInstance = createService(appContext != null ? appContext : ctx);
+ try {
+ mCachedInstance = createService(appContext != null ? appContext : ctx);
+ } catch (ServiceNotFoundException e) {
+ Log.w(TAG, e.getMessage(), DEBUG_EARLY_CALLERS ? e : null);
+ }
}
return mCachedInstance;
}
}
- public abstract T createService(Context applicationContext);
+ public abstract T createService(Context applicationContext) throws ServiceNotFoundException;
}
-
}
diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java
index 69e8df87384b..0046b0e4a8bf 100644
--- a/core/java/android/app/UiModeManager.java
+++ b/core/java/android/app/UiModeManager.java
@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.res.Configuration;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.util.Log;
import java.lang.annotation.Retention;
@@ -123,9 +124,9 @@ public class UiModeManager {
private IUiModeManager mService;
- /*package*/ UiModeManager() {
+ /*package*/ UiModeManager() throws ServiceNotFoundException {
mService = IUiModeManager.Stub.asInterface(
- ServiceManager.getService(Context.UI_MODE_SERVICE));
+ ServiceManager.getServiceOrThrow(Context.UI_MODE_SERVICE));
}
/**
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 3a2038fbc9de..6ac7132166f7 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -46,6 +46,7 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.provider.ContactsContract.Directory;
import android.provider.Settings;
import android.security.Credentials;
@@ -99,28 +100,20 @@ public class DevicePolicyManager {
private final IDevicePolicyManager mService;
private final boolean mParentInstance;
- private DevicePolicyManager(Context context, boolean parentInstance) {
- this(context,
- IDevicePolicyManager.Stub.asInterface(
- ServiceManager.getService(Context.DEVICE_POLICY_SERVICE)),
- parentInstance);
+ /** @hide */
+ public DevicePolicyManager(Context context, IDevicePolicyManager service) {
+ this(context, service, false);
}
/** @hide */
@VisibleForTesting
- protected DevicePolicyManager(
- Context context, IDevicePolicyManager service, boolean parentInstance) {
+ protected DevicePolicyManager(Context context, IDevicePolicyManager service,
+ boolean parentInstance) {
mContext = context;
mService = service;
mParentInstance = parentInstance;
}
- /** @hide */
- public static DevicePolicyManager create(Context context) {
- DevicePolicyManager me = new DevicePolicyManager(context, false);
- return me.mService != null ? me : null;
- }
-
/** @hide test will override it. */
@VisibleForTesting
protected int myUserId() {
@@ -6054,7 +6047,7 @@ public class DevicePolicyManager {
if (!mService.isManagedProfile(admin)) {
throw new SecurityException("The current user does not have a parent profile.");
}
- return new DevicePolicyManager(mContext, true);
+ return new DevicePolicyManager(mContext, mService, true);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -6146,7 +6139,7 @@ public class DevicePolicyManager {
throw new SecurityException("The user " + uInfo.id
+ " does not have a parent profile.");
}
- return new DevicePolicyManager(mContext, true);
+ return new DevicePolicyManager(mContext, mService, true);
}
/**
diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java
index 7961a72a12e4..e805fabc7967 100644
--- a/core/java/android/app/usage/NetworkStatsManager.java
+++ b/core/java/android/app/usage/NetworkStatsManager.java
@@ -34,6 +34,7 @@ import android.os.Handler;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.util.Log;
/**
@@ -95,10 +96,10 @@ public class NetworkStatsManager {
/**
* {@hide}
*/
- public NetworkStatsManager(Context context) {
+ public NetworkStatsManager(Context context) throws ServiceNotFoundException {
mContext = context;
mService = INetworkStatsService.Stub.asInterface(
- ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
+ ServiceManager.getServiceOrThrow(Context.NETWORK_STATS_SERVICE));
}
/**
diff --git a/core/java/android/content/ClipboardManager.java b/core/java/android/content/ClipboardManager.java
index 7244227584ee..c28172c6347c 100644
--- a/core/java/android/content/ClipboardManager.java
+++ b/core/java/android/content/ClipboardManager.java
@@ -16,12 +16,11 @@
package android.content;
-import android.content.Context;
+import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
-import android.os.Handler;
-import android.os.IBinder;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import java.util.ArrayList;
@@ -49,10 +48,8 @@ import java.util.ArrayList;
* @see android.content.Context#getSystemService
*/
public class ClipboardManager extends android.text.ClipboardManager {
- private final static Object sStaticLock = new Object();
- private static IClipboard sService;
-
private final Context mContext;
+ private final IClipboard mService;
private final ArrayList<OnPrimaryClipChangedListener> mPrimaryClipChangedListeners
= new ArrayList<OnPrimaryClipChangedListener>();
@@ -93,20 +90,11 @@ public class ClipboardManager extends android.text.ClipboardManager {
void onPrimaryClipChanged();
}
- static private IClipboard getService() {
- synchronized (sStaticLock) {
- if (sService != null) {
- return sService;
- }
- IBinder b = ServiceManager.getService("clipboard");
- sService = IClipboard.Stub.asInterface(b);
- return sService;
- }
- }
-
/** {@hide} */
- public ClipboardManager(Context context, Handler handler) {
+ public ClipboardManager(Context context, Handler handler) throws ServiceNotFoundException {
mContext = context;
+ mService = IClipboard.Stub.asInterface(
+ ServiceManager.getServiceOrThrow(Context.CLIPBOARD_SERVICE));
}
/**
@@ -120,7 +108,7 @@ public class ClipboardManager extends android.text.ClipboardManager {
if (clip != null) {
clip.prepareToLeaveProcess(true);
}
- getService().setPrimaryClip(clip, mContext.getOpPackageName());
+ mService.setPrimaryClip(clip, mContext.getOpPackageName());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -131,7 +119,7 @@ public class ClipboardManager extends android.text.ClipboardManager {
*/
public ClipData getPrimaryClip() {
try {
- return getService().getPrimaryClip(mContext.getOpPackageName());
+ return mService.getPrimaryClip(mContext.getOpPackageName());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -143,7 +131,7 @@ public class ClipboardManager extends android.text.ClipboardManager {
*/
public ClipDescription getPrimaryClipDescription() {
try {
- return getService().getPrimaryClipDescription(mContext.getOpPackageName());
+ return mService.getPrimaryClipDescription(mContext.getOpPackageName());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -154,7 +142,7 @@ public class ClipboardManager extends android.text.ClipboardManager {
*/
public boolean hasPrimaryClip() {
try {
- return getService().hasPrimaryClip(mContext.getOpPackageName());
+ return mService.hasPrimaryClip(mContext.getOpPackageName());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -164,7 +152,7 @@ public class ClipboardManager extends android.text.ClipboardManager {
synchronized (mPrimaryClipChangedListeners) {
if (mPrimaryClipChangedListeners.size() == 0) {
try {
- getService().addPrimaryClipChangedListener(
+ mService.addPrimaryClipChangedListener(
mPrimaryClipChangedServiceListener, mContext.getOpPackageName());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -179,7 +167,7 @@ public class ClipboardManager extends android.text.ClipboardManager {
mPrimaryClipChangedListeners.remove(what);
if (mPrimaryClipChangedListeners.size() == 0) {
try {
- getService().removePrimaryClipChangedListener(
+ mService.removePrimaryClipChangedListener(
mPrimaryClipChangedServiceListener);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -217,7 +205,7 @@ public class ClipboardManager extends android.text.ClipboardManager {
@Deprecated
public boolean hasText() {
try {
- return getService().hasClipboardText(mContext.getOpPackageName());
+ return mService.hasClipboardText(mContext.getOpPackageName());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/core/java/android/hardware/ConsumerIrManager.java b/core/java/android/hardware/ConsumerIrManager.java
index 9fa1c3f73823..b221e1604949 100644
--- a/core/java/android/hardware/ConsumerIrManager.java
+++ b/core/java/android/hardware/ConsumerIrManager.java
@@ -19,6 +19,7 @@ package android.hardware;
import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.util.Log;
/**
@@ -40,10 +41,10 @@ public final class ConsumerIrManager {
/**
* @hide to prevent subclassing from outside of the framework
*/
- public ConsumerIrManager(Context context) {
+ public ConsumerIrManager(Context context) throws ServiceNotFoundException {
mPackageName = context.getPackageName();
mService = IConsumerIrService.Stub.asInterface(
- ServiceManager.getService(Context.CONSUMER_IR_SERVICE));
+ ServiceManager.getServiceOrThrow(Context.CONSUMER_IR_SERVICE));
}
/**
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 803337b016f9..2b0593fd3817 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -33,6 +33,7 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.Vibrator;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.Log;
@@ -225,8 +226,12 @@ public final class InputManager {
public static InputManager getInstance() {
synchronized (InputManager.class) {
if (sInstance == null) {
- IBinder b = ServiceManager.getService(Context.INPUT_SERVICE);
- sInstance = new InputManager(IInputManager.Stub.asInterface(b));
+ try {
+ sInstance = new InputManager(IInputManager.Stub
+ .asInterface(ServiceManager.getServiceOrThrow(Context.INPUT_SERVICE)));
+ } catch (ServiceNotFoundException e) {
+ throw new IllegalStateException(e);
+ }
}
return sInstance;
}
diff --git a/core/java/android/hardware/location/ContextHubManager.java b/core/java/android/hardware/location/ContextHubManager.java
index 3bc15621be3a..2aed53c7deb4 100644
--- a/core/java/android/hardware/location/ContextHubManager.java
+++ b/core/java/android/hardware/location/ContextHubManager.java
@@ -18,10 +18,10 @@ package android.hardware.location;
import android.annotation.SystemApi;
import android.content.Context;
import android.os.Handler;
-import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.util.Log;
/**
@@ -38,7 +38,7 @@ public final class ContextHubManager {
private static final String TAG = "ContextHubManager";
private final Looper mMainLooper;
- private IContextHubService mContextHubService;
+ private final IContextHubService mService;
private Callback mCallback;
private Handler mCallbackHandler;
@@ -92,13 +92,11 @@ public final class ContextHubManager {
* @return array of context hub handles
*/
public int[] getContextHubHandles() {
- int[] retVal = null;
try {
- retVal = getBinder().getContextHubHandles();
+ return mService.getContextHubHandles();
} catch (RemoteException e) {
- Log.w(TAG, "Could not fetch context hub handles : " + e);
+ throw e.rethrowFromSystemServer();
}
- return retVal;
}
/**
@@ -110,14 +108,11 @@ public final class ContextHubManager {
* @see ContextHubInfo
*/
public ContextHubInfo getContextHubInfo(int hubHandle) {
- ContextHubInfo retVal = null;
try {
- retVal = getBinder().getContextHubInfo(hubHandle);
+ return mService.getContextHubInfo(hubHandle);
} catch (RemoteException e) {
- Log.w(TAG, "Could not fetch context hub info :" + e);
+ throw e.rethrowFromSystemServer();
}
-
- return retVal;
}
/**
@@ -132,19 +127,11 @@ public final class ContextHubManager {
* @see NanoApp
*/
public int loadNanoApp(int hubHandle, NanoApp app) {
- int retVal = -1;
-
- if (app == null) {
- return retVal;
- }
-
try {
- retVal = getBinder().loadNanoApp(hubHandle, app);
+ return mService.loadNanoApp(hubHandle, app);
} catch (RemoteException e) {
- Log.w(TAG, "Could not load nanoApp :" + e);
+ throw e.rethrowFromSystemServer();
}
-
- return retVal;
}
/**
@@ -155,15 +142,11 @@ public final class ContextHubManager {
* @return int 0 on success, -1 otherwise
*/
public int unloadNanoApp(int nanoAppHandle) {
- int retVal = -1;
-
try {
- retVal = getBinder().unloadNanoApp(nanoAppHandle);
+ return mService.unloadNanoApp(nanoAppHandle);
} catch (RemoteException e) {
- Log.w(TAG, "Could not fetch unload nanoApp :" + e);
+ throw e.rethrowFromSystemServer();
}
-
- return retVal;
}
/**
@@ -175,15 +158,11 @@ public final class ContextHubManager {
* @see NanoAppInstanceInfo
*/
public NanoAppInstanceInfo getNanoAppInstanceInfo(int nanoAppHandle) {
- NanoAppInstanceInfo retVal = null;
-
try {
- retVal = getBinder().getNanoAppInstanceInfo(nanoAppHandle);
+ return mService.getNanoAppInstanceInfo(nanoAppHandle);
} catch (RemoteException e) {
- Log.w(TAG, "Could not fetch nanoApp info :" + e);
+ throw e.rethrowFromSystemServer();
}
-
- return retVal;
}
/**
@@ -197,13 +176,11 @@ public final class ContextHubManager {
* @return int[] Array of handles to any found nano apps
*/
public int[] findNanoAppOnHub(int hubHandle, NanoAppFilter filter) {
- int[] retVal = null;
try {
- retVal = getBinder().findNanoAppOnHub(hubHandle, filter);
+ return mService.findNanoAppOnHub(hubHandle, filter);
} catch (RemoteException e) {
- Log.w(TAG, "Could not query nanoApp instance :" + e);
+ throw e.rethrowFromSystemServer();
}
- return retVal;
}
/**
@@ -218,19 +195,11 @@ public final class ContextHubManager {
* @return int 0 on success, -1 otherwise
*/
public int sendMessage(int hubHandle, int nanoAppHandle, ContextHubMessage message) {
- int retVal = -1;
-
- if (message == null || message.getData() == null) {
- Log.w(TAG, "null ptr");
- return retVal;
- }
try {
- retVal = getBinder().sendMessage(hubHandle, nanoAppHandle, message);
+ return mService.sendMessage(hubHandle, nanoAppHandle, message);
} catch (RemoteException e) {
- Log.w(TAG, "Could not send message :" + e.toString());
+ throw e.rethrowFromSystemServer();
}
-
- return retVal;
}
/**
@@ -318,7 +287,7 @@ public final class ContextHubManager {
return 0;
}
- private IContextHubCallback.Stub mClientCallback = new IContextHubCallback.Stub() {
+ private final IContextHubCallback.Stub mClientCallback = new IContextHubCallback.Stub() {
@Override
public void onMessageReceipt(final int hubId, final int nanoAppId,
final ContextHubMessage message) {
@@ -346,29 +315,17 @@ public final class ContextHubManager {
}
};
- /** @hide */
- public ContextHubManager(Context context, Looper mainLooper) {
+ /** @throws ServiceNotFoundException
+ * @hide */
+ public ContextHubManager(Context context, Looper mainLooper) throws ServiceNotFoundException {
mMainLooper = mainLooper;
+ mService = IContextHubService.Stub.asInterface(
+ ServiceManager.getServiceOrThrow(ContextHubService.CONTEXTHUB_SERVICE));
- IBinder b = ServiceManager.getService(ContextHubService.CONTEXTHUB_SERVICE);
- if (b != null) {
- mContextHubService = IContextHubService.Stub.asInterface(b);
-
- try {
- getBinder().registerCallback(mClientCallback);
- } catch (RemoteException e) {
- Log.w(TAG, "Could not register callback:" + e);
- }
-
- } else {
- Log.w(TAG, "failed to getService");
- }
- }
-
- private IContextHubService getBinder() throws RemoteException {
- if (mContextHubService == null) {
- throw new RemoteException("Service not connected.");
+ try {
+ mService.registerCallback(mClientCallback);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Could not register callback:" + e);
}
- return mContextHubService;
}
}
diff --git a/core/java/android/hardware/location/ContextHubService.java b/core/java/android/hardware/location/ContextHubService.java
index 062c9580c1e4..893ed3f7c201 100644
--- a/core/java/android/hardware/location/ContextHubService.java
+++ b/core/java/android/hardware/location/ContextHubService.java
@@ -154,6 +154,9 @@ public class ContextHubService extends IContextHubService.Stub {
Log.e(TAG, "Invalid contextHubhandle " + contextHubHandle);
return -1;
}
+ if (app == null) {
+ return -1;
+ }
int[] msgHeader = new int[MSG_LOAD_APP_HEADER_SIZE];
msgHeader[HEADER_FIELD_HUB_HANDLE] = contextHubHandle;
@@ -240,6 +243,11 @@ public class ContextHubService extends IContextHubService.Stub {
throws RemoteException {
checkPermissions();
+ if (msg == null || msg.getData() == null) {
+ Log.w(TAG, "null ptr");
+ return -1;
+ }
+
int[] msgHeader = new int[MSG_HEADER_SIZE];
msgHeader[HEADER_FIELD_HUB_HANDLE] = hubHandle;
msgHeader[HEADER_FIELD_APP_INSTANCE] = nanoAppHandle;
diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java
index 01c160f1bc45..c2286ad8ae13 100644
--- a/core/java/android/net/NetworkScoreManager.java
+++ b/core/java/android/net/NetworkScoreManager.java
@@ -23,9 +23,9 @@ import android.annotation.SystemApi;
import android.content.Context;
import android.content.Intent;
import android.net.NetworkScorerAppManager.NetworkScorerAppData;
-import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.os.UserHandle;
/**
@@ -127,10 +127,10 @@ public class NetworkScoreManager {
private final INetworkScoreService mService;
/** @hide */
- public NetworkScoreManager(Context context) {
+ public NetworkScoreManager(Context context) throws ServiceNotFoundException {
mContext = context;
- IBinder iBinder = ServiceManager.getService(Context.NETWORK_SCORE_SERVICE);
- mService = INetworkScoreService.Stub.asInterface(iBinder);
+ mService = INetworkScoreService.Stub
+ .asInterface(ServiceManager.getServiceOrThrow(Context.NETWORK_SCORE_SERVICE));
}
/**
diff --git a/core/java/android/os/BatteryManager.java b/core/java/android/os/BatteryManager.java
index d39968a09023..252385faf089 100644
--- a/core/java/android/os/BatteryManager.java
+++ b/core/java/android/os/BatteryManager.java
@@ -16,11 +16,6 @@
package android.os;
-import android.content.Context;
-import android.os.BatteryProperty;
-import android.os.IBatteryPropertiesRegistrar;
-import android.os.RemoteException;
-import android.os.ServiceManager;
import com.android.internal.app.IBatteryStats;
/**
@@ -218,6 +213,13 @@ public class BatteryManager {
ServiceManager.getService("batteryproperties"));
}
+ /** {@hide} */
+ public BatteryManager(IBatteryStats batteryStats,
+ IBatteryPropertiesRegistrar batteryPropertiesRegistrar) {
+ mBatteryStats = batteryStats;
+ mBatteryPropertiesRegistrar = batteryPropertiesRegistrar;
+ }
+
/**
* Return true if the battery is currently considered to be charging. This means that
* the device is plugged in and is supplying sufficient power that the battery level is
diff --git a/core/java/android/os/ServiceManager.java b/core/java/android/os/ServiceManager.java
index 2ba4aa433713..640105ce8f98 100644
--- a/core/java/android/os/ServiceManager.java
+++ b/core/java/android/os/ServiceManager.java
@@ -16,10 +16,10 @@
package android.os;
-import com.android.internal.os.BinderInternal;
-
import android.util.Log;
+import com.android.internal.os.BinderInternal;
+
import java.util.HashMap;
import java.util.Map;
@@ -61,6 +61,21 @@ public final class ServiceManager {
}
/**
+ * Returns a reference to a service with the given name, or throws
+ * {@link NullPointerException} if none is found.
+ *
+ * @hide
+ */
+ public static IBinder getServiceOrThrow(String name) throws ServiceNotFoundException {
+ final IBinder binder = getService(name);
+ if (binder != null) {
+ return binder;
+ } else {
+ throw new ServiceNotFoundException(name);
+ }
+ }
+
+ /**
* Place a new @a service called @a name into the service
* manager.
*
@@ -138,4 +153,17 @@ public final class ServiceManager {
}
sCache.putAll(cache);
}
+
+ /**
+ * Exception thrown when no service published for given name. This might be
+ * thrown early during boot before certain services have published
+ * themselves.
+ *
+ * @hide
+ */
+ public static class ServiceNotFoundException extends Exception {
+ public ServiceNotFoundException(String name) {
+ super("No service published for: " + name);
+ }
+ }
}
diff --git a/core/java/android/os/health/SystemHealthManager.java b/core/java/android/os/health/SystemHealthManager.java
index 32e8425cbe07..7c0af2508a93 100644
--- a/core/java/android/os/health/SystemHealthManager.java
+++ b/core/java/android/os/health/SystemHealthManager.java
@@ -21,6 +21,7 @@ import android.os.BatteryStats;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import com.android.internal.app.IBatteryStats;
@@ -47,8 +48,12 @@ public class SystemHealthManager {
* @hide
*/
public SystemHealthManager() {
- mBatteryStats = IBatteryStats.Stub.asInterface(
- ServiceManager.getService(BatteryStats.SERVICE_NAME));
+ this(IBatteryStats.Stub.asInterface(ServiceManager.getService(BatteryStats.SERVICE_NAME)));
+ }
+
+ /** {@hide} */
+ public SystemHealthManager(IBatteryStats batteryStats) {
+ mBatteryStats = batteryStats;
}
/**
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index c5507b9841bc..cee7553750f6 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -35,6 +35,7 @@ import android.os.Message;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings;
@@ -341,7 +342,7 @@ public class StorageManager {
* Constructs a StorageManager object through which an application can
* can communicate with the systems mount service.
*
- * @param tgtLooper The {@link android.os.Looper} which events will be received on.
+ * @param looper The {@link android.os.Looper} which events will be received on.
*
* <p>Applications can get instance of this class by calling
* {@link android.content.Context#getSystemService(java.lang.String)} with an argument
@@ -349,14 +350,11 @@ public class StorageManager {
*
* @hide
*/
- public StorageManager(Context context, Looper looper) {
+ public StorageManager(Context context, Looper looper) throws ServiceNotFoundException {
mContext = context;
mResolver = context.getContentResolver();
mLooper = looper;
- mMountService = IMountService.Stub.asInterface(ServiceManager.getService("mount"));
- if (mMountService == null) {
- throw new IllegalStateException("Failed to find running mount service");
- }
+ mMountService = IMountService.Stub.asInterface(ServiceManager.getServiceOrThrow("mount"));
}
/**
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index c0c8e64aacc8..77e8c0e92b6e 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -41,6 +41,7 @@ import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
import android.os.Trace;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.text.TextUtils;
import android.text.style.SuggestionSpan;
import android.util.Log;
@@ -55,6 +56,7 @@ import android.view.InputEventSender;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewRootImpl;
+import android.view.textservice.TextServicesManager;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -622,8 +624,9 @@ public final class InputMethodManager {
final InputConnection mDummyInputConnection = new BaseInputConnection(this, false);
- InputMethodManager(IInputMethodManager service, Looper looper) {
- mService = service;
+ InputMethodManager(Looper looper) throws ServiceNotFoundException {
+ mService = IInputMethodManager.Stub.asInterface(
+ ServiceManager.getServiceOrThrow(Context.INPUT_METHOD_SERVICE));
mMainLooper = looper;
mH = new H(looper);
mIInputContext = new ControlledInputConnectionWrapper(looper,
@@ -638,9 +641,11 @@ public final class InputMethodManager {
public static InputMethodManager getInstance() {
synchronized (InputMethodManager.class) {
if (sInstance == null) {
- IBinder b = ServiceManager.getService(Context.INPUT_METHOD_SERVICE);
- IInputMethodManager service = IInputMethodManager.Stub.asInterface(b);
- sInstance = new InputMethodManager(service, Looper.getMainLooper());
+ try {
+ sInstance = new InputMethodManager(Looper.getMainLooper());
+ } catch (ServiceNotFoundException e) {
+ throw new IllegalStateException(e);
+ }
}
return sInstance;
}
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java
index 89d879ee6ee2..0f168f392a20 100644
--- a/core/java/android/view/textservice/TextServicesManager.java
+++ b/core/java/android/view/textservice/TextServicesManager.java
@@ -16,16 +16,16 @@
package android.view.textservice;
-import com.android.internal.textservice.ITextServicesManager;
-
import android.content.Context;
import android.os.Bundle;
-import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.ServiceManager.ServiceNotFoundException;
import android.util.Log;
import android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener;
+import com.android.internal.textservice.ITextServicesManager;
+
import java.util.Locale;
/**
@@ -66,13 +66,12 @@ public final class TextServicesManager {
private static final boolean DBG = false;
private static TextServicesManager sInstance;
- private static ITextServicesManager sService;
- private TextServicesManager() {
- if (sService == null) {
- IBinder b = ServiceManager.getService(Context.TEXT_SERVICES_MANAGER_SERVICE);
- sService = ITextServicesManager.Stub.asInterface(b);
- }
+ private final ITextServicesManager mService;
+
+ private TextServicesManager() throws ServiceNotFoundException {
+ mService = ITextServicesManager.Stub.asInterface(
+ ServiceManager.getServiceOrThrow(Context.TEXT_SERVICES_MANAGER_SERVICE));
}
/**
@@ -81,12 +80,15 @@ public final class TextServicesManager {
*/
public static TextServicesManager getInstance() {
synchronized (TextServicesManager.class) {
- if (sInstance != null) {
- return sInstance;
+ if (sInstance == null) {
+ try {
+ sInstance = new TextServicesManager();
+ } catch (ServiceNotFoundException e) {
+ throw new IllegalStateException(e);
+ }
}
- sInstance = new TextServicesManager();
+ return sInstance;
}
- return sInstance;
}
/**
@@ -131,7 +133,7 @@ public final class TextServicesManager {
final SpellCheckerInfo sci;
try {
- sci = sService.getCurrentSpellChecker(null);
+ sci = mService.getCurrentSpellChecker(null);
} catch (RemoteException e) {
return null;
}
@@ -170,13 +172,13 @@ public final class TextServicesManager {
return null;
}
final SpellCheckerSession session = new SpellCheckerSession(
- sci, sService, listener, subtypeInUse);
+ sci, mService, listener, subtypeInUse);
try {
- sService.getSpellCheckerService(sci.getId(), subtypeInUse.getLocale(),
+ mService.getSpellCheckerService(sci.getId(), subtypeInUse.getLocale(),
session.getTextServicesSessionListener(),
session.getSpellCheckerSessionListener(), bundle);
} catch (RemoteException e) {
- return null;
+ throw e.rethrowFromSystemServer();
}
return session;
}
@@ -186,14 +188,13 @@ public final class TextServicesManager {
*/
public SpellCheckerInfo[] getEnabledSpellCheckers() {
try {
- final SpellCheckerInfo[] retval = sService.getEnabledSpellCheckers();
+ final SpellCheckerInfo[] retval = mService.getEnabledSpellCheckers();
if (DBG) {
Log.d(TAG, "getEnabledSpellCheckers: " + (retval != null ? retval.length : "null"));
}
return retval;
} catch (RemoteException e) {
- Log.e(TAG, "Error in getEnabledSpellCheckers: " + e);
- return null;
+ throw e.rethrowFromSystemServer();
}
}
@@ -203,9 +204,9 @@ public final class TextServicesManager {
public SpellCheckerInfo getCurrentSpellChecker() {
try {
// Passing null as a locale for ICS
- return sService.getCurrentSpellChecker(null);
+ return mService.getCurrentSpellChecker(null);
} catch (RemoteException e) {
- return null;
+ throw e.rethrowFromSystemServer();
}
}
@@ -217,9 +218,9 @@ public final class TextServicesManager {
if (sci == null) {
throw new NullPointerException("SpellCheckerInfo is null.");
}
- sService.setCurrentSpellChecker(null, sci.getId());
+ mService.setCurrentSpellChecker(null, sci.getId());
} catch (RemoteException e) {
- Log.e(TAG, "Error in setCurrentSpellChecker: " + e);
+ throw e.rethrowFromSystemServer();
}
}
@@ -229,17 +230,10 @@ public final class TextServicesManager {
public SpellCheckerSubtype getCurrentSpellCheckerSubtype(
boolean allowImplicitlySelectedSubtype) {
try {
- if (sService == null) {
- // TODO: This is a workaround. Needs to investigate why sService could be null
- // here.
- Log.e(TAG, "sService is null.");
- return null;
- }
// Passing null as a locale until we support multiple enabled spell checker subtypes.
- return sService.getCurrentSpellCheckerSubtype(null, allowImplicitlySelectedSubtype);
+ return mService.getCurrentSpellCheckerSubtype(null, allowImplicitlySelectedSubtype);
} catch (RemoteException e) {
- Log.e(TAG, "Error in getCurrentSpellCheckerSubtype: " + e);
- return null;
+ throw e.rethrowFromSystemServer();
}
}
@@ -254,9 +248,9 @@ public final class TextServicesManager {
} else {
hashCode = subtype.hashCode();
}
- sService.setCurrentSpellCheckerSubtype(null, hashCode);
+ mService.setCurrentSpellCheckerSubtype(null, hashCode);
} catch (RemoteException e) {
- Log.e(TAG, "Error in setSpellCheckerSubtype:" + e);
+ throw e.rethrowFromSystemServer();
}
}
@@ -265,9 +259,9 @@ public final class TextServicesManager {
*/
public void setSpellCheckerEnabled(boolean enabled) {
try {
- sService.setSpellCheckerEnabled(enabled);
+ mService.setSpellCheckerEnabled(enabled);
} catch (RemoteException e) {
- Log.e(TAG, "Error in setSpellCheckerEnabled:" + e);
+ throw e.rethrowFromSystemServer();
}
}
@@ -276,10 +270,9 @@ public final class TextServicesManager {
*/
public boolean isSpellCheckerEnabled() {
try {
- return sService.isSpellCheckerEnabled();
+ return mService.isSpellCheckerEnabled();
} catch (RemoteException e) {
- Log.e(TAG, "Error in isSpellCheckerEnabled:" + e);
- return false;
+ throw e.rethrowFromSystemServer();
}
}
}