add battery charging state
This commit is contained in:
parent
55ea10e88f
commit
099cb6c4e4
6 changed files with 86 additions and 33 deletions
|
@ -59,7 +59,7 @@ android {
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "info.nightscout.androidaps"
|
applicationId "info.nightscout.androidaps"
|
||||||
minSdkVersion 21
|
minSdkVersion 23
|
||||||
targetSdkVersion 25
|
targetSdkVersion 25
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
versionCode 1500
|
versionCode 1500
|
||||||
|
|
|
@ -2,14 +2,12 @@ package info.nightscout.androidaps.events;
|
||||||
|
|
||||||
public class EventChargingState {
|
public class EventChargingState {
|
||||||
|
|
||||||
boolean isCharging = false;
|
public boolean isCharging = false;
|
||||||
boolean isPlugged = false;
|
|
||||||
|
|
||||||
public EventChargingState() {}
|
public EventChargingState() {}
|
||||||
|
|
||||||
public EventChargingState(boolean isCharging, boolean isPlugged) {
|
public EventChargingState(boolean isCharging) {
|
||||||
this.isCharging = isCharging;
|
this.isCharging = isCharging;
|
||||||
this.isPlugged = isPlugged;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import android.content.IntentFilter;
|
||||||
import android.content.ServiceConnection;
|
import android.content.ServiceConnection;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
|
import android.os.BatteryManager;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
@ -21,7 +22,6 @@ import org.slf4j.LoggerFactory;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import info.nightscout.androidaps.BuildConfig;
|
|
||||||
import info.nightscout.androidaps.Config;
|
import info.nightscout.androidaps.Config;
|
||||||
import info.nightscout.androidaps.Constants;
|
import info.nightscout.androidaps.Constants;
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
|
@ -37,6 +37,7 @@ import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientN
|
||||||
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientStatus;
|
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientStatus;
|
||||||
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientUpdateGUI;
|
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientUpdateGUI;
|
||||||
import info.nightscout.androidaps.plugins.NSClientInternal.services.NSClientService;
|
import info.nightscout.androidaps.plugins.NSClientInternal.services.NSClientService;
|
||||||
|
import info.nightscout.androidaps.receivers.ChargingStateReceiver;
|
||||||
import info.nightscout.androidaps.receivers.NetworkChangeReceiver;
|
import info.nightscout.androidaps.receivers.NetworkChangeReceiver;
|
||||||
import info.nightscout.utils.SP;
|
import info.nightscout.utils.SP;
|
||||||
import info.nightscout.utils.ToastUtils;
|
import info.nightscout.utils.ToastUtils;
|
||||||
|
@ -60,12 +61,16 @@ public class NSClientPlugin extends PluginBase {
|
||||||
|
|
||||||
public boolean paused = false;
|
public boolean paused = false;
|
||||||
public boolean allowed = true;
|
public boolean allowed = true;
|
||||||
|
public boolean allowedChargingsState = true;
|
||||||
|
public boolean allowedNetworkState = true;
|
||||||
boolean autoscroll = true;
|
boolean autoscroll = true;
|
||||||
|
|
||||||
public String status = "";
|
public String status = "";
|
||||||
|
|
||||||
public NSClientService nsClientService = null;
|
public NSClientService nsClientService = null;
|
||||||
NetworkChangeReceiver networkChangeReceiver = new NetworkChangeReceiver();
|
|
||||||
|
private NetworkChangeReceiver networkChangeReceiver = new NetworkChangeReceiver();
|
||||||
|
private ChargingStateReceiver chargingStateReceiver = new ChargingStateReceiver();
|
||||||
|
|
||||||
private NSClientPlugin() {
|
private NSClientPlugin() {
|
||||||
super(new PluginDescription()
|
super(new PluginDescription()
|
||||||
|
@ -97,6 +102,12 @@ public class NSClientPlugin extends PluginBase {
|
||||||
context.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
|
context.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
|
||||||
super.onStart();
|
super.onStart();
|
||||||
|
|
||||||
|
registerReceivers();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void registerReceivers() {
|
||||||
|
Context context = MainApp.instance().getApplicationContext();
|
||||||
// register NetworkChangeReceiver --> https://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
|
// register NetworkChangeReceiver --> https://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
|
||||||
// Nougat is not providing Connectivity-Action anymore ;-(
|
// Nougat is not providing Connectivity-Action anymore ;-(
|
||||||
context.registerReceiver(networkChangeReceiver,
|
context.registerReceiver(networkChangeReceiver,
|
||||||
|
@ -104,9 +115,19 @@ public class NSClientPlugin extends PluginBase {
|
||||||
context.registerReceiver(networkChangeReceiver,
|
context.registerReceiver(networkChangeReceiver,
|
||||||
new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
|
new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
|
||||||
|
|
||||||
EventNetworkChange event = networkChangeReceiver.grabNetworkStatus(MainApp.instance().getApplicationContext());
|
EventNetworkChange event = networkChangeReceiver.grabNetworkStatus(context);
|
||||||
if (event != null)
|
if (event != null)
|
||||||
MainApp.bus().post(event);
|
MainApp.bus().post(event);
|
||||||
|
|
||||||
|
context.registerReceiver(chargingStateReceiver,
|
||||||
|
new IntentFilter(Intent.ACTION_POWER_CONNECTED));
|
||||||
|
context.registerReceiver(chargingStateReceiver,
|
||||||
|
new IntentFilter(Intent.ACTION_POWER_DISCONNECTED));
|
||||||
|
|
||||||
|
EventChargingState eventChargingState = chargingStateReceiver.grabChargingState(context);
|
||||||
|
if (eventChargingState != null)
|
||||||
|
MainApp.bus().post(eventChargingState);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -115,6 +136,7 @@ public class NSClientPlugin extends PluginBase {
|
||||||
Context context = MainApp.instance().getApplicationContext();
|
Context context = MainApp.instance().getApplicationContext();
|
||||||
context.unbindService(mConnection);
|
context.unbindService(mConnection);
|
||||||
context.unregisterReceiver(networkChangeReceiver);
|
context.unregisterReceiver(networkChangeReceiver);
|
||||||
|
context.unregisterReceiver(chargingStateReceiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ServiceConnection mConnection = new ServiceConnection() {
|
private ServiceConnection mConnection = new ServiceConnection() {
|
||||||
|
@ -141,16 +163,53 @@ public class NSClientPlugin extends PluginBase {
|
||||||
EventNetworkChange event = networkChangeReceiver.grabNetworkStatus(MainApp.instance().getApplicationContext());
|
EventNetworkChange event = networkChangeReceiver.grabNetworkStatus(MainApp.instance().getApplicationContext());
|
||||||
if (event != null)
|
if (event != null)
|
||||||
MainApp.bus().post(event);
|
MainApp.bus().post(event);
|
||||||
|
} else if (ev.isChanged(R.string.key_ns_chargingonly)) {
|
||||||
|
EventChargingState event = chargingStateReceiver.grabChargingState(MainApp.instance().getApplicationContext());
|
||||||
|
if (event != null)
|
||||||
|
MainApp.bus().post(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onStatusEvent(final EventChargingState ev) {
|
public void onStatusEvent(final EventChargingState ev) {
|
||||||
|
boolean newChargingState = calculateStatus(ev);
|
||||||
|
|
||||||
|
if (newChargingState != allowedChargingsState) {
|
||||||
|
allowedChargingsState = newChargingState;
|
||||||
|
processStateChange();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onStatusEvent(final EventNetworkChange ev) {
|
public void onStatusEvent(final EventNetworkChange ev) {
|
||||||
|
boolean newNetworkState = calculateStatus(ev);
|
||||||
|
|
||||||
|
if (newNetworkState != allowedNetworkState) {
|
||||||
|
allowedNetworkState = newNetworkState;
|
||||||
|
processStateChange();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processStateChange() {
|
||||||
|
boolean newAllowedState = allowedChargingsState && allowedNetworkState;
|
||||||
|
if (newAllowedState != allowed) {
|
||||||
|
allowed = newAllowedState;
|
||||||
|
MainApp.bus().post(new EventPreferenceChange(R.string.key_nsclientinternal_paused));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean calculateStatus(final EventChargingState ev) {
|
||||||
|
boolean chargingOnly = SP.getBoolean(R.string.ns_chargingonly, false);
|
||||||
|
|
||||||
|
boolean newAllowedState = true;
|
||||||
|
|
||||||
|
if (!ev.isCharging && chargingOnly) newAllowedState = false;
|
||||||
|
|
||||||
|
return newAllowedState;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean calculateStatus(final EventNetworkChange ev) {
|
||||||
boolean wifiOnly = SP.getBoolean(R.string.key_ns_wifionly, false);
|
boolean wifiOnly = SP.getBoolean(R.string.key_ns_wifionly, false);
|
||||||
String allowedSSIDs = SP.getString(R.string.key_ns_wifi_ssids, "");
|
String allowedSSIDs = SP.getString(R.string.key_ns_wifi_ssids, "");
|
||||||
boolean allowRoaming = SP.getBoolean(R.string.key_ns_allowroaming, true);
|
boolean allowRoaming = SP.getBoolean(R.string.key_ns_allowroaming, true);
|
||||||
|
@ -162,10 +221,7 @@ public class NSClientPlugin extends PluginBase {
|
||||||
newAllowedState = false;
|
newAllowedState = false;
|
||||||
if (!allowRoaming && ev.roaming) newAllowedState = false;
|
if (!allowRoaming && ev.roaming) newAllowedState = false;
|
||||||
|
|
||||||
if (newAllowedState != allowed) {
|
return newAllowedState;
|
||||||
allowed = newAllowedState;
|
|
||||||
MainApp.bus().post(new EventPreferenceChange(R.string.key_nsclientinternal_paused));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
|
|
@ -3,38 +3,30 @@ package info.nightscout.androidaps.receivers;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.ConnectivityManager;
|
|
||||||
import android.net.NetworkInfo;
|
|
||||||
import android.net.wifi.SupplicantState;
|
|
||||||
import android.net.wifi.WifiInfo;
|
|
||||||
import android.net.wifi.WifiManager;
|
|
||||||
import android.os.BatteryManager;
|
import android.os.BatteryManager;
|
||||||
import android.os.PowerManager;
|
|
||||||
import android.support.annotation.Nullable;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.events.EventChargingState;
|
import info.nightscout.androidaps.events.EventChargingState;
|
||||||
import info.nightscout.androidaps.events.EventNetworkChange;
|
|
||||||
|
|
||||||
public class ChargingStateReceiver extends BroadcastReceiver {
|
public class ChargingStateReceiver extends BroadcastReceiver {
|
||||||
private static Logger log = LoggerFactory.getLogger(ChargingStateReceiver.class);
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
EventChargingState event = grabChargingState(context);
|
||||||
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
|
|
||||||
status == BatteryManager.BATTERY_STATUS_FULL;
|
|
||||||
|
|
||||||
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
|
|
||||||
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
|
|
||||||
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
|
|
||||||
|
|
||||||
EventChargingState event = new EventChargingState(isCharging, usbCharge || acCharge);
|
|
||||||
if (event != null)
|
if (event != null)
|
||||||
MainApp.bus().post(event);
|
MainApp.bus().post(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EventChargingState grabChargingState(Context context) {
|
||||||
|
BatteryManager bm = (BatteryManager) context.getSystemService(Context.BATTERY_SERVICE);
|
||||||
|
|
||||||
|
int status = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_STATUS);
|
||||||
|
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING
|
||||||
|
|| status == BatteryManager.BATTERY_STATUS_FULL;
|
||||||
|
|
||||||
|
EventChargingState event = new EventChargingState(isCharging);
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1019,8 +1019,10 @@
|
||||||
<string name="key_ns_wifionly" translatable="false">ns_wifionly</string>
|
<string name="key_ns_wifionly" translatable="false">ns_wifionly</string>
|
||||||
<string name="key_ns_wifi_ssids" translatable="false">ns_wifi_ssids</string>
|
<string name="key_ns_wifi_ssids" translatable="false">ns_wifi_ssids</string>
|
||||||
<string name="key_ns_allowroaming" translatable="false">ns_allowroaming</string>
|
<string name="key_ns_allowroaming" translatable="false">ns_allowroaming</string>
|
||||||
|
<string name="key_ns_chargingonly" translatable="false">ns_chargingonly</string>
|
||||||
<string name="ns_wifionly">Use WiFi connection only</string>
|
<string name="ns_wifionly">Use WiFi connection only</string>
|
||||||
<string name="ns_wifi_ssids">WiFi SSID</string>
|
<string name="ns_wifi_ssids">WiFi SSID</string>
|
||||||
|
<string name="ns_chargingonly">Only if charging</string>
|
||||||
<string name="connectionsettings_title">Connection settings</string>
|
<string name="connectionsettings_title">Connection settings</string>
|
||||||
<string name="ns_wifi_allowedssids">Allowed SSIDs (semicolon separated)</string>
|
<string name="ns_wifi_allowedssids">Allowed SSIDs (semicolon separated)</string>
|
||||||
<string name="ns_allowroaming">Allow connection in roaming</string>
|
<string name="ns_allowroaming">Allow connection in roaming</string>
|
||||||
|
|
|
@ -103,6 +103,11 @@
|
||||||
android:key="@string/key_ns_allowroaming"
|
android:key="@string/key_ns_allowroaming"
|
||||||
android:title="@string/ns_allowroaming" />
|
android:title="@string/ns_allowroaming" />
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="@string/key_ns_chargingonly"
|
||||||
|
android:title="@string/ns_chargingonly" />
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
<PreferenceScreen android:title="@string/advancedsettings_title">
|
<PreferenceScreen android:title="@string/advancedsettings_title">
|
||||||
|
|
Loading…
Reference in a new issue