aboutsummaryrefslogtreecommitdiffstats
path: root/java/org/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'java/org/gnu')
-rw-r--r--java/org/gnu/emacs/EmacsService.java57
1 files changed, 56 insertions, 1 deletions
diff --git a/java/org/gnu/emacs/EmacsService.java b/java/org/gnu/emacs/EmacsService.java
index c9701ff2990..48c7c743014 100644
--- a/java/org/gnu/emacs/EmacsService.java
+++ b/java/org/gnu/emacs/EmacsService.java
@@ -54,9 +54,9 @@ import android.content.res.AssetManager;
54import android.database.Cursor; 54import android.database.Cursor;
55import android.database.MatrixCursor; 55import android.database.MatrixCursor;
56 56
57
58import android.net.Uri; 57import android.net.Uri;
59 58
59import android.os.BatteryManager;
60import android.os.Build; 60import android.os.Build;
61import android.os.Looper; 61import android.os.Looper;
62import android.os.IBinder; 62import android.os.IBinder;
@@ -762,4 +762,59 @@ public class EmacsService extends Service
762 return false; 762 return false;
763 } 763 }
764 } 764 }
765
766 /* Return the status of the battery. See struct
767 android_battery_status for the order of the elements
768 returned.
769
770 Value may be null upon failure. */
771
772 public long[]
773 queryBattery ()
774 {
775 Object tem;
776 BatteryManager manager;
777 long capacity, chargeCounter, currentAvg, currentNow;
778 long status, remaining;
779 int prop;
780
781 /* Android 4.4 or earlier require applications to listen to
782 changes to the battery instead of querying for its status. */
783
784 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
785 return null;
786
787 tem = getSystemService (Context.BATTERY_SERVICE);
788 manager = (BatteryManager) tem;
789 remaining = -1;
790
791 prop = BatteryManager.BATTERY_PROPERTY_CAPACITY;
792 capacity = manager.getLongProperty (prop);
793 prop = BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER;
794 chargeCounter = manager.getLongProperty (prop);
795 prop = BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE;
796 currentAvg = manager.getLongProperty (prop);
797 prop = BatteryManager.BATTERY_PROPERTY_CURRENT_NOW;
798 currentNow = manager.getLongProperty (prop);
799
800 /* Return the battery status. N.B. that Android 7.1 and earlier
801 only return ``charging'' or ``discharging''. */
802
803 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
804 status = manager.getIntProperty (BatteryManager.BATTERY_PROPERTY_STATUS);
805 else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
806 status = (manager.isCharging ()
807 ? BatteryManager.BATTERY_STATUS_CHARGING
808 : BatteryManager.BATTERY_STATUS_DISCHARGING);
809 else
810 status = (currentNow > 0
811 ? BatteryManager.BATTERY_STATUS_CHARGING
812 : BatteryManager.BATTERY_STATUS_DISCHARGING);
813
814 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
815 remaining = manager.computeChargeTimeRemaining ();
816
817 return new long[] { capacity, chargeCounter, currentAvg,
818 currentNow, remaining, status, };
819 }
765}; 820};