ChargingControl: Handle cancel toggle correctly if bypass is not supported

Change-Id: Ib7e208bba554b76a067d70280785290d5a0ba08d
diff --git a/src/org/omnirom/omnilib/internal/health/ChargingControlController.java b/src/org/omnirom/omnilib/internal/health/ChargingControlController.java
index da65199..3738be8 100644
--- a/src/org/omnirom/omnilib/internal/health/ChargingControlController.java
+++ b/src/org/omnirom/omnilib/internal/health/ChargingControlController.java
@@ -758,6 +758,22 @@
         private void handleNotificationIntent(Intent intent) {
             if (intent.getAction().equals(ACTION_CHARGING_CONTROL_CANCEL_ONCE)) {
                 mIsControlCancelledOnce = true;
+
+                if (!mIsChargingBypassSupported) {
+                    IntentFilter disconnectFilter = new IntentFilter(
+                            Intent.ACTION_POWER_DISCONNECTED);
+
+                    // Register a one-time receiver that resets internal state on power
+                    // disconnection
+                    mContext.registerReceiver(new BroadcastReceiver() {
+                        @Override
+                        public void onReceive(Context context, Intent intent) {
+                            Log.i(TAG, "Power disconnected, reset internal states");
+                            resetInternalState();
+                            mContext.unregisterReceiver(this);
+                        }
+                    }, disconnectFilter);
+                }
                 updateChargeControl();
                 cancelChargingControlNotification();
             }