From 6881d5f44ea2eef4265f78e563c285930a54c233 Mon Sep 17 00:00:00 2001 From: Oliver Scott Date: Wed, 4 Dec 2024 00:22:07 +0530 Subject: [PATCH] ChargingControl: Prevent crash against very frequent power toggle Log: 12-04 00:04:42.661 1499 1499 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main 12-04 00:04:42.661 1499 1499 E AndroidRuntime: java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.ACTION_POWER_DISCONNECTED flg=0x4000010 (has extras) } in org.lineageos.platform.internal.health.ChargingControlController$2@7432f8e 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1822) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.$r8$lambda$mcNAAl1SQ4MyJPyDg8TJ2x2h0Rk(Unknown Source:0) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:959) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:100) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:232) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at android.os.Looper.loop(Looper.java:317) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at com.android.server.SystemServer.run(SystemServer.java:985) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at com.android.server.SystemServer.main(SystemServer.java:669) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:583) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:864) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: Caused by: java.lang.IllegalArgumentException: Receiver not registered: org.lineageos.platform.internal.health.ChargingControlController$LineageHealthBatteryBroadcastReceiver@7c6b69a 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:1674) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1901) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at org.lineageos.platform.internal.health.ChargingControlController.onPowerDisconnected(ChargingControlController.java:325) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at org.lineageos.platform.internal.health.ChargingControlController.onPowerStatus(ChargingControlController.java:336) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at org.lineageos.platform.internal.health.ChargingControlController.-$$Nest$monPowerStatus(Unknown Source:0) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at org.lineageos.platform.internal.health.ChargingControlController$2.onReceive(ChargingControlController.java:290) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1814) 12-04 00:04:42.661 1499 1499 E AndroidRuntime: ... 11 more Change-Id: Ic2c1df60881ea06bd2cd3f6b68ea3ff7c1273153 --- .../platform/internal/health/ChargingControlController.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lineage/lib/main/java/org/lineageos/platform/internal/health/ChargingControlController.java b/lineage/lib/main/java/org/lineageos/platform/internal/health/ChargingControlController.java index 5a07ac9b..fc10ec8d 100644 --- a/lineage/lib/main/java/org/lineageos/platform/internal/health/ChargingControlController.java +++ b/lineage/lib/main/java/org/lineageos/platform/internal/health/ChargingControlController.java @@ -288,6 +288,8 @@ public class ChargingControlController extends LineageHealthFeature { private void onPowerConnected() { if (mBattReceiver == null) { mBattReceiver = new LineageHealthBatteryBroadcastReceiver(); + } else { + mContext.unregisterReceiver(mBattReceiver); } IntentFilter battFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); mContext.registerReceiver(mBattReceiver, battFilter); @@ -296,6 +298,7 @@ public class ChargingControlController extends LineageHealthFeature { private void onPowerDisconnected() { if (mBattReceiver != null) { mContext.unregisterReceiver(mBattReceiver); + mBattReceiver = null; } // On disconnected, reset internal state