33import android .content .BroadcastReceiver ;
44import android .content .Context ;
55import android .content .Intent ;
6+ import android .content .IntentFilter ;
7+ import android .os .BatteryManager ;
8+ import android .os .Build ;
69
710import org .havenapp .main .R ;
11+ import org .havenapp .main .Utils ;
812import org .havenapp .main .model .EventTrigger ;
913import org .havenapp .main .service .MonitorService ;
1014
@@ -26,22 +30,47 @@ public void onReceive(Context context, Intent intent) {
2630
2731 // explicitly check the intent action
2832 // avoids lint issue UnsafeProtectedBroadcastReceiver
29- boolean isCharging ;
3033 if (intent .getAction () == null ) return ;
3134 switch (intent .getAction ()){
3235 case Intent .ACTION_POWER_CONNECTED :
33- isCharging = true ;
3436 break ;
3537 case Intent .ACTION_POWER_DISCONNECTED :
36- isCharging = false ;
3738 break ;
3839 default :
3940 return ;
4041 }
4142
4243 if (MonitorService .getInstance () != null
4344 && MonitorService .getInstance ().isRunning ()) {
44- MonitorService .getInstance ().alert (EventTrigger .POWER , context .getString (R .string .status_charging ) + isCharging );
45+ MonitorService .getInstance ().alert (EventTrigger .POWER ,
46+ Utils .getBatteryPercentage (context ) + "%" + " \n " +
47+ context .getString (R .string .power_source_status ) + " " +
48+ getBatteryStatus (context ));
4549 }
4650 }
51+
52+ //Ref: https://developer.android.com/training/monitoring-device-state/battery-monitoring.html
53+
54+ private String getBatteryStatus (Context context ) {
55+ IntentFilter ifilter = new IntentFilter (Intent .ACTION_BATTERY_CHANGED );
56+ Intent batteryStatus = context .registerReceiver (null , ifilter );
57+ String battStatus ;
58+ int chargePlug = batteryStatus .getIntExtra (BatteryManager .EXTRA_PLUGGED , -1 );
59+ boolean usbCharge = chargePlug == BatteryManager .BATTERY_PLUGGED_USB ;
60+ boolean acCharge = chargePlug == BatteryManager .BATTERY_PLUGGED_AC ;
61+ boolean wirelessCharge = false ;
62+
63+ if (android .os .Build .VERSION .SDK_INT >= Build .VERSION_CODES .JELLY_BEAN_MR1 )
64+ wirelessCharge = chargePlug == BatteryManager .BATTERY_PLUGGED_WIRELESS ;
65+
66+ if (usbCharge )
67+ battStatus = context .getString (R .string .power_source_status_usb );
68+ else if (acCharge )
69+ battStatus = context .getString (R .string .power_source_status_ac );
70+ else if (wirelessCharge )
71+ battStatus = context .getString (R .string .power_source_status_wireless );
72+ else battStatus = context .getString (R .string .power_disconnected );
73+
74+ return battStatus ;
75+ }
4776}
0 commit comments