diff --git a/src/main/java/org/havenapp/main/sensors/PowerConnectionReceiver.java b/src/main/java/org/havenapp/main/sensors/PowerConnectionReceiver.java index fb584bc4..6d474fa8 100644 --- a/src/main/java/org/havenapp/main/sensors/PowerConnectionReceiver.java +++ b/src/main/java/org/havenapp/main/sensors/PowerConnectionReceiver.java @@ -3,8 +3,12 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; +import android.os.BatteryManager; +import android.os.Build; import org.havenapp.main.R; +import org.havenapp.main.Utils; import org.havenapp.main.model.EventTrigger; import org.havenapp.main.service.MonitorService; @@ -26,14 +30,11 @@ public void onReceive(Context context, Intent intent) { // explicitly check the intent action // avoids lint issue UnsafeProtectedBroadcastReceiver - boolean isCharging; if(intent.getAction() == null) return; switch(intent.getAction()){ case Intent.ACTION_POWER_CONNECTED: - isCharging = true; break; case Intent.ACTION_POWER_DISCONNECTED: - isCharging = false; break; default: return; @@ -41,7 +42,35 @@ public void onReceive(Context context, Intent intent) { if (MonitorService.getInstance() != null && MonitorService.getInstance().isRunning()) { - MonitorService.getInstance().alert(EventTrigger.POWER, context.getString(R.string.status_charging) + isCharging ); + MonitorService.getInstance().alert(EventTrigger.POWER, + Utils.getBatteryPercentage(context) + "%" + " \n" + + context.getString(R.string.power_source_status) + " " + + getBatteryStatus(context)); } } + + //Ref: https://developer.android.com/training/monitoring-device-state/battery-monitoring.html + + private String getBatteryStatus(Context context) { + IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); + Intent batteryStatus = context.registerReceiver(null, ifilter); + String battStatus; + int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); + boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; + boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; + boolean wirelessCharge = false; + + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) + wirelessCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_WIRELESS; + + if (usbCharge) + battStatus = context.getString(R.string.power_source_status_usb); + else if (acCharge) + battStatus = context.getString(R.string.power_source_status_ac); + else if (wirelessCharge) + battStatus = context.getString(R.string.power_source_status_wireless); + else battStatus = context.getString(R.string.power_disconnected); + + return battStatus; + } } diff --git a/src/main/java/org/havenapp/main/service/MonitorService.java b/src/main/java/org/havenapp/main/service/MonitorService.java index 8f08317c..3aadcb74 100644 --- a/src/main/java/org/havenapp/main/service/MonitorService.java +++ b/src/main/java/org/havenapp/main/service/MonitorService.java @@ -14,6 +14,7 @@ import android.app.PendingIntent; import android.app.Service; import android.content.Intent; +import android.content.IntentFilter; import android.graphics.Color; import android.net.Uri; import android.os.Build; @@ -42,6 +43,7 @@ import org.havenapp.main.sensors.BarometerMonitor; import org.havenapp.main.sensors.BumpMonitor; import org.havenapp.main.sensors.MicrophoneMonitor; +import org.havenapp.main.sensors.PowerConnectionReceiver; import java.util.ArrayList; import java.util.Date; @@ -79,6 +81,8 @@ public class MonitorService extends Service { private BarometerMonitor mBaroMonitor = null; private AmbientLightMonitor mLightMonitor = null; + private PowerConnectionReceiver mPowerReceiver = null; + private boolean mIsMonitoringActive = false; /** @@ -260,7 +264,13 @@ private void startSensors () if (!mPrefs.getMicrophoneSensitivity().equals(PreferenceManager.OFF)) mMicMonitor = new MicrophoneMonitor(this); + mPowerReceiver = new PowerConnectionReceiver(); + // register our power status receivers + IntentFilter powerConnectedFilter = new IntentFilter(Intent.ACTION_POWER_CONNECTED); + registerReceiver(mPowerReceiver, powerConnectedFilter); + IntentFilter powerDisconnectedFilter = new IntentFilter(Intent.ACTION_POWER_DISCONNECTED); + registerReceiver(mPowerReceiver, powerDisconnectedFilter); } private void stopSensors () @@ -292,6 +302,8 @@ private void stopSensors () sender.stopHeartbeatTimer(); } } + + unregisterReceiver(mPowerReceiver); } /** diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 45483516..838cb6d9 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -69,7 +69,11 @@ Deactivate ACTIVE - Charging: + USB Charging + Wireless Charging + AC Charging + STATE: + Disconnected You will receive a text when the app hears or sees something Know immediately when Haven detects something Phone number saved! @@ -78,7 +82,8 @@ LIGHT PRESSURE POWER - Share event… + BATTERY + Share event... This is a test message from Haven Send Test Message Verify @@ -97,7 +102,7 @@ Motion (Accelerometer) Motion (Camera) Microphone - USB Power + Power Bump (Accelerometer) Motion (Video) Heartbeat