- fixed NPE in RiuleyLinkStatus History

- added 2 Broadcast Receivers:
    - TimeDateOrTZChangeReceiver, this one in registered with MainApp in MainApp
    - RileyLinkBluetoothReceiver, this one is registered with MainApp from RileyLinkService
This commit is contained in:
Andy Rozman 2019-07-18 18:09:49 +01:00
parent be05ff3510
commit 7de907f3d6
7 changed files with 69 additions and 60 deletions

View file

@ -94,6 +94,7 @@ import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin;
import info.nightscout.androidaps.receivers.DataReceiver;
import info.nightscout.androidaps.receivers.KeepAliveReceiver;
import info.nightscout.androidaps.receivers.NSAlarmReceiver;
import info.nightscout.androidaps.receivers.TimeDateOrTZChangeReceiver;
import info.nightscout.androidaps.services.Intents;
import info.nightscout.androidaps.utils.FabricPrivacy;
import io.fabric.sdk.android.Fabric;
@ -122,6 +123,7 @@ public class MainApp extends Application {
private static DBAccessReceiver dbAccessReciever = new DBAccessReceiver();
private LocalBroadcastManager lbm;
BroadcastReceiver btReceiver;
TimeDateOrTZChangeReceiver timeDateOrTZChangeReceiver;
public static boolean devBranch;
public static boolean engineeringMode;
@ -163,7 +165,7 @@ public class MainApp extends Application {
//trigger here to see the new version on app start after an update
triggerCheckVersion();
setBTReceiver();
//setBTReceiver();
if (pluginsList == null) {
pluginsList = new ArrayList<>();
@ -265,56 +267,12 @@ public class MainApp extends Application {
//register dbaccess
lbm.registerReceiver(dbAccessReciever, new IntentFilter(Intents.ACTION_DATABASE));
}
private void setBTReceiver() {
// RileyLink framework needs to know, when BT was reconnected, so that we can reconnect to RL device,
// also detected if timezone/time/date changed and send notification to any active pump driver.
btReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
PumpInterface activePump = ConfigBuilderPlugin.getPlugin().getActivePump();
if (action != null && activePump != null) {
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
switch (state) {
case BluetoothAdapter.STATE_OFF:
case BluetoothAdapter.STATE_TURNING_OFF:
case BluetoothAdapter.STATE_TURNING_ON:
break;
case BluetoothAdapter.STATE_ON: {
if ("Medtronic".equals(activePump.manufacter())) {
Log.v("MainApp", "Bluetooth on");
RileyLinkUtil.sendBroadcastMessage(RileyLinkConst.Intents.BluetoothReconnected);
}
}
break;
}
} else {
activePump.timeDateOrTimeZoneChanged();
}
}
}
};
// Register for broadcasts on BluetoothAdapter state change
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_DATE_CHANGED);
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
registerReceiver(btReceiver, filter);
this.timeDateOrTZChangeReceiver = new TimeDateOrTZChangeReceiver();
this.timeDateOrTZChangeReceiver.registerBroadcasts(this);
}
private void startKeepAliveService() {
if (keepAliveReceiver == null) {
keepAliveReceiver = new KeepAliveReceiver();
@ -502,5 +460,10 @@ public class MainApp extends Application {
if (btReceiver != null) {
unregisterReceiver(btReceiver);
}
if (timeDateOrTZChangeReceiver!=null) {
unregisterReceiver(timeDateOrTZChangeReceiver);
}
}
}

View file

@ -59,8 +59,10 @@ public class RileyLinkStatusHistory extends Fragment implements RefreshableInter
@Override
public void refreshData() {
if (RileyLinkUtil.getRileyLinkHistory()!=null) {
recyclerViewAdapter.addItemsAndClean(RileyLinkUtil.getRileyLinkHistory());
}
}
public static class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.HistoryViewHolder> {

View file

@ -1,20 +1,22 @@
package info.nightscout.androidaps.receivers;
package info.nightscout.androidaps.plugins.pump.common.hw.rileylink.service;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkConst;
import info.nightscout.androidaps.plugins.pump.common.hw.rileylink.RileyLinkUtil;
public class BluetoothStateReceiver extends BroadcastReceiver {
public class RileyLinkBluetoothStateReceiver extends BroadcastReceiver {
private static Logger LOG = LoggerFactory.getLogger(L.PUMP);
@ -24,8 +26,6 @@ public class BluetoothStateReceiver extends BroadcastReceiver {
PumpInterface activePump = ConfigBuilderPlugin.getPlugin().getActivePump();
LOG.debug("BluetoothStateReceiver");
if (action != null && activePump != null) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
@ -36,15 +36,23 @@ public class BluetoothStateReceiver extends BroadcastReceiver {
break;
case BluetoothAdapter.STATE_ON: {
if ("Medtronic".equals(activePump.manufacter())) {
LOG.debug("BluetoothStateReceiver: Bluetooth back on. Sending broadcast to RileyLink Framework");
LOG.debug("RileyLinkBluetoothStateReceiver: Bluetooth back on. Sending broadcast to RileyLink Framework");
RileyLinkUtil.sendBroadcastMessage(RileyLinkConst.Intents.BluetoothReconnected);
}
}
break;
}
}
}
public void unregisterBroadcasts() {
MainApp.instance().unregisterReceiver(this);
}
public void registerBroadcasts() {
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
MainApp.instance().registerReceiver(this, filter);
}
}

View file

@ -254,4 +254,7 @@ public class RileyLinkBroadcastReceiver extends BroadcastReceiver {
return (L.isEnabled(L.PUMPCOMM));
}
public void unregisterBroadcasts() {
LocalBroadcastManager.getInstance(context).unregisterReceiver(this);
}
}

View file

@ -41,6 +41,7 @@ public abstract class RileyLinkService extends Service {
protected Context context;
protected RileyLinkBroadcastReceiver mBroadcastReceiver;
protected RileyLinkServiceData rileyLinkServiceData;
protected RileyLinkBluetoothStateReceiver bluetoothStateReceiver;
public RileyLinkService(Context context) {
super();
@ -87,6 +88,15 @@ public abstract class RileyLinkService extends Service {
rileyLinkBLE.disconnect(); // dispose of Gatt (disconnect and close)
rileyLinkBLE = null;
}
if (mBroadcastReceiver!=null) {
mBroadcastReceiver.unregisterBroadcasts();
}
if (bluetoothStateReceiver!=null) {
bluetoothStateReceiver.unregisterBroadcasts();
}
}
@ -98,6 +108,10 @@ public abstract class RileyLinkService extends Service {
mBroadcastReceiver = new RileyLinkBroadcastReceiver(this, this.context);
mBroadcastReceiver.registerBroadcasts();
bluetoothStateReceiver = new RileyLinkBluetoothStateReceiver();
bluetoothStateReceiver.registerBroadcasts();
//LOG.debug("onCreate(): It's ALIVE!");
}

View file

@ -40,14 +40,20 @@ public class InitializePumpManagerTask extends ServiceTask {
@Override
public void run() {
double lastGoodFrequency = SP.getDouble(RileyLinkConst.Prefs.LastGoodDeviceFrequency, 0.0d);
double lastGoodFrequency = 0.0d;
if (RileyLinkUtil.getRileyLinkServiceData().lastGoodFrequency==null) {
lastGoodFrequency = SP.getDouble(RileyLinkConst.Prefs.LastGoodDeviceFrequency, 0.0d);
lastGoodFrequency = Math.round(lastGoodFrequency * 1000d) / 1000d;
RileyLinkUtil.getRileyLinkServiceData().lastGoodFrequency = lastGoodFrequency;
if (RileyLinkUtil.getRileyLinkTargetFrequency() == null) {
String pumpFrequency = SP.getString(MedtronicConst.Prefs.PumpFrequency, null);
// if (RileyLinkUtil.getRileyLinkTargetFrequency() == null) {
// String pumpFrequency = SP.getString(MedtronicConst.Prefs.PumpFrequency, null);
// }
} else {
lastGoodFrequency = RileyLinkUtil.getRileyLinkServiceData().lastGoodFrequency;
}
if ((lastGoodFrequency > 0.0d)

View file

@ -1,12 +1,15 @@
package info.nightscout.androidaps.receivers;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
@ -29,4 +32,14 @@ public class TimeDateOrTZChangeReceiver extends BroadcastReceiver {
}
}
public void registerBroadcasts(MainApp mainApp) {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_DATE_CHANGED);
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
mainApp.registerReceiver(this, filter);
}
}