Bolusing dialog

This commit is contained in:
Milos Kozak 2016-08-04 09:17:26 +02:00
parent 3e5eb85b88
commit a7d3dca752
23 changed files with 344 additions and 82 deletions

View file

@ -37,7 +37,7 @@
<ConfirmationsSetting value="0" id="Add" /> <ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" /> <ConfirmationsSetting value="0" id="Remove" />
</component> </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">

View file

@ -46,10 +46,10 @@ android {
buildConfigField "boolean", "CLOSEDLOOP", "false" buildConfigField "boolean", "CLOSEDLOOP", "false"
} }
full { full {
buildConfigField "boolean", "APS", "true" buildConfigField "boolean", "APS", "true"
buildConfigField "boolean", "PUMPDRIVERS", "true" buildConfigField "boolean", "PUMPDRIVERS", "true"
buildConfigField "boolean", "OBJECTIVES", "true" buildConfigField "boolean", "OBJECTIVES", "true"
buildConfigField "boolean", "CLOSEDLOOP", "true" buildConfigField "boolean", "CLOSEDLOOP", "true"
} }
full_noobjectives { full_noobjectives {
buildConfigField "boolean", "APS", "true" buildConfigField "boolean", "APS", "true"

View file

@ -1,5 +1,7 @@
package info.nightscout.androidaps.interfaces; package info.nightscout.androidaps.interfaces;
import android.content.Context;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.Date; import java.util.Date;
@ -27,7 +29,8 @@ public interface PumpInterface {
TempBasal getTempBasal(); TempBasal getTempBasal();
TempBasal getExtendedBolus(); TempBasal getExtendedBolus();
PumpEnactResult deliverTreatment(Double insulin, Integer carbs); PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context);
void stopBolusDelivering();
PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes); PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes);
PumpEnactResult setTempBasalPercent(Integer percent, Integer durationInMinutes); PumpEnactResult setTempBasalPercent(Integer percent, Integer durationInMinutes);
PumpEnactResult setExtendedBolus(Double insulin, Integer durationInMinutes); PumpEnactResult setExtendedBolus(Double insulin, Integer durationInMinutes);

View file

@ -1,6 +1,7 @@
package info.nightscout.androidaps.plugins.ConfigBuilder; package info.nightscout.androidaps.plugins.ConfigBuilder;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
@ -9,6 +10,7 @@ import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -47,10 +49,12 @@ import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.interfaces.TempBasalsInterface; import info.nightscout.androidaps.interfaces.TempBasalsInterface;
import info.nightscout.androidaps.interfaces.TreatmentsInterface; import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusProgress;
import info.nightscout.androidaps.plugins.Loop.APSResult; import info.nightscout.androidaps.plugins.Loop.APSResult;
import info.nightscout.androidaps.plugins.Loop.DeviceStatus; import info.nightscout.androidaps.plugins.Loop.DeviceStatus;
import info.nightscout.androidaps.plugins.Loop.LoopFragment; import info.nightscout.androidaps.plugins.Loop.LoopFragment;
import info.nightscout.androidaps.plugins.OpenAPSMA.DetermineBasalResult; import info.nightscout.androidaps.plugins.OpenAPSMA.DetermineBasalResult;
import info.nightscout.androidaps.plugins.Overview.Dialogs.BolusProgressDialog;
import info.nightscout.androidaps.plugins.Overview.Dialogs.NewExtendedBolusDialog; import info.nightscout.androidaps.plugins.Overview.Dialogs.NewExtendedBolusDialog;
import info.nightscout.client.data.DbLogger; import info.nightscout.client.data.DbLogger;
import info.nightscout.client.data.NSProfile; import info.nightscout.client.data.NSProfile;
@ -318,11 +322,11 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
} }
*/ */
public PumpEnactResult deliverTreatmentFromBolusWizard(Double insulin, Integer carbs, Double glucose, String glucoseType, int carbTime, JSONObject boluscalc) { public PumpEnactResult deliverTreatmentFromBolusWizard(Context context, Double insulin, Integer carbs, Double glucose, String glucoseType, int carbTime, JSONObject boluscalc) {
insulin = applyBolusConstraints(insulin); insulin = applyBolusConstraints(insulin);
carbs = applyCarbsConstraints(carbs); carbs = applyCarbsConstraints(carbs);
PumpEnactResult result = activePump.deliverTreatment(insulin, carbs); PumpEnactResult result = activePump.deliverTreatment(insulin, carbs, context);
if (Config.logCongigBuilderActions) if (Config.logCongigBuilderActions)
log.debug("deliverTreatmentFromBolusWizard insulin: " + insulin + " carbs: " + carbs + " success: " + result.success + " enacted: " + result.enacted + " bolusDelivered: " + result.bolusDelivered); log.debug("deliverTreatmentFromBolusWizard insulin: " + insulin + " carbs: " + carbs + " success: " + result.success + " enacted: " + result.enacted + " bolusDelivered: " + result.bolusDelivered);
@ -345,11 +349,21 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
} }
@Override @Override
public PumpEnactResult deliverTreatment(Double insulin, Integer carbs) { public PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context) {
insulin = applyBolusConstraints(insulin); insulin = applyBolusConstraints(insulin);
carbs = applyCarbsConstraints(carbs); carbs = applyCarbsConstraints(carbs);
PumpEnactResult result = activePump.deliverTreatment(insulin, carbs); BolusProgressDialog bolusProgressDialog = null;
if (context != null) {
bolusProgressDialog = new BolusProgressDialog(insulin);
bolusProgressDialog.show(((AppCompatActivity) context).getSupportFragmentManager(), "BolusProgress");
}
PumpEnactResult result = activePump.deliverTreatment(insulin, carbs, context);
if (bolusProgressDialog != null) {
bolusProgressDialog.dismiss();
}
if (Config.logCongigBuilderActions) if (Config.logCongigBuilderActions)
log.debug("deliverTreatment insulin: " + insulin + " carbs: " + carbs + " success: " + result.success + " enacted: " + result.enacted + " bolusDelivered: " + result.bolusDelivered); log.debug("deliverTreatment insulin: " + insulin + " carbs: " + carbs + " success: " + result.success + " enacted: " + result.enacted + " bolusDelivered: " + result.bolusDelivered);
@ -371,6 +385,11 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
return result; return result;
} }
@Override
public void stopBolusDelivering() {
activePump.stopBolusDelivering();
}
/** /**
* apply constraints, set temp based on absolute valus and expecting absolute result * apply constraints, set temp based on absolute valus and expecting absolute result
* *

View file

@ -57,7 +57,6 @@ import info.nightscout.client.data.NSProfile;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.Round; import info.nightscout.utils.Round;
import info.nightscout.utils.SafeParse;
import info.nightscout.utils.SetWarnColor; import info.nightscout.utils.SetWarnColor;
import info.nightscout.utils.ToastUtils; import info.nightscout.utils.ToastUtils;
@ -190,6 +189,7 @@ public class DanaRFragment extends Fragment implements PluginBase, PumpInterface
return view; return view;
} }
@SuppressWarnings("UnusedParameters")
@Subscribe @Subscribe
public void onStatusEvent(final EventAppExit e) { public void onStatusEvent(final EventAppExit e) {
MainApp.instance().getApplicationContext().unbindService(mConnection); MainApp.instance().getApplicationContext().unbindService(mConnection);
@ -238,9 +238,9 @@ public class DanaRFragment extends Fragment implements PluginBase, PumpInterface
new Runnable() { new Runnable() {
@Override @Override
public void run() { public void run() {
if (c.sStatus == c.CONNECTING) if (c.sStatus == EventDanaRConnectionStatus.CONNECTING)
btConnectionView.setText("{fa-bluetooth-b spin} " + c.sSecondsElapsed + "s"); btConnectionView.setText("{fa-bluetooth-b spin} " + c.sSecondsElapsed + "s");
else if (c.sStatus == c.CONNECTED) else if (c.sStatus == EventDanaRConnectionStatus.CONNECTED)
btConnectionView.setText("{fa-bluetooth}"); btConnectionView.setText("{fa-bluetooth}");
else else
btConnectionView.setText("{fa-bluetooth-b}"); btConnectionView.setText("{fa-bluetooth-b}");
@ -399,12 +399,11 @@ public class DanaRFragment extends Fragment implements PluginBase, PumpInterface
} }
@Override @Override
public PumpEnactResult deliverTreatment(Double insulin, Integer carbs) { public PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context) {
ConfigBuilderFragment configBuilderFragment = MainApp.getConfigBuilder(); ConfigBuilderFragment configBuilderFragment = MainApp.getConfigBuilder();
insulin = configBuilderFragment.applyBolusConstraints(insulin); insulin = configBuilderFragment.applyBolusConstraints(insulin);
if (insulin > 0 || carbs > 0) { if (insulin > 0 || carbs > 0) {
Treatment t = new Treatment(); Treatment t = new Treatment();
t.insulin = insulin;
boolean connectionOK = false; boolean connectionOK = false;
if (carbs > 0) connectionOK = mExecutionService.carbsEntry(carbs); if (carbs > 0) connectionOK = mExecutionService.carbsEntry(carbs);
if (insulin > 0) connectionOK = mExecutionService.bolus(insulin, t); if (insulin > 0) connectionOK = mExecutionService.bolus(insulin, t);
@ -427,6 +426,15 @@ public class DanaRFragment extends Fragment implements PluginBase, PumpInterface
} }
} }
@Override
public void stopBolusDelivering() {
if (mExecutionService == null) {
log.error("stopBolusDelivering mExecutionService is null");
return;
}
mExecutionService.bolusStop();
}
// This is called from APS // This is called from APS
@Override @Override
public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) { public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) {

View file

@ -432,7 +432,6 @@ public class DanaRHistoryActivity extends Activity {
@Subscribe @Subscribe
public void onStatusEvent(final EventDanaRConnectionStatus c) { public void onStatusEvent(final EventDanaRConnectionStatus c) {
log.debug("EventDanaRConnectionStatus: " + c.sStatus);
runOnUiThread( runOnUiThread(
new Runnable() { new Runnable() {
@Override @Override

View file

@ -170,6 +170,10 @@ public class SerialIOThread extends Thread {
} }
} }
try {
Thread.sleep(200);
} catch (InterruptedException e) {
}
if (!message.received) { if (!message.received) {
log.warn("Reply not received " + message.getMessageName()); log.warn("Reply not received " + message.getMessageName());
} }

View file

@ -26,7 +26,6 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
import info.nightscout.androidaps.Config; import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.MainActivity;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
@ -73,6 +72,7 @@ import info.nightscout.androidaps.plugins.DanaR.comm.MsgStatusBolusExtended;
import info.nightscout.androidaps.plugins.DanaR.comm.MsgStatusTempBasal; import info.nightscout.androidaps.plugins.DanaR.comm.MsgStatusTempBasal;
import info.nightscout.androidaps.plugins.DanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.DanaR.comm.RecordTypes;
import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusProgress; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusProgress;
import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusStart;
import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRConnectionStatus; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRConnectionStatus;
import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRNewStatus; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRNewStatus;
import info.nightscout.client.data.NSProfile; import info.nightscout.client.data.NSProfile;
@ -181,10 +181,10 @@ public class ExecutionService extends Service {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.wrongpumppassword), R.raw.error); ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.wrongpumppassword), R.raw.error);
return; return;
} }
if (isConnected()) { while (isConnected() || isConnecting()) {
if (Config.logDanaBTComm) if (Config.logDanaBTComm)
log.debug("already connected from:" + from); log.debug("already connected from: " + from);
return; waitMsec(3000);
} }
final long maxConnectionTime = 5 * 60 * 1000L; // 5 min final long maxConnectionTime = 5 * 60 * 1000L; // 5 min
synchronized (connectionLock) { synchronized (connectionLock) {
@ -199,7 +199,7 @@ public class ExecutionService extends Service {
long secondsElapsed = (new Date().getTime() - startTime) / 1000L; long secondsElapsed = (new Date().getTime() - startTime) / 1000L;
MainApp.bus().post(new EventDanaRConnectionStatus(EventDanaRConnectionStatus.CONNECTING, (int) secondsElapsed)); MainApp.bus().post(new EventDanaRConnectionStatus(EventDanaRConnectionStatus.CONNECTING, (int) secondsElapsed));
if (Config.logDanaBTComm) if (Config.logDanaBTComm)
log.debug("connect waiting " + secondsElapsed + "sec from:" + from); log.debug("connect waiting " + secondsElapsed + "sec from: " + from);
try { try {
mRfcommSocket.connect(); mRfcommSocket.connect();
} catch (IOException e) { } catch (IOException e) {
@ -265,7 +265,6 @@ public class ExecutionService extends Service {
mSerialIOThread.sendMessage(tempStatusMsg); // do this before statusBasic because here is temp duration mSerialIOThread.sendMessage(tempStatusMsg); // do this before statusBasic because here is temp duration
mSerialIOThread.sendMessage(exStatusMsg); mSerialIOThread.sendMessage(exStatusMsg);
mSerialIOThread.sendMessage(statusMsg); mSerialIOThread.sendMessage(statusMsg);
waitMsec(100);
mSerialIOThread.sendMessage(statusBasicMsg); mSerialIOThread.sendMessage(statusBasicMsg);
mSerialIOThread.sendMessage(new MsgSettingShippingInfo()); // TODO: show it somewhere mSerialIOThread.sendMessage(new MsgSettingShippingInfo()); // TODO: show it somewhere
@ -323,7 +322,6 @@ public class ExecutionService extends Service {
connect("tempBasal"); connect("tempBasal");
if (!isConnected()) return false; if (!isConnected()) return false;
mSerialIOThread.sendMessage(new MsgSetTempBasalStart(percent, durationInHours)); mSerialIOThread.sendMessage(new MsgSetTempBasalStart(percent, durationInHours));
waitMsec(200);
mSerialIOThread.sendMessage(new MsgStatusTempBasal()); mSerialIOThread.sendMessage(new MsgStatusTempBasal());
return true; return true;
} }
@ -332,7 +330,6 @@ public class ExecutionService extends Service {
connect("tempBasalStop"); connect("tempBasalStop");
if (!isConnected()) return false; if (!isConnected()) return false;
mSerialIOThread.sendMessage(new MsgSetTempBasalStop()); mSerialIOThread.sendMessage(new MsgSetTempBasalStop());
waitMsec(200);
mSerialIOThread.sendMessage(new MsgStatusTempBasal()); mSerialIOThread.sendMessage(new MsgStatusTempBasal());
return true; return true;
} }
@ -341,7 +338,6 @@ public class ExecutionService extends Service {
connect("extendedBolus"); connect("extendedBolus");
if (!isConnected()) return false; if (!isConnected()) return false;
mSerialIOThread.sendMessage(new MsgSetExtendedBolusStart(insulin, (byte) (durationInHalfHours & 0xFF))); mSerialIOThread.sendMessage(new MsgSetExtendedBolusStart(insulin, (byte) (durationInHalfHours & 0xFF)));
waitMsec(200);
mSerialIOThread.sendMessage(new MsgStatusBolusExtended()); mSerialIOThread.sendMessage(new MsgStatusBolusExtended());
return true; return true;
} }
@ -350,46 +346,49 @@ public class ExecutionService extends Service {
connect("extendedBolusStop"); connect("extendedBolusStop");
if (!isConnected()) return false; if (!isConnected()) return false;
mSerialIOThread.sendMessage(new MsgSetExtendedBolusStop()); mSerialIOThread.sendMessage(new MsgSetExtendedBolusStop());
waitMsec(200);
mSerialIOThread.sendMessage(new MsgStatusBolusExtended()); mSerialIOThread.sendMessage(new MsgStatusBolusExtended());
return true; return true;
} }
public boolean bolus(Double amount, Treatment t) { public boolean bolus(Double amount, Treatment t) {
connect("bolus");
if (!isConnected()) return false;
// TODO: progress dialog
bolusingTreatment = t; bolusingTreatment = t;
MsgBolusStart start = new MsgBolusStart(amount); MsgBolusStart start = new MsgBolusStart(amount);
MsgBolusProgress progress = new MsgBolusProgress(MainApp.bus(), amount, t); MsgBolusProgress progress = new MsgBolusProgress(MainApp.bus(), amount, t);
MsgBolusStop stop = new MsgBolusStop(MainApp.bus(), amount, t); MsgBolusStop stop = new MsgBolusStop(MainApp.bus(), amount, t);
mSerialIOThread.sendMessage(start); connect("bolus");
if (!isConnected()) return false;
MainApp.bus().post(new EventDanaRBolusStart());
if (!stop.stopped) {
mSerialIOThread.sendMessage(start);
} else {
t.insulin = 0d;
return false;
}
while (!stop.stopped && !start.failed) { while (!stop.stopped && !start.failed) {
waitMsec(100); waitMsec(100);
} }
bolusingTreatment = null; bolusingTreatment = null;
waitMsec(200);
getPumpStatus(); getPumpStatus();
return true; return true;
} }
public void bolusStop() { public void bolusStop() {
Treatment lastBolusingTreatment = bolusingTreatment;
if (Config.logDanaBTComm) if (Config.logDanaBTComm)
log.debug("bolusStop >>>>> @ " + (bolusingTreatment == null ? "" : bolusingTreatment.insulin)); log.debug("bolusStop >>>>> @ " + (bolusingTreatment == null ? "" : bolusingTreatment.insulin));
MsgBolusStop stop = new MsgBolusStop(); MsgBolusStop stop = new MsgBolusStop();
stop.forced = true; stop.forced = true;
mSerialIOThread.sendMessage(stop); if (isConnected()) {
while (!stop.stopped) {
mSerialIOThread.sendMessage(stop); mSerialIOThread.sendMessage(stop);
waitMsec(200); while (!stop.stopped) {
mSerialIOThread.sendMessage(stop);
waitMsec(200);
}
} else {
stop.stopped = true;
} }
// and update ns status to last amount
waitMsec(60000);
EventDanaRBolusProgress be = EventDanaRBolusProgress.getInstance();
be.sStatus = "";
MainApp.bus().post(be);
} }
public boolean carbsEntry(int amount) { public boolean carbsEntry(int amount) {
@ -398,7 +397,6 @@ public class ExecutionService extends Service {
Calendar time = Calendar.getInstance(); Calendar time = Calendar.getInstance();
MsgSetCarbsEntry msg = new MsgSetCarbsEntry(time, amount); MsgSetCarbsEntry msg = new MsgSetCarbsEntry(time, amount);
mSerialIOThread.sendMessage(msg); mSerialIOThread.sendMessage(msg);
waitMsec(200);
return true; return true;
} }
@ -453,10 +451,8 @@ public class ExecutionService extends Service {
double[] basal = buildDanaRProfileRecord(profile); double[] basal = buildDanaRProfileRecord(profile);
MsgSetBasalProfile msgSet = new MsgSetBasalProfile((byte) 0, basal); MsgSetBasalProfile msgSet = new MsgSetBasalProfile((byte) 0, basal);
mSerialIOThread.sendMessage(msgSet); mSerialIOThread.sendMessage(msgSet);
waitMsec(200);
MsgSetActivateBasalProfile msgActivate = new MsgSetActivateBasalProfile((byte) 0); MsgSetActivateBasalProfile msgActivate = new MsgSetActivateBasalProfile((byte) 0);
mSerialIOThread.sendMessage(msgActivate); mSerialIOThread.sendMessage(msgActivate);
waitMsec(200);
getPumpStatus(); getPumpStatus();
return true; return true;
} }

View file

@ -36,8 +36,9 @@ public class MsgBolusProgress extends MessageBase {
Double done = (amount * 100 - progress) / 100d; Double done = (amount * 100 - progress) / 100d;
t.insulin = done; t.insulin = done;
EventDanaRBolusProgress bolusingEvent = EventDanaRBolusProgress.getInstance(); EventDanaRBolusProgress bolusingEvent = EventDanaRBolusProgress.getInstance();
bolusingEvent.sStatus = "Delivering " + DecimalFormatter.to1Decimal(done) + "U"; bolusingEvent.status = "Delivering " + DecimalFormatter.to1Decimal(done) + "U";
bolusingEvent.t = t; bolusingEvent.t = t;
bolusingEvent.percent = Math.min((int) (done / amount * 100), 100);
if (Config.logDanaMessageDetail) { if (Config.logDanaMessageDetail) {
log.debug("Bolus remaining: " + progress + " delivered: " + done); log.debug("Bolus remaining: " + progress + " delivered: " + done);

View file

@ -5,6 +5,8 @@ import com.squareup.otto.Bus;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusProgress; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusProgress;
@ -36,9 +38,10 @@ public class MsgBolusStop extends MessageBase {
stopped = true; stopped = true;
if (!forced) { if (!forced) {
t.insulin = amount; t.insulin = amount;
bolusingEvent.sStatus = "Delivered"; bolusingEvent.status = MainApp.sResources.getString(R.string.overview_bolusprogress_delivered);
bolusingEvent.percent = 100;
} else { } else {
bolusingEvent.sStatus = "Stopped"; bolusingEvent.status = MainApp.sResources.getString(R.string.overview_bolusprogress_stoped);
} }
bus.post(bolusingEvent); bus.post(bolusingEvent);
} }

View file

@ -13,6 +13,7 @@ import java.util.Date;
import info.nightscout.androidaps.Config; import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents; import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusProgress; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusProgress;
import info.nightscout.client.data.DbLogger; import info.nightscout.client.data.DbLogger;
@ -31,7 +32,7 @@ public class MsgOcclusion extends MessageBase {
log.debug("Oclusion detected"); log.debug("Oclusion detected");
EventDanaRBolusProgress bolusingEvent = EventDanaRBolusProgress.getInstance(); EventDanaRBolusProgress bolusingEvent = EventDanaRBolusProgress.getInstance();
MsgBolusStop.stopped = true; MsgBolusStop.stopped = true;
bolusingEvent.sStatus = "Oclusion"; bolusingEvent.status = MainApp.sResources.getString(R.string.overview_bolusiprogress_occlusion);
MainApp.bus().post(bolusingEvent); MainApp.bus().post(bolusingEvent);
sendToNSClient(); sendToNSClient();
} }
@ -45,7 +46,7 @@ public class MsgOcclusion extends MessageBase {
try { try {
data.put("eventType", "Announcement"); data.put("eventType", "Announcement");
data.put("created_at", DateUtil.toISOString(new Date())); data.put("created_at", DateUtil.toISOString(new Date()));
data.put("notes", "Occlusion detected"); data.put("notes", MainApp.sResources.getString(R.string.overview_bolusiprogress_occlusion));
data.put("isAnnouncement", true); data.put("isAnnouncement", true);
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();

View file

@ -17,8 +17,9 @@ import info.nightscout.client.data.DbLogger;
public class EventDanaRBolusProgress { public class EventDanaRBolusProgress {
private static Logger log = LoggerFactory.getLogger(EventDanaRBolusProgress.class); private static Logger log = LoggerFactory.getLogger(EventDanaRBolusProgress.class);
public String sStatus = ""; public String status = "";
public Treatment t = null; public Treatment t = null;
public int percent = 0;
private static EventDanaRBolusProgress eventDanaRBolusProgress = null; private static EventDanaRBolusProgress eventDanaRBolusProgress = null;
public EventDanaRBolusProgress() { public EventDanaRBolusProgress() {
@ -31,25 +32,4 @@ public class EventDanaRBolusProgress {
return eventDanaRBolusProgress; return eventDanaRBolusProgress;
} }
public void sendToNSClient() {
if (t == null || t._id == null || t._id.equals("")) return;
Context context = MainApp.instance().getApplicationContext();
Bundle bundle = new Bundle();
bundle.putString("action", "dbUpdate");
bundle.putString("collection", "treatments");
JSONObject data = new JSONObject();
try {
data.put("status", sStatus);
} catch (JSONException e) {
e.printStackTrace();
}
bundle.putString("data", data.toString());
bundle.putString("_id", t._id);
Intent intent = new Intent(Intents.ACTION_DATABASE);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
context.sendBroadcast(intent);
DbLogger.dbAdd(intent, data.toString(), EventDanaRBolusProgress.class);
}
} }

View file

@ -0,0 +1,7 @@
package info.nightscout.androidaps.plugins.DanaR.events;
/**
* Created by mike on 03.08.2016.
*/
public class EventDanaRBolusStart {
}

View file

@ -1,6 +1,7 @@
package info.nightscout.androidaps.plugins.MM640g; package info.nightscout.androidaps.plugins.MM640g;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -164,10 +165,15 @@ public class MM640gFragment extends Fragment implements PluginBase, PumpInterfac
} }
@Override @Override
public PumpEnactResult deliverTreatment(Double insulin, Integer carbs) { public PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context) {
return new PumpEnactResult(); return new PumpEnactResult();
} }
@Override
public void stopBolusDelivering() {
}
@Override @Override
public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) { public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) {
return new PumpEnactResult(); return new PumpEnactResult();

View file

@ -0,0 +1,155 @@
package info.nightscout.androidaps.plugins.Overview.Dialogs;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.squareup.otto.Subscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.DanaR.DanaRFragment;
import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusProgress;
import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusStart;
import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRConnectionStatus;
import info.nightscout.utils.ToastUtils;
public class BolusProgressDialog extends DialogFragment implements View.OnClickListener {
private static Logger log = LoggerFactory.getLogger(BolusProgressDialog.class);
Button stopButton;
TextView statusView;
TextView stopPressedView;
ProgressBar progressBar;
double amount;
boolean started = false;
public BolusProgressDialog(double amount) {
this.amount = amount;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().setTitle(String.format(MainApp.sResources.getString(R.string.overview_bolusprogress_goingtodeliver), amount));
View view = inflater.inflate(R.layout.overview_bolusprogress_dialog, container, false);
stopButton = (Button) view.findViewById(R.id.overview_bolusprogress_stop);
statusView = (TextView) view.findViewById(R.id.overview_bolusprogress_status);
stopPressedView = (TextView) view.findViewById(R.id.overview_bolusprogress_stoppressed);
progressBar = (ProgressBar) view.findViewById(R.id.overview_bolusprogress_progressbar);
stopButton.setOnClickListener(this);
progressBar.setMax(100);
statusView.setText(MainApp.sResources.getString(R.string.waitingforpump));
return view;
}
@Override
public void onResume() {
super.onResume();
MainApp.bus().register(this);
}
@Override
public void onPause() {
super.onPause();
MainApp.bus().unregister(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.overview_bolusprogress_stop:
log.debug("Stop bolus delivery button pressed");
stopPressedView.setVisibility(View.VISIBLE);
PumpInterface pump = MainApp.getConfigBuilder().getActivePump();
pump.stopBolusDelivering();
break;
}
}
@Subscribe
public void onStatusEvent(final EventDanaRBolusProgress ev) {
Activity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
log.debug("Status: " + ev.status + " Percent: " + ev.percent);
statusView.setText(ev.status);
progressBar.setProgress(ev.percent);
if (ev.percent == 100) {
stopButton.setVisibility(View.INVISIBLE);
scheduleDismiss();
}
}
});
}
}
@Subscribe
public void onStatusEvent(final EventDanaRBolusStart ev) {
started = true;
}
@Subscribe
public void onStatusEvent(final EventDanaRConnectionStatus c) {
Activity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(
new Runnable() {
@Override
public void run() {
if (c.sStatus == c.CONNECTING) {
statusView.setText(String.format(getString(R.string.danar_history_connectingfor), c.sSecondsElapsed));
} else if (c.sStatus == c.CONNECTED) {
statusView.setText(MainApp.sResources.getString(R.string.connected));
} else {
statusView.setText(MainApp.sResources.getString(R.string.disconnected));
if (started) scheduleDismiss();
}
}
}
);
}
}
private void scheduleDismiss() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Activity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(
new Runnable() {
@Override
public void run() {
dismiss();
}
});
}
}
});
t.start();
}
}

View file

@ -1,5 +1,7 @@
package info.nightscout.androidaps.plugins.Overview.Dialogs; package info.nightscout.androidaps.plugins.Overview.Dialogs;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
@ -33,10 +35,13 @@ public class NewTreatmentDialog extends DialogFragment implements OnClickListene
Handler mHandler; Handler mHandler;
public static HandlerThread mHandlerThread; public static HandlerThread mHandlerThread;
public NewTreatmentDialog() { Context parentContext;
mHandlerThread = new HandlerThread(NewExtendedBolusDialog.class.getSimpleName());
public NewTreatmentDialog(Context context) {
mHandlerThread = new HandlerThread(NewTreatmentDialog.class.getSimpleName());
mHandlerThread.start(); mHandlerThread.start();
this.mHandler = new Handler(mHandlerThread.getLooper()); this.mHandler = new Handler(mHandlerThread.getLooper());
parentContext = context;
} }
@Override @Override
@ -93,12 +98,12 @@ public class NewTreatmentDialog extends DialogFragment implements OnClickListene
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
PumpEnactResult result = pump.deliverTreatment(finalInsulinAfterConstraints, finalCarbsAfterConstraints); PumpEnactResult result = pump.deliverTreatment(finalInsulinAfterConstraints, finalCarbsAfterConstraints, parentContext);
if (!result.success) { if (!result.success) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); AlertDialog.Builder builder = new AlertDialog.Builder(parentContext);
builder.setTitle(getContext().getString(R.string.treatmentdeliveryerror)); builder.setTitle(MainApp.sResources.getString(R.string.treatmentdeliveryerror));
builder.setMessage(result.comment); builder.setMessage(result.comment);
builder.setPositiveButton(getContext().getString(R.string.ok), null); builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), null);
builder.show(); builder.show();
} }
} }

View file

@ -1,5 +1,6 @@
package info.nightscout.androidaps.plugins.Overview.Dialogs; package info.nightscout.androidaps.plugins.Overview.Dialogs;
import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
@ -77,10 +78,13 @@ public class WizardDialog extends DialogFragment implements OnClickListener {
Handler mHandler; Handler mHandler;
public static HandlerThread mHandlerThread; public static HandlerThread mHandlerThread;
public WizardDialog() { Context parentContext;
public WizardDialog(Context context) {
mHandlerThread = new HandlerThread(NewExtendedBolusDialog.class.getSimpleName()); mHandlerThread = new HandlerThread(NewExtendedBolusDialog.class.getSimpleName());
mHandlerThread.start(); mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper()); mHandler = new Handler(mHandlerThread.getLooper());
parentContext = context;
} }
final private TextWatcher textWatcher = new TextWatcher() { final private TextWatcher textWatcher = new TextWatcher() {
@ -193,6 +197,7 @@ public class WizardDialog extends DialogFragment implements OnClickListener {
@Override @Override
public void run() { public void run() {
PumpEnactResult result = pump.deliverTreatmentFromBolusWizard( PumpEnactResult result = pump.deliverTreatmentFromBolusWizard(
parentContext,
finalInsulinAfterConstraints, finalInsulinAfterConstraints,
finalCarbsAfterConstraints, finalCarbsAfterConstraints,
SafeParse.stringToDouble(bgInput.getText().toString()), SafeParse.stringToDouble(bgInput.getText().toString()),

View file

@ -185,7 +185,7 @@ public class OverviewFragment extends Fragment implements PluginBase {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
FragmentManager manager = getFragmentManager(); FragmentManager manager = getFragmentManager();
NewTreatmentDialog treatmentDialogFragment = new NewTreatmentDialog(); NewTreatmentDialog treatmentDialogFragment = new NewTreatmentDialog(getContext());
treatmentDialogFragment.show(manager, "TreatmentDialog"); treatmentDialogFragment.show(manager, "TreatmentDialog");
} }
}); });
@ -194,7 +194,7 @@ public class OverviewFragment extends Fragment implements PluginBase {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
FragmentManager manager = getFragmentManager(); FragmentManager manager = getFragmentManager();
WizardDialog wizardDialog = new WizardDialog(); WizardDialog wizardDialog = new WizardDialog(getContext());
wizardDialog.show(manager, "WizardDialog"); wizardDialog.show(manager, "WizardDialog");
} }
}); });

View file

@ -234,7 +234,7 @@ public class SmsCommunicatorFragment extends Fragment implements PluginBase {
PumpInterface pumpInterface = MainApp.getConfigBuilder().getActivePump(); PumpInterface pumpInterface = MainApp.getConfigBuilder().getActivePump();
if (pumpInterface != null) { if (pumpInterface != null) {
danaRFragment = (DanaRFragment) MainApp.getSpecificPlugin(DanaRFragment.class); danaRFragment = (DanaRFragment) MainApp.getSpecificPlugin(DanaRFragment.class);
PumpEnactResult result = pumpInterface.deliverTreatment(bolusWaitingForConfirmation.bolusRequested, 0); PumpEnactResult result = pumpInterface.deliverTreatment(bolusWaitingForConfirmation.bolusRequested, 0, null);
if (result.success) { if (result.success) {
reply = String.format(MainApp.sResources.getString(R.string.bolusdelivered), bolusWaitingForConfirmation.bolusRequested); reply = String.format(MainApp.sResources.getString(R.string.bolusdelivered), bolusWaitingForConfirmation.bolusRequested);
if (danaRFragment != null) reply += "\n" + danaRFragment.shortStatus(); if (danaRFragment != null) reply += "\n" + danaRFragment.shortStatus();

View file

@ -2,6 +2,7 @@ package info.nightscout.androidaps.plugins.VirtualPump;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
@ -181,7 +182,7 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
} }
@Override @Override
public PumpEnactResult deliverTreatment(Double insulin, Integer carbs) { public PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context) {
PumpEnactResult result = new PumpEnactResult(); PumpEnactResult result = new PumpEnactResult();
result.success = true; result.success = true;
result.bolusDelivered = insulin; result.bolusDelivered = insulin;
@ -194,6 +195,11 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
return result; return result;
} }
@Override
public void stopBolusDelivering() {
}
@Override @Override
public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) { public PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes) {
PumpEnactResult result = cancelTempBasal(); PumpEnactResult result = cancelTempBasal();

View file

@ -0,0 +1,50 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="info.nightscout.androidaps.plugins.Overview.Dialogs.BolusProgressDialog">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/overview_bolusprogress_status"
android:layout_gravity="center_horizontal" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/overview_bolusprogress_stoppressed"
android:id="@+id/overview_bolusprogress_stoppressed"
android:layout_gravity="center_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold"
android:textColor="#fd0101"
android:layout_marginTop="20dp"
android:visibility="gone" />
<ProgressBar
android:id="@+id/overview_bolusprogress_progressbar"
android:layout_height="20dp"
android:layout_width="match_parent"
style="@android:style/Widget.ProgressBar.Horizontal"
android:minHeight="3dp"
android:maxHeight="5dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/overview_bolusprogress_stop"
android:id="@+id/overview_bolusprogress_stop"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp" />
</LinearLayout>
</FrameLayout>

View file

@ -65,7 +65,7 @@
<string name="delta">Rozdíl</string> <string name="delta">Rozdíl</string>
<string name="duration">Trvání</string> <string name="duration">Trvání</string>
<string name="en_lang">English</string> <string name="en_lang">English</string>
<string name="entertreatmentquestion">Zadej nové ošetření</string> <string name="entertreatmentquestion">Aplikovat bolus</string>
<string name="glucose">Glykémie</string> <string name="glucose">Glykémie</string>
<string name="loop">Smyčka</string> <string name="loop">Smyčka</string>
<string name="loop_aps_label">APS</string> <string name="loop_aps_label">APS</string>
@ -279,4 +279,11 @@
<string name="wrongpumppassword">Špatné heslo k pumpě</string> <string name="wrongpumppassword">Špatné heslo k pumpě</string>
<string name="mm640g"></string> <string name="mm640g"></string>
<string name="danar_password">Heslo k pumpě (pouze verze 2016)</string> <string name="danar_password">Heslo k pumpě (pouze verze 2016)</string>
<string name="overview_bolusiprogress_occlusion">Okluze</string>
<string name="overview_bolusprogress_delivered">Podáno</string>
<string name="overview_bolusprogress_stop">Stop</string>
<string name="overview_bolusprogress_stoped">Zastaveno</string>
<string name="overview_bolusprogress_stoppressed">STISKNUTO STOP</string>
<string name="waitingforpump">Čekání na pumpu</string>
<string name="overview_bolusprogress_goingtodeliver" formatted="false">Podávání %.2fU inzulínu</string>
</resources> </resources>

View file

@ -288,5 +288,12 @@
<string name="danar_password">Pump password (2016 pump only)</string> <string name="danar_password">Pump password (2016 pump only)</string>
<string name="wrongpumppassword">Wrong pump password!</string> <string name="wrongpumppassword">Wrong pump password!</string>
<string name="pumpbusy">Pump is busy</string> <string name="pumpbusy">Pump is busy</string>
<string name="overview_bolusprogress_delivered">Delivered</string>
<string name="overview_bolusprogress_stoped">Stopped</string>
<string name="overview_bolusiprogress_occlusion">Occlusion</string>
<string name="overview_bolusprogress_stop">Stop</string>
<string name="overview_bolusprogress_stoppressed">STOP PRESSED</string>
<string name="waitingforpump">Waiting for pump</string>
<string name="overview_bolusprogress_goingtodeliver" formatted="false">Going to deliver %.2fU</string>
</resources> </resources>