summaryrefslogtreecommitdiff
path: root/core/java/android/os/BatteryManager.java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2016-05-10 12:54:45 -0600
committerJeff Sharkey <jsharkey@android.com>2016-08-11 09:44:30 -0600
commit49ca529a850e60482ddcc8c0762105b4aa10f35f (patch)
treee175485cb36033993c0fd7ef032c0bbb723562bb /core/java/android/os/BatteryManager.java
parentfc00de50011916bfb6a252856cb8637d73f39d94 (diff)
Avoid caching services with missing binders.
When fetching system services early during boot, if the underlying binder interface hasn't been published yet, we end up caching a manager class that is broken for the remainder of the process lifetime, and innocent downstream callers end up using the broken cached manager. Fix this by using an explicit exception to quickly abort manager creation when the underlying binder is missing. The exception is only used to skip the remainder of the manager creation, and it doesn't actually crash the process. Bug: 28634953 Change-Id: I0cb62261e6d6833660704b93a11185aa11a2ac97
Diffstat (limited to 'core/java/android/os/BatteryManager.java')
-rw-r--r--core/java/android/os/BatteryManager.java12
1 files changed, 7 insertions, 5 deletions
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