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