Keeping a water damaged Moto 360 limping along

I still use my Moto 360 (the first and best version because of the lugless design). It’s great for never missing notifications when my phone isn’t right next to me, setting reminders and controlling music. I keep my phone on silent so sometimes its easy to miss texts and calls. A while ago I took it swimming with me and it started acting strangely. It’s rating is IP67 (dust tight and water-resistant for up to thirty minutes in 1 meter of water) but it started to behave as if it was charging all the time. This means the screen was on permanently no matter what settings were used (cinema mode, raise to wake and ambient mode). This drained the battery really quickly so the watch became useless. After trying all the usual tricks like putting it in rice, in a cupboard with a dehumidifier and putting it in rice in a cupboard with a dehumidifier it still thought it was always charging. After searching for fixes I found that because it has Android 6.0 it’s possible to send an adb command to it that simulates unplugging the charger:

adb shell dumpsys battery unplug

This command is for testing things like doze mode whilst still being attached to a computer fro debugging. This finally made the Moto 360 turn its screen off, preserving the battery and making it viable again. Unfortunately there are some drawbacks:

  1. It doesn’t obey the raise to wake setting. The screen has to be touched before it turns on
  2. The battery level is not reported correctly in the pull down menu
  3. The little lightning charging indicator is still permanently displayed

To get around drawback number 2 I made a simple watch face that uses the battery level API in Android to show the correct battery level. The source code is in github.