health: Select correct provider on init
Fixes the following crash on boot when trying to use deadline mode:
E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: android.display
E AndroidRuntime: java.lang.RuntimeException: Failed to boot service org.lineageos.platform.internal.health.HealthInterfaceService: onBootPhase threw an exception during phase 1000
E AndroidRuntime: at com.android.server.SystemServiceManager.startBootPhase(SystemServiceManager.java:321)
E AndroidRuntime: at com.android.server.am.ActivityManagerService.finishBooting(ActivityManagerService.java:5199)
E AndroidRuntime: at com.android.server.am.ActivityManagerService.bootAnimationComplete(ActivityManagerService.java:5330)
E AndroidRuntime: at com.android.server.wm.WindowManagerService.performEnableScreen(WindowManagerService.java:3970)
E AndroidRuntime: at com.android.server.wm.WindowManagerService.-$$Nest$mperformEnableScreen(WindowManagerService.java:0)
E AndroidRuntime: at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:5885)
E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:109)
E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:232)
E AndroidRuntime: at android.os.Looper.loop(Looper.java:317)
E AndroidRuntime: at android.os.HandlerThread.run(HandlerThread.java:85)
E AndroidRuntime: at com.android.server.ServiceThread.run(ServiceThread.java:49)
E AndroidRuntime: Caused by: java.lang.RuntimeException: Unsupported operation
E AndroidRuntime: at org.lineageos.platform.internal.health.ccprovider.ChargingControlProvider.onBatteryChanged(ChargingControlProvider.java:107)
E AndroidRuntime: at org.lineageos.platform.internal.health.ccprovider.ChargingControlProvider.update(ChargingControlProvider.java:40)
E AndroidRuntime: at org.lineageos.platform.internal.health.ChargingControlController.updateChargeControl(ChargingControlController.java:412)
E AndroidRuntime: at org.lineageos.platform.internal.health.ChargingControlController.handleSettingChange(ChargingControlController.java:447)
E AndroidRuntime: at org.lineageos.platform.internal.health.ChargingControlController.onStart(ChargingControlController.java:265)
E AndroidRuntime: at org.lineageos.platform.internal.LineageBaseFeature.start(LineageBaseFeature.java:39)
E AndroidRuntime: at org.lineageos.platform.internal.health.HealthInterfaceService.onBootPhase(HealthInterfaceService.java:86)
E AndroidRuntime: at com.android.server.SystemServiceManager.startBootPhase(SystemServiceManager.java:318)
E AndroidRuntime: ... 10 more
E Zygote : System zygote died with fatal exception
Change-Id: Id177ec9fe814b4cf33d2853e7674463c5fd5b7ca
diff --git a/src/org/omnirom/omnilib/internal/health/ChargingControlController.java b/src/org/omnirom/omnilib/internal/health/ChargingControlController.java
index e5f0735..359ff14 100644
--- a/src/org/omnirom/omnilib/internal/health/ChargingControlController.java
+++ b/src/org/omnirom/omnilib/internal/health/ChargingControlController.java
@@ -107,14 +107,18 @@
mDeadline = new Deadline(mChargingControl, mContext);
mLimit = new Limit(mChargingControl, mContext);
mToggle = new Toggle(mChargingControl, mContext);
- if (mLimit.isSupported()) {
- mCurrentProvider = mLimit;
- } else if (mToggle.isSupported()) {
- mCurrentProvider = mToggle;
- } else if (mDeadline.isSupported()) {
- mCurrentProvider = mDeadline;
- } else {
- Log.wtf(TAG, "No charging control provider is supported");
+
+ mCurrentProvider = getProviderForMode(getMode());
+ if (mCurrentProvider == null) {
+ if (mLimit.isSupported()) {
+ mCurrentProvider = mLimit;
+ } else if (mToggle.isSupported()) {
+ mCurrentProvider = mToggle;
+ } else if (mDeadline.isSupported()) {
+ mCurrentProvider = mDeadline;
+ } else {
+ Log.wtf(TAG, "No charging control provider is supported");
+ }
}
}
@@ -144,18 +148,7 @@
return false;
}
- mCurrentProvider = null;
- if (mode == MODE_LIMIT) {
- if (mLimit.isSupported()) {
- mCurrentProvider = mLimit;
- } else if (mToggle.isSupported()) {
- mCurrentProvider = mToggle;
- }
- } else if (mode == MODE_AUTO || mode == MODE_MANUAL) {
- if (mDeadline.isSupported()) {
- mCurrentProvider = mDeadline;
- }
- }
+ mCurrentProvider = getProviderForMode(mode);
if (mCurrentProvider == null) {
return false;
@@ -165,6 +158,27 @@
return true;
}
+ ChargingControlProvider getProviderForMode(int mode) {
+ if (mode < MODE_NONE || mode > MODE_LIMIT) {
+ return null;
+ }
+
+ if (mode == MODE_LIMIT) {
+ if (mLimit.isSupported()) {
+ return mLimit;
+ }
+ if (mToggle.isSupported()) {
+ return mToggle;
+ }
+ } else if (mode == MODE_AUTO || mode == MODE_MANUAL) {
+ if (mDeadline.isSupported()) {
+ return mDeadline;
+ }
+ }
+
+ return null;
+ }
+
public int getStartTime() {
return Settings.System.getInt(mContentResolver,
OmniSettings.OMNI_CHARGING_CONTROL_START_TIME,