diff --git a/app/src/main/java/info/nightscout/androidaps/Services/DataService.java b/app/src/main/java/info/nightscout/androidaps/Services/DataService.java index 7aa8d4430e..6d701bd4de 100644 --- a/app/src/main/java/info/nightscout/androidaps/Services/DataService.java +++ b/app/src/main/java/info/nightscout/androidaps/Services/DataService.java @@ -401,7 +401,9 @@ public class DataService extends IntentService { JSONObject trJson = new JSONObject(trstring); String _id = trJson.getString("_id"); MainApp.getDbHelper().deleteTreatmentById(_id); - handleRemoveTempTargetRecord(trJson); + MainApp.getDbHelper().deleteTempTargetById(trJson.getString("_id")); + MainApp.getDbHelper().deleteTempBasalById(trJson.getString("_id")); + MainApp.getDbHelper().deleteExtendedBolusById(trJson.getString("_id")); } if (bundles.containsKey("treatments")) { @@ -411,7 +413,9 @@ public class DataService extends IntentService { JSONObject trJson = jsonArray.getJSONObject(i); String _id = trJson.getString("_id"); MainApp.getDbHelper().deleteTreatmentById(_id); - handleRemoveTempTargetRecord(trJson); + MainApp.getDbHelper().deleteTempTargetById(trJson.getString("_id")); + MainApp.getDbHelper().deleteTempBasalById(trJson.getString("_id")); + MainApp.getDbHelper().deleteExtendedBolusById(trJson.getString("_id")); } } } catch (Exception e) { @@ -468,9 +472,10 @@ public class DataService extends IntentService { handleDanaRHistoryRecords(trJson); // update record _id in history handleAddChangeTempTargetRecord(trJson); handleAddChangeTempBasalRecord(trJson); + handleAddChangeExtendedBolusRecord(trJson); if (!trJson.has("insulin") && !trJson.has("carbs")) { if (Config.logIncommingData) - log.debug("ADD: Uninterested treatment: " + trstring); + log.debug("Ignoring non insulin/carbs record: " + trstring); return; } @@ -588,21 +593,6 @@ public class DataService extends IntentService { } } - /* - { - "_id": "58795998aa86647ba4d68ce7", - "enteredBy": "", - "eventType": "Temporary Target", - "reason": "Eating Soon", - "targetTop": 80, - "targetBottom": 80, - "duration": 120, - "created_at": "2017-01-13T22:50:00.782Z", - "carbs": null, - "insulin": null -} - */ - public void handleAddChangeTempTargetRecord(JSONObject trJson) throws JSONException, SQLException { if (trJson.has("eventType") && trJson.getString("eventType").equals("Temporary Target")) { if (Config.logIncommingData) @@ -611,31 +601,6 @@ public class DataService extends IntentService { } } - public void handleRemoveTempTargetRecord(JSONObject trJson) { - if (trJson.has("_id")) { - try { - MainApp.getDbHelper().deleteTempTargetById(trJson.getString("_id")); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - -/* -{ - "_id": "59232e1ddd032d04218dab00", - "eventType": "Temp Basal", - "duration": 60, - "percent": -50, - "created_at": "2017-05-22T18:29:57Z", - "enteredBy": "AndroidAPS", - "notes": "Basal Temp Start 50% 60.0 min", - "NSCLIENT_ID": 1495477797863, - "mills": 1495477797000, - "mgdl": 194.5, - "endmills": 1495481397000 -} -*/ public void handleAddChangeTempBasalRecord(JSONObject trJson) throws JSONException, SQLException { if (trJson.has("eventType") && trJson.getString("eventType").equals("Temp Basal")) { if (Config.logIncommingData) @@ -644,13 +609,11 @@ public class DataService extends IntentService { } } - public void handleRemoveTempBasalRecord(JSONObject trJson) { - if (trJson.has("_id")) { - try { - MainApp.getDbHelper().deleteTempBasalById(trJson.getString("_id")); - } catch (JSONException e) { - e.printStackTrace(); - } + public void handleAddChangeExtendedBolusRecord(JSONObject trJson) throws JSONException, SQLException { + if (trJson.has("eventType") && trJson.getString("eventType").equals("Combo Bolus")) { + if (Config.logIncommingData) + log.debug("Processing Extended Bolus record: " + trJson.toString()); + MainApp.getDbHelper().createExtendedBolusFromJsonIfNotExists(trJson); } } diff --git a/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java b/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java index 0b641428ae..baf4d595a0 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java +++ b/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java @@ -158,7 +158,6 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { TableUtils.dropTable(connectionSource, DbRequest.class, true); TableUtils.dropTable(connectionSource, TemporaryBasal.class, true); TableUtils.dropTable(connectionSource, ExtendedBolus.class, true); - //DbRequests can be cleared from NSClient fragment TableUtils.createTableIfNotExists(connectionSource, TempTarget.class); TableUtils.createTableIfNotExists(connectionSource, Treatment.class); TableUtils.createTableIfNotExists(connectionSource, BgReading.class); @@ -171,6 +170,9 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { e.printStackTrace(); } scheduleBgChange(); // trigger refresh + scheduleTemporaryBasalChange(); + scheduleTreatmentChange(); + scheduleExtendedBolusChange(); } public void resetTreatments() { @@ -246,6 +248,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { // ------------------- BgReading handling ----------------------- public void createIfNotExists(BgReading bgReading) { + bgReading.date = bgReading.date - bgReading.date % 1000; try { getDaoBgReadings().createIfNotExists(bgReading); } catch (SQLException e) { @@ -459,21 +462,19 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { } public int deleteTreatmentById(String _id) { - Treatment stored = findTreatmentById(_id); int removed = 0; - if (stored != null) { - log.debug("REMOVE: Existing treatment (removing): " + _id); - try { + try { + Treatment stored = findTreatmentById(_id); + if (stored != null) { + log.debug("Removing TempTarget record from database: " + stored.log()); removed = getDaoTreatments().delete(stored); - } catch (SQLException e) { - e.printStackTrace(); + latestTreatmentChange = stored.date; + scheduleTreatmentChange(); + } else { + log.debug("Treatment not found database: " + _id); } - if (Config.logIncommingData) - log.debug("Records removed: " + removed); - latestTreatmentChange = stored.date; - scheduleTreatmentChange(); - } else { - log.debug("REMOVE: Not stored treatment (ignoring): " + _id); + } catch (SQLException e) { + e.printStackTrace(); } return removed; } @@ -581,9 +582,10 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { return new ArrayList(); } - public void createIfNotExists(TempTarget tempTarget) { + public void createOrUpdate(TempTarget tempTarget) { + tempTarget.date = tempTarget.date - tempTarget.date % 1000; try { - getDaoTempTargets().createIfNotExists(tempTarget); + getDaoTempTargets().createOrUpdate(tempTarget); MainApp.bus().post(new EventTempTargetRangeChange()); } catch (SQLException e) { e.printStackTrace(); @@ -599,6 +601,21 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { } } + /* + { + "_id": "58795998aa86647ba4d68ce7", + "enteredBy": "", + "eventType": "Temporary Target", + "reason": "Eating Soon", + "targetTop": 80, + "targetBottom": 80, + "duration": 120, + "created_at": "2017-01-13T22:50:00.782Z", + "carbs": null, + "insulin": null +} + */ + public void createTemptargetFromJsonIfNotExists(JSONObject trJson) { try { QueryBuilder queryBuilder = null; @@ -621,7 +638,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { if (Config.logIncommingData) log.debug("Updating TempTarget record in database: " + trJson.toString()); } else { - log.error("Somthing went wrong"); + log.error("Something went wrong"); return; } tempTarget.date = trJson.getLong("mills"); @@ -630,7 +647,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { tempTarget.high = NSProfile.toMgdl(trJson.getDouble("targetTop"), units); tempTarget.reason = trJson.getString("reason"); tempTarget._id = trJson.getString("_id"); - createIfNotExists(tempTarget); + createOrUpdate(tempTarget); MainApp.bus().post(new EventTempTargetRangeChange()); } catch (SQLException e) { e.printStackTrace(); @@ -641,8 +658,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { public void deleteTempTargetById(String _id) { try { - QueryBuilder queryBuilder = null; - queryBuilder = getDaoTempTargets().queryBuilder(); + QueryBuilder queryBuilder = getDaoTempTargets().queryBuilder(); Where where = queryBuilder.where(); where.eq("_id", _id); PreparedQuery preparedQuery = queryBuilder.prepare(); @@ -665,9 +681,9 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { // ----------------- DanaRHistory handling -------------------- - public void createIfNotExists(DanaRHistoryRecord record) { + public void createOrUpdate(DanaRHistoryRecord record) { try { - getDaoDanaRHistory().createIfNotExists(record); + getDaoDanaRHistory().createOrUpdate(record); } catch (SQLException e) { e.printStackTrace(); } @@ -731,10 +747,10 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { return updated; } - public void createIfNotExists(TemporaryBasal tempBasal) { + public void createOrUpdate(TemporaryBasal tempBasal) { tempBasal.date = tempBasal.date - tempBasal.date % 1000; try { - getDaoTemporaryBasal().createIfNotExists(tempBasal); + getDaoTemporaryBasal().createOrUpdate(tempBasal); latestTreatmentChange = tempBasal.date; } catch (SQLException e) { e.printStackTrace(); @@ -785,6 +801,22 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { } + /* + { + "_id": "59232e1ddd032d04218dab00", + "eventType": "Temp Basal", + "duration": 60, + "percent": -50, + "created_at": "2017-05-22T18:29:57Z", + "enteredBy": "AndroidAPS", + "notes": "Basal Temp Start 50% 60.0 min", + "NSCLIENT_ID": 1495477797863, + "mills": 1495477797000, + "mgdl": 194.5, + "endmills": 1495481397000 + } + */ + public void createTempBasalFromJsonIfNotExists(JSONObject trJson) { try { QueryBuilder queryBuilder = null; @@ -793,9 +825,6 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { where.eq("_id", trJson.getString("_id")).or().eq("date", trJson.getLong("mills")); PreparedQuery preparedQuery = queryBuilder.prepare(); List list = getDaoTemporaryBasal().query(preparedQuery); - NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); - if (profile == null) return; // no profile data, better ignore than do something wrong - String units = profile.getUnits(); TemporaryBasal tempBasal; if (list.size() == 0) { tempBasal = new TemporaryBasal(); @@ -808,7 +837,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { if (Config.logIncommingData) log.debug("Updating TemporaryBasal record in database: " + trJson.toString()); } else { - log.error("Somthing went wrong"); + log.error("Something went wrong"); return; } tempBasal.date = trJson.getLong("mills"); @@ -824,7 +853,8 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { tempBasal.isAbsolute = true; } tempBasal._id = trJson.getString("_id"); - createIfNotExists(tempBasal); + createOrUpdate(tempBasal); + scheduleTemporaryBasalChange(); } catch (SQLException e) { e.printStackTrace(); } catch (JSONException e) { @@ -849,7 +879,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { MainApp.bus().post(new EventTempTargetRangeChange()); } else { if (Config.logIncommingData) - log.debug("TempTarget not found database: " + _id); + log.debug("TempBasal not found database: " + _id); } } catch (SQLException e) { e.printStackTrace(); @@ -870,9 +900,10 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { return updated; } - public void create(ExtendedBolus extendedBolus) { + public void createOrUpdate(ExtendedBolus extendedBolus) { + extendedBolus.date = extendedBolus.date - extendedBolus.date % 1000; try { - getDaoExtendedBolus().create(extendedBolus); + getDaoExtendedBolus().createOrUpdate(extendedBolus); latestTreatmentChange = extendedBolus.date; } catch (SQLException e) { e.printStackTrace(); @@ -906,11 +937,89 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { return new ArrayList(); } + public void deleteExtendedBolusById(String _id) { + try { + QueryBuilder queryBuilder = null; + queryBuilder = getDaoExtendedBolus().queryBuilder(); + Where where = queryBuilder.where(); + where.eq("_id", _id); + PreparedQuery preparedQuery = queryBuilder.prepare(); + List list = getDaoExtendedBolus().query(preparedQuery); + + if (list.size() == 1) { + ExtendedBolus record = list.get(0); + if (Config.logIncommingData) + log.debug("Removing ExtendedBolus record from database: " + record.log()); + getDaoExtendedBolus().delete(record); + scheduleExtendedBolusChange(); + } else { + if (Config.logIncommingData) + log.debug("ExtendedBolus not found database: " + _id); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + /* +{ + "_id": "5924898d577eb0880e355337", + "eventType": "Combo Bolus", + "duration": 120, + "splitNow": 0, + "splitExt": 100, + "enteredinsulin": 1, + "relative": 1, + "created_at": "2017-05-23T19:12:14Z", + "enteredBy": "AndroidAPS", + "NSCLIENT_ID": 1495566734628, + "mills": 1495566734000, + "mgdl": 106 +} + */ + + public void createExtendedBolusFromJsonIfNotExists(JSONObject trJson) { + try { + QueryBuilder queryBuilder = null; + queryBuilder = getDaoExtendedBolus().queryBuilder(); + Where where = queryBuilder.where(); + where.eq("_id", trJson.getString("_id")).or().eq("date", trJson.getLong("mills")); + PreparedQuery preparedQuery = queryBuilder.prepare(); + List list = getDaoExtendedBolus().query(preparedQuery); + ExtendedBolus extendedBolus; + if (list.size() == 0) { + extendedBolus = new ExtendedBolus(); + extendedBolus.source = Source.NIGHTSCOUT; + if (Config.logIncommingData) + log.debug("Adding ExtendedBolus record to database: " + trJson.toString()); + // Record does not exists. add + } else if (list.size() == 1) { + extendedBolus = list.get(0); + if (Config.logIncommingData) + log.debug("Updating ExtendedBolus record in database: " + trJson.toString()); + } else { + log.error("Something went wrong"); + return; + } + extendedBolus.date = trJson.getLong("mills"); + extendedBolus.durationInMinutes = trJson.getInt("duration"); + extendedBolus.insulin = trJson.getDouble("relative"); + extendedBolus._id = trJson.getString("_id"); + createOrUpdate(extendedBolus); + scheduleExtendedBolusChange(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + } + static public void scheduleExtendedBolusChange() { class PostRunnable implements Runnable { public void run() { MainApp.bus().post(new EventExtendedBolusChange()); scheduledExtendedBolusPost = null; + log.debug("Firing EventExtendedBolusChange"); } } // prepare task for execution in 1 sec diff --git a/app/src/main/java/info/nightscout/androidaps/db/ExtendedBolus.java b/app/src/main/java/info/nightscout/androidaps/db/ExtendedBolus.java index 1a23073936..ac749c7e35 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/ExtendedBolus.java +++ b/app/src/main/java/info/nightscout/androidaps/db/ExtendedBolus.java @@ -126,6 +126,10 @@ public class ExtendedBolus implements Interval { return Round.roundTo(insulin / durationInMinutes * 60, 0.01); } + public double insulinSoFar() { + return absoluteRate() * getRealDuration() / 60d; + } + public IobTotal iobCalc(long time) { IobTotal result = new IobTotal(time); NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/Dialogs/NewNSTreatmentDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/Dialogs/NewNSTreatmentDialog.java index b7c1cf6845..879a9f51f0 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/Dialogs/NewNSTreatmentDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Careportal/Dialogs/NewNSTreatmentDialog.java @@ -26,7 +26,6 @@ import android.widget.TextView; import com.crashlytics.android.answers.Answers; import com.crashlytics.android.answers.CustomEvent; -import com.j256.ormlite.dao.Dao; import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; @@ -36,7 +35,6 @@ import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.sql.SQLException; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Calendar; @@ -659,7 +657,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick tempTarget.high = 0; } log.debug("Creating new TempTarget db record: " + tempTarget.log()); - MainApp.getDbHelper().createIfNotExists(tempTarget); + MainApp.getDbHelper().createOrUpdate(tempTarget); ConfigBuilderPlugin.uploadCareportalEntryToNS(data); Answers.getInstance().logCustom(new CustomEvent("TempTarget")); } catch (JSONException e) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgHistoryAll.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgHistoryAll.java index 82caa29864..4e4bc759f5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgHistoryAll.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgHistoryAll.java @@ -1,11 +1,8 @@ package info.nightscout.androidaps.plugins.PumpDanaR.comm; -import com.j256.ormlite.dao.Dao; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.sql.SQLException; import java.util.Date; import info.nightscout.androidaps.MainApp; @@ -143,7 +140,7 @@ public class MsgHistoryAll extends MessageBase { break; } - MainApp.getDbHelper().createIfNotExists(danaRHistoryRecord); + MainApp.getDbHelper().createOrUpdate(danaRHistoryRecord); ev.message = DateUtil.dateAndTimeString(danaRHistoryRecord.recordDate); ev.message += " " + messageType; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryFragment.java index a5ffcee7af..5b5d7861a0 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryFragment.java @@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory; import info.nightscout.androidaps.R; import info.nightscout.androidaps.plugins.TreatmentsFromHistory.fragments.TreatmentsBolusFragment; +import info.nightscout.androidaps.plugins.TreatmentsFromHistory.fragments.TreatmentsExtendedBolusesFragment; import info.nightscout.androidaps.plugins.TreatmentsFromHistory.fragments.TreatmentsTemporaryBasalsFragment; public class TreatmentsFromHistoryFragment extends Fragment implements View.OnClickListener { @@ -27,6 +28,7 @@ public class TreatmentsFromHistoryFragment extends Fragment implements View.OnCl Context context; TextView treatmentsTab; + TextView extendedBolusesTab; TextView tempBasalsTab; @Override @@ -35,8 +37,10 @@ public class TreatmentsFromHistoryFragment extends Fragment implements View.OnCl View view = inflater.inflate(R.layout.treatments_fragment, container, false); treatmentsTab = (TextView) view.findViewById(R.id.treatments_treatments); + extendedBolusesTab = (TextView) view.findViewById(R.id.treatments_extendedboluses); tempBasalsTab = (TextView) view.findViewById(R.id.treatments_tempbasals); treatmentsTab.setOnClickListener(this); + extendedBolusesTab.setOnClickListener(this); tempBasalsTab.setOnClickListener(this); context = getContext(); @@ -52,6 +56,9 @@ public class TreatmentsFromHistoryFragment extends Fragment implements View.OnCl case R.id.treatments_treatments: setFragment(new TreatmentsBolusFragment()); break; + case R.id.treatments_extendedboluses: + setFragment(new TreatmentsExtendedBolusesFragment()); + break; case R.id.treatments_tempbasals: setFragment(new TreatmentsTemporaryBasalsFragment()); break; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryPlugin.java index 561eea3ced..768fc310ee 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/TreatmentsFromHistoryPlugin.java @@ -321,7 +321,7 @@ public class TreatmentsFromHistoryPlugin implements PluginBase, TreatmentsInterf @Override public void extendedBolusStart(ExtendedBolus extendedBolus) { - MainApp.getDbHelper().create(extendedBolus); + MainApp.getDbHelper().createOrUpdate(extendedBolus); } @Override @@ -329,7 +329,7 @@ public class TreatmentsFromHistoryPlugin implements PluginBase, TreatmentsInterf ExtendedBolus extendedBolus = new ExtendedBolus(); extendedBolus.date = time; extendedBolus.durationInMinutes = 0; - MainApp.getDbHelper().create(extendedBolus); + MainApp.getDbHelper().createOrUpdate(extendedBolus); } @Override @@ -368,7 +368,7 @@ public class TreatmentsFromHistoryPlugin implements PluginBase, TreatmentsInterf @Override public void tempBasalStart(TemporaryBasal tempBasal) { - MainApp.getDbHelper().createIfNotExists(tempBasal); + MainApp.getDbHelper().createOrUpdate(tempBasal); } @Override @@ -376,7 +376,7 @@ public class TreatmentsFromHistoryPlugin implements PluginBase, TreatmentsInterf TemporaryBasal temporaryBasal = new TemporaryBasal(); temporaryBasal.date = time; temporaryBasal.durationInMinutes = 0; - MainApp.getDbHelper().createIfNotExists(temporaryBasal); + MainApp.getDbHelper().createOrUpdate(temporaryBasal); } @Override diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsExtendedBolusesFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsExtendedBolusesFragment.java new file mode 100644 index 0000000000..cb1c107980 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsExtendedBolusesFragment.java @@ -0,0 +1,211 @@ +package info.nightscout.androidaps.plugins.TreatmentsFromHistory.fragments; + +import android.app.Activity; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Paint; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.CardView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.crashlytics.android.answers.Answers; +import com.crashlytics.android.answers.CustomEvent; +import com.squareup.otto.Subscribe; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; + +import info.nightscout.androidaps.MainApp; +import info.nightscout.androidaps.R; +import info.nightscout.androidaps.data.IobTotal; +import info.nightscout.androidaps.db.ExtendedBolus; +import info.nightscout.androidaps.events.EventExtendedBolusChange; +import info.nightscout.androidaps.events.EventNewBG; +import info.nightscout.utils.DateUtil; +import info.nightscout.utils.DecimalFormatter; +import info.nightscout.utils.OverlappingIntervals; + + +public class TreatmentsExtendedBolusesFragment extends Fragment { + private static Logger log = LoggerFactory.getLogger(TreatmentsExtendedBolusesFragment.class); + + RecyclerView recyclerView; + LinearLayoutManager llm; + + Context context; + + public class RecyclerViewAdapter extends RecyclerView.Adapter { + + OverlappingIntervals extendedBolusList; + + RecyclerViewAdapter(OverlappingIntervals extendedBolusList) { + this.extendedBolusList = extendedBolusList; + } + + @Override + public ExtendedBolusesViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { + View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.treatments_extendedbolus_item, viewGroup, false); + return new ExtendedBolusesViewHolder(v); + } + + @Override + public void onBindViewHolder(ExtendedBolusesViewHolder holder, int position) { + ExtendedBolus extendedBolus = extendedBolusList.getReversed(position); + if (extendedBolus.isEndingEvent()) { + holder.date.setText(DateUtil.dateAndTimeString(extendedBolus.date)); + holder.duration.setText(MainApp.sResources.getString(R.string.stopevent)); + holder.insulin.setText(""); + holder.realDuration.setText(""); + holder.iob.setText(""); + holder.insulinSoFar.setText(""); + holder.ratio.setText(""); + } else { + if (extendedBolus.isInProgress()) { + holder.date.setText(DateUtil.dateAndTimeString(extendedBolus.date)); + } else { + holder.date.setText(DateUtil.dateAndTimeString(extendedBolus.date) + " - " + DateUtil.timeString(extendedBolus.end())); + } + holder.duration.setText(DecimalFormatter.to0Decimal(extendedBolus.durationInMinutes) + " min"); + holder.insulin.setText(DecimalFormatter.to2Decimal(extendedBolus.insulin) + " U"); + holder.realDuration.setText(DecimalFormatter.to0Decimal(extendedBolus.getRealDuration()) + " min"); + IobTotal iob = extendedBolus.iobCalc(new Date().getTime()); + holder.iob.setText(DecimalFormatter.to2Decimal(iob.iob) + " U"); + holder.insulinSoFar.setText(DecimalFormatter.to2Decimal(extendedBolus.insulinSoFar()) + " U"); + holder.ratio.setText(DecimalFormatter.to2Decimal(extendedBolus.absoluteRate()) + " U/h"); + if (extendedBolus.isInProgress()) + holder.date.setTextColor(ContextCompat.getColor(MainApp.instance(), R.color.colorActive)); + else + holder.date.setTextColor(holder.insulin.getCurrentTextColor()); + if (extendedBolus.iobCalc(new Date().getTime()).iob != 0) + holder.iob.setTextColor(ContextCompat.getColor(MainApp.instance(), R.color.colorActive)); + else + holder.iob.setTextColor(holder.insulin.getCurrentTextColor()); + } + holder.remove.setTag(extendedBolus); + } + + @Override + public int getItemCount() { + return extendedBolusList.size(); + } + + @Override + public void onAttachedToRecyclerView(RecyclerView recyclerView) { + super.onAttachedToRecyclerView(recyclerView); + } + + public class ExtendedBolusesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + CardView cv; + TextView date; + TextView duration; + TextView insulin; + TextView realDuration; + TextView ratio; + TextView insulinSoFar; + TextView iob; + TextView remove; + + ExtendedBolusesViewHolder(View itemView) { + super(itemView); + cv = (CardView) itemView.findViewById(R.id.extendedboluses_cardview); + date = (TextView) itemView.findViewById(R.id.extendedboluses_date); + duration = (TextView) itemView.findViewById(R.id.extendedboluses_duration); + insulin = (TextView) itemView.findViewById(R.id.extendedboluses_insulin); + realDuration = (TextView) itemView.findViewById(R.id.extendedboluses_realduration); + ratio = (TextView) itemView.findViewById(R.id.extendedboluses_ratio); + insulinSoFar = (TextView) itemView.findViewById(R.id.extendedboluses_netinsulin); + iob = (TextView) itemView.findViewById(R.id.extendedboluses_iob); + remove = (TextView) itemView.findViewById(R.id.extendedboluses_remove); + remove.setOnClickListener(this); + remove.setPaintFlags(remove.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); + } + + @Override + public void onClick(View v) { + final ExtendedBolus extendedBolus = (ExtendedBolus) v.getTag(); + switch (v.getId()) { + case R.id.extendedboluses_remove: + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(MainApp.sResources.getString(R.string.confirmation)); + builder.setMessage(MainApp.sResources.getString(R.string.removerecord) + "\n" + DateUtil.dateAndTimeString(extendedBolus.date)); + builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + final String _id = extendedBolus._id; + if (_id != null && !_id.equals("")) { + MainApp.getConfigBuilder().removeCareportalEntryFromNS(_id); + } + MainApp.getDbHelper().delete(extendedBolus); + Answers.getInstance().logCustom(new CustomEvent("RemoveExtendedBolus")); + } + }); + builder.setNegativeButton(MainApp.sResources.getString(R.string.cancel), null); + builder.show(); + break; + } + } + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.treatments_extendedbolus_fragment, container, false); + + recyclerView = (RecyclerView) view.findViewById(R.id.extendedboluses_recyclerview); + recyclerView.setHasFixedSize(true); + llm = new LinearLayoutManager(view.getContext()); + recyclerView.setLayoutManager(llm); + + RecyclerViewAdapter adapter = new RecyclerViewAdapter(MainApp.getConfigBuilder().getExtendedBoluses()); + recyclerView.setAdapter(adapter); + + context = getContext(); + + updateGUI(); + return view; + } + + @Override + public void onPause() { + super.onPause(); + MainApp.bus().unregister(this); + } + + @Override + public void onResume() { + super.onResume(); + MainApp.bus().register(this); + } + + @Subscribe + public void onStatusEvent(final EventExtendedBolusChange ev) { + updateGUI(); + } + + @Subscribe + public void onStatusEvent(final EventNewBG ev) { + updateGUI(); + } + + public void updateGUI() { + Activity activity = getActivity(); + if (activity != null && recyclerView != null) + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + recyclerView.swapAdapter(new RecyclerViewAdapter(MainApp.getConfigBuilder().getExtendedBoluses()), false); + } + }); + } + +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsTemporaryBasalsFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsTemporaryBasalsFragment.java index c1cebde4c3..a0ac9749e1 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsTemporaryBasalsFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/TreatmentsFromHistory/fragments/TreatmentsTemporaryBasalsFragment.java @@ -156,11 +156,10 @@ public class TreatmentsTemporaryBasalsFragment extends Fragment { builder.setMessage(MainApp.sResources.getString(R.string.removerecord) + "\n" + DateUtil.dateAndTimeString(tempBasal.date)); builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - // TODO: handle this in NS too - //final String _id = tempBasal._id; - //if (_id != null && !_id.equals("")) { - // MainApp.getConfigBuilder().removeCareportalEntryFromNS(_id); - //} + final String _id = tempBasal._id; + if (_id != null && !_id.equals("")) { + MainApp.getConfigBuilder().removeCareportalEntryFromNS(_id); + } MainApp.getDbHelper().delete(tempBasal); Answers.getInstance().logCustom(new CustomEvent("RemoveTempBasal")); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java index 24a128c246..1cbe738524 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java @@ -365,7 +365,7 @@ public class ActionStringHandler { tempTarget.low = 0; tempTarget.high = 0; } - MainApp.getDbHelper().createIfNotExists(tempTarget); + MainApp.getDbHelper().createOrUpdate(tempTarget); //TODO: Nightscout-Treatment for Temp-Target! //ConfigBuilderPlugin.uploadCareportalEntryToNS(data); diff --git a/app/src/main/res/layout/treatments_extendedbolus_fragment.xml b/app/src/main/res/layout/treatments_extendedbolus_fragment.xml new file mode 100644 index 0000000000..5b7e61e6ac --- /dev/null +++ b/app/src/main/res/layout/treatments_extendedbolus_fragment.xml @@ -0,0 +1,20 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/treatments_extendedbolus_item.xml b/app/src/main/res/layout/treatments_extendedbolus_item.xml new file mode 100644 index 0000000000..3398be272f --- /dev/null +++ b/app/src/main/res/layout/treatments_extendedbolus_item.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/treatments_fragment.xml b/app/src/main/res/layout/treatments_fragment.xml index 55a0944291..0bcb3f2274 100644 --- a/app/src/main/res/layout/treatments_fragment.xml +++ b/app/src/main/res/layout/treatments_fragment.xml @@ -23,6 +23,14 @@ android:gravity="center_horizontal" android:text="@string/bolus" /> + + Basal Step Bolus Step STOP + ExtendedBolus