Browse Source

feat(battery): add support for Android via Termux (#9752)

Avneet Singh 3 years ago
parent
commit
f26a1ecdf0
2 changed files with 56 additions and 6 deletions
  1. 13 6
      plugins/battery/README.md
  2. 43 0
      plugins/battery/battery.plugin.zsh

+ 13 - 6
plugins/battery/README.md

@@ -8,15 +8,22 @@ To use, add `battery` to the list of plugins in your `.zshrc` file:
 
 Then, add the `battery_pct_prompt` function to your custom theme. For example:
 
-```
+```zsh
 RPROMPT='$(battery_pct_prompt) ...'
 ```
 
 ## Requirements
 
-On Linux, you must have the `acpi` tool installed on your operating system.
+- On Linux, you must have the `acpi` or `acpitool` commands installed on your operating system.
+  On Debian/Ubuntu, you can do that with `sudo apt install acpi` or `sudo apt install acpitool`.
 
-Here's an example of how to install with apt:
-```
-sudo apt-get install acpi
-```
+- On Android (via [Termux](https://play.google.com/store/apps/details?id=com.termux)), you must have:
+
+  1. The `Termux:API` addon app installed:
+     [Google Play](https://play.google.com/store/apps/details?id=com.termux.api) | [F-Droid](https://f-droid.org/packages/com.termux.api/)
+
+  2. The `termux-api` package installed within termux:
+
+     ```sh
+     pkg install termux-api
+     ```

+ 43 - 0
plugins/battery/battery.plugin.zsh

@@ -10,6 +10,9 @@
 # Author: J (927589452)                   #
 # Modified to add support for FreeBSD     #
 ###########################################
+# Author: Avneet Singh (kalsi-avneet)     #
+# Modified to add support for Android     #
+###########################################
 
 if [[ "$OSTYPE" = darwin* ]]; then
   function battery_is_charging() {
@@ -160,6 +163,46 @@ elif [[ "$OSTYPE" = linux*  ]]; then
       echo "%{$fg[$color]%}${battery_pct}%%%{$reset_color%}"
     fi
   }
+elif [[ "$OSTYPE" = linux-android ]] && (( ${+commands[termux-battery-status]} )); then
+  function battery_is_charging() {
+    termux-battery-status 2>/dev/null | command awk '/status/ { exit ($0 ~ /DISCHARGING/) }'
+  }
+  function battery_pct() {
+    # Sample output:
+    # {
+    #   "health": "GOOD",
+    #   "percentage": 93,
+    #   "plugged": "UNPLUGGED",
+    #   "status": "DISCHARGING",
+    #   "temperature": 29.0,
+    #   "current": 361816
+    # }
+    termux-battery-status 2>/dev/null | command awk '/percentage/ { gsub(/[,]/,""); print $2}'
+  }
+  function battery_pct_remaining() {
+    if ! battery_is_charging; then
+      battery_pct
+    else
+      echo "External Power"
+    fi
+  }
+  function battery_time_remaining() { } # Not available on android
+  function battery_pct_prompt() {
+    local battery_pct color
+    battery_pct=$(battery_pct_remaining)
+    if battery_is_charging; then
+      echo "∞"
+    else
+      if [[ $battery_pct -gt 50 ]]; then
+        color='green'
+      elif [[ $battery_pct -gt 20 ]]; then
+        color='yellow'
+      else
+        color='red'
+      fi
+      echo "%{$fg[$color]%}${battery_pct}%%%{$reset_color%}"
+    fi
+  }
 else
   # Empty functions so we don't cause errors in prompts
   function battery_is_charging { false }