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

@ -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) {
@ -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);
connect("bolus");
if (!isConnected()) return false;
MainApp.bus().post(new EventDanaRBolusStart());
if (!stop.stopped) {
mSerialIOThread.sendMessage(start); 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;
if (isConnected()) {
mSerialIOThread.sendMessage(stop); mSerialIOThread.sendMessage(stop);
while (!stop.stopped) { while (!stop.stopped) {
mSerialIOThread.sendMessage(stop); mSerialIOThread.sendMessage(stop);
waitMsec(200); waitMsec(200);
} }
// and update ns status to last amount } else {
waitMsec(60000); stop.stopped = true;
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>