it compiles now with profiles

This commit is contained in:
Milos Kozak 2017-06-02 10:25:49 +02:00
parent a19a5a442b
commit f267c85377
74 changed files with 1476 additions and 1157 deletions

View file

@ -2,9 +2,7 @@ package info.nightscout.androidaps.Services;
import android.app.IntentService; import android.app.IntentService;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager;
import android.provider.Telephony; import android.provider.Telephony;
import org.json.JSONArray; import org.json.JSONArray;
@ -22,19 +20,16 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.BgReading; import info.nightscout.androidaps.db.BgReading;
import info.nightscout.androidaps.db.CareportalEvent; import info.nightscout.androidaps.db.CareportalEvent;
import info.nightscout.androidaps.events.EventNewBasalProfile; import info.nightscout.androidaps.events.EventNewBasalProfile;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.ConstraintsObjectives.ObjectivesPlugin; import info.nightscout.androidaps.plugins.ConstraintsObjectives.ObjectivesPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSgv; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSgv;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.plugins.Overview.Notification; import info.nightscout.androidaps.plugins.Overview.Notification;
import info.nightscout.androidaps.plugins.Overview.OverviewPlugin; import info.nightscout.androidaps.plugins.Overview.OverviewPlugin;
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin; import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin;
import info.nightscout.androidaps.plugins.PumpDanaR.History.DanaRNSHistorySync; import info.nightscout.androidaps.plugins.PumpDanaR.History.DanaRNSHistorySync;
import info.nightscout.androidaps.plugins.SmsCommunicator.SmsCommunicatorPlugin;
import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventNewSMS; import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventNewSMS;
import info.nightscout.androidaps.plugins.SourceGlimp.SourceGlimpPlugin; import info.nightscout.androidaps.plugins.SourceGlimp.SourceGlimpPlugin;
import info.nightscout.androidaps.plugins.SourceMM640g.SourceMM640gPlugin; import info.nightscout.androidaps.plugins.SourceMM640g.SourceMM640gPlugin;
@ -84,7 +79,7 @@ public class DataService extends IntentService {
glimpEnabled = true; glimpEnabled = true;
} }
boolean isNSProfile = ConfigBuilderPlugin.getActiveProfile().getClass().equals(NSProfilePlugin.class); boolean isNSProfile = ConfigBuilderPlugin.getActiveProfileInterface().getClass().equals(NSProfilePlugin.class);
boolean nsUploadOnly = SP.getBoolean(R.string.key_ns_upload_only, false); boolean nsUploadOnly = SP.getBoolean(R.string.key_ns_upload_only, false);
@ -325,25 +320,12 @@ public class DataService extends IntentService {
try { try {
String activeProfile = bundles.getString("activeprofile"); String activeProfile = bundles.getString("activeprofile");
String profile = bundles.getString("profile"); String profile = bundles.getString("profile");
NSProfile nsProfile = new NSProfile(new JSONObject(profile), activeProfile); ProfileStore profileStore = new ProfileStore(new JSONObject(profile));
MainApp.bus().post(new EventNewBasalProfile(nsProfile, "NSClient")); NSProfilePlugin.storeNewProfile(profileStore);
MainApp.bus().post(new EventNewBasalProfile());
PumpInterface pump = MainApp.getConfigBuilder();
if (pump != null) {
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
if (SP.getBoolean("syncprofiletopump", false)) {
if (pump.setNewBasalProfile(nsProfile) == PumpInterface.SUCCESS) {
SmsCommunicatorPlugin smsCommunicatorPlugin = (SmsCommunicatorPlugin) MainApp.getSpecificPlugin(SmsCommunicatorPlugin.class);
if (smsCommunicatorPlugin != null && smsCommunicatorPlugin.isEnabled(PluginBase.GENERAL)) {
smsCommunicatorPlugin.sendNotificationToAllNumbers(MainApp.sResources.getString(R.string.profile_set_ok));
}
}
}
} else {
log.error("No active pump selected");
}
if (Config.logIncommingData) if (Config.logIncommingData)
log.debug("Received profile: " + activeProfile + " " + profile); log.debug("Received profileStore: " + activeProfile + " " + profile);
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -462,6 +444,7 @@ public class DataService extends IntentService {
MainApp.getDbHelper().deleteTempBasalById(_id); MainApp.getDbHelper().deleteTempBasalById(_id);
MainApp.getDbHelper().deleteExtendedBolusById(_id); MainApp.getDbHelper().deleteExtendedBolusById(_id);
MainApp.getDbHelper().deleteCareportalEventById(_id); MainApp.getDbHelper().deleteCareportalEventById(_id);
MainApp.getDbHelper().deleteProfileSwitchById(_id);
} }
private void handleAddChangeDataFromNS(String trstring) throws JSONException { private void handleAddChangeDataFromNS(String trstring) throws JSONException {
@ -472,6 +455,7 @@ public class DataService extends IntentService {
handleAddChangeExtendedBolusRecord(trJson); handleAddChangeExtendedBolusRecord(trJson);
handleAddChangeCareportalEventRecord(trJson); handleAddChangeCareportalEventRecord(trJson);
handleAddChangeTreatmentRecord(trJson); handleAddChangeTreatmentRecord(trJson);
handleAddChangeProfileSwitchRecord(trJson);
} }
public void handleDanaRHistoryRecords(JSONObject trJson) { public void handleDanaRHistoryRecords(JSONObject trJson) {
@ -525,6 +509,14 @@ public class DataService extends IntentService {
} }
} }
public void handleAddChangeProfileSwitchRecord(JSONObject trJson) throws JSONException {
if (trJson.has("eventType") && trJson.getString("eventType").equals(CareportalEvent.PROFILESWITCH)) {
if (Config.logIncommingData)
log.debug("Processing ProfileSwitch record: " + trJson.toString());
MainApp.getDbHelper().createProfileSwitchFromJsonIfNotExists(trJson);
}
}
private void handleNewSMS(Intent intent) { private void handleNewSMS(Intent intent) {
Bundle bundle = intent.getExtras(); Bundle bundle = intent.getExtras();
if (bundle == null) return; if (bundle == null) return;

View file

@ -1,13 +1,10 @@
package info.nightscout.androidaps.data; package info.nightscout.androidaps.data;
import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.Date; import java.util.Date;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.Round; import info.nightscout.utils.Round;

View file

@ -0,0 +1,347 @@
package info.nightscout.androidaps.data;
import com.crashlytics.android.Crashlytics;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.Overview.Notification;
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.ToastUtils;
public class Profile {
private static Logger log = LoggerFactory.getLogger(Profile.class);
private JSONObject json;
private String units = null;
double dia = Constants.defaultDIA;
TimeZone timeZone = TimeZone.getDefault();
JSONArray isf;
JSONArray ic;
JSONArray basal;
JSONArray targetLow;
JSONArray targetHigh;
public Profile(JSONObject json, String units) {
this(json);
if (this.units == null) {
if (units != null)
this.units = units;
else {
Crashlytics.log("Profile failover failed too");
this.units = Constants.MGDL;
}
}
}
public Profile(JSONObject json) {
this.json = json;
try {
if (json.has("units"))
units = json.getString("units").toLowerCase();
if (json.has("dia"))
dia = json.getDouble("dia");
if (json.has("dia"))
dia = json.getDouble("dia");
if (json.has("timezone"))
timeZone = TimeZone.getTimeZone(json.getString("timezone"));
isf = json.getJSONArray("sens");
if (getIsf(0) == null) {
int defaultISF = units.equals(Constants.MGDL) ? 400 : 20;
isf = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultISF + "\",\"timeAsSeconds\":\"0\"}]");
Notification noisf = new Notification(Notification.ISF_MISSING, MainApp.sResources.getString(R.string.isfmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(noisf));
} else {
MainApp.bus().post(new EventDismissNotification(Notification.ISF_MISSING));
}
ic = json.getJSONArray("carbratio");
if (getIc(0) == null) {
int defaultIC = 25;
isf = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultIC + "\",\"timeAsSeconds\":\"0\"}]");
Notification noic = new Notification(Notification.IC_MISSING, MainApp.sResources.getString(R.string.icmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(noic));
} else {
MainApp.bus().post(new EventDismissNotification(Notification.IC_MISSING));
}
basal = json.getJSONArray("basal");
if (getBasal(0) == null) {
double defaultBasal = 0.1d;
isf = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultBasal + "\",\"timeAsSeconds\":\"0\"}]");
Notification nobasal = new Notification(Notification.BASAL_MISSING, MainApp.sResources.getString(R.string.basalmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(nobasal));
} else {
MainApp.bus().post(new EventDismissNotification(Notification.BASAL_MISSING));
}
targetLow = json.getJSONArray("target_low");
if (getTargetLow(0) == null) {
double defaultLow = units.equals(Constants.MGDL) ? 120 : 6;
isf = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultLow + "\",\"timeAsSeconds\":\"0\"}]");
Notification notarget = new Notification(Notification.TARGET_MISSING, MainApp.sResources.getString(R.string.targetmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(notarget));
} else {
MainApp.bus().post(new EventDismissNotification(Notification.TARGET_MISSING));
}
targetHigh = json.getJSONArray("target_high");
if (getTargetHigh(0) == null) {
double defaultHigh = units.equals(Constants.MGDL) ? 160 : 8;
isf = new JSONArray("[{\"time\":\"00:00\",\"value\":\"" + defaultHigh + "\",\"timeAsSeconds\":\"0\"}]");
Notification notarget = new Notification(Notification.TARGET_MISSING, MainApp.sResources.getString(R.string.targetmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(notarget));
} else {
MainApp.bus().post(new EventDismissNotification(Notification.TARGET_MISSING));
}
} catch (JSONException e) {
e.printStackTrace();
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.invalidprofile));
}
}
public String log() {
String ret = "\n";
for (Integer hour = 0; hour < 24; hour++) {
double value = getBasal(hour * 60 * 60);
ret += "NS basal value for " + hour + ":00 is " + value + "\n";
}
ret += "NS units: " + getUnits();
return ret;
}
public JSONObject getData() {
return json;
}
public Double getDia() {
return dia;
}
// mmol or mg/dl
public String getUnits() {
return units;
}
public TimeZone getTimeZone() {
return timeZone;
}
private Double getValueToTime(JSONArray array, Integer timeAsSeconds) {
Double lastValue = null;
for (Integer index = 0; index < array.length(); index++) {
try {
JSONObject o = array.getJSONObject(index);
Integer tas = o.getInt("timeAsSeconds");
Double value = o.getDouble("value");
if (lastValue == null) lastValue = value;
if (timeAsSeconds < tas) {
break;
}
lastValue = value;
} catch (JSONException e) {
e.printStackTrace();
}
}
return lastValue;
}
private String getValuesList(JSONArray array, JSONArray array2, DecimalFormat format, String units) {
String retValue = "";
for (Integer index = 0; index < array.length(); index++) {
try {
JSONObject o = array.getJSONObject(index);
retValue += o.getString("time");
retValue += " ";
retValue += format.format(o.getDouble("value"));
if (array2 != null) {
JSONObject o2 = array2.getJSONObject(index);
retValue += " - ";
retValue += format.format(o2.getDouble("value"));
}
retValue += " " + units;
retValue += "\n";
} catch (JSONException e) {
e.printStackTrace();
}
}
return retValue;
}
public Double getIsf() {
return getIsf(secondsFromMidnight(new Date().getTime()));
}
public Double getIsf(long time) {
return getIsf(secondsFromMidnight(time));
}
public Double getIsf(Integer timeAsSeconds) {
return getValueToTime(isf, timeAsSeconds);
}
public String getIsfList() {
return getValuesList(isf, null, new DecimalFormat("0.0"), getUnits() + "/U");
}
public Double getIc() {
return getIc(secondsFromMidnight(new Date().getTime()));
}
public Double getIc(long time) {
return getIc(secondsFromMidnight(time));
}
public Double getIc(Integer timeAsSeconds) {
return getValueToTime(ic, timeAsSeconds);
}
public String getIcList() {
return getValuesList(ic, null, new DecimalFormat("0.0"), getUnits() + "/U");
}
public Double getBasal() {
return getBasal(secondsFromMidnight(new Date().getTime()));
}
public Double getBasal(long time) {
return getBasal(secondsFromMidnight(time));
}
public Double getBasal(Integer timeAsSeconds) {
return getValueToTime(basal, timeAsSeconds);
}
public String getBasalList() {
return getValuesList(basal, null, new DecimalFormat("0.00"), "U");
}
public class BasalValue {
public BasalValue(Integer timeAsSeconds, Double value) {
this.timeAsSeconds = timeAsSeconds;
this.value = value;
}
public Integer timeAsSeconds;
public Double value;
}
public BasalValue[] getBasalValues() {
try {
BasalValue[] ret = new BasalValue[basal.length()];
for (Integer index = 0; index < basal.length(); index++) {
JSONObject o = basal.getJSONObject(index);
Integer tas = o.getInt("timeAsSeconds");
Double value = o.getDouble("value");
ret[index] = new BasalValue(tas, value);
}
return ret;
} catch (JSONException e) {
e.printStackTrace();
}
return new BasalValue[0];
}
public Double getTargetLow() {
return getTargetLow(secondsFromMidnight(new Date().getTime()));
}
public Double getTargetLow(long time) {
return getTargetLow(secondsFromMidnight(time));
}
public Double getTargetLow(Integer timeAsSeconds) {
return getValueToTime(targetLow, timeAsSeconds);
}
public Double getTargetHigh() {
return getTargetHigh(secondsFromMidnight(new Date().getTime()));
}
public Double getTargetHigh(long time) {
return getTargetHigh(secondsFromMidnight(time));
}
public Double getTargetHigh(Integer timeAsSeconds) {
return getValueToTime(targetHigh, timeAsSeconds);
}
public String getTargetList() {
return getValuesList(targetLow, targetHigh, new DecimalFormat("0.0"), getUnits());
}
public double getMaxDailyBasal() {
Double max = 0d;
for (Integer hour = 0; hour < 24; hour++) {
double value = getBasal(hour * 60 * 60);
if (value > max) max = value;
}
return max;
}
public static int secondsFromMidnight() {
Calendar c = Calendar.getInstance();
long now = c.getTimeInMillis();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long passed = now - c.getTimeInMillis();
return (int) (passed / 1000);
}
public static int secondsFromMidnight(Date date) {
Calendar c = Calendar.getInstance();
long now = date.getTime();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long passed = now - c.getTimeInMillis();
return (int) (passed / 1000);
}
public static int secondsFromMidnight(long date) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long passed = date - c.getTimeInMillis();
return (int) (passed / 1000);
}
public static Double toMgdl(Double value, String units) {
if (units.equals(Constants.MGDL)) return value;
else return value * Constants.MMOLL_TO_MGDL;
}
public static Double fromMgdlToUnits(Double value, String units) {
if (units.equals(Constants.MGDL)) return value;
else return value * Constants.MGDL_TO_MMOLL;
}
public static Double toUnits(Double valueInMgdl, Double valueInMmol, String units) {
if (units.equals(Constants.MGDL)) return valueInMgdl;
else return valueInMmol;
}
public static String toUnitsString(Double valueInMgdl, Double valueInMmol, String units) {
if (units.equals(Constants.MGDL)) return DecimalFormatter.to0Decimal(valueInMgdl);
else return DecimalFormatter.to1Decimal(valueInMmol);
}
}

View file

@ -0,0 +1,99 @@
package info.nightscout.androidaps.data;
import android.support.annotation.Nullable;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Iterator;
/**
* Created by mike on 01.06.2017.
*/
public class ProfileStore {
private static Logger log = LoggerFactory.getLogger(ProfileStore.class);
private JSONObject json = null;
public ProfileStore(JSONObject json) {
this.json = json;
}
public JSONObject getData() {
return json;
}
@Nullable
public Profile getDefaultProfile() {
Profile profile = null;
try {
String defaultProfileName = json.getString("defaultProfile");
JSONObject store = json.getJSONObject("store");
if (store.has(defaultProfileName)) {
String units = null;
if (store.has("units"))
units = store.getString("units");
profile = new Profile(store.getJSONObject(defaultProfileName), units);
}
} catch (JSONException e) {
e.printStackTrace();
}
return profile;
}
@Nullable
public String getDefaultProfileName() {
String defaultProfileName = null;
try {
defaultProfileName = json.getString("defaultProfile");
JSONObject store = json.getJSONObject("store");
if (store.has(defaultProfileName)) {
return defaultProfileName;
}
} catch (JSONException e) {
e.printStackTrace();
}
return defaultProfileName;
}
@Nullable
public Profile getSpecificProfile(String profileName) {
Profile profile = null;
try {
JSONObject store = json.getJSONObject("store");
if (store.has(profileName)) {
String units = null;
if (store.has("units"))
units = store.getString("units");
profile = new Profile(store.getJSONObject(profileName), units);
}
} catch (JSONException e) {
e.printStackTrace();
}
return profile;
}
public ArrayList<CharSequence> getProfileList() {
ArrayList<CharSequence> ret = new ArrayList<CharSequence>();
JSONObject store;
try {
store = json.getJSONObject("store");
Iterator<?> keys = store.keys();
while (keys.hasNext()) {
String profileName = (String) keys.next();
ret.add(profileName);
}
} catch (JSONException e) {
e.printStackTrace();
}
return ret;
}
}

View file

@ -8,7 +8,6 @@ import org.json.JSONObject;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.Round; import info.nightscout.utils.Round;
@ -94,7 +93,7 @@ public class PumpEnactResult extends Object {
result.put("duration", 0); result.put("duration", 0);
} else if (isPercent) { } else if (isPercent) {
// Nightscout is expecting absolute value // Nightscout is expecting absolute value
Double abs = Round.roundTo(MainApp.getConfigBuilder().getActiveProfile().getProfile().getBasal(NSProfile.secondsFromMidnight()) * percent / 100, 0.01); Double abs = Round.roundTo(MainApp.getConfigBuilder().getProfile().getBasal() * percent / 100, 0.01);
result.put("rate", abs); result.put("rate", abs);
result.put("duration", duration); result.put("duration", duration);
} else { } else {

View file

@ -34,6 +34,7 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.events.EventCareportalEventChange; import info.nightscout.androidaps.events.EventCareportalEventChange;
import info.nightscout.androidaps.events.EventExtendedBolusChange; import info.nightscout.androidaps.events.EventExtendedBolusChange;
import info.nightscout.androidaps.events.EventNewBG; import info.nightscout.androidaps.events.EventNewBG;
import info.nightscout.androidaps.events.EventNewBasalProfile;
import info.nightscout.androidaps.events.EventRefreshGui; import info.nightscout.androidaps.events.EventRefreshGui;
import info.nightscout.androidaps.events.EventReloadTempBasalData; import info.nightscout.androidaps.events.EventReloadTempBasalData;
import info.nightscout.androidaps.events.EventReloadTreatmentData; import info.nightscout.androidaps.events.EventReloadTreatmentData;
@ -41,7 +42,7 @@ import info.nightscout.androidaps.events.EventTempBasalChange;
import info.nightscout.androidaps.events.EventTempTargetChange; import info.nightscout.androidaps.events.EventTempTargetChange;
import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.events.EventTreatmentChange;
import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventNewHistoryData; import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventNewHistoryData;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.PumpDanaR.History.DanaRNSHistorySync; import info.nightscout.androidaps.plugins.PumpDanaR.History.DanaRNSHistorySync;
public class DatabaseHelper extends OrmLiteSqliteOpenHelper { public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
@ -56,6 +57,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
public static final String DATABASE_DANARHISTORY = "DanaRHistory"; public static final String DATABASE_DANARHISTORY = "DanaRHistory";
public static final String DATABASE_DBREQUESTS = "DBRequests"; public static final String DATABASE_DBREQUESTS = "DBRequests";
public static final String DATABASE_CAREPORTALEVENTS = "CareportalEvents"; public static final String DATABASE_CAREPORTALEVENTS = "CareportalEvents";
public static final String DATABASE_PROFILESWITCHES = "ProfileSwitches";
private static final int DATABASE_VERSION = 7; private static final int DATABASE_VERSION = 7;
@ -79,6 +81,9 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final ScheduledExecutorService careportalEventWorker = Executors.newSingleThreadScheduledExecutor(); private static final ScheduledExecutorService careportalEventWorker = Executors.newSingleThreadScheduledExecutor();
private static ScheduledFuture<?> scheduledCareportalEventPost = null; private static ScheduledFuture<?> scheduledCareportalEventPost = null;
private static final ScheduledExecutorService profileSwitchEventWorker = Executors.newSingleThreadScheduledExecutor();
private static ScheduledFuture<?> scheduledProfileSwitchEventPost = null;
public DatabaseHelper(Context context) { public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION); super(context, DATABASE_NAME, null, DATABASE_VERSION);
onCreate(getWritableDatabase(), getConnectionSource()); onCreate(getWritableDatabase(), getConnectionSource());
@ -96,6 +101,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
TableUtils.createTableIfNotExists(connectionSource, TemporaryBasal.class); TableUtils.createTableIfNotExists(connectionSource, TemporaryBasal.class);
TableUtils.createTableIfNotExists(connectionSource, ExtendedBolus.class); TableUtils.createTableIfNotExists(connectionSource, ExtendedBolus.class);
TableUtils.createTableIfNotExists(connectionSource, CareportalEvent.class); TableUtils.createTableIfNotExists(connectionSource, CareportalEvent.class);
TableUtils.createTableIfNotExists(connectionSource, ProfileSwitch.class);
} catch (SQLException e) { } catch (SQLException e) {
log.error("Can't create database", e); log.error("Can't create database", e);
throw new RuntimeException(e); throw new RuntimeException(e);
@ -114,6 +120,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
TableUtils.dropTable(connectionSource, TemporaryBasal.class, true); TableUtils.dropTable(connectionSource, TemporaryBasal.class, true);
TableUtils.dropTable(connectionSource, ExtendedBolus.class, true); TableUtils.dropTable(connectionSource, ExtendedBolus.class, true);
TableUtils.dropTable(connectionSource, CareportalEvent.class, true); TableUtils.dropTable(connectionSource, CareportalEvent.class, true);
TableUtils.dropTable(connectionSource, ProfileSwitch.class, true);
onCreate(database, connectionSource); onCreate(database, connectionSource);
} catch (SQLException e) { } catch (SQLException e) {
log.error("Can't drop databases", e); log.error("Can't drop databases", e);
@ -158,6 +165,10 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
log.debug("Before CareportalEvent size: " + DatabaseUtils.queryNumEntries(getReadableDatabase(), DATABASE_CAREPORTALEVENTS)); log.debug("Before CareportalEvent size: " + DatabaseUtils.queryNumEntries(getReadableDatabase(), DATABASE_CAREPORTALEVENTS));
getWritableDatabase().delete(DATABASE_CAREPORTALEVENTS, "recordDate" + " < '" + (new Date().getTime() - Constants.daysToKeepHistoryInDatabase * 24 * 60 * 60 * 1000L) + "'", null); getWritableDatabase().delete(DATABASE_CAREPORTALEVENTS, "recordDate" + " < '" + (new Date().getTime() - Constants.daysToKeepHistoryInDatabase * 24 * 60 * 60 * 1000L) + "'", null);
log.debug("After CareportalEvent size: " + DatabaseUtils.queryNumEntries(getReadableDatabase(), DATABASE_CAREPORTALEVENTS)); log.debug("After CareportalEvent size: " + DatabaseUtils.queryNumEntries(getReadableDatabase(), DATABASE_CAREPORTALEVENTS));
log.debug("Before ProfileSwitch size: " + DatabaseUtils.queryNumEntries(getReadableDatabase(), DATABASE_PROFILESWITCHES));
getWritableDatabase().delete(DATABASE_PROFILESWITCHES, "recordDate" + " < '" + (new Date().getTime() - Constants.daysToKeepHistoryInDatabase * 24 * 60 * 60 * 1000L) + "'", null);
log.debug("After ProfileSwitch size: " + DatabaseUtils.queryNumEntries(getReadableDatabase(), DATABASE_PROFILESWITCHES));
} }
public long size(String database) { public long size(String database) {
@ -176,6 +187,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
TableUtils.dropTable(connectionSource, TemporaryBasal.class, true); TableUtils.dropTable(connectionSource, TemporaryBasal.class, true);
TableUtils.dropTable(connectionSource, ExtendedBolus.class, true); TableUtils.dropTable(connectionSource, ExtendedBolus.class, true);
TableUtils.dropTable(connectionSource, CareportalEvent.class, true); TableUtils.dropTable(connectionSource, CareportalEvent.class, true);
TableUtils.dropTable(connectionSource, ProfileSwitch.class, true);
TableUtils.createTableIfNotExists(connectionSource, TempTarget.class); TableUtils.createTableIfNotExists(connectionSource, TempTarget.class);
TableUtils.createTableIfNotExists(connectionSource, Treatment.class); TableUtils.createTableIfNotExists(connectionSource, Treatment.class);
TableUtils.createTableIfNotExists(connectionSource, BgReading.class); TableUtils.createTableIfNotExists(connectionSource, BgReading.class);
@ -184,6 +196,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
TableUtils.createTableIfNotExists(connectionSource, TemporaryBasal.class); TableUtils.createTableIfNotExists(connectionSource, TemporaryBasal.class);
TableUtils.createTableIfNotExists(connectionSource, ExtendedBolus.class); TableUtils.createTableIfNotExists(connectionSource, ExtendedBolus.class);
TableUtils.createTableIfNotExists(connectionSource, CareportalEvent.class); TableUtils.createTableIfNotExists(connectionSource, CareportalEvent.class);
TableUtils.createTableIfNotExists(connectionSource, ProfileSwitch.class);
updateEarliestDataChange(0); updateEarliestDataChange(0);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
@ -194,6 +207,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
scheduleExtendedBolusChange(); scheduleExtendedBolusChange();
scheduleTemporaryTargetChange(); scheduleTemporaryTargetChange();
scheduleCareportalEventChange(); scheduleCareportalEventChange();
scheduleProfileSwitchChange();
new java.util.Timer().schedule( new java.util.Timer().schedule(
new java.util.TimerTask() { new java.util.TimerTask() {
@Override @Override
@ -258,6 +272,16 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
scheduleCareportalEventChange(); scheduleCareportalEventChange();
} }
public void resetProfileSwitch() {
try {
TableUtils.dropTable(connectionSource, ProfileSwitch.class, true);
TableUtils.createTableIfNotExists(connectionSource, ProfileSwitch.class);
} catch (SQLException e) {
e.printStackTrace();
}
scheduleProfileSwitchChange();
}
// ------------------ getDao ------------------------------------------- // ------------------ getDao -------------------------------------------
private Dao<TempTarget, Long> getDaoTempTargets() throws SQLException { private Dao<TempTarget, Long> getDaoTempTargets() throws SQLException {
@ -292,6 +316,10 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
return getDao(CareportalEvent.class); return getDao(CareportalEvent.class);
} }
private Dao<ProfileSwitch, Long> getDaoProfileSwitch() throws SQLException {
return getDao(ProfileSwitch.class);
}
// ------------------- BgReading handling ----------------------- // ------------------- BgReading handling -----------------------
public void createIfNotExists(BgReading bgReading) { public void createIfNotExists(BgReading bgReading) {
@ -304,7 +332,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
scheduleBgChange(); scheduleBgChange();
} }
static public void scheduleBgChange() { private static void scheduleBgChange() {
class PostRunnable implements Runnable { class PostRunnable implements Runnable {
public void run() { public void run() {
log.debug("Firing EventNewBg"); log.debug("Firing EventNewBg");
@ -449,7 +477,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
// -------------------- TREATMENT HANDLING ------------------- // -------------------- TREATMENT HANDLING -------------------
public boolean changeAffectingIobCob(Treatment t) { private boolean changeAffectingIobCob(Treatment t) {
Treatment existing = findTreatmentByTime(t.date); Treatment existing = findTreatmentByTime(t.date);
if (existing == null) if (existing == null)
return true; return true;
@ -540,7 +568,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
return null; return null;
} }
void updateEarliestDataChange(long newDate) { private void updateEarliestDataChange(long newDate) {
if (earliestDataChange == null) { if (earliestDataChange == null) {
earliestDataChange = newDate; earliestDataChange = newDate;
return; return;
@ -550,7 +578,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
} }
} }
static public void scheduleTreatmentChange() { private static void scheduleTreatmentChange() {
class PostRunnable implements Runnable { class PostRunnable implements Runnable {
public void run() { public void run() {
log.debug("Firing EventTreatmentChange"); log.debug("Firing EventTreatmentChange");
@ -617,9 +645,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
treatment.insulin = trJson.has("insulin") ? trJson.getDouble("insulin") : 0d; treatment.insulin = trJson.has("insulin") ? trJson.getDouble("insulin") : 0d;
treatment._id = trJson.getString("_id"); treatment._id = trJson.getString("_id");
if (trJson.has("eventType")) { if (trJson.has("eventType")) {
treatment.mealBolus = true; treatment.mealBolus = !trJson.get("eventType").equals("Correction Bolus");
if (trJson.get("eventType").equals("Correction Bolus"))
treatment.mealBolus = false;
double carbs = treatment.carbs; double carbs = treatment.carbs;
if (trJson.has("boluscalc")) { if (trJson.has("boluscalc")) {
JSONObject boluscalc = trJson.getJSONObject("boluscalc"); JSONObject boluscalc = trJson.getJSONObject("boluscalc");
@ -631,9 +657,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
treatment.mealBolus = false; treatment.mealBolus = false;
} }
createOrUpdate(treatment); createOrUpdate(treatment);
} catch (SQLException e) { } catch (SQLException | JSONException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -676,7 +700,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
} }
} }
static public void scheduleTemporaryTargetChange() { private static void scheduleTemporaryTargetChange() {
class PostRunnable implements Runnable { class PostRunnable implements Runnable {
public void run() { public void run() {
log.debug("Firing EventTempTargetChange"); log.debug("Firing EventTempTargetChange");
@ -717,8 +741,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
where.eq("_id", trJson.getString("_id")).or().eq("date", trJson.getLong("mills")); where.eq("_id", trJson.getString("_id")).or().eq("date", trJson.getLong("mills"));
PreparedQuery<TempTarget> preparedQuery = queryBuilder.prepare(); PreparedQuery<TempTarget> preparedQuery = queryBuilder.prepare();
List<TempTarget> list = getDaoTempTargets().query(preparedQuery); List<TempTarget> list = getDaoTempTargets().query(preparedQuery);
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) return; // no profile data, better ignore than do something wrong
String units = profile.getUnits(); String units = profile.getUnits();
TempTarget tempTarget; TempTarget tempTarget;
if (list.size() == 0) { if (list.size() == 0) {
@ -736,14 +759,12 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
} }
tempTarget.date = trJson.getLong("mills"); tempTarget.date = trJson.getLong("mills");
tempTarget.durationInMinutes = trJson.getInt("duration"); tempTarget.durationInMinutes = trJson.getInt("duration");
tempTarget.low = NSProfile.toMgdl(trJson.getDouble("targetBottom"), units); tempTarget.low = Profile.toMgdl(trJson.getDouble("targetBottom"), units);
tempTarget.high = NSProfile.toMgdl(trJson.getDouble("targetTop"), units); tempTarget.high = Profile.toMgdl(trJson.getDouble("targetTop"), units);
tempTarget.reason = trJson.getString("reason"); tempTarget.reason = trJson.getString("reason");
tempTarget._id = trJson.getString("_id"); tempTarget._id = trJson.getString("_id");
createOrUpdate(tempTarget); createOrUpdate(tempTarget);
} catch (SQLException e) { } catch (SQLException | JSONException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -817,9 +838,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
// already set // already set
} }
} }
} catch (SQLException e) { } catch (SQLException | JSONException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -887,7 +906,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
return null; return null;
} }
static public void scheduleTemporaryBasalChange() { private static void scheduleTemporaryBasalChange() {
class PostRunnable implements Runnable { class PostRunnable implements Runnable {
public void run() { public void run() {
log.debug("Firing EventTempBasalChange"); log.debug("Firing EventTempBasalChange");
@ -1018,9 +1037,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
tempBasal._id = trJson.getString("_id"); tempBasal._id = trJson.getString("_id");
createOrUpdate(tempBasal); createOrUpdate(tempBasal);
} }
} catch (SQLException e) { } catch (SQLException | JSONException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@ -1179,14 +1196,12 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
extendedBolus.insulin = trJson.getDouble("relative"); extendedBolus.insulin = trJson.getDouble("relative");
extendedBolus._id = trJson.getString("_id"); extendedBolus._id = trJson.getString("_id");
createOrUpdate(extendedBolus); createOrUpdate(extendedBolus);
} catch (SQLException e) { } catch (SQLException | JSONException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
static public void scheduleExtendedBolusChange() { private static void scheduleExtendedBolusChange() {
class PostRunnable implements Runnable { class PostRunnable implements Runnable {
public void run() { public void run() {
log.debug("Firing EventExtendedBolusChange"); log.debug("Firing EventExtendedBolusChange");
@ -1302,14 +1317,12 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
careportalEvent.json = trJson.toString(); careportalEvent.json = trJson.toString();
careportalEvent._id = trJson.getString("_id"); careportalEvent._id = trJson.getString("_id");
createOrUpdate(careportalEvent); createOrUpdate(careportalEvent);
} catch (SQLException e) { } catch (SQLException | JSONException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
static public void scheduleCareportalEventChange() { private static void scheduleCareportalEventChange() {
class PostRunnable implements Runnable { class PostRunnable implements Runnable {
public void run() { public void run() {
log.debug("Firing scheduleCareportalEventChange"); log.debug("Firing scheduleCareportalEventChange");
@ -1327,4 +1340,135 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
} }
// ---------------- ProfileSwitch handling ---------------
public List<ProfileSwitch> getProfileSwitchDataFromTime(long mills, boolean ascending) {
try {
Dao<ProfileSwitch, Long> daoProfileSwitch = getDaoProfileSwitch();
List<ProfileSwitch> profileSwitches;
QueryBuilder<ProfileSwitch, Long> queryBuilder = daoProfileSwitch.queryBuilder();
queryBuilder.orderBy("date", ascending);
Where where = queryBuilder.where();
where.ge("date", mills);
PreparedQuery<ProfileSwitch> preparedQuery = queryBuilder.prepare();
profileSwitches = daoProfileSwitch.query(preparedQuery);
return profileSwitches;
} catch (SQLException e) {
e.printStackTrace();
}
return new ArrayList<ProfileSwitch>();
}
public void createOrUpdate(ProfileSwitch profileSwitch) {
profileSwitch.date = profileSwitch.date - profileSwitch.date % 1000;
try {
getDaoProfileSwitch().createOrUpdate(profileSwitch);
scheduleProfileSwitchChange();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void delete(ProfileSwitch profileSwitch) {
try {
getDaoProfileSwitch().delete(profileSwitch);
scheduleProfileSwitchChange();
} catch (SQLException e) {
e.printStackTrace();
}
}
private static void scheduleProfileSwitchChange() {
class PostRunnable implements Runnable {
public void run() {
log.debug("Firing EventNewBasalProfileChange");
MainApp.bus().post(new EventNewBasalProfile());
scheduledProfileSwitchEventPost = null;
}
}
// prepare task for execution in 1 sec
// cancel waiting task to prevent sending multiple posts
if (scheduledProfileSwitchEventPost != null)
scheduledProfileSwitchEventPost.cancel(false);
Runnable task = new PostRunnable();
final int sec = 1;
scheduledProfileSwitchEventPost = profileSwitchEventWorker.schedule(task, sec, TimeUnit.SECONDS);
}
/*
{
"_id":"592fa43ed97496a80da913d2",
"created_at":"2017-06-01T05:20:06Z",
"eventType":"Profile Switch",
"profile":"2016 +30%",
"units":"mmol",
"enteredBy":"sony",
"NSCLIENT_ID":1496294454309,
}
*/
public void createProfileSwitchFromJsonIfNotExists(JSONObject trJson) {
try {
QueryBuilder<ProfileSwitch, Long> queryBuilder = null;
queryBuilder = getDaoProfileSwitch().queryBuilder();
Where where = queryBuilder.where();
where.eq("_id", trJson.getString("_id")).or().eq("date", trJson.getLong("mills"));
PreparedQuery<ProfileSwitch> preparedQuery = queryBuilder.prepare();
List<ProfileSwitch> list = getDaoProfileSwitch().query(preparedQuery);
ProfileSwitch profileSwitch;
if (list.size() == 0) {
profileSwitch = new ProfileSwitch();
if (Config.logIncommingData)
log.debug("Adding ProfileSwitch record to database: " + trJson.toString());
// Record does not exists. add
} else if (list.size() == 1) {
profileSwitch = list.get(0);
if (Config.logIncommingData)
log.debug("Updating ProfileSwitch record in database: " + trJson.toString());
} else {
log.error("Something went wrong");
return;
}
profileSwitch.date = trJson.getLong("mills");
profileSwitch.durationInMinutes = trJson.getInt("duration");
profileSwitch._id = trJson.getString("_id");
profileSwitch.profileName = trJson.getString("profile");
profileSwitch.isCPP = trJson.has("CircadianPercentageProfile");
if (trJson.has("timeshift"))
profileSwitch.timeshift = trJson.getInt("timeshift");
if (trJson.has("percentage"))
profileSwitch.percentage = trJson.getInt("percentage");
if (trJson.has("profileJson"))
profileSwitch.profileJson = trJson.getString("profileJson");
if (trJson.has("profilePlugin"))
profileSwitch.profilePlugin = trJson.getString("profilePlugin");
createOrUpdate(profileSwitch);
} catch (SQLException | JSONException e) {
e.printStackTrace();
}
}
public void deleteProfileSwitchById(String _id) {
try {
QueryBuilder<ProfileSwitch, Long> queryBuilder = getDaoProfileSwitch().queryBuilder();
Where where = queryBuilder.where();
where.eq("_id", _id);
PreparedQuery<ProfileSwitch> preparedQuery = queryBuilder.prepare();
List<ProfileSwitch> list = getDaoProfileSwitch().query(preparedQuery);
if (list.size() == 1) {
ProfileSwitch record = list.get(0);
if (Config.logIncommingData)
log.debug("Removing ProfileSwitch record from database: " + record.log());
delete(record);
} else {
if (Config.logIncommingData)
log.debug("ProfileSwitch not found database: " + _id);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
} }

View file

@ -13,12 +13,13 @@ import org.slf4j.LoggerFactory;
import java.util.Date; import java.util.Date;
import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.interfaces.Interval; import info.nightscout.androidaps.interfaces.Interval;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
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;
@ -132,7 +133,7 @@ public class ExtendedBolus implements Interval {
public IobTotal iobCalc(long time) { public IobTotal iobCalc(long time) {
IobTotal result = new IobTotal(time); IobTotal result = new IobTotal(time);
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile(time);
InsulinInterface insulinInterface = ConfigBuilderPlugin.getActiveInsulin(); InsulinInterface insulinInterface = ConfigBuilderPlugin.getActiveInsulin();
if (profile == null) if (profile == null)

View file

@ -0,0 +1,121 @@
package info.nightscout.androidaps.db;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.interfaces.Interval;
import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin;
import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter;
@DatabaseTable(tableName = DatabaseHelper.DATABASE_PROFILESWITCHES)
public class ProfileSwitch implements Interval {
private static Logger log = LoggerFactory.getLogger(ProfileSwitch.class);
@DatabaseField(id = true)
public long date;
@DatabaseField
public boolean isValid = true;
@DatabaseField
public int source = Source.NONE;
@DatabaseField
public String _id = null; // NS _id
@DatabaseField
public boolean isCPP = false; // CPP NS="CircadianPercentageProfile"
@DatabaseField
public int timeshift = 0; // CPP NS="timeshift"
@DatabaseField
public int percentage = 100; // CPP NS="percentage"
@DatabaseField
public String profileName = null;
@DatabaseField
public String profileJson = null;
@DatabaseField
public String profilePlugin = null; // NSProfilePlugin.class.getName();
@DatabaseField
public int durationInMinutes = 0;
// -------- Interval interface ---------
Long cuttedEnd = null;
public long durationInMsec() {
return durationInMinutes * 60 * 1000L;
}
public long start() {
return date;
}
// planned end time at time of creation
public long originalEnd() {
return date + durationInMinutes * 60 * 1000L;
}
// end time after cut
public long end() {
if (cuttedEnd != null)
return cuttedEnd;
return originalEnd();
}
public void cutEndTo(long end) {
cuttedEnd = end;
}
public boolean match(long time) {
if (start() <= time && end() >= time)
return true;
return false;
}
public boolean before(long time) {
if (end() < time)
return true;
return false;
}
public boolean after(long time) {
if (start() > time)
return true;
return false;
}
@Override
public boolean isInProgress() {
return match(new Date().getTime());
}
@Override
public boolean isEndingEvent() {
return durationInMinutes == 0;
}
// -------- Interval interface end ---------
public String log() {
return "ProfileSwitch{" +
"date=" + date +
"date=" + DateUtil.dateAndTimeString(date) +
", isValid=" + isValid +
", duration=" + durationInMinutes +
", profileName=" + profileName +
", percentage=" + percentage +
", timeshift=" + timeshift +
'}';
}
}

View file

@ -14,7 +14,7 @@ import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.interfaces.Interval; import info.nightscout.androidaps.interfaces.Interval;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
@ -46,12 +46,11 @@ public class TemporaryBasal implements Interval {
@DatabaseField @DatabaseField
public double absoluteRate = 0d; public double absoluteRate = 0d;
public TemporaryBasal() {} public TemporaryBasal() {
}
public TemporaryBasal(ExtendedBolus extendedBolus) { public TemporaryBasal(ExtendedBolus extendedBolus) {
double basal = 0d; double basal = MainApp.getConfigBuilder().getProfile(extendedBolus.date).getBasal(extendedBolus.date);
if (ConfigBuilderPlugin.getActiveProfile() != null && ConfigBuilderPlugin.getActiveProfile().getProfile() != null)
basal = ConfigBuilderPlugin.getActiveProfile().getProfile().getBasal(NSProfile.secondsFromMidnight(extendedBolus.date));
this.date = extendedBolus.date; this.date = extendedBolus.date;
this.isValid = extendedBolus.isValid; this.isValid = extendedBolus.isValid;
this.source = extendedBolus.source; this.source = extendedBolus.source;
@ -134,12 +133,9 @@ public class TemporaryBasal implements Interval {
public IobTotal iobCalc(long time) { public IobTotal iobCalc(long time) {
IobTotal result = new IobTotal(time); IobTotal result = new IobTotal(time);
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile(time);
InsulinInterface insulinInterface = ConfigBuilderPlugin.getActiveInsulin(); InsulinInterface insulinInterface = ConfigBuilderPlugin.getActiveInsulin();
if (profile == null)
return result;
int realDuration = getDurationToTime(time); int realDuration = getDurationToTime(time);
Double netBasalAmount = 0d; Double netBasalAmount = 0d;
@ -154,7 +150,7 @@ public class TemporaryBasal implements Interval {
// find middle of the interval // find middle of the interval
Long calcdate = (long) (date + j * tempBolusSpacing * 60 * 1000 + 0.5d * tempBolusSpacing * 60 * 1000); Long calcdate = (long) (date + j * tempBolusSpacing * 60 * 1000 + 0.5d * tempBolusSpacing * 60 * 1000);
Double basalRate = profile.getBasal(NSProfile.secondsFromMidnight(calcdate)); Double basalRate = profile.getBasal(calcdate);
if (basalRate == null) if (basalRate == null)
continue; continue;
@ -205,8 +201,7 @@ public class TemporaryBasal implements Interval {
public double tempBasalConvertedToAbsolute(long time) { public double tempBasalConvertedToAbsolute(long time) {
if (isAbsolute) return absoluteRate; if (isAbsolute) return absoluteRate;
else { else {
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); return MainApp.getConfigBuilder().getProfile(time).getBasal(time) * percentRate / 100;
return profile.getBasal(NSProfile.secondsFromMidnight(time)) * percentRate / 100;
} }
} }

View file

@ -3,8 +3,6 @@ package info.nightscout.androidaps.db;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -16,11 +14,10 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.Overview.graphExtensions.DataPointWithLabelInterface; import info.nightscout.androidaps.plugins.Overview.graphExtensions.DataPointWithLabelInterface;
import info.nightscout.androidaps.plugins.NSClientInternal.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.NSUpload;
@DatabaseTable(tableName = DatabaseHelper.DATABASE_TREATMENTS) @DatabaseTable(tableName = DatabaseHelper.DATABASE_TREATMENTS)
public class Treatment implements DataPointWithLabelInterface { public class Treatment implements DataPointWithLabelInterface {
@ -107,12 +104,11 @@ public class Treatment implements DataPointWithLabelInterface {
} }
public void setYValue(List<BgReading> bgReadingsArray) { public void setYValue(List<BgReading> bgReadingsArray) {
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) return;
for (int r = bgReadingsArray.size() - 1; r >= 0; r--) { for (int r = bgReadingsArray.size() - 1; r >= 0; r--) {
BgReading reading = bgReadingsArray.get(r); BgReading reading = bgReadingsArray.get(r);
if (reading.date > date) continue; if (reading.date > date) continue;
yValue = NSProfile.fromMgdlToUnits(reading.value, profile.getUnits()); yValue = Profile.fromMgdlToUnits(reading.value, profile.getUnits());
break; break;
} }
} }

View file

@ -1,16 +1,7 @@
package info.nightscout.androidaps.events; package info.nightscout.androidaps.events;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
/** /**
* Created by mike on 04.06.2016. * Created by mike on 04.06.2016.
*/ */
public class EventNewBasalProfile { public class EventNewBasalProfile {
public NSProfile newNSProfile = null;
public String from = "";
public EventNewBasalProfile(NSProfile newProfile, String from) {
newNSProfile = newProfile;
this.from = from;
}
} }

View file

@ -2,12 +2,13 @@ package info.nightscout.androidaps.interfaces;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.ProfileStore;
/** /**
* Created by mike on 14.06.2016. * Created by mike on 14.06.2016.
*/ */
public interface ProfileInterface { public interface ProfileInterface {
@Nullable @Nullable
NSProfile getProfile(); ProfileStore getProfile();
String getProfileName();
} }

View file

@ -1,14 +1,12 @@
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;
import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
/** /**
* Created by mike on 04.06.2016. * Created by mike on 04.06.2016.
@ -23,8 +21,8 @@ public interface PumpInterface {
int SUCCESS = 0; int SUCCESS = 0;
int FAILED = 1; int FAILED = 1;
int NOT_NEEDED = 2; int NOT_NEEDED = 2;
int setNewBasalProfile(NSProfile profile); int setNewBasalProfile(Profile profile);
boolean isThisProfileSet(NSProfile profile); boolean isThisProfileSet(Profile profile);
Date lastDataTime(); Date lastDataTime();
void refreshDataFromPump(String reason); void refreshDataFromPump(String reason);

View file

@ -6,10 +6,12 @@ import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.data.MealData;
import info.nightscout.androidaps.db.ExtendedBolus; import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.ProfileSwitch;
import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
import info.nightscout.utils.OverlappingIntervals; import info.nightscout.utils.OverlappingIntervals;
import info.nightscout.utils.ProfileIntervals;
/** /**
* Created by mike on 14.06.2016. * Created by mike on 14.06.2016.
@ -49,11 +51,15 @@ public interface TreatmentsInterface {
void addToHistoryExtendedBolusStop(long time); void addToHistoryExtendedBolusStop(long time);
OverlappingIntervals<ExtendedBolus> getExtendedBolusesFromHistory(); OverlappingIntervals<ExtendedBolus> getExtendedBolusesFromHistory();
void addTreatmentToHistory(DetailedBolusInfo detailedBolusInfo); void addToHistoryTreatment(DetailedBolusInfo detailedBolusInfo);
TempTarget getTempTargetFromHistory(long time); TempTarget getTempTargetFromHistory(long time);
OverlappingIntervals<TempTarget> getTempTargetsFromHistory(); OverlappingIntervals<TempTarget> getTempTargetsFromHistory();
long oldestDataAvaialable(); ProfileSwitch getProfileSwitchFromHistory(long time);
ProfileIntervals<ProfileSwitch> getProfileSwitchesFromHistory();
void addToHistoryProfileSwitch(ProfileSwitch profileSwitch);
long oldestDataAvailable();
} }

View file

@ -129,7 +129,8 @@ public class ActionsFragment extends Fragment implements View.OnClickListener {
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
if (!MainApp.getConfigBuilder().getPumpDescription().isSetBasalProfileCapable || !MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended()) boolean allowProfileSwitch = MainApp.getConfigBuilder().getActiveProfileInterface().getProfile().getProfileList().size() > 1;
if (!MainApp.getConfigBuilder().getPumpDescription().isSetBasalProfileCapable || !MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended() || !allowProfileSwitch)
profileSwitch.setVisibility(View.GONE); profileSwitch.setVisibility(View.GONE);
else else
profileSwitch.setVisibility(View.VISIBLE); profileSwitch.setVisibility(View.VISIBLE);

View file

@ -21,13 +21,12 @@ import com.crashlytics.android.answers.CustomEvent;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.PlusMinusEditText; import info.nightscout.utils.PlusMinusEditText;
import info.nightscout.utils.SafeParse; import info.nightscout.utils.SafeParse;
@ -73,9 +72,8 @@ public class NewTempBasalDialog extends DialogFragment implements View.OnClickLi
basalPercent = new PlusMinusEditText(view, R.id.overview_newtempbasal_basalpercentinput, R.id.overview_newtempbasal_basalpercent_plus, R.id.overview_newtempbasal_basalpercent_minus, basalPercent = new PlusMinusEditText(view, R.id.overview_newtempbasal_basalpercentinput, R.id.overview_newtempbasal_basalpercent_plus, R.id.overview_newtempbasal_basalpercent_minus,
100d, 0d, (double) pumpDescription.maxTempPercent, (double) pumpDescription.tempPercentStep, new DecimalFormat("0"), true); 100d, 0d, (double) pumpDescription.maxTempPercent, (double) pumpDescription.tempPercentStep, new DecimalFormat("0"), true);
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
Double currentBasal = 0d; Double currentBasal = profile.getBasal();
if (profile != null) currentBasal = profile.getBasal(NSProfile.secondsFromMidnight());
basalAbsolute = new PlusMinusEditText(view, R.id.overview_newtempbasal_basalabsoluteinput, R.id.overview_newtempbasal_basalabsolute_plus, R.id.overview_newtempbasal_basalabsolute_minus, basalAbsolute = new PlusMinusEditText(view, R.id.overview_newtempbasal_basalabsoluteinput, R.id.overview_newtempbasal_basalabsolute_plus, R.id.overview_newtempbasal_basalabsolute_minus,
currentBasal, 0d, pumpDescription.maxTempAbsolute, pumpDescription.tempAbsoluteStep, new DecimalFormat("0.00"), true); currentBasal, 0d, pumpDescription.maxTempAbsolute, pumpDescription.tempAbsoluteStep, new DecimalFormat("0.00"), true);

View file

@ -50,7 +50,7 @@ public class CareportalFragment extends Fragment implements View.OnClickListener
final OptionsToShow insulinchange = new OptionsToShow(R.id.careportal_insulincartridgechange, R.string.careportal_insulincartridgechange, true, false, false, false, false, false, false, false, false, false); final OptionsToShow insulinchange = new OptionsToShow(R.id.careportal_insulincartridgechange, R.string.careportal_insulincartridgechange, true, false, false, false, false, false, false, false, false, false);
final OptionsToShow tempbasalstart = new OptionsToShow(R.id.careportal_tempbasalstart, R.string.careportal_tempbasalstart, true, false, false, false, true, true, true, false, false, false); final OptionsToShow tempbasalstart = new OptionsToShow(R.id.careportal_tempbasalstart, R.string.careportal_tempbasalstart, true, false, false, false, true, true, true, false, false, false);
final OptionsToShow tempbasalend = new OptionsToShow(R.id.careportal_tempbasalend, R.string.careportal_tempbasalend, true, false, false, false, false, false, false, false, false, false); final OptionsToShow tempbasalend = new OptionsToShow(R.id.careportal_tempbasalend, R.string.careportal_tempbasalend, true, false, false, false, false, false, false, false, false, false);
final OptionsToShow profileswitch = new OptionsToShow(R.id.careportal_profileswitch, R.string.careportal_profileswitch, true, false, false, false, false, false, false, true, false, false); final OptionsToShow profileswitch = new OptionsToShow(R.id.careportal_profileswitch, R.string.careportal_profileswitch, true, false, false, false, true, false, false, true, false, false);
final OptionsToShow openapsoffline = new OptionsToShow(R.id.careportal_openapsoffline, R.string.careportal_openapsoffline, false, false, false, false, true, false, false, false, false, false); final OptionsToShow openapsoffline = new OptionsToShow(R.id.careportal_openapsoffline, R.string.careportal_openapsoffline, false, false, false, false, true, false, false, false, false, false);
final OptionsToShow temptarget = new OptionsToShow(R.id.careportal_temporarytarget, R.string.careportal_temporarytarget, false, false, false, false, true, false, false, false, false, true); final OptionsToShow temptarget = new OptionsToShow(R.id.careportal_temporarytarget, R.string.careportal_temporarytarget, false, false, false, false, true, false, false, false, false, true);

View file

@ -45,19 +45,21 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.GlucoseStatus; import info.nightscout.androidaps.data.GlucoseStatus;
import info.nightscout.androidaps.db.CareportalEvent; import info.nightscout.androidaps.db.CareportalEvent;
import info.nightscout.androidaps.db.ProfileSwitch;
import info.nightscout.androidaps.db.Source;
import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.events.EventNewBasalProfile; import info.nightscout.androidaps.events.EventNewBasalProfile;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.Careportal.OptionsToShow; import info.nightscout.androidaps.plugins.Careportal.OptionsToShow;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfilePlugin; import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfilePlugin;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.NSUpload; import info.nightscout.utils.NSUpload;
import info.nightscout.utils.PlusMinusEditText; import info.nightscout.utils.PlusMinusEditText;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
import info.nightscout.utils.SafeParse; import info.nightscout.utils.SafeParse;
import info.nightscout.utils.ToastUtils;
import info.nightscout.utils.Translator; import info.nightscout.utils.Translator;
public class NewNSTreatmentDialog extends DialogFragment implements View.OnClickListener, DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener { public class NewNSTreatmentDialog extends DialogFragment implements View.OnClickListener, DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener {
@ -67,7 +69,8 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
private static OptionsToShow options; private static OptionsToShow options;
NSProfile profile; Profile profile;
ProfileStore profileStore;
String units; String units;
RelativeLayout layoutBg; RelativeLayout layoutBg;
@ -225,26 +228,20 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
cancelButton.setOnClickListener(this); cancelButton.setOnClickListener(this);
// profile // profile
profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); profile = MainApp.getConfigBuilder().getProfile();
profileStore = MainApp.getConfigBuilder().getActiveProfileInterface().getProfile();
ArrayList<CharSequence> profileList; ArrayList<CharSequence> profileList;
units = Constants.MGDL; units = Constants.MGDL;
if (profile == null) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), context.getString(R.string.noprofile));
profileList = new ArrayList<CharSequence>();
} else {
units = profile.getUnits(); units = profile.getUnits();
profileList = profile.getProfileList(); profileList = profileStore.getProfileList();
}
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getContext(), ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getContext(),
R.layout.spinner_centered, profileList); R.layout.spinner_centered, profileList);
profileSpinner.setAdapter(adapter); profileSpinner.setAdapter(adapter);
if (profile != null) {
// set selected to actual profile // set selected to actual profile
for (int p = 0; p < profileList.size(); p++) { for (int p = 0; p < profileList.size(); p++) {
if (profileList.get(p).equals(profile.getActiveProfile())) if (profileList.get(p).equals(MainApp.getConfigBuilder().getProfileName()))
profileSpinner.setSelection(p); profileSpinner.setSelection(p);
} }
}
// temp target // temp target
ArrayList<CharSequence> reasonList = new ArrayList<CharSequence>(); ArrayList<CharSequence> reasonList = new ArrayList<CharSequence>();
@ -268,7 +265,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
// meterRadioButton.setChecked(true); // meterRadioButton.setChecked(true);
// } // }
Double bg = NSProfile.fromMgdlToUnits(GlucoseStatus.getGlucoseStatusData() != null ? GlucoseStatus.getGlucoseStatusData().glucose : 0d, profile != null ? profile.getUnits() : Constants.MGDL); Double bg = Profile.fromMgdlToUnits(GlucoseStatus.getGlucoseStatusData() != null ? GlucoseStatus.getGlucoseStatusData().glucose : 0d, profile != null ? profile.getUnits() : Constants.MGDL);
if (profile == null) if (profile == null)
editBg = new PlusMinusEditText(view, R.id.careportal_newnstreatment_bginput, R.id.careportal_newnstreatment_bg_plus, R.id.careportal_newnstreatment_bg_minus, bg, 0d, 500d, 0.1d, new DecimalFormat("0.0"), false); editBg = new PlusMinusEditText(view, R.id.careportal_newnstreatment_bginput, R.id.careportal_newnstreatment_bg_plus, R.id.careportal_newnstreatment_bg_minus, bg, 0d, 500d, 0.1d, new DecimalFormat("0.0"), false);
else if (profile.getUnits().equals(Constants.MMOL)) else if (profile.getUnits().equals(Constants.MMOL))
@ -277,9 +274,11 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
editBg = new PlusMinusEditText(view, R.id.careportal_newnstreatment_bginput, R.id.careportal_newnstreatment_bg_plus, R.id.careportal_newnstreatment_bg_minus, bg, 0d, 500d, 1d, new DecimalFormat("0"), false); editBg = new PlusMinusEditText(view, R.id.careportal_newnstreatment_bginput, R.id.careportal_newnstreatment_bg_plus, R.id.careportal_newnstreatment_bg_minus, bg, 0d, 500d, 1d, new DecimalFormat("0"), false);
bgInputEdit.addTextChangedListener(new TextWatcher() { bgInputEdit.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {} public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {} public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
if (sensorRadioButton.isChecked()) meterRadioButton.setChecked(true); if (sensorRadioButton.isChecked()) meterRadioButton.setChecked(true);
@ -288,9 +287,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
sensorRadioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { sensorRadioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); Double bg = Profile.fromMgdlToUnits(GlucoseStatus.getGlucoseStatusData() != null ? GlucoseStatus.getGlucoseStatusData().glucose : 0d, profile.getUnits());
if (profile == null) return;
Double bg = NSProfile.fromMgdlToUnits(GlucoseStatus.getGlucoseStatusData() != null ? GlucoseStatus.getGlucoseStatusData().glucose : 0d, profile.getUnits());
editBg.setValue(bg); editBg.setValue(bg);
} }
}); });
@ -439,6 +436,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
break; break;
case R.id.careportal_profileswitch: case R.id.careportal_profileswitch:
data.put("eventType", CareportalEvent.PROFILESWITCH); data.put("eventType", CareportalEvent.PROFILESWITCH);
allowZeroDuration = true;
break; break;
case R.id.careportal_pumpsitechange: case R.id.careportal_pumpsitechange:
data.put("eventType", CareportalEvent.SITECHANGE); data.put("eventType", CareportalEvent.SITECHANGE);
@ -615,24 +613,30 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
@Override @Override
public void run() { public void run() {
try { try {
String profile = data.getString("profile"); String profileName = data.getString("profile");
NSProfile nsProfile = ConfigBuilderPlugin.getActiveProfile().getProfile(); ProfileSwitch profileSwitch = new ProfileSwitch();
nsProfile.setActiveProfile(profile); profileSwitch.date = new Date().getTime();
profileSwitch.source = Source.PUMP;
profileSwitch.profileName = profileName;
profileSwitch.profileJson = profileStore.getSpecificProfile(profileName).toString();
profileSwitch.profilePlugin = MainApp.getConfigBuilder().getActiveProfileInterface().getClass().getName();
profileSwitch.durationInMinutes = data.getInt("duration");
if (ConfigBuilderPlugin.getActiveProfileInterface() instanceof CircadianPercentageProfilePlugin) {
CircadianPercentageProfilePlugin cpp = (CircadianPercentageProfilePlugin) MainApp.getConfigBuilder().getActiveProfileInterface();
profileSwitch.isCPP = true;
profileSwitch.timeshift = cpp.timeshift;
profileSwitch.percentage = cpp.percentage;
}
MainApp.getConfigBuilder().addToHistoryProfileSwitch(profileSwitch);
PumpInterface pump = MainApp.getConfigBuilder(); PumpInterface pump = MainApp.getConfigBuilder();
if (pump != null) { if (pump != null) {
pump.setNewBasalProfile(nsProfile); pump.setNewBasalProfile(profileStore.getSpecificProfile(profileName));
log.debug("Setting new profile: " + profile); log.debug("Setting new profile: " + profile);
MainApp.bus().post(new EventNewBasalProfile(nsProfile, "NewNSTreatmentDialog")); MainApp.bus().post(new EventNewBasalProfile());
} else { } else {
log.error("No active pump selected"); log.error("No active pump selected");
} }
if (ConfigBuilderPlugin.getActiveProfile() instanceof CircadianPercentageProfilePlugin) {
CircadianPercentageProfilePlugin cpp = (CircadianPercentageProfilePlugin) ConfigBuilderPlugin.getActiveProfile();
data.put("CircadianPercentageProfile", true);
data.put("timeshift", cpp.timeshift);
data.put("percentage", cpp.percentage);
}
NSUpload.uploadCareportalEntryToNS(data);
Answers.getInstance().logCustom(new CustomEvent("ProfileSwitch")); Answers.getInstance().logCustom(new CustomEvent("ProfileSwitch"));
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
@ -652,8 +656,8 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
tempTarget.durationInMinutes = data.getInt("duration"); tempTarget.durationInMinutes = data.getInt("duration");
tempTarget.reason = data.getString("reason"); tempTarget.reason = data.getString("reason");
if (tempTarget.durationInMinutes != 0) { if (tempTarget.durationInMinutes != 0) {
tempTarget.low = NSProfile.toMgdl(data.getDouble("targetBottom"), ConfigBuilderPlugin.getActiveProfile().getProfile().getUnits()); tempTarget.low = Profile.toMgdl(data.getDouble("targetBottom"), profile.getUnits());
tempTarget.high = NSProfile.toMgdl(data.getDouble("targetTop"), ConfigBuilderPlugin.getActiveProfile().getProfile().getUnits()); tempTarget.high = Profile.toMgdl(data.getDouble("targetTop"), profile.getUnits());
} else { } else {
tempTarget.low = 0; tempTarget.low = 0;
tempTarget.high = 0; tempTarget.high = 0;

View file

@ -1,13 +1,13 @@
package info.nightscout.androidaps.plugins.ConfigBuilder; package info.nightscout.androidaps.plugins.ConfigBuilder;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.PowerManager; import android.os.PowerManager;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -24,11 +24,11 @@ import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.data.MealData;
import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.db.ExtendedBolus; import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.ProfileSwitch;
import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventBolusRequested; import info.nightscout.androidaps.events.EventBolusRequested;
import info.nightscout.androidaps.events.EventTreatmentChange;
import info.nightscout.androidaps.interfaces.APSInterface; import info.nightscout.androidaps.interfaces.APSInterface;
import info.nightscout.androidaps.interfaces.BgSourceInterface; import info.nightscout.androidaps.interfaces.BgSourceInterface;
import info.nightscout.androidaps.interfaces.ConstraintsInterface; import info.nightscout.androidaps.interfaces.ConstraintsInterface;
@ -40,15 +40,15 @@ import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.interfaces.TreatmentsInterface; import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.plugins.Loop.APSResult; import info.nightscout.androidaps.plugins.Loop.APSResult;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.Overview.Dialogs.BolusProgressDialog; import info.nightscout.androidaps.plugins.Overview.Dialogs.BolusProgressDialog;
import info.nightscout.androidaps.plugins.Overview.Dialogs.BolusProgressHelperActivity;
import info.nightscout.androidaps.plugins.Overview.Notification; import info.nightscout.androidaps.plugins.Overview.Notification;
import info.nightscout.androidaps.plugins.Overview.events.EventDismissBolusprogressIfRunning; import info.nightscout.androidaps.plugins.Overview.events.EventDismissBolusprogressIfRunning;
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.utils.NSUpload; import info.nightscout.utils.NSUpload;
import info.nightscout.utils.OverlappingIntervals; import info.nightscout.utils.OverlappingIntervals;
import info.nightscout.utils.ProfileIntervals;
/** /**
* Created by mike on 05.08.2016. * Created by mike on 05.08.2016.
@ -191,8 +191,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
return activeBgSource; return activeBgSource;
} }
@Nullable public static ProfileInterface getActiveProfileInterface() {
public static ProfileInterface getActiveProfile() {
return activeProfile; return activeProfile;
} }
@ -353,9 +352,9 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
} }
@Override @Override
public int setNewBasalProfile(NSProfile profile) { public int setNewBasalProfile(Profile profile) {
// Compare with pump limits // Compare with pump limits
NSProfile.BasalValue[] basalValues = profile.getBasalValues(); Profile.BasalValue[] basalValues = profile.getBasalValues();
for (int index = 0; index < basalValues.length; index++) { for (int index = 0; index < basalValues.length; index++) {
if (basalValues[index].value < getPumpDescription().basalMinimumRate) { if (basalValues[index].value < getPumpDescription().basalMinimumRate) {
@ -377,7 +376,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
} }
@Override @Override
public boolean isThisProfileSet(NSProfile profile) { public boolean isThisProfileSet(Profile profile) {
if (activePump != null) if (activePump != null)
return activePump.isThisProfileSet(profile); return activePump.isThisProfileSet(profile);
else return true; else return true;
@ -432,7 +431,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
t.carbs = (double) result.carbsDelivered; // with different carbTime record will come back from nightscout t.carbs = (double) result.carbsDelivered; // with different carbTime record will come back from nightscout
t.date = new Date().getTime(); t.date = new Date().getTime();
t.mealBolus = result.carbsDelivered > 0; t.mealBolus = result.carbsDelivered > 0;
addTreatmentToHistory(t); addToHistoryTreatment(t);
t.carbs = (double) result.carbsDelivered; t.carbs = (double) result.carbsDelivered;
NSUpload.uploadBolusWizardRecord(t, glucose, glucoseType, carbTime, boluscalc); NSUpload.uploadBolusWizardRecord(t, glucose, glucoseType, carbTime, boluscalc);
} }
@ -506,7 +505,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
t.carbs = (double) result.carbsDelivered; t.carbs = (double) result.carbsDelivered;
t.date = new Date().getTime(); t.date = new Date().getTime();
t.mealBolus = t.carbs > 0; t.mealBolus = t.carbs > 0;
addTreatmentToHistory(t); addToHistoryTreatment(t);
NSUpload.uploadTreatment(t); NSUpload.uploadTreatment(t);
} }
mWakeLock.release(); mWakeLock.release();
@ -851,6 +850,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
} }
@Override @Override
@Nullable
public TemporaryBasal getRealTempBasalFromHistory(long time) { public TemporaryBasal getRealTempBasalFromHistory(long time) {
return activeTreatments.getRealTempBasalFromHistory(time); return activeTreatments.getRealTempBasalFromHistory(time);
} }
@ -861,6 +861,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
} }
@Override @Override
@Nullable
public TemporaryBasal getTempBasalFromHistory(long time) { public TemporaryBasal getTempBasalFromHistory(long time) {
return activeTreatments.getTempBasalFromHistory(time); return activeTreatments.getTempBasalFromHistory(time);
} }
@ -902,6 +903,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
} }
@Override @Override
@Nullable
public ExtendedBolus getExtendedBolusFromHistory(long time) { public ExtendedBolus getExtendedBolusFromHistory(long time) {
return activeTreatments.getExtendedBolusFromHistory(time); return activeTreatments.getExtendedBolusFromHistory(time);
} }
@ -930,14 +932,15 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
} }
@Override @Override
public void addTreatmentToHistory(DetailedBolusInfo detailedBolusInfo) { public void addToHistoryTreatment(DetailedBolusInfo detailedBolusInfo) {
if (!detailedBolusInfo.addToTreatments) if (!detailedBolusInfo.addToTreatments)
return; return;
activeTreatments.addTreatmentToHistory(detailedBolusInfo); activeTreatments.addToHistoryTreatment(detailedBolusInfo);
NSUpload.uploadBolusWizardRecord(detailedBolusInfo); NSUpload.uploadBolusWizardRecord(detailedBolusInfo);
} }
@Override @Override
@Nullable
public TempTarget getTempTargetFromHistory(long time) { public TempTarget getTempTargetFromHistory(long time) {
return activeTreatments.getTempTargetFromHistory(time); return activeTreatments.getTempTargetFromHistory(time);
} }
@ -948,7 +951,85 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
} }
@Override @Override
public long oldestDataAvaialable() { @Nullable
return activeTreatments.oldestDataAvaialable(); public ProfileSwitch getProfileSwitchFromHistory(long time) {
return activeTreatments.getProfileSwitchFromHistory(time);
}
@Override
public ProfileIntervals<ProfileSwitch> getProfileSwitchesFromHistory() {
return activeTreatments.getProfileSwitchesFromHistory();
}
@Override
public void addToHistoryProfileSwitch(ProfileSwitch profileSwitch) {
activeTreatments.addToHistoryProfileSwitch(profileSwitch);
NSUpload.uploadProfileSwitch(profileSwitch);
}
@Override
public long oldestDataAvailable() {
return activeTreatments.oldestDataAvailable();
}
public String getProfileName() {
return getProfileName(new Date().getTime());
}
public String getProfileName(long time) {
ProfileSwitch profileSwitch = getProfileSwitchFromHistory(time);
if (profileSwitch != null) {
if (profileSwitch.profileJson != null) {
return profileSwitch.profileName;
} else {
Profile profile = activeProfile.getProfile().getSpecificProfile(profileSwitch.profileName);
if (profile != null)
return profileSwitch.profileName;
}
}
// Unable to determine profile, failover to default
String defaultProfile = activeProfile.getProfile().getDefaultProfileName();
if (defaultProfile != null)
return defaultProfile;
// If default from plugin fails .... create empty
return "Default";
}
public Profile getProfile() {
return getProfile(new Date().getTime());
}
public Profile getProfile(long time) {
ProfileSwitch profileSwitch = getProfileSwitchFromHistory(time);
if (profileSwitch != null) {
if (profileSwitch.profileJson != null) {
try {
return new Profile(new JSONObject(profileSwitch.profileJson));
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Profile profile = activeProfile.getProfile().getSpecificProfile(profileSwitch.profileName);
if (profile != null)
return profile;
}
}
// Unable to determine profile, failover to default
Profile defaultProfile = activeProfile.getProfile().getDefaultProfile();
if (defaultProfile != null)
return defaultProfile;
// If default from plugin fails .... create empty
try {
Notification noisf = new Notification(Notification.ISF_MISSING, MainApp.sResources.getString(R.string.isfmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(noisf));
Notification noic = new Notification(Notification.IC_MISSING, MainApp.sResources.getString(R.string.icmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(noic));
Notification nobasal = new Notification(Notification.BASAL_MISSING, MainApp.sResources.getString(R.string.basalmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(nobasal));
Notification notarget = new Notification(Notification.TARGET_MISSING, MainApp.sResources.getString(R.string.targetmissing), Notification.URGENT);
MainApp.bus().post(new EventNewNotification(notarget));
return new Profile(new JSONObject("{\"dia\":\"3\",\"carbratio\":[{\"time\":\"00:00\",\"value\":\"20\"}],\"carbs_hr\":\"20\",\"delay\":\"20\",\"sens\":[{\"time\":\"00:00\",\"value\":\"20\"}],\"timezone\":\"UTC\",\"basal\":[{\"time\":\"00:00\",\"value\":\"0.1\"}],\"target_low\":[{\"time\":\"00:00\",\"value\":\"6\"}],\"target_high\":[{\"time\":\"00:00\",\"value\":\"8\"}],\"startDate\":\"1970-01-01T00:00:00.000Z\",\"units\":\"mmol\"}}"));
} catch (JSONException e) {
e.printStackTrace();
}
return null;
} }
} }

View file

@ -10,7 +10,7 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.ConstraintsInterface; import info.nightscout.androidaps.interfaces.ConstraintsInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.HardLimits; import info.nightscout.utils.HardLimits;
import info.nightscout.utils.Round; import info.nightscout.utils.Round;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
@ -105,7 +105,7 @@ public class SafetyPlugin implements PluginBase, ConstraintsInterface {
Double origAbsoluteRate = absoluteRate; Double origAbsoluteRate = absoluteRate;
Double maxBasal = SP.getDouble("openapsma_max_basal", 1d); Double maxBasal = SP.getDouble("openapsma_max_basal", 1d);
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) return absoluteRate; if (profile == null) return absoluteRate;
if (absoluteRate < 0) absoluteRate = 0d; if (absoluteRate < 0) absoluteRate = 0d;
@ -118,8 +118,8 @@ public class SafetyPlugin implements PluginBase, ConstraintsInterface {
if (Config.logConstraintsChanges && origAbsoluteRate != Constants.basalAbsoluteOnlyForCheckLimit) if (Config.logConstraintsChanges && origAbsoluteRate != Constants.basalAbsoluteOnlyForCheckLimit)
log.debug("Limiting rate " + origRate + " by maxBasal preference to " + absoluteRate + "U/h"); log.debug("Limiting rate " + origRate + " by maxBasal preference to " + absoluteRate + "U/h");
} }
if (absoluteRate > maxBasalMult * profile.getBasal(NSProfile.secondsFromMidnight())) { if (absoluteRate > maxBasalMult * profile.getBasal()) {
absoluteRate = Math.floor(maxBasalMult * profile.getBasal(NSProfile.secondsFromMidnight()) * 100) / 100; absoluteRate = Math.floor(maxBasalMult * profile.getBasal() * 100) / 100;
if (Config.logConstraintsChanges && origAbsoluteRate != Constants.basalAbsoluteOnlyForCheckLimit) if (Config.logConstraintsChanges && origAbsoluteRate != Constants.basalAbsoluteOnlyForCheckLimit)
log.debug("Limiting rate " + origRate + " by maxBasalMult to " + absoluteRate + "U/h"); log.debug("Limiting rate " + origRate + " by maxBasalMult to " + absoluteRate + "U/h");
} }
@ -136,9 +136,9 @@ public class SafetyPlugin implements PluginBase, ConstraintsInterface {
Integer origPercentRate = percentRate; Integer origPercentRate = percentRate;
Double maxBasal = SP.getDouble("openapsma_max_basal", 1d); Double maxBasal = SP.getDouble("openapsma_max_basal", 1d);
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) return percentRate; if (profile == null) return percentRate;
Double currentBasal = profile.getBasal(profile.secondsFromMidnight()); Double currentBasal = profile.getBasal();
Double absoluteRate = currentBasal * ((double) percentRate / 100); Double absoluteRate = currentBasal * ((double) percentRate / 100);
@ -156,8 +156,8 @@ public class SafetyPlugin implements PluginBase, ConstraintsInterface {
if (Config.logConstraintsChanges && origPercentRate != Constants.basalPercentOnlyForCheckLimit) if (Config.logConstraintsChanges && origPercentRate != Constants.basalPercentOnlyForCheckLimit)
log.debug("Limiting rate " + origRate + " by maxBasal preference to " + absoluteRate + "U/h"); log.debug("Limiting rate " + origRate + " by maxBasal preference to " + absoluteRate + "U/h");
} }
if (absoluteRate > maxBasalMult * profile.getBasal(NSProfile.secondsFromMidnight())) { if (absoluteRate > maxBasalMult * profile.getBasal()) {
absoluteRate = Math.floor(maxBasalMult * profile.getBasal(NSProfile.secondsFromMidnight()) * 100) / 100; absoluteRate = Math.floor(maxBasalMult * profile.getBasal() * 100) / 100;
if (Config.logConstraintsChanges && origPercentRate != Constants.basalPercentOnlyForCheckLimit) if (Config.logConstraintsChanges && origPercentRate != Constants.basalPercentOnlyForCheckLimit)
log.debug("Limiting rate " + origRate + " by maxBasalMult to " + absoluteRate + "U/h"); log.debug("Limiting rate " + origRate + " by maxBasalMult to " + absoluteRate + "U/h");
} }

View file

@ -1,15 +1,11 @@
package info.nightscout.androidaps.plugins.InsulinFastacting; package info.nightscout.androidaps.plugins.InsulinFastacting;
import java.util.Date;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.ProfileInterface;
/** /**
* Created by mike on 17.04.2017. * Created by mike on 17.04.2017.
@ -93,10 +89,7 @@ public class InsulinFastactingPlugin implements PluginBase, InsulinInterface {
@Override @Override
public double getDia() { public double getDia() {
ProfileInterface profileInterface = MainApp.getConfigBuilder().getActiveProfile(); return MainApp.getConfigBuilder().getProfile().getDia();
if (profileInterface.getProfile() != null)
return profileInterface.getProfile().getDia();
return Constants.defaultDIA;
} }
@Override @Override

View file

@ -1,15 +1,11 @@
package info.nightscout.androidaps.plugins.InsulinFastactingProlonged; package info.nightscout.androidaps.plugins.InsulinFastactingProlonged;
import java.util.Date;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.ProfileInterface;
/** /**
* Created by mike on 17.04.2017. * Created by mike on 17.04.2017.
@ -93,10 +89,7 @@ public class InsulinFastactingProlongedPlugin implements PluginBase, InsulinInte
@Override @Override
public double getDia() { public double getDia() {
ProfileInterface profileInterface = MainApp.getConfigBuilder().getActiveProfile(); return MainApp.getConfigBuilder().getProfile().getDia();
if (profileInterface.getProfile() != null)
return profileInterface.getProfile().getDia();
return Constants.defaultDIA;
} }
@Override @Override

View file

@ -24,10 +24,9 @@ import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventNewBG; import info.nightscout.androidaps.events.EventNewBG;
import info.nightscout.androidaps.events.EventNewBasalProfile; import info.nightscout.androidaps.events.EventNewBasalProfile;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventAutosensCalculationFinished; import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventAutosensCalculationFinished;
import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventNewHistoryData; import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventNewHistoryData;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.Round; import info.nightscout.utils.Round;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
import info.nightscout.utils.SafeParse; import info.nightscout.utils.SafeParse;
@ -154,7 +153,7 @@ public class IobCobCalculatorPlugin implements PluginBase {
private void loadBgData() { private void loadBgData() {
//log.debug("Locking loadBgData"); //log.debug("Locking loadBgData");
synchronized (dataLock) { synchronized (dataLock) {
onNewProfile(new EventNewBasalProfile(null, "IobCobCalculator init")); onNewProfile(null);
bgReadings = MainApp.getDbHelper().getBgreadingsDataFromTime((long) (new Date().getTime() - 60 * 60 * 1000L * (24 + dia)), false); bgReadings = MainApp.getDbHelper().getBgreadingsDataFromTime((long) (new Date().getTime() - 60 * 60 * 1000L * (24 + dia)), false);
log.debug("BG data loaded. Size: " + bgReadings.size()); log.debug("BG data loaded. Size: " + bgReadings.size());
} }
@ -230,12 +229,7 @@ public class IobCobCalculatorPlugin implements PluginBase {
public void calculateSensitivityData() { public void calculateSensitivityData() {
//log.debug("Locking calculateSensitivityData"); //log.debug("Locking calculateSensitivityData");
synchronized (dataLock) { synchronized (dataLock) {
NSProfile profile = ConfigBuilderPlugin.getActiveProfile() != null ? ConfigBuilderPlugin.getActiveProfile().getProfile() : null; Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null || profile.getIsf(NSProfile.secondsFromMidnight()) == null || profile.getIc(NSProfile.secondsFromMidnight()) == null) {
log.debug("calculateSensitivityData: No profile available");
return;
}
if (bucketed_data == null || bucketed_data.size() < 3) { if (bucketed_data == null || bucketed_data.size() < 3) {
log.debug("calculateSensitivityData: No bucketed data available"); log.debug("calculateSensitivityData: No bucketed data available");
@ -257,8 +251,7 @@ public class IobCobCalculatorPlugin implements PluginBase {
continue; continue;
} }
int secondsFromMidnight = NSProfile.secondsFromMidnight(bgTime); double sens = Profile.toMgdl(profile.getIsf(bgTime), profile.getUnits());
double sens = NSProfile.toMgdl(profile.getIsf(secondsFromMidnight), profile.getUnits());
AutosensData autosensData = new AutosensData(); AutosensData autosensData = new AutosensData();
autosensData.time = bgTime; autosensData.time = bgTime;
@ -289,7 +282,7 @@ public class IobCobCalculatorPlugin implements PluginBase {
// figure out how many carbs that represents // figure out how many carbs that represents
// but always assume at least 3mg/dL/5m (default) absorption // but always assume at least 3mg/dL/5m (default) absorption
double ci = Math.max(deviation, SP.getDouble("openapsama_min_5m_carbimpact", 3.0)); double ci = Math.max(deviation, SP.getDouble("openapsama_min_5m_carbimpact", 3.0));
autosensData.absorbed = ci * profile.getIc(secondsFromMidnight) / sens; autosensData.absorbed = ci * profile.getIc(bgTime) / sens;
// and add that to the running total carbsAbsorbed // and add that to the running total carbsAbsorbed
autosensData.cob = Math.max(previous.cob - autosensData.absorbed, 0d); autosensData.cob = Math.max(previous.cob - autosensData.absorbed, 0d);
} }
@ -385,7 +378,7 @@ public class IobCobCalculatorPlugin implements PluginBase {
} }
public static IobTotal[] calculateIobArrayInDia() { public static IobTotal[] calculateIobArrayInDia() {
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
// predict IOB out to DIA plus 30m // predict IOB out to DIA plus 30m
long time = new Date().getTime(); long time = new Date().getTime();
int len = (int) ((profile.getDia() * 60 + 30) / 5); int len = (int) ((profile.getDia() * 60 + 30) / 5);
@ -430,7 +423,7 @@ public class IobCobCalculatorPlugin implements PluginBase {
deviationsArray.add(autosensData.deviation); deviationsArray.add(autosensData.deviation);
pastSensitivity += autosensData.pastSensitivity; pastSensitivity += autosensData.pastSensitivity;
int secondsFromMidnight = NSProfile.secondsFromMidnight(autosensData.time); int secondsFromMidnight = Profile.secondsFromMidnight(autosensData.time);
if (secondsFromMidnight % 3600 < 2.5 * 60 || secondsFromMidnight % 3600 > 57.5 * 60) { if (secondsFromMidnight % 3600 < 2.5 * 60 || secondsFromMidnight % 3600 > 57.5 * 60) {
pastSensitivity += "(" + Math.round(secondsFromMidnight / 3600d) + ")"; pastSensitivity += "(" + Math.round(secondsFromMidnight / 3600d) + ")";
} }
@ -440,19 +433,9 @@ public class IobCobCalculatorPlugin implements PluginBase {
Double[] deviations = new Double[deviationsArray.size()]; Double[] deviations = new Double[deviationsArray.size()];
deviations = deviationsArray.toArray(deviations); deviations = deviationsArray.toArray(deviations);
if (ConfigBuilderPlugin.getActiveProfile() == null || ConfigBuilderPlugin.getActiveProfile().getProfile() == null) { Profile profile = MainApp.getConfigBuilder().getProfile();
log.debug("No profile available");
return new AutosensResult();
}
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); double sens = profile.getIsf();
Double sens = profile.getIsf(NSProfile.secondsFromMidnight());
if (sens == null || profile.getMaxDailyBasal() == 0) {
log.debug("No profile available");
return new AutosensResult();
}
double ratio = 1; double ratio = 1;
String ratioLimit = ""; String ratioLimit = "";
@ -472,10 +455,10 @@ public class IobCobCalculatorPlugin implements PluginBase {
double basalOff = 0; double basalOff = 0;
if (pSensitive < 0) { // sensitive if (pSensitive < 0) { // sensitive
basalOff = pSensitive * (60 / 5) / NSProfile.toMgdl(sens, profile.getUnits()); basalOff = pSensitive * (60 / 5) / Profile.toMgdl(sens, profile.getUnits());
sensResult = "Excess insulin sensitivity detected"; sensResult = "Excess insulin sensitivity detected";
} else if (pResistant > 0) { // resistant } else if (pResistant > 0) { // resistant
basalOff = pResistant * (60 / 5) / NSProfile.toMgdl(sens, profile.getUnits()); basalOff = pResistant * (60 / 5) / Profile.toMgdl(sens, profile.getUnits());
sensResult = "Excess insulin resistance detected"; sensResult = "Excess insulin resistance detected";
} else { } else {
sensResult = "Sensitivity normal"; sensResult = "Sensitivity normal";
@ -492,9 +475,9 @@ public class IobCobCalculatorPlugin implements PluginBase {
log.debug(ratioLimit); log.debug(ratioLimit);
} }
double newisf = Math.round(NSProfile.toMgdl(sens, profile.getUnits()) / ratio); double newisf = Math.round(Profile.toMgdl(sens, profile.getUnits()) / ratio);
if (ratio != 1) { if (ratio != 1) {
log.debug("ISF adjusted from " + NSProfile.toMgdl(sens, profile.getUnits()) + " to " + newisf); log.debug("ISF adjusted from " + Profile.toMgdl(sens, profile.getUnits()) + " to " + newisf);
} }
AutosensResult output = new AutosensResult(); AutosensResult output = new AutosensResult();
@ -531,17 +514,13 @@ public class IobCobCalculatorPlugin implements PluginBase {
@Subscribe @Subscribe
public void onNewProfile(EventNewBasalProfile ev) { public void onNewProfile(EventNewBasalProfile ev) {
if (MainApp.getConfigBuilder().getActiveProfile() == null) Profile profile = MainApp.getConfigBuilder().getProfile();
return;
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile();
if (profile != null) {
dia = profile.getDia(); dia = profile.getDia();
} if (ev == null) { // on init no need of reset
if (ev.newNSProfile == null) { // on init no need of reset
return; return;
} }
synchronized (dataLock) { synchronized (dataLock) {
log.debug("Invalidating cached data because of new profile from " + ev.from + ". IOB: " + iobTable.size() + " Autosens: " + autosensDataTable.size() + " records"); log.debug("Invalidating cached data because of new profile. IOB: " + iobTable.size() + " Autosens: " + autosensDataTable.size() + " records");
iobTable = new LongSparseArray<>(); iobTable = new LongSparseArray<>();
autosensDataTable = new LongSparseArray<>(); autosensDataTable = new LongSparseArray<>();
} }

View file

@ -11,7 +11,7 @@ import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import info.nightscout.androidaps.Services.Intents; import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.ProfileStore;
/** /**
@ -20,10 +20,9 @@ import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
public class BroadcastProfile { public class BroadcastProfile {
private static Logger log = LoggerFactory.getLogger(BroadcastProfile.class); private static Logger log = LoggerFactory.getLogger(BroadcastProfile.class);
public void handleNewTreatment(NSProfile profile, Context context, boolean isDelta) { public void handleNewTreatment(ProfileStore profile, Context context, boolean isDelta) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString("profile", profile.getData().toString()); bundle.putString("profile", profile.getData().toString());
bundle.putString("activeprofile", profile.getActiveProfile());
bundle.putBoolean("delta", isDelta); bundle.putBoolean("delta", isDelta);
Intent intent = new Intent(Intents.ACTION_NEW_PROFILE); Intent intent = new Intent(Intents.ACTION_NEW_PROFILE);
intent.putExtras(bundle); intent.putExtras(bundle);

View file

@ -1,494 +0,0 @@
package info.nightscout.androidaps.plugins.NSClientInternal.data;
import android.support.annotation.Nullable;
import com.crashlytics.android.Crashlytics;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.TimeZone;
import info.nightscout.androidaps.Constants;
import info.nightscout.utils.DecimalFormatter;
public class NSProfile {
private static Logger log = LoggerFactory.getLogger(NSProfile.class);
private JSONObject json = null;
private String activeProfile = null;
public NSProfile(JSONObject json, String activeProfile) {
this.json = json;
this.activeProfile = null;
JSONObject store;
try {
store = json.getJSONObject("store");
if (activeProfile != null && store.has(activeProfile)) {
this.activeProfile = activeProfile;
} else {
log.error("Active profile not found in store");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public JSONObject getDefaultProfile() {
String defaultProfileName = null;
JSONObject store;
JSONObject profile = null;
try {
defaultProfileName = (String) json.get("defaultProfile");
store = json.getJSONObject("store");
if (activeProfile != null && store.has(activeProfile)) {
defaultProfileName = activeProfile;
}
profile = store.getJSONObject(defaultProfileName);
} catch (JSONException e) {
e.printStackTrace();
}
return profile;
}
public JSONObject getSpecificProfile(String profileName) {
JSONObject profile = null;
try {
JSONObject store = json.getJSONObject("store");
if (store.has(profileName)) {
profile = store.getJSONObject(profileName);
}
} catch (JSONException e) {
e.printStackTrace();
}
return profile;
}
public ArrayList<CharSequence> getProfileList() {
ArrayList<CharSequence> ret = new ArrayList<CharSequence>();
JSONObject store;
JSONObject profile = null;
try {
store = json.getJSONObject("store");
Iterator<?> keys = store.keys();
while (keys.hasNext()) {
String profileName = (String) keys.next();
ret.add(profileName);
}
} catch (JSONException e) {
e.printStackTrace();
}
return ret;
}
public String log() {
String ret = "\n";
for (Integer hour = 0; hour < 24; hour++) {
double value = getBasal(hour * 60 * 60);
ret += "NS basal value for " + hour + ":00 is " + value + "\n";
}
ret += "NS units: " + getUnits();
return ret;
}
public JSONObject getData() {
return json;
}
public Double getDia() {
return getDia(getDefaultProfile());
}
public Double getDia(JSONObject profile) {
Double dia;
if (profile != null) {
try {
dia = profile.getDouble("dia");
return dia;
} catch (JSONException e) {
e.printStackTrace();
}
}
return Constants.defaultDIA;
}
/*
public Double getCarbAbsorbtionRate() {
return getCarbAbsorbtionRate(getDefaultProfile());
}
public Double getCarbAbsorbtionRate(JSONObject profile) {
Double carbAbsorptionRate;
if (profile != null) {
try {
carbAbsorptionRate = profile.getDouble("carbs_hr");
return carbAbsorptionRate;
} catch (JSONException e) {
e.printStackTrace();
}
}
return 0D;
}
*/
// mmol or mg/dl
public String getUnits() {
return getUnits(getDefaultProfile());
}
public String getUnits(JSONObject profile) {
String units;
if (profile != null) {
try {
units = profile.getString("units");
return units.toLowerCase();
} catch (JSONException e) {
log.error("Profile not found. Failing over to main JSON");
try {
return json.getString("units").toLowerCase();
} catch (JSONException e1) {
e1.printStackTrace();
Crashlytics.log("Profile failover failed too");
}
}
}
return Constants.MGDL;
}
public TimeZone getTimeZone() {
return getTimeZone(getDefaultProfile());
}
public TimeZone getTimeZone(JSONObject profile) {
TimeZone timeZone;
if (profile != null) {
try {
return TimeZone.getTimeZone(profile.getString("timezone"));
} catch (JSONException e) {
e.printStackTrace();
}
}
return TimeZone.getDefault();
}
@Nullable
public Double getValueToTime(JSONArray array, Integer timeAsSeconds) {
Double lastValue = null;
for (Integer index = 0; index < array.length(); index++) {
try {
JSONObject o = array.getJSONObject(index);
Integer tas = o.getInt("timeAsSeconds");
Double value = o.getDouble("value");
if (lastValue == null) lastValue = value;
if (timeAsSeconds < tas) {
break;
}
lastValue = value;
} catch (JSONException e) {
e.printStackTrace();
}
}
return lastValue;
}
public String getValuesList(JSONArray array, JSONArray array2, DecimalFormat format, String units) {
String retValue = "";
for (Integer index = 0; index < array.length(); index++) {
try {
JSONObject o = array.getJSONObject(index);
retValue += o.getString("time");
retValue += " ";
retValue += format.format(o.getDouble("value"));
if (array2 != null) {
JSONObject o2 = array2.getJSONObject(index);
retValue += " - ";
retValue += format.format(o2.getDouble("value"));
}
retValue += " " + units;
retValue += "\n";
} catch (JSONException e) {
e.printStackTrace();
}
}
return retValue;
}
@Nullable
public Double getIsf(Integer timeAsSeconds) {
return getIsf(getDefaultProfile(), timeAsSeconds);
}
@Nullable
public Double getIsf(JSONObject profile, Integer timeAsSeconds) {
if (profile != null) {
try {
return getValueToTime(profile.getJSONArray("sens"), timeAsSeconds);
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
public String getIsfList() {
return getIsfList(getDefaultProfile());
}
public String getIsfList(JSONObject profile) {
if (profile != null) {
try {
return getValuesList(profile.getJSONArray("sens"), null, new DecimalFormat("0.0"), getUnits() + "/U");
} catch (JSONException e) {
e.printStackTrace();
}
}
return "";
}
@Nullable
public Double getIc(Integer timeAsSeconds) {
return getIc(getDefaultProfile(), timeAsSeconds);
}
@Nullable
public Double getIc(JSONObject profile, Integer timeAsSeconds) {
if (profile != null) {
try {
return getValueToTime(profile.getJSONArray("carbratio"), timeAsSeconds);
} catch (JSONException e) {
e.printStackTrace();
}
}
return 0D;
}
public String getIcList() {
return getIcList(getDefaultProfile());
}
public String getIcList(JSONObject profile) {
if (profile != null) {
try {
return getValuesList(profile.getJSONArray("carbratio"), null, new DecimalFormat("0.0"), "g");
} catch (JSONException e) {
e.printStackTrace();
}
}
return "";
}
@Nullable
public Double getBasal(Integer timeAsSeconds) {
return getBasal(getDefaultProfile(), timeAsSeconds);
}
@Nullable
public Double getBasal(JSONObject profile, Integer timeAsSeconds) {
if (profile != null) {
try {
return getValueToTime(profile.getJSONArray("basal"), timeAsSeconds);
} catch (JSONException e) {
e.printStackTrace();
}
}
return 0D;
}
public String getBasalList() {
return getBasalList(getDefaultProfile());
}
public class BasalValue {
public BasalValue(Integer timeAsSeconds, Double value) {
this.timeAsSeconds = timeAsSeconds;
this.value = value;
}
public Integer timeAsSeconds;
public Double value;
}
public BasalValue[] getBasalValues() {
try {
JSONArray array = getDefaultProfile().getJSONArray("basal");
BasalValue[] ret = new BasalValue[array.length()];
for (Integer index = 0; index < array.length(); index++) {
JSONObject o = array.getJSONObject(index);
Integer tas = o.getInt("timeAsSeconds");
Double value = o.getDouble("value");
ret[index] = new BasalValue(tas, value);
}
return ret;
} catch (JSONException e) {
e.printStackTrace();
}
return new BasalValue[0];
}
public String getBasalList(JSONObject profile) {
if (profile != null) {
try {
return getValuesList(profile.getJSONArray("basal"), null, new DecimalFormat("0.00"), "U");
} catch (JSONException e) {
e.printStackTrace();
}
}
return "";
}
@Nullable
public Double getTargetLow(Integer timeAsSeconds) {
return getTargetLow(getDefaultProfile(), timeAsSeconds);
}
@Nullable
public Double getTargetLow(JSONObject profile, Integer timeAsSeconds) {
if (profile != null) {
try {
return getValueToTime(profile.getJSONArray("target_low"), timeAsSeconds);
} catch (JSONException e) {
e.printStackTrace();
}
}
return 0D;
}
@Nullable
public Double getTargetHigh(Integer timeAsSeconds) {
return getTargetHigh(getDefaultProfile(), timeAsSeconds);
}
@Nullable
public Double getTargetHigh(JSONObject profile, Integer timeAsSeconds) {
if (profile != null) {
try {
return getValueToTime(profile.getJSONArray("target_high"), timeAsSeconds);
} catch (JSONException e) {
e.printStackTrace();
}
}
return 0D;
}
public String getTargetList() {
return getTargetList(getDefaultProfile());
}
public String getTargetList(JSONObject profile) {
if (profile != null) {
try {
return getValuesList(profile.getJSONArray("target_low"), profile.getJSONArray("target_high"), new DecimalFormat("0.0"), getUnits());
} catch (JSONException e) {
e.printStackTrace();
}
}
return "";
}
public String getActiveProfile() {
if (activeProfile != null)
return activeProfile;
else {
try {
JSONObject store = json.getJSONObject("store");
String defaultProfileName = (String) json.get("defaultProfile");
if (store.has(defaultProfileName)) {
return defaultProfileName;
}
log.error("Default profile not found");
return null;
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
public void setActiveProfile(String newProfile) {
try {
JSONObject store = json.getJSONObject("store");
if (newProfile != null && store.has(newProfile)) {
activeProfile = newProfile;
} else {
log.error("Attempt to set wrong active profile");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public double getMaxDailyBasal() {
Double max = 0d;
for (Integer hour = 0; hour < 24; hour++) {
double value = getBasal(hour * 60 * 60);
if (value > max) max = value;
}
return max;
}
public static int secondsFromMidnight() {
Calendar c = Calendar.getInstance();
long now = c.getTimeInMillis();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long passed = now - c.getTimeInMillis();
return (int) (passed / 1000);
}
public static int secondsFromMidnight(Date date) {
Calendar c = Calendar.getInstance();
long now = date.getTime();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long passed = now - c.getTimeInMillis();
return (int) (passed / 1000);
}
public static int secondsFromMidnight(long date) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
long passed = date - c.getTimeInMillis();
return (int) (passed / 1000);
}
public static Double toMgdl(Double value, String units) {
if (units.equals(Constants.MGDL)) return value;
else return value * Constants.MMOLL_TO_MGDL;
}
public static Double fromMgdlToUnits(Double value, String units) {
if (units.equals(Constants.MGDL)) return value;
else return value * Constants.MGDL_TO_MMOLL;
}
public static Double toUnits(Double valueInMgdl, Double valueInMmol, String units) {
if (units.equals(Constants.MGDL)) return valueInMgdl;
else return valueInMmol;
}
public static String toUnitsString(Double valueInMgdl, Double valueInMmol, String units) {
if (units.equals(Constants.MGDL)) return DecimalFormatter.to0Decimal(valueInMgdl);
else return DecimalFormatter.to1Decimal(valueInMmol);
}
}

View file

@ -47,10 +47,10 @@ import info.nightscout.androidaps.plugins.NSClientInternal.broadcasts.BroadcastS
import info.nightscout.androidaps.plugins.NSClientInternal.broadcasts.BroadcastStatus; import info.nightscout.androidaps.plugins.NSClientInternal.broadcasts.BroadcastStatus;
import info.nightscout.androidaps.plugins.NSClientInternal.broadcasts.BroadcastTreatment; import info.nightscout.androidaps.plugins.NSClientInternal.broadcasts.BroadcastTreatment;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSCal; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSCal;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSgv; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSgv;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSStatus; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSStatus;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSTreatment; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSTreatment;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientNewLog; import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientNewLog;
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientRestart; import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientRestart;
import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientStatus; import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientStatus;
@ -69,10 +69,9 @@ public class NSClientService extends Service {
static public PowerManager.WakeLock mWakeLock; static public PowerManager.WakeLock mWakeLock;
private IBinder mBinder = new NSClientService.LocalBinder(); private IBinder mBinder = new NSClientService.LocalBinder();
static NSProfile nsProfile; static ProfileStore profileStore;
static public Handler handler; static public Handler handler;
static private HandlerThread handlerThread;
public static Socket mSocket; public static Socket mSocket;
public static boolean isConnected = false; public static boolean isConnected = false;
@ -101,7 +100,7 @@ public class NSClientService extends Service {
public NSClientService() { public NSClientService() {
registerBus(); registerBus();
if (handler == null) { if (handler == null) {
handlerThread = new HandlerThread(NSClientService.class.getSimpleName() + "Handler"); HandlerThread handlerThread = new HandlerThread(NSClientService.class.getSimpleName() + "Handler");
handlerThread.start(); handlerThread.start();
handler = new Handler(handlerThread.getLooper()); handler = new Handler(handlerThread.getLooper());
} }
@ -174,14 +173,6 @@ public class NSClientService extends Service {
restart(); restart();
} }
public static void setNsProfile(NSProfile profile) {
nsProfile = profile;
}
public static NSProfile getNsProfile() {
return nsProfile;
}
public void initialize() { public void initialize() {
dataCounter = 0; dataCounter = 0;
@ -334,9 +325,7 @@ public class NSClientService extends Service {
JSONArray profiles = (JSONArray) data.getJSONArray("profiles"); JSONArray profiles = (JSONArray) data.getJSONArray("profiles");
if (profiles.length() > 0) { if (profiles.length() > 0) {
JSONObject profile = (JSONObject) profiles.get(profiles.length() - 1); JSONObject profile = (JSONObject) profiles.get(profiles.length() - 1);
String activeProfile = NSClientService.getNsProfile() == null ? null : NSClientService.getNsProfile().getActiveProfile(); profileStore = new ProfileStore(profile);
NSProfile nsProfile = new NSProfile(profile, activeProfile);
NSClientService.setNsProfile(nsProfile);
broadcastProfile = true; broadcastProfile = true;
MainApp.bus().post(new EventNSClientNewLog("PROFILE", "profile received")); MainApp.bus().post(new EventNSClientNewLog("PROFILE", "profile received"));
} }
@ -358,20 +347,6 @@ public class NSClientService extends Service {
BroadcastStatus bs = new BroadcastStatus(); BroadcastStatus bs = new BroadcastStatus();
bs.handleNewStatus(nsStatus, MainApp.instance().getApplicationContext(), isDelta); bs.handleNewStatus(nsStatus, MainApp.instance().getApplicationContext(), isDelta);
if (NSClientService.getNsProfile() != null) {
String oldActiveProfile = NSClientService.getNsProfile().getActiveProfile();
String receivedActiveProfile = nsStatus.getActiveProfile();
NSClientService.getNsProfile().setActiveProfile(receivedActiveProfile);
if (receivedActiveProfile != null) {
MainApp.bus().post(new EventNSClientNewLog("PROFILE", "status activeProfile received: " + receivedActiveProfile));
}
// Change possible nulls to ""
String oldP = oldActiveProfile == null ? "" : oldActiveProfile;
String newP = receivedActiveProfile == null ? "" : receivedActiveProfile;
if (!newP.equals(oldP)) {
broadcastProfile = true;
}
}
/* Other received data to 2016/02/10 /* Other received data to 2016/02/10
{ {
status: 'ok' status: 'ok'
@ -393,9 +368,9 @@ public class NSClientService extends Service {
} }
// If new profile received or change detected broadcast it // If new profile received or change detected broadcast it
if (broadcastProfile && nsProfile != null) { if (broadcastProfile && profileStore != null) {
BroadcastProfile bp = new BroadcastProfile(); BroadcastProfile bp = new BroadcastProfile();
bp.handleNewTreatment(nsProfile, MainApp.instance().getApplicationContext(), isDelta); bp.handleNewTreatment(profileStore, MainApp.instance().getApplicationContext(), isDelta);
MainApp.bus().post(new EventNSClientNewLog("PROFILE", "broadcasting")); MainApp.bus().post(new EventNSClientNewLog("PROFILE", "broadcasting"));
} }
@ -481,7 +456,6 @@ public class NSClientService extends Service {
} }
if (data.has("sgvs")) { if (data.has("sgvs")) {
BroadcastSgvs bs = new BroadcastSgvs(); BroadcastSgvs bs = new BroadcastSgvs();
String units = nsProfile != null ? nsProfile.getUnits() : "mg/dl";
JSONArray sgvs = (JSONArray) data.getJSONArray("sgvs"); JSONArray sgvs = (JSONArray) data.getJSONArray("sgvs");
if (sgvs.length() > 0) if (sgvs.length() > 0)
MainApp.bus().post(new EventNSClientNewLog("DATA", "received " + sgvs.length() + " sgvs")); MainApp.bus().post(new EventNSClientNewLog("DATA", "received " + sgvs.length() + " sgvs"));

View file

@ -22,7 +22,7 @@ import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin; import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin;
import info.nightscout.androidaps.plugins.Loop.ScriptReader; import info.nightscout.androidaps.plugins.Loop.ScriptReader;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
public class DetermineBasalAdapterAMAJS { public class DetermineBasalAdapterAMAJS {
@ -190,7 +190,7 @@ public class DetermineBasalAdapterAMAJS {
} }
public void setData(NSProfile profile, public void setData(Profile profile,
double maxIob, double maxIob,
double maxBasal, double maxBasal,
double minBg, double minBg,
@ -215,8 +215,8 @@ public class DetermineBasalAdapterAMAJS {
mProfile.add("min_bg", minBg); mProfile.add("min_bg", minBg);
mProfile.add("max_bg", maxBg); mProfile.add("max_bg", maxBg);
mProfile.add("target_bg", targetBg); mProfile.add("target_bg", targetBg);
mProfile.add("carb_ratio", profile.getIc(profile.secondsFromMidnight())); mProfile.add("carb_ratio", profile.getIc());
mProfile.add("sens", NSProfile.toMgdl(profile.getIsf(NSProfile.secondsFromMidnight()).doubleValue(), units)); mProfile.add("sens", Profile.toMgdl(profile.getIsf().doubleValue(), units));
mProfile.add("max_daily_safety_multiplier", SP.getInt("openapsama_max_daily_safety_multiplier", 3)); mProfile.add("max_daily_safety_multiplier", SP.getInt("openapsama_max_daily_safety_multiplier", 3));
mProfile.add("current_basal_safety_multiplier", SP.getInt("openapsama_current_basal_safety_multiplier", 4)); mProfile.add("current_basal_safety_multiplier", SP.getInt("openapsama_current_basal_safety_multiplier", 4));
mProfile.add("skip_neutral_temps", true); mProfile.add("skip_neutral_temps", true);

View file

@ -22,7 +22,7 @@ import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensResult;
import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin; import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin;
import info.nightscout.androidaps.plugins.Loop.APSResult; import info.nightscout.androidaps.plugins.Loop.APSResult;
import info.nightscout.androidaps.plugins.Loop.ScriptReader; import info.nightscout.androidaps.plugins.Loop.ScriptReader;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui;
import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateResultGui; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateResultGui;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
@ -132,7 +132,7 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface {
} }
GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData(); GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData();
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
PumpInterface pump = MainApp.getConfigBuilder(); PumpInterface pump = MainApp.getConfigBuilder();
if (!isEnabled(PluginBase.APS)) { if (!isEnabled(PluginBase.APS)) {
@ -149,20 +149,6 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface {
return; return;
} }
if (profile == null || profile.getIc(NSProfile.secondsFromMidnight()) == null || profile.getIsf(NSProfile.secondsFromMidnight()) == null || profile.getBasal(NSProfile.secondsFromMidnight()) == null) {
MainApp.bus().post(new EventOpenAPSUpdateResultGui(MainApp.instance().getString(R.string.openapsma_noprofile)));
if (Config.logAPSResult)
log.debug(MainApp.instance().getString(R.string.openapsma_noprofile));
return;
}
if (pump == null) {
MainApp.bus().post(new EventOpenAPSUpdateResultGui(MainApp.instance().getString(R.string.openapsma_nopump)));
if (Config.logAPSResult)
log.debug(MainApp.instance().getString(R.string.openapsma_nopump));
return;
}
String units = profile.getUnits(); String units = profile.getUnits();
Double maxBgDefault = Constants.MAX_BG_DEFAULT_MGDL; Double maxBgDefault = Constants.MAX_BG_DEFAULT_MGDL;
@ -178,9 +164,9 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface {
double maxIob = SP.getDouble("openapsma_max_iob", 1.5d); double maxIob = SP.getDouble("openapsma_max_iob", 1.5d);
double maxBasal = SP.getDouble("openapsma_max_basal", 1d); double maxBasal = SP.getDouble("openapsma_max_basal", 1d);
double minBg = NSProfile.toMgdl(SP.getDouble("openapsma_min_bg", minBgDefault), units); double minBg = Profile.toMgdl(SP.getDouble("openapsma_min_bg", minBgDefault), units);
double maxBg = NSProfile.toMgdl(SP.getDouble("openapsma_max_bg", maxBgDefault), units); double maxBg = Profile.toMgdl(SP.getDouble("openapsma_max_bg", maxBgDefault), units);
double targetBg = NSProfile.toMgdl(SP.getDouble("openapsma_target_bg", targetBgDefault), units); double targetBg = Profile.toMgdl(SP.getDouble("openapsma_target_bg", targetBgDefault), units);
minBg = Round.roundTo(minBg, 0.1d); minBg = Round.roundTo(minBg, 0.1d);
maxBg = Round.roundTo(maxBg, 0.1d); maxBg = Round.roundTo(maxBg, 0.1d);
@ -216,12 +202,12 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface {
if (!checkOnlyHardLimits(profile.getDia(), "dia", 2, 7)) return; if (!checkOnlyHardLimits(profile.getDia(), "dia", 2, 7)) return;
if (!checkOnlyHardLimits(profile.getIc(profile.secondsFromMidnight()), "carbratio", 2, 100)) if (!checkOnlyHardLimits(profile.getIc(profile.secondsFromMidnight()), "carbratio", 2, 100))
return; return;
if (!checkOnlyHardLimits(NSProfile.toMgdl(profile.getIsf(NSProfile.secondsFromMidnight()).doubleValue(), units), "sens", 2, 900)) if (!checkOnlyHardLimits(Profile.toMgdl(profile.getIsf().doubleValue(), units), "sens", 2, 900))
return; return;
if (!checkOnlyHardLimits(profile.getMaxDailyBasal(), "max_daily_basal", 0.1, 10)) return; if (!checkOnlyHardLimits(profile.getMaxDailyBasal(), "max_daily_basal", 0.1, 10)) return;
if (!checkOnlyHardLimits(pump.getBaseBasalRate(), "current_basal", 0.01, 5)) return; if (!checkOnlyHardLimits(pump.getBaseBasalRate(), "current_basal", 0.01, 5)) return;
long oldestDataAvailable = MainApp.getConfigBuilder().oldestDataAvaialable(); long oldestDataAvailable = MainApp.getConfigBuilder().oldestDataAvailable();
long getBGDataFrom = Math.max(oldestDataAvailable, (long) (new Date().getTime() - 60 * 60 * 1000L * (24 + profile.getDia()))); long getBGDataFrom = Math.max(oldestDataAvailable, (long) (new Date().getTime() - 60 * 60 * 1000L * (24 + profile.getDia())));
log.debug("Limiting data to oldest available temps: " + new Date(oldestDataAvailable).toString()); log.debug("Limiting data to oldest available temps: " + new Date(oldestDataAvailable).toString());

View file

@ -19,7 +19,7 @@ import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.data.MealData;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.Loop.ScriptReader; import info.nightscout.androidaps.plugins.Loop.ScriptReader;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
public class DetermineBasalAdapterMAJS { public class DetermineBasalAdapterMAJS {
@ -217,7 +217,7 @@ public class DetermineBasalAdapterMAJS {
} }
public void setData(NSProfile profile, public void setData(Profile profile,
double maxIob, double maxIob,
double maxBasal, double maxBasal,
double minBg, double minBg,
@ -238,8 +238,8 @@ public class DetermineBasalAdapterMAJS {
mProfile.add("min_bg", minBg); mProfile.add("min_bg", minBg);
mProfile.add("max_bg", maxBg); mProfile.add("max_bg", maxBg);
mProfile.add("target_bg", targetBg); mProfile.add("target_bg", targetBg);
mProfile.add("carb_ratio", profile.getIc(profile.secondsFromMidnight())); mProfile.add("carb_ratio", profile.getIc());
mProfile.add("sens", NSProfile.toMgdl(profile.getIsf(NSProfile.secondsFromMidnight()).doubleValue(), units)); mProfile.add("sens", Profile.toMgdl(profile.getIsf().doubleValue(), units));
mProfile.add("current_basal", pump.getBaseBasalRate()); mProfile.add("current_basal", pump.getBaseBasalRate());
mCurrentTemp.add("duration", MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory()); mCurrentTemp.add("duration", MainApp.getConfigBuilder().getTempBasalRemainingMinutesFromHistory());

View file

@ -20,7 +20,7 @@ import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.Loop.APSResult; import info.nightscout.androidaps.plugins.Loop.APSResult;
import info.nightscout.androidaps.plugins.Loop.ScriptReader; import info.nightscout.androidaps.plugins.Loop.ScriptReader;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui;
import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateResultGui; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateResultGui;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
@ -130,7 +130,7 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface {
} }
GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData(); GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData();
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
PumpInterface pump = MainApp.getConfigBuilder(); PumpInterface pump = MainApp.getConfigBuilder();
if (!isEnabled(PluginBase.APS)) { if (!isEnabled(PluginBase.APS)) {
@ -147,20 +147,6 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface {
return; return;
} }
if (profile == null) {
MainApp.bus().post(new EventOpenAPSUpdateResultGui(MainApp.instance().getString(R.string.openapsma_noprofile)));
if (Config.logAPSResult)
log.debug(MainApp.instance().getString(R.string.openapsma_noprofile));
return;
}
if (pump == null) {
MainApp.bus().post(new EventOpenAPSUpdateResultGui(MainApp.instance().getString(R.string.openapsma_nopump)));
if (Config.logAPSResult)
log.debug(MainApp.instance().getString(R.string.openapsma_nopump));
return;
}
String units = profile.getUnits(); String units = profile.getUnits();
Double maxBgDefault = Constants.MAX_BG_DEFAULT_MGDL; Double maxBgDefault = Constants.MAX_BG_DEFAULT_MGDL;
@ -176,9 +162,9 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface {
double maxIob = SP.getDouble("openapsma_max_iob", 1.5d); double maxIob = SP.getDouble("openapsma_max_iob", 1.5d);
double maxBasal = SafeParse.stringToDouble(SP.getString("openapsma_max_basal", "1")); double maxBasal = SafeParse.stringToDouble(SP.getString("openapsma_max_basal", "1"));
double minBg = NSProfile.toMgdl(SP.getDouble("openapsma_min_bg", minBgDefault), units); double minBg = Profile.toMgdl(SP.getDouble("openapsma_min_bg", minBgDefault), units);
double maxBg = NSProfile.toMgdl(SP.getDouble("openapsma_max_bg", maxBgDefault), units); double maxBg = Profile.toMgdl(SP.getDouble("openapsma_max_bg", maxBgDefault), units);
double targetBg = NSProfile.toMgdl(SP.getDouble("openapsma_target_bg", targetBgDefault), units); double targetBg = Profile.toMgdl(SP.getDouble("openapsma_target_bg", targetBgDefault), units);
minBg = Round.roundTo(minBg, 0.1d); minBg = Round.roundTo(minBg, 0.1d);
maxBg = Round.roundTo(maxBg, 0.1d); maxBg = Round.roundTo(maxBg, 0.1d);
@ -211,8 +197,8 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface {
maxBasal = verifyHardLimits(maxBasal, "max_basal", 0.1, 10); maxBasal = verifyHardLimits(maxBasal, "max_basal", 0.1, 10);
if (!checkOnlyHardLimits(profile.getDia(), "dia", 2, 7)) return; if (!checkOnlyHardLimits(profile.getDia(), "dia", 2, 7)) return;
if (!checkOnlyHardLimits(profile.getIc(profile.secondsFromMidnight()), "carbratio", 2, 100)) return; if (!checkOnlyHardLimits(profile.getIc(), "carbratio", 2, 100)) return;
if (!checkOnlyHardLimits(NSProfile.toMgdl(profile.getIsf(NSProfile.secondsFromMidnight()).doubleValue(), units), "sens", 2, 900)) return; if (!checkOnlyHardLimits(Profile.toMgdl(profile.getIsf().doubleValue(), units), "sens", 2, 900)) return;
if (!checkOnlyHardLimits(profile.getMaxDailyBasal(), "max_daily_basal", 0.1, 10)) return; if (!checkOnlyHardLimits(profile.getMaxDailyBasal(), "max_daily_basal", 0.1, 10)) return;
if (!checkOnlyHardLimits(pump.getBaseBasalRate(), "current_basal", 0.01, 5)) return; if (!checkOnlyHardLimits(pump.getBaseBasalRate(), "current_basal", 0.01, 5)) return;

View file

@ -24,7 +24,7 @@ import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.GlucoseStatus; import info.nightscout.androidaps.data.GlucoseStatus;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.PlusMinusEditText; import info.nightscout.utils.PlusMinusEditText;
import info.nightscout.utils.SafeParse; import info.nightscout.utils.SafeParse;
import info.nightscout.utils.XdripCalibrations; import info.nightscout.utils.XdripCalibrations;
@ -60,8 +60,8 @@ public class CalibrationDialog extends DialogFragment implements View.OnClickLis
okButton = (Button) view.findViewById(R.id.overview_calibration_okbutton); okButton = (Button) view.findViewById(R.id.overview_calibration_okbutton);
okButton.setOnClickListener(this); okButton.setOnClickListener(this);
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
Double bg = profile != null ? NSProfile.fromMgdlToUnits(GlucoseStatus.getGlucoseStatusData() != null ? GlucoseStatus.getGlucoseStatusData().glucose : 0d, profile.getUnits()) : 0d; Double bg = profile != null ? Profile.fromMgdlToUnits(GlucoseStatus.getGlucoseStatusData() != null ? GlucoseStatus.getGlucoseStatusData().glucose : 0d, profile.getUnits()) : 0d;
String units = Constants.MGDL; String units = Constants.MGDL;
if (profile != null) if (profile != null)
@ -83,7 +83,8 @@ public class CalibrationDialog extends DialogFragment implements View.OnClickLis
public void onClick(View view) { public void onClick(View view) {
switch (view.getId()) { switch (view.getId()) {
case R.id.overview_calibration_okbutton: case R.id.overview_calibration_okbutton:
final Double bg = SafeParse.stringToDouble(this.bgView.getText().toString());; final Double bg = SafeParse.stringToDouble(this.bgView.getText().toString());
;
XdripCalibrations.confirmAndSendCalibration(bg, context); XdripCalibrations.confirmAndSendCalibration(bg, context);
dismiss(); dismiss();
Answers.getInstance().logCustom(new CustomEvent("Calibration")); Answers.getInstance().logCustom(new CustomEvent("Calibration"));

View file

@ -52,7 +52,8 @@ import info.nightscout.androidaps.events.EventNewBG;
import info.nightscout.androidaps.events.EventRefreshGui; import info.nightscout.androidaps.events.EventRefreshGui;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.plugins.OpenAPSAMA.OpenAPSAMAPlugin; import info.nightscout.androidaps.plugins.OpenAPSAMA.OpenAPSAMAPlugin;
import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui;
import info.nightscout.utils.BolusWizard; import info.nightscout.utils.BolusWizard;
@ -351,7 +352,8 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
} }
private void initDialog() { private void initDialog() {
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
ProfileStore profileStore = MainApp.getConfigBuilder().getActiveProfileInterface().getProfile();
if (profile == null) { if (profile == null) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile)); ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile));
@ -359,14 +361,14 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
} }
ArrayList<CharSequence> profileList; ArrayList<CharSequence> profileList;
profileList = profile.getProfileList(); profileList = profileStore.getProfileList();
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getContext(), ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getContext(),
R.layout.spinner_centered, profileList); R.layout.spinner_centered, profileList);
profileSpinner.setAdapter(adapter); profileSpinner.setAdapter(adapter);
// set selected to actual profile // set selected to actual profile
for (int p = 0; p < profileList.size(); p++) { for (int p = 0; p < profileList.size(); p++) {
if (profileList.get(p).equals(profile.getActiveProfile())) if (profileList.get(p).equals(MainApp.getConfigBuilder().getProfileName()))
profileSpinner.setSelection(p); profileSpinner.setSelection(p);
} }
@ -380,9 +382,9 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
if (lastBg != null) { if (lastBg != null) {
Double lastBgValue = lastBg.valueToUnits(units); Double lastBgValue = lastBg.valueToUnits(units);
Double sens = profile.getIsf(NSProfile.secondsFromMidnight()); Double sens = profile.getIsf();
Double targetBGLow = profile.getTargetLow(NSProfile.secondsFromMidnight()); Double targetBGLow = profile.getTargetLow();
Double targetBGHigh = profile.getTargetHigh(NSProfile.secondsFromMidnight()); Double targetBGHigh = profile.getTargetHigh();
Double bgDiff; Double bgDiff;
if (lastBgValue <= targetBGLow) { if (lastBgValue <= targetBGLow) {
bgDiff = lastBgValue - targetBGLow; bgDiff = lastBgValue - targetBGLow;
@ -428,11 +430,11 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
} }
private void calculateInsulin() { private void calculateInsulin() {
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); ProfileStore profile = MainApp.getConfigBuilder().getActiveProfileInterface().getProfile();
if (profileSpinner == null || profileSpinner.getSelectedItem() == null) if (profileSpinner == null || profileSpinner.getSelectedItem() == null)
return; // not initialized yet return; // not initialized yet
String selectedAlternativeProfile = profileSpinner.getSelectedItem().toString(); String selectedAlternativeProfile = profileSpinner.getSelectedItem().toString();
JSONObject specificProfile = profile.getSpecificProfile(selectedAlternativeProfile); Profile specificProfile = profile.getSpecificProfile(selectedAlternativeProfile);
// Entered values // Entered values
Double c_bg = SafeParse.stringToDouble(bgInput.getText().toString()); Double c_bg = SafeParse.stringToDouble(bgInput.getText().toString());
@ -506,7 +508,7 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com
// Trend // Trend
if (bgtrendCheckbox.isChecked()) { if (bgtrendCheckbox.isChecked()) {
if (wizard.glucoseStatus != null) { if (wizard.glucoseStatus != null) {
bgTrend.setText((wizard.glucoseStatus.avgdelta > 0 ? "+" : "") + NSProfile.toUnitsString(wizard.glucoseStatus.avgdelta * 3, wizard.glucoseStatus.avgdelta * 3 / 18, profile.getUnits()) + " " + profile.getUnits()); bgTrend.setText((wizard.glucoseStatus.avgdelta > 0 ? "+" : "") + Profile.toUnitsString(wizard.glucoseStatus.avgdelta * 3, wizard.glucoseStatus.avgdelta * 3 / 18, specificProfile.getUnits()) + " " + specificProfile.getUnits());
} else { } else {
bgTrend.setText(""); bgTrend.setText("");
} }

View file

@ -25,6 +25,10 @@ public class Notification {
public static final int APPROACHING_DAILY_LIMIT = 10; public static final int APPROACHING_DAILY_LIMIT = 10;
public static final int NSCLIENT_NO_WRITE_PERMISSION = 11; public static final int NSCLIENT_NO_WRITE_PERMISSION = 11;
public static final int MISSING_SMS_PERMISSION = 12; public static final int MISSING_SMS_PERMISSION = 12;
public static final int ISF_MISSING = 13;
public static final int IC_MISSING = 14;
public static final int BASAL_MISSING = 15;
public static final int TARGET_MISSING = 16;
public int id; public int id;
public Date date; public Date date;

View file

@ -94,7 +94,7 @@ import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugi
import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventAutosensCalculationFinished; import info.nightscout.androidaps.plugins.IobCobCalculator.events.EventAutosensCalculationFinished;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.Loop.events.EventNewOpenLoopNotification; import info.nightscout.androidaps.plugins.Loop.events.EventNewOpenLoopNotification;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.OpenAPSAMA.DetermineBasalResultAMA; import info.nightscout.androidaps.plugins.OpenAPSAMA.DetermineBasalResultAMA;
import info.nightscout.androidaps.plugins.OpenAPSAMA.OpenAPSAMAPlugin; import info.nightscout.androidaps.plugins.OpenAPSAMA.OpenAPSAMAPlugin;
import info.nightscout.androidaps.plugins.Overview.Dialogs.CalibrationDialog; import info.nightscout.androidaps.plugins.Overview.Dialogs.CalibrationDialog;
@ -594,16 +594,14 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
void onClickQuickwizard() { void onClickQuickwizard() {
final BgReading actualBg = DatabaseHelper.actualBg(); final BgReading actualBg = DatabaseHelper.actualBg();
if (MainApp.getConfigBuilder() == null || ConfigBuilderPlugin.getActiveProfile() == null) // app not initialized yet final Profile profile = MainApp.getConfigBuilder().getProfile();
return;
final NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile();
QuickWizard.QuickWizardEntry quickWizardEntry = getPlugin().quickWizard.getActive(); QuickWizard.QuickWizardEntry quickWizardEntry = getPlugin().quickWizard.getActive();
if (quickWizardEntry != null && actualBg != null) { if (quickWizardEntry != null && actualBg != null) {
quickWizardButton.setVisibility(View.VISIBLE); quickWizardButton.setVisibility(View.VISIBLE);
String text = MainApp.sResources.getString(R.string.bolus) + ": " + quickWizardEntry.buttonText(); String text = MainApp.sResources.getString(R.string.bolus) + ": " + quickWizardEntry.buttonText();
BolusWizard wizard = new BolusWizard(); BolusWizard wizard = new BolusWizard();
wizard.doCalc(profile.getDefaultProfile(), quickWizardEntry.carbs(), 0d, actualBg.valueToUnits(profile.getUnits()), 0d, true, true, false, false); wizard.doCalc(profile, quickWizardEntry.carbs(), 0d, actualBg.valueToUnits(profile.getUnits()), 0d, true, true, false, false);
final JSONObject boluscalcJSON = new JSONObject(); final JSONObject boluscalcJSON = new JSONObject();
try { try {
@ -839,15 +837,15 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
BgReading actualBG = DatabaseHelper.actualBg(); BgReading actualBG = DatabaseHelper.actualBg();
BgReading lastBG = DatabaseHelper.lastBg(); BgReading lastBG = DatabaseHelper.lastBg();
if (MainApp.getConfigBuilder() == null || MainApp.getConfigBuilder().getActiveProfile() == null || MainApp.getConfigBuilder().getActiveProfile().getProfile() == null) {// app not initialized yet // if (MainApp.getConfigBuilder().getActiveProfile().getProfile() == null) {// app not initialized yet
pumpStatusView.setText(R.string.noprofileset); // pumpStatusView.setText(R.string.noprofileset);
pumpStatusLayout.setVisibility(View.VISIBLE); // pumpStatusLayout.setVisibility(View.VISIBLE);
loopStatusLayout.setVisibility(View.GONE); // loopStatusLayout.setVisibility(View.GONE);
return; // return;
} else { // } else {
pumpStatusLayout.setVisibility(View.GONE); pumpStatusLayout.setVisibility(View.GONE);
loopStatusLayout.setVisibility(View.VISIBLE); loopStatusLayout.setVisibility(View.VISIBLE);
} // }
PumpInterface pump = MainApp.getConfigBuilder(); PumpInterface pump = MainApp.getConfigBuilder();
@ -893,13 +891,13 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
} }
// temp target // temp target
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
TempTarget tempTarget = MainApp.getConfigBuilder().getTempTargetFromHistory(new Date().getTime()); TempTarget tempTarget = MainApp.getConfigBuilder().getTempTargetFromHistory(new Date().getTime());
if (tempTarget != null) { if (tempTarget != null) {
tempTargetView.setTextColor(Color.BLACK); tempTargetView.setTextColor(Color.BLACK);
tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetBackground)); tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetBackground));
tempTargetView.setVisibility(View.VISIBLE); tempTargetView.setVisibility(View.VISIBLE);
tempTargetView.setText(NSProfile.toUnitsString(tempTarget.low, NSProfile.fromMgdlToUnits(tempTarget.low, profile.getUnits()), profile.getUnits()) + " - " + NSProfile.toUnitsString(tempTarget.high, NSProfile.fromMgdlToUnits(tempTarget.high, profile.getUnits()), profile.getUnits())); tempTargetView.setText(Profile.toUnitsString(tempTarget.low, Profile.fromMgdlToUnits(tempTarget.low, profile.getUnits()), profile.getUnits()) + " - " + Profile.toUnitsString(tempTarget.high, Profile.fromMgdlToUnits(tempTarget.high, profile.getUnits()), profile.getUnits()));
} else { } else {
Double maxBgDefault = Constants.MAX_BG_DEFAULT_MGDL; Double maxBgDefault = Constants.MAX_BG_DEFAULT_MGDL;
@ -952,10 +950,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
basalLayout.setVisibility(View.GONE); basalLayout.setVisibility(View.GONE);
} }
if (profile != null && profile.getActiveProfile() != null) { activeProfileView.setText(MainApp.getConfigBuilder().getProfileName());
activeProfileView.setText(profile.getActiveProfile());
activeProfileView.setBackgroundColor(Color.GRAY); activeProfileView.setBackgroundColor(Color.GRAY);
}
activeProfileView.setOnLongClickListener(new View.OnLongClickListener() { activeProfileView.setOnLongClickListener(new View.OnLongClickListener() {
@Override @Override
@ -992,7 +988,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
quickWizardButton.setVisibility(View.VISIBLE); quickWizardButton.setVisibility(View.VISIBLE);
String text = quickWizardEntry.buttonText() + "\n" + DecimalFormatter.to0Decimal(quickWizardEntry.carbs()) + "g"; String text = quickWizardEntry.buttonText() + "\n" + DecimalFormatter.to0Decimal(quickWizardEntry.carbs()) + "g";
BolusWizard wizard = new BolusWizard(); BolusWizard wizard = new BolusWizard();
wizard.doCalc(profile.getDefaultProfile(), quickWizardEntry.carbs(), 0d, lastBG.valueToUnits(profile.getUnits()), 0d, true, true, false, false); wizard.doCalc(profile, quickWizardEntry.carbs(), 0d, lastBG.valueToUnits(profile.getUnits()), 0d, true, true, false, false);
text += " " + DecimalFormatter.to2Decimal(wizard.calculatedTotalInsulin) + "U"; text += " " + DecimalFormatter.to2Decimal(wizard.calculatedTotalInsulin) + "U";
quickWizardButton.setText(text); quickWizardButton.setText(text);
if (wizard.calculatedTotalInsulin <= 0) if (wizard.calculatedTotalInsulin <= 0)
@ -1014,10 +1010,10 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
Double lowLine = SP.getDouble("low_mark", 0d); Double lowLine = SP.getDouble("low_mark", 0d);
Double highLine = SP.getDouble("high_mark", 0d); Double highLine = SP.getDouble("high_mark", 0d);
if (lowLine < 1) { if (lowLine < 1) {
lowLine = NSProfile.fromMgdlToUnits(OverviewPlugin.bgTargetLow, units); lowLine = Profile.fromMgdlToUnits(OverviewPlugin.bgTargetLow, units);
} }
if (highLine < 1) { if (highLine < 1) {
highLine = NSProfile.fromMgdlToUnits(OverviewPlugin.bgTargetHigh, units); highLine = Profile.fromMgdlToUnits(OverviewPlugin.bgTargetHigh, units);
} }
@ -1034,9 +1030,9 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
arrowView.setTextColor(color); arrowView.setTextColor(color);
GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData(); GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData();
if (glucoseStatus != null) { if (glucoseStatus != null) {
deltaView.setText("Δ " + NSProfile.toUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) + " " + units); deltaView.setText("Δ " + Profile.toUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) + " " + units);
avgdeltaView.setText("øΔ15m: " + NSProfile.toUnitsString(glucoseStatus.short_avgdelta, glucoseStatus.short_avgdelta * Constants.MGDL_TO_MMOLL, units) + avgdeltaView.setText("øΔ15m: " + Profile.toUnitsString(glucoseStatus.short_avgdelta, glucoseStatus.short_avgdelta * Constants.MGDL_TO_MMOLL, units) +
" øΔ40m: " + NSProfile.toUnitsString(glucoseStatus.long_avgdelta, glucoseStatus.long_avgdelta * Constants.MGDL_TO_MMOLL, units)); " øΔ40m: " + Profile.toUnitsString(glucoseStatus.long_avgdelta, glucoseStatus.long_avgdelta * Constants.MGDL_TO_MMOLL, units));
} else { } else {
deltaView.setText("Δ " + MainApp.sResources.getString(R.string.notavailable)); deltaView.setText("Δ " + MainApp.sResources.getString(R.string.notavailable));
avgdeltaView.setText(""); avgdeltaView.setText("");
@ -1130,7 +1126,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
double lastTempBasal = 0; double lastTempBasal = 0;
for (long time = fromTime; time < now; time += 1 * 60 * 1000L) { for (long time = fromTime; time < now; time += 1 * 60 * 1000L) {
TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(time); TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(time);
double baseBasalValue = profile.getBasal(NSProfile.secondsFromMidnight(new Date(time))); double baseBasalValue = profile.getBasal(Profile.secondsFromMidnight(new Date(time)));
double baseLineValue = baseBasalValue; double baseLineValue = baseBasalValue;
double tempBasalValue = 0; double tempBasalValue = 0;
double basal = 0d; double basal = 0d;
@ -1346,7 +1342,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
else else
inRangeArray.add(bg); inRangeArray.add(bg);
} }
maxBgValue = NSProfile.fromMgdlToUnits(maxBgValue, units); maxBgValue = Profile.fromMgdlToUnits(maxBgValue, units);
maxBgValue = units.equals(Constants.MGDL) ? Round.roundTo(maxBgValue, 40d) + 80 : Round.roundTo(maxBgValue, 2d) + 4; maxBgValue = units.equals(Constants.MGDL) ? Round.roundTo(maxBgValue, 40d) + 80 : Round.roundTo(maxBgValue, 2d) + 4;
if (highLine > maxBgValue) maxBgValue = highLine; if (highLine > maxBgValue) maxBgValue = highLine;
Integer numOfHorizLines = units.equals(Constants.MGDL) ? (int) (maxBgValue / 40 + 1) : (int) (maxBgValue / 2 + 1); Integer numOfHorizLines = units.equals(Constants.MGDL) ? (int) (maxBgValue / 40 + 1) : (int) (maxBgValue / 2 + 1);

View file

@ -10,7 +10,7 @@ import org.json.JSONObject;
import java.util.Date; import java.util.Date;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
/** /**
@ -47,7 +47,7 @@ public class QuickWizard {
} }
public Boolean isActive() { public Boolean isActive() {
return NSProfile.secondsFromMidnight() >= validFrom() && NSProfile.secondsFromMidnight() <= validTo(); return Profile.secondsFromMidnight() >= validFrom() && Profile.secondsFromMidnight() <= validTo();
} }
public String buttonText() { public String buttonText() {

View file

@ -32,7 +32,7 @@ import info.nightscout.androidaps.events.EventTempBasalChange;
import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.events.EventTreatmentChange;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
/** /**
@ -118,8 +118,7 @@ public class PersistentNotificationPlugin implements PluginBase{
String line1 = ctx.getString(R.string.noprofile); String line1 = ctx.getString(R.string.noprofile);
if (MainApp.getConfigBuilder().getActiveProfile() == null) return; Profile profile = MainApp.getConfigBuilder().getProfile();
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile();
BgReading lastBG = DatabaseHelper.lastBg(); BgReading lastBG = DatabaseHelper.lastBg();
@ -158,8 +157,7 @@ public class PersistentNotificationPlugin implements PluginBase{
String line3 = DecimalFormatter.to2Decimal(pump.getBaseBasalRate()) + " U/h"; String line3 = DecimalFormatter.to2Decimal(pump.getBaseBasalRate()) + " U/h";
if (profile != null && profile.getActiveProfile() != null) line3 += " - " + MainApp.getConfigBuilder().getProfileName();
line3 += " - " + profile.getActiveProfile();
NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx); NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx);
@ -197,7 +195,8 @@ public class PersistentNotificationPlugin implements PluginBase{
} else { } else {
try { try {
MainApp.bus().unregister(this); MainApp.bus().unregister(this);
} catch (Exception e) {} } catch (Exception e) {
}
} }
} }
@ -216,8 +215,7 @@ public class PersistentNotificationPlugin implements PluginBase{
} }
if (units.equals(Constants.MGDL)) { if (units.equals(Constants.MGDL)) {
deltastring += DecimalFormatter.to1Decimal(Math.abs(deltaMGDL)); deltastring += DecimalFormatter.to1Decimal(Math.abs(deltaMGDL));
} } else {
else {
deltastring += DecimalFormatter.to1Decimal(Math.abs(deltaMMOL)); deltastring += DecimalFormatter.to1Decimal(Math.abs(deltaMMOL));
} }
return deltastring; return deltastring;

View file

@ -15,7 +15,7 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.NSUpload; import info.nightscout.utils.NSUpload;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
@ -33,7 +33,8 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte
private static boolean fragmentEnabled = false; private static boolean fragmentEnabled = false;
private static boolean fragmentVisible = true; private static boolean fragmentVisible = true;
private static NSProfile convertedProfile = null; private static ProfileStore convertedProfile = null;
private static String convertedProfileName = null;
boolean mgdl; boolean mgdl;
boolean mmol; boolean mmol;
@ -203,17 +204,22 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
convertedProfile = new NSProfile(json, profileName); convertedProfile = new ProfileStore(json);
convertedProfileName = profileName;
} }
@Override @Override
public NSProfile getProfile() { public ProfileStore getProfile() {
performLimitCheck(); performLimitCheck();
return convertedProfile; return convertedProfile;
} }
@Override
public String getProfileName() {
performLimitCheck();
return convertedProfileName;
}
private void performLimitCheck() { private void performLimitCheck() {
if (percentage < Constants.CPP_MIN_PERCENTAGE || percentage > Constants.CPP_MAX_PERCENTAGE) { if (percentage < Constants.CPP_MIN_PERCENTAGE || percentage > Constants.CPP_MAX_PERCENTAGE) {
String msg = String.format(MainApp.sResources.getString(R.string.openapsma_valueoutofrange), "Profile-Percentage"); String msg = String.format(MainApp.sResources.getString(R.string.openapsma_valueoutofrange), "Profile-Percentage");

View file

@ -15,7 +15,7 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
/** /**
@ -27,7 +27,8 @@ public class LocalProfilePlugin implements PluginBase, ProfileInterface {
private static boolean fragmentEnabled = false; private static boolean fragmentEnabled = false;
private static boolean fragmentVisible = true; private static boolean fragmentVisible = true;
private static NSProfile convertedProfile = null; private static ProfileStore convertedProfile = null;
private static String convertedProfileName = null;
final private String DEFAULTARRAY = "[{\"timeAsSeconds\":0,\"value\":0}]"; final private String DEFAULTARRAY = "[{\"timeAsSeconds\":0,\"value\":0}]";
@ -230,12 +231,18 @@ public class LocalProfilePlugin implements PluginBase, ProfileInterface {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
convertedProfile = new NSProfile(json, "LocalProfile"); convertedProfile = new ProfileStore(json);
convertedProfileName = "LocalProfile";
} }
@Override @Override
public NSProfile getProfile() { public ProfileStore getProfile() {
return convertedProfile; return convertedProfile;
} }
@Override
public String getProfileName() {
return convertedProfileName;
}
} }

View file

@ -12,6 +12,7 @@ import com.squareup.otto.Subscribe;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.ProfileNS.events.EventNSProfileUpdateGUI; import info.nightscout.androidaps.plugins.ProfileNS.events.EventNSProfileUpdateGUI;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
@ -74,19 +75,21 @@ public class NSProfileFragment extends Fragment {
} }
private void updateGUI() { private void updateGUI() {
if (nsProfilePlugin.profile == null) { // if (nsProfilePlugin.profile == null) {
noProfile.setVisibility(View.VISIBLE); // noProfile.setVisibility(View.VISIBLE);
return; // return;
} else { // } else {
noProfile.setVisibility(View.GONE); // noProfile.setVisibility(View.GONE);
} // }
units.setText(nsProfilePlugin.profile.getUnits());
dia.setText(DecimalFormatter.to2Decimal(nsProfilePlugin.profile.getDia()) + " h"); Profile profile = MainApp.getConfigBuilder().getProfile();
activeProfile.setText(nsProfilePlugin.profile.getActiveProfile()); units.setText(profile.getUnits());
ic.setText(nsProfilePlugin.profile.getIcList()); dia.setText(DecimalFormatter.to2Decimal(profile.getDia()) + " h");
isf.setText(nsProfilePlugin.profile.getIsfList()); activeProfile.setText(MainApp.getConfigBuilder().getProfileName());
basal.setText(nsProfilePlugin.profile.getBasalList()); ic.setText(profile.getIcList());
target.setText(nsProfilePlugin.profile.getTargetList()); isf.setText(profile.getIsfList());
basal.setText(profile.getBasalList());
target.setText(profile.getTargetList());
} }
} }

View file

@ -1,8 +1,6 @@
package info.nightscout.androidaps.plugins.ProfileNS; package info.nightscout.androidaps.plugins.ProfileNS;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
@ -16,11 +14,12 @@ import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents; import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.events.EventNewBasalProfile;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.plugins.ProfileNS.events.EventNSProfileUpdateGUI; import info.nightscout.androidaps.plugins.ProfileNS.events.EventNSProfileUpdateGUI;
import info.nightscout.androidaps.plugins.SmsCommunicator.SmsCommunicatorPlugin;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
/** /**
@ -37,7 +36,7 @@ public class NSProfilePlugin implements PluginBase, ProfileInterface {
static boolean fragmentEnabled = true; static boolean fragmentEnabled = true;
static boolean fragmentVisible = true; static boolean fragmentVisible = true;
static NSProfile profile = null; static ProfileStore profile = null;
public NSProfilePlugin() { public NSProfilePlugin() {
MainApp.bus().register(this); MainApp.bus().register(this);
@ -102,18 +101,24 @@ public class NSProfilePlugin implements PluginBase, ProfileInterface {
} }
@Subscribe @Subscribe
public void onStatusEvent(final EventNewBasalProfile ev) { public static void storeNewProfile(ProfileStore newProfile) {
profile = new NSProfile(ev.newNSProfile.getData(), ev.newNSProfile.getActiveProfile()); profile = new ProfileStore(newProfile.getData());
storeNSProfile(); storeNSProfile();
MainApp.bus().post(new EventNSProfileUpdateGUI()); MainApp.bus().post(new EventNSProfileUpdateGUI());
PumpInterface pump = MainApp.getConfigBuilder();
if (SP.getBoolean("syncprofiletopump", false)) {
if (pump.setNewBasalProfile(MainApp.getConfigBuilder().getProfile()) == PumpInterface.SUCCESS) {
SmsCommunicatorPlugin smsCommunicatorPlugin = (SmsCommunicatorPlugin) MainApp.getSpecificPlugin(SmsCommunicatorPlugin.class);
if (smsCommunicatorPlugin != null && smsCommunicatorPlugin.isEnabled(PluginBase.GENERAL)) {
smsCommunicatorPlugin.sendNotificationToAllNumbers(MainApp.sResources.getString(R.string.profile_set_ok));
}
}
} }
private void storeNSProfile() { }
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
SharedPreferences.Editor editor = settings.edit(); private static void storeNSProfile() {
editor.putString("profile", profile.getData().toString()); SP.putString("profile", profile.getData().toString());
editor.putString("activeProfile", profile.getActiveProfile());
editor.apply();
if (Config.logPrefsChange) if (Config.logPrefsChange)
log.debug("Storing profile"); log.debug("Storing profile");
} }
@ -121,14 +126,12 @@ public class NSProfilePlugin implements PluginBase, ProfileInterface {
private void loadNSProfile() { private void loadNSProfile() {
if (Config.logPrefsChange) if (Config.logPrefsChange)
log.debug("Loading stored profile"); log.debug("Loading stored profile");
String activeProfile = SP.getString("activeProfile", null);
String profileString = SP.getString("profile", null); String profileString = SP.getString("profile", null);
if (profileString != null) { if (profileString != null) {
if (Config.logPrefsChange) { if (Config.logPrefsChange) {
log.debug("Loaded profile: " + profileString); log.debug("Loaded profile: " + profileString);
log.debug("Loaded active profile: " + activeProfile);
try { try {
profile = new NSProfile(new JSONObject(profileString), activeProfile); profile = new ProfileStore(new JSONObject(profileString));
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
profile = null; profile = null;
@ -146,7 +149,12 @@ public class NSProfilePlugin implements PluginBase, ProfileInterface {
@Nullable @Nullable
@Override @Override
public NSProfile getProfile() { public ProfileStore getProfile() {
return profile; return profile;
} }
@Override
public String getProfileName() {
return profile.getDefaultProfileName();
}
} }

View file

@ -15,7 +15,7 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
/** /**
@ -27,7 +27,7 @@ public class SimpleProfilePlugin implements PluginBase, ProfileInterface {
private static boolean fragmentEnabled = false; private static boolean fragmentEnabled = false;
private static boolean fragmentVisible = true; private static boolean fragmentVisible = true;
private static NSProfile convertedProfile = null; private static ProfileStore convertedProfile = null;
boolean mgdl; boolean mgdl;
boolean mmol; boolean mmol;
@ -193,12 +193,17 @@ public class SimpleProfilePlugin implements PluginBase, ProfileInterface {
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
convertedProfile = new NSProfile(json, "SimpleProfile"); convertedProfile = new ProfileStore(json);
} }
@Override @Override
public NSProfile getProfile() { public ProfileStore getProfile() {
return convertedProfile; return convertedProfile;
} }
@Override
public String getProfileName() {
return "SimpleProfile";
}
} }

View file

@ -30,13 +30,13 @@ import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.events.EventAppExit;
import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPreferenceChange;
import info.nightscout.androidaps.interfaces.ConstraintsInterface; import info.nightscout.androidaps.interfaces.ConstraintsInterface;
import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.plugins.Overview.Notification; import info.nightscout.androidaps.plugins.Overview.Notification;
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
@ -231,7 +231,7 @@ public class DanaRPlugin implements PluginBase, PumpInterface, ConstraintsInterf
// Pump interface // Pump interface
@Override @Override
public int setNewBasalProfile(NSProfile profile) { public int setNewBasalProfile(Profile profile) {
if (sExecutionService == null) { if (sExecutionService == null) {
log.error("setNewBasalProfile sExecutionService is null"); log.error("setNewBasalProfile sExecutionService is null");
return FAILED; return FAILED;
@ -256,7 +256,7 @@ public class DanaRPlugin implements PluginBase, PumpInterface, ConstraintsInterf
} }
@Override @Override
public boolean isThisProfileSet(NSProfile profile) { public boolean isThisProfileSet(Profile profile) {
if (!isInitialized()) if (!isInitialized())
return true; // TODO: not sure what's better. so far TRUE to prevent too many SMS return true; // TODO: not sure what's better. so far TRUE to prevent too many SMS
if (pump.pumpProfiles == null) if (pump.pumpProfiles == null)
@ -309,7 +309,7 @@ public class DanaRPlugin implements PluginBase, PumpInterface, ConstraintsInterf
log.debug("deliverTreatment: OK. Asked: " + detailedBolusInfo.insulin + " Delivered: " + result.bolusDelivered); log.debug("deliverTreatment: OK. Asked: " + detailedBolusInfo.insulin + " Delivered: " + result.bolusDelivered);
detailedBolusInfo.insulin = t.insulin; detailedBolusInfo.insulin = t.insulin;
detailedBolusInfo.date = new Date().getTime(); detailedBolusInfo.date = new Date().getTime();
MainApp.getConfigBuilder().addTreatmentToHistory(detailedBolusInfo); MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
return result; return result;
} else { } else {
PumpEnactResult result = new PumpEnactResult(); PumpEnactResult result = new PumpEnactResult();
@ -681,7 +681,7 @@ public class DanaRPlugin implements PluginBase, PumpInterface, ConstraintsInterf
} }
extended.put("BaseBasalRate", getBaseBasalRate()); extended.put("BaseBasalRate", getBaseBasalRate());
try { try {
extended.put("ActiveProfile", MainApp.getConfigBuilder().getActiveProfile().getProfile().getActiveProfile()); extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName());
} catch (Exception e) { } catch (Exception e) {
} }
@ -782,12 +782,17 @@ public class DanaRPlugin implements PluginBase, PumpInterface, ConstraintsInterf
@Nullable @Nullable
@Override @Override
public NSProfile getProfile() { public ProfileStore getProfile() {
if (pump.lastSettingsRead.getTime() == 0) if (pump.lastSettingsRead.getTime() == 0)
return null; // no info now return null; // no info now
return pump.createConvertedProfile(); return pump.createConvertedProfile();
} }
@Override
public String getProfileName() {
return pump.createConvertedProfileName();
}
// Reply for sms communicator // Reply for sms communicator
public String shortStatus(boolean veryShort) { public String shortStatus(boolean veryShort) {
String ret = ""; String ret = "";

View file

@ -9,7 +9,7 @@ import java.util.Date;
import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
/** /**
@ -132,7 +132,7 @@ public class DanaRPump {
public double maxBolus; public double maxBolus;
public double maxBasal; public double maxBasal;
public NSProfile createConvertedProfile() { public ProfileStore createConvertedProfile() {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
JSONObject store = new JSONObject(); JSONObject store = new JSONObject();
JSONObject profile = new JSONObject(); JSONObject profile = new JSONObject();
@ -189,7 +189,12 @@ public class DanaRPump {
} catch (Exception e) { } catch (Exception e) {
return null; return null;
} }
return new NSProfile(json, PROFILE_PREFIX + (activeProfile + 1));
return new ProfileStore(json);
}
public String createConvertedProfileName() {
return PROFILE_PREFIX + (activeProfile + 1);
} }
} }

View file

@ -17,9 +17,12 @@ import java.util.Date;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin;
import info.nightscout.androidaps.plugins.PumpDanaRv2.DanaRv2Plugin;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
/** /**
@ -42,14 +45,11 @@ public class ProfileViewDialog extends DialogFragment {
Handler mHandler; Handler mHandler;
static HandlerThread mHandlerThread; static HandlerThread mHandlerThread;
NSProfile profile = null;
public ProfileViewDialog() { public ProfileViewDialog() {
mHandlerThread = new HandlerThread(ProfileViewDialog.class.getSimpleName()); mHandlerThread = new HandlerThread(ProfileViewDialog.class.getSimpleName());
mHandlerThread.start(); mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper()); mHandler = new Handler(mHandlerThread.getLooper());
profile = ((DanaRPlugin) MainApp.getSpecificPlugin(DanaRPlugin.class)).getProfile();
} }
@Override @Override
@ -74,7 +74,12 @@ public class ProfileViewDialog extends DialogFragment {
@Override @Override
public void run() { public void run() {
DanaRPump.getInstance().lastSettingsRead = new Date(0); DanaRPump.getInstance().lastSettingsRead = new Date(0);
if (MainApp.getSpecificPlugin(DanaRPlugin.class).isEnabled(PluginBase.PUMP))
DanaRPlugin.doConnect("ProfileViewDialog"); DanaRPlugin.doConnect("ProfileViewDialog");
if (MainApp.getSpecificPlugin(DanaRKoreanPlugin.class).isEnabled(PluginBase.PUMP))
DanaRKoreanPlugin.doConnect("ProfileViewDialog");
if (MainApp.getSpecificPlugin(DanaRv2Plugin.class).isEnabled(PluginBase.PUMP))
DanaRv2Plugin.doConnect("ProfileViewDialog");
} }
}); });
dismiss(); dismiss();
@ -92,15 +97,16 @@ public class ProfileViewDialog extends DialogFragment {
} }
private void setContent() { private void setContent() {
if (profile == null) { // if (profile == null) {
noProfile.setVisibility(View.VISIBLE); // noProfile.setVisibility(View.VISIBLE);
return; // return;
} else { // } else {
noProfile.setVisibility(View.GONE); // noProfile.setVisibility(View.GONE);
} // }
Profile profile = MainApp.getConfigBuilder().getProfile();
units.setText(profile.getUnits()); units.setText(profile.getUnits());
dia.setText(DecimalFormatter.to2Decimal(profile.getDia()) + " h"); dia.setText(DecimalFormatter.to2Decimal(profile.getDia()) + " h");
activeProfile.setText(profile.getActiveProfile()); activeProfile.setText(MainApp.getConfigBuilder().getProfileName());
ic.setText(profile.getIcList()); ic.setText(profile.getIcList());
isf.setText(profile.getIsfList()); isf.setText(profile.getIsfList());
basal.setText(profile.getBasalList()); basal.setText(profile.getBasalList());

View file

@ -21,16 +21,11 @@ import android.widget.Button;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.PreparedQuery;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.Where;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -39,11 +34,10 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.DanaRHistoryRecord; import info.nightscout.androidaps.db.DanaRHistoryRecord;
import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.PumpDanaR.services.DanaRExecutionService; import info.nightscout.androidaps.plugins.PumpDanaR.services.DanaRExecutionService;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus;
import info.nightscout.androidaps.plugins.NSClientInternal.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.ToastUtils; import info.nightscout.utils.ToastUtils;
@ -57,7 +51,7 @@ public class DanaRHistoryActivity extends Activity {
private Handler mHandler; private Handler mHandler;
private static HandlerThread mHandlerThread; private static HandlerThread mHandlerThread;
static NSProfile profile = null; static Profile profile = null;
Spinner historyTypeSpinner; Spinner historyTypeSpinner;
TextView statusView; TextView statusView;
@ -249,7 +243,7 @@ public class DanaRHistoryActivity extends Activity {
clearCardView(); clearCardView();
} }
}); });
profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) { if (profile == null) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile)); ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile));
finish(); finish();
@ -318,7 +312,7 @@ public class DanaRHistoryActivity extends Activity {
holder.alarm.setVisibility(View.GONE); holder.alarm.setVisibility(View.GONE);
break; break;
case RecordTypes.RECORD_TYPE_GLUCOSE: case RecordTypes.RECORD_TYPE_GLUCOSE:
holder.value.setText(NSProfile.toUnitsString(record.recordValue, record.recordValue * Constants.MGDL_TO_MMOLL, profile.getUnits())); holder.value.setText(Profile.toUnitsString(record.recordValue, record.recordValue * Constants.MGDL_TO_MMOLL, profile.getUnits()));
// rest is the same // rest is the same
case RecordTypes.RECORD_TYPE_CARBO: case RecordTypes.RECORD_TYPE_CARBO:
case RecordTypes.RECORD_TYPE_BASALHOUR: case RecordTypes.RECORD_TYPE_BASALHOUR:

View file

@ -13,9 +13,9 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.CareportalEvent; import info.nightscout.androidaps.db.CareportalEvent;
import info.nightscout.androidaps.db.DanaRHistoryRecord; import info.nightscout.androidaps.db.DanaRHistoryRecord;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.NSUpload; import info.nightscout.utils.NSUpload;
import info.nightscout.utils.ToastUtils; import info.nightscout.utils.ToastUtils;
@ -47,7 +47,7 @@ public class DanaRNSHistorySync {
public void sync(int what) { public void sync(int what) {
try { try {
ConfigBuilderPlugin ConfigBuilderPlugin = MainApp.getConfigBuilder(); ConfigBuilderPlugin ConfigBuilderPlugin = MainApp.getConfigBuilder();
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) { if (profile == null) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile)); ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile));
return; return;
@ -179,7 +179,7 @@ public class DanaRNSHistorySync {
log.debug("Syncing glucose record " + record.recordValue + " " + DateUtil.toISOString(record.recordDate)); log.debug("Syncing glucose record " + record.recordValue + " " + DateUtil.toISOString(record.recordDate));
nsrec.put(DANARSIGNATURE, record.bytes); nsrec.put(DANARSIGNATURE, record.bytes);
nsrec.put("eventType", "BG Check"); nsrec.put("eventType", "BG Check");
nsrec.put("glucose", NSProfile.fromMgdlToUnits(record.recordValue, profile.getUnits())); nsrec.put("glucose", Profile.fromMgdlToUnits(record.recordValue, profile.getUnits()));
nsrec.put("glucoseType", "Finger"); nsrec.put("glucoseType", "Finger");
nsrec.put("created_at", DateUtil.toISOString(record.recordDate)); nsrec.put("created_at", DateUtil.toISOString(record.recordDate));
nsrec.put("enteredBy", MainApp.sResources.getString(R.string.app_name)); nsrec.put("enteredBy", MainApp.sResources.getString(R.string.app_name));

View file

@ -5,14 +5,12 @@ import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.ServiceConnection; import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.HandlerThread; import android.os.HandlerThread;
import android.os.IBinder; import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.KeyEvent; import android.view.KeyEvent;
@ -27,16 +25,11 @@ import android.widget.TableLayout;
import android.widget.TableRow; import android.widget.TableRow;
import android.widget.TextView; import android.widget.TextView;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.PreparedQuery;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.Where;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.sql.SQLException;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -50,12 +43,13 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.DanaRHistoryRecord; import info.nightscout.androidaps.db.DanaRHistoryRecord;
import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfilePlugin;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.PumpDanaR.services.DanaRExecutionService; import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfilePlugin;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus;
import info.nightscout.androidaps.plugins.PumpDanaR.services.DanaRExecutionService;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.SP;
import info.nightscout.utils.SafeParse; import info.nightscout.utils.SafeParse;
import info.nightscout.utils.ToastUtils; import info.nightscout.utils.ToastUtils;
@ -167,18 +161,15 @@ public class DanaRStatsActivity extends Activity {
decimalFormat = new DecimalFormat("0.000"); decimalFormat = new DecimalFormat("0.000");
llm = new LinearLayoutManager(this); llm = new LinearLayoutManager(this);
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); TBB = SP.getString("TBB", "10.00");
TBB = preferences.getString("TBB", "10.00");
totalBaseBasal.setText(TBB); totalBaseBasal.setText(TBB);
ProfileInterface pi = ConfigBuilderPlugin.getActiveProfile(); ProfileInterface pi = ConfigBuilderPlugin.getActiveProfileInterface();
if (pi != null && pi instanceof CircadianPercentageProfilePlugin) { if (pi != null && pi instanceof CircadianPercentageProfilePlugin) {
double cppTBB = ((CircadianPercentageProfilePlugin) pi).baseBasalSum(); double cppTBB = ((CircadianPercentageProfilePlugin) pi).baseBasalSum();
totalBaseBasal.setText(decimalFormat.format(cppTBB)); totalBaseBasal.setText(decimalFormat.format(cppTBB));
SharedPreferences.Editor edit = preferences.edit(); SP.putString("TBB", totalBaseBasal.getText().toString());
edit.putString("TBB", totalBaseBasal.getText().toString()); TBB = SP.getString("TBB", "");
edit.commit();
TBB = preferences.getString("TBB", "");
} }
// stats table // stats table
@ -326,10 +317,8 @@ public class DanaRStatsActivity extends Activity {
if (hasFocus) { if (hasFocus) {
totalBaseBasal.getText().clear(); totalBaseBasal.getText().clear();
} else { } else {
SharedPreferences.Editor edit = preferences.edit(); SP.putString("TBB", totalBaseBasal.getText().toString());
edit.putString("TBB", totalBaseBasal.getText().toString()); TBB = SP.getString("TBB", "");
edit.commit();
TBB = preferences.getString("TBB", "");
loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY); loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY);
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(totalBaseBasal.getWindowToken(), 0); imm.hideSoftInputFromWindow(totalBaseBasal.getWindowToken(), 0);

View file

@ -18,7 +18,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -33,6 +32,7 @@ import info.nightscout.androidaps.events.EventInitializationChanged;
import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPreferenceChange;
import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
import info.nightscout.androidaps.plugins.PumpDanaR.SerialIOThread; import info.nightscout.androidaps.plugins.PumpDanaR.SerialIOThread;
@ -79,7 +79,6 @@ import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRBolusStart;
import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRNewStatus; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRNewStatus;
import info.nightscout.androidaps.plugins.Overview.Notification; import info.nightscout.androidaps.plugins.Overview.Notification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.utils.NSUpload; import info.nightscout.utils.NSUpload;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
import info.nightscout.utils.ToastUtils; import info.nightscout.utils.ToastUtils;
@ -512,7 +511,7 @@ public class DanaRExecutionService extends Service {
return true; return true;
} }
public boolean updateBasalsInPump(final NSProfile profile) { public boolean updateBasalsInPump(final Profile profile) {
connect("updateBasalsInPump"); connect("updateBasalsInPump");
if (!isConnected()) return false; if (!isConnected()) return false;
MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.updatingbasalrates))); MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.updatingbasalrates)));
@ -527,7 +526,7 @@ public class DanaRExecutionService extends Service {
return true; return true;
} }
private double[] buildDanaRProfileRecord(NSProfile nsProfile) { private double[] buildDanaRProfileRecord(Profile nsProfile) {
double[] record = new double[24]; double[] record = new double[24];
for (Integer hour = 0; hour < 24; hour++) { for (Integer hour = 0; hour < 24; hour++) {
//Some values get truncated to the next lower one. //Some values get truncated to the next lower one.

View file

@ -30,13 +30,13 @@ import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.events.EventAppExit;
import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPreferenceChange;
import info.nightscout.androidaps.interfaces.ConstraintsInterface; import info.nightscout.androidaps.interfaces.ConstraintsInterface;
import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.plugins.Overview.Notification; import info.nightscout.androidaps.plugins.Overview.Notification;
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
@ -234,7 +234,7 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, Constraints
// Pump interface // Pump interface
@Override @Override
public int setNewBasalProfile(NSProfile profile) { public int setNewBasalProfile(Profile profile) {
if (sExecutionService == null) { if (sExecutionService == null) {
log.error("setNewBasalProfile sExecutionService is null"); log.error("setNewBasalProfile sExecutionService is null");
return FAILED; return FAILED;
@ -259,7 +259,7 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, Constraints
} }
@Override @Override
public boolean isThisProfileSet(NSProfile profile) { public boolean isThisProfileSet(Profile profile) {
if (!isInitialized()) if (!isInitialized())
return true; // TODO: not sure what's better. so far TRUE to prevent too many SMS return true; // TODO: not sure what's better. so far TRUE to prevent too many SMS
if (pump.pumpProfiles == null) if (pump.pumpProfiles == null)
@ -302,7 +302,8 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, Constraints
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) { if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) {
Treatment t = new Treatment(detailedBolusInfo.insulinInterface); Treatment t = new Treatment(detailedBolusInfo.insulinInterface);
boolean connectionOK = false; boolean connectionOK = false;
if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0) connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) detailedBolusInfo.carbs, t); if (detailedBolusInfo.insulin > 0 || detailedBolusInfo.carbs > 0)
connectionOK = sExecutionService.bolus(detailedBolusInfo.insulin, (int) detailedBolusInfo.carbs, t);
PumpEnactResult result = new PumpEnactResult(); PumpEnactResult result = new PumpEnactResult();
result.success = connectionOK; result.success = connectionOK;
result.bolusDelivered = t.insulin; result.bolusDelivered = t.insulin;
@ -312,7 +313,7 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, Constraints
log.debug("deliverTreatment: OK. Asked: " + detailedBolusInfo.insulin + " Delivered: " + result.bolusDelivered); log.debug("deliverTreatment: OK. Asked: " + detailedBolusInfo.insulin + " Delivered: " + result.bolusDelivered);
detailedBolusInfo.insulin = t.insulin; detailedBolusInfo.insulin = t.insulin;
detailedBolusInfo.date = new Date().getTime(); detailedBolusInfo.date = new Date().getTime();
MainApp.getConfigBuilder().addTreatmentToHistory(detailedBolusInfo); MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
return result; return result;
} else { } else {
PumpEnactResult result = new PumpEnactResult(); PumpEnactResult result = new PumpEnactResult();
@ -684,7 +685,7 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, Constraints
} }
extended.put("BaseBasalRate", getBaseBasalRate()); extended.put("BaseBasalRate", getBaseBasalRate());
try { try {
extended.put("ActiveProfile", MainApp.getConfigBuilder().getActiveProfile().getProfile().getActiveProfile()); extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName());
} catch (Exception e) { } catch (Exception e) {
} }
@ -785,12 +786,17 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, Constraints
@Nullable @Nullable
@Override @Override
public NSProfile getProfile() { public ProfileStore getProfile() {
if (pump.lastSettingsRead.getTime() == 0) if (pump.lastSettingsRead.getTime() == 0)
return null; // no info now return null; // no info now
return pump.createConvertedProfile(); return pump.createConvertedProfile();
} }
@Override
public String getProfileName() {
return pump.createConvertedProfileName();
}
// Reply for sms communicator // Reply for sms communicator
public String shortStatus(boolean veryShort) { public String shortStatus(boolean veryShort) {
String ret = ""; String ret = "";

View file

@ -21,16 +21,11 @@ import android.widget.Button;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.PreparedQuery;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.Where;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -39,12 +34,11 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.DanaRHistoryRecord; import info.nightscout.androidaps.db.DanaRHistoryRecord;
import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.PumpDanaR.History.DanaRNSHistorySync; import info.nightscout.androidaps.plugins.PumpDanaR.History.DanaRNSHistorySync;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus;
import info.nightscout.androidaps.plugins.PumpDanaRKorean.services.DanaRKoreanExecutionService; import info.nightscout.androidaps.plugins.PumpDanaRKorean.services.DanaRKoreanExecutionService;
import info.nightscout.androidaps.plugins.NSClientInternal.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.ToastUtils; import info.nightscout.utils.ToastUtils;
@ -58,7 +52,7 @@ public class DanaRHistoryActivity extends Activity {
private Handler mHandler; private Handler mHandler;
private static HandlerThread mHandlerThread; private static HandlerThread mHandlerThread;
static NSProfile profile = null; static Profile profile = null;
Spinner historyTypeSpinner; Spinner historyTypeSpinner;
TextView statusView; TextView statusView;
@ -248,7 +242,7 @@ public class DanaRHistoryActivity extends Activity {
clearCardView(); clearCardView();
} }
}); });
profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) { if (profile == null) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile)); ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile));
finish(); finish();
@ -317,7 +311,7 @@ public class DanaRHistoryActivity extends Activity {
holder.alarm.setVisibility(View.GONE); holder.alarm.setVisibility(View.GONE);
break; break;
case RecordTypes.RECORD_TYPE_GLUCOSE: case RecordTypes.RECORD_TYPE_GLUCOSE:
holder.value.setText(NSProfile.toUnitsString(record.recordValue, record.recordValue * Constants.MGDL_TO_MMOLL, profile.getUnits())); holder.value.setText(Profile.toUnitsString(record.recordValue, record.recordValue * Constants.MGDL_TO_MMOLL, profile.getUnits()));
// rest is the same // rest is the same
case RecordTypes.RECORD_TYPE_CARBO: case RecordTypes.RECORD_TYPE_CARBO:
case RecordTypes.RECORD_TYPE_BASALHOUR: case RecordTypes.RECORD_TYPE_BASALHOUR:

View file

@ -5,14 +5,12 @@ import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.ServiceConnection; import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.HandlerThread; import android.os.HandlerThread;
import android.os.IBinder; import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.KeyEvent; import android.view.KeyEvent;
@ -27,16 +25,11 @@ import android.widget.TableLayout;
import android.widget.TableRow; import android.widget.TableRow;
import android.widget.TextView; import android.widget.TextView;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.PreparedQuery;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.Where;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.sql.SQLException;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -50,12 +43,13 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.DanaRHistoryRecord; import info.nightscout.androidaps.db.DanaRHistoryRecord;
import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfilePlugin;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfilePlugin;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus;
import info.nightscout.androidaps.plugins.PumpDanaRKorean.services.DanaRKoreanExecutionService; import info.nightscout.androidaps.plugins.PumpDanaRKorean.services.DanaRKoreanExecutionService;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.SP;
import info.nightscout.utils.SafeParse; import info.nightscout.utils.SafeParse;
import info.nightscout.utils.ToastUtils; import info.nightscout.utils.ToastUtils;
@ -167,18 +161,15 @@ public class DanaRStatsActivity extends Activity {
decimalFormat = new DecimalFormat("0.000"); decimalFormat = new DecimalFormat("0.000");
llm = new LinearLayoutManager(this); llm = new LinearLayoutManager(this);
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); TBB = SP.getString("TBB", "10.00");
TBB = preferences.getString("TBB", "10.00");
totalBaseBasal.setText(TBB); totalBaseBasal.setText(TBB);
ProfileInterface pi = ConfigBuilderPlugin.getActiveProfile(); ProfileInterface pi = ConfigBuilderPlugin.getActiveProfileInterface();
if (pi != null && pi instanceof CircadianPercentageProfilePlugin) { if (pi != null && pi instanceof CircadianPercentageProfilePlugin) {
double cppTBB = ((CircadianPercentageProfilePlugin) pi).baseBasalSum(); double cppTBB = ((CircadianPercentageProfilePlugin) pi).baseBasalSum();
totalBaseBasal.setText(decimalFormat.format(cppTBB)); totalBaseBasal.setText(decimalFormat.format(cppTBB));
SharedPreferences.Editor edit = preferences.edit(); SP.putString("TBB", totalBaseBasal.getText().toString());
edit.putString("TBB", totalBaseBasal.getText().toString()); TBB = SP.getString("TBB", "");
edit.commit();
TBB = preferences.getString("TBB", "");
} }
// stats table // stats table
@ -326,10 +317,8 @@ public class DanaRStatsActivity extends Activity {
if (hasFocus) { if (hasFocus) {
totalBaseBasal.getText().clear(); totalBaseBasal.getText().clear();
} else { } else {
SharedPreferences.Editor edit = preferences.edit(); SP.putString("TBB", totalBaseBasal.getText().toString());
edit.putString("TBB", totalBaseBasal.getText().toString()); TBB = SP.getString("TBB", "");
edit.commit();
TBB = preferences.getString("TBB", "");
loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY); loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY);
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(totalBaseBasal.getWindowToken(), 0); imm.hideSoftInputFromWindow(totalBaseBasal.getWindowToken(), 0);

View file

@ -18,7 +18,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -33,6 +32,7 @@ import info.nightscout.androidaps.events.EventInitializationChanged;
import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPreferenceChange;
import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.MessageBase; import info.nightscout.androidaps.plugins.PumpDanaR.comm.MessageBase;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.MsgBolusProgress; import info.nightscout.androidaps.plugins.PumpDanaR.comm.MsgBolusProgress;
@ -70,7 +70,6 @@ import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRBolusStart;
import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRNewStatus; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRNewStatus;
import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin; import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin;
import info.nightscout.androidaps.plugins.PumpDanaRKorean.SerialIOThread; import info.nightscout.androidaps.plugins.PumpDanaRKorean.SerialIOThread;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.androidaps.plugins.Overview.Notification; import info.nightscout.androidaps.plugins.Overview.Notification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.PumpDanaRKorean.comm.MsgCheckValue_k; import info.nightscout.androidaps.plugins.PumpDanaRKorean.comm.MsgCheckValue_k;
@ -489,7 +488,7 @@ public class DanaRKoreanExecutionService extends Service {
return true; return true;
} }
public boolean updateBasalsInPump(final NSProfile profile) { public boolean updateBasalsInPump(final Profile profile) {
connect("updateBasalsInPump"); connect("updateBasalsInPump");
if (!isConnected()) return false; if (!isConnected()) return false;
MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.updatingbasalrates))); MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.updatingbasalrates)));
@ -502,7 +501,7 @@ public class DanaRKoreanExecutionService extends Service {
return true; return true;
} }
private double[] buildDanaRProfileRecord(NSProfile nsProfile) { private double[] buildDanaRProfileRecord(Profile nsProfile) {
double[] record = new double[24]; double[] record = new double[24];
for (Integer hour = 0; hour < 24; hour++) { for (Integer hour = 0; hour < 24; hour++) {
double value = Math.round(100d * nsProfile.getBasal(hour * 60 * 60))/100d + 0.00001; double value = Math.round(100d * nsProfile.getBasal(hour * 60 * 60))/100d + 0.00001;

View file

@ -31,13 +31,13 @@ import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.events.EventAppExit;
import info.nightscout.androidaps.interfaces.ConstraintsInterface; import info.nightscout.androidaps.interfaces.ConstraintsInterface;
import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.plugins.Overview.Notification; import info.nightscout.androidaps.plugins.Overview.Notification;
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
@ -219,7 +219,7 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, ConstraintsInte
// Pump interface // Pump interface
@Override @Override
public int setNewBasalProfile(NSProfile profile) { public int setNewBasalProfile(Profile profile) {
if (sExecutionService == null) { if (sExecutionService == null) {
log.error("setNewBasalProfile sExecutionService is null"); log.error("setNewBasalProfile sExecutionService is null");
return FAILED; return FAILED;
@ -244,7 +244,7 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, ConstraintsInte
} }
@Override @Override
public boolean isThisProfileSet(NSProfile profile) { public boolean isThisProfileSet(Profile profile) {
if (!isInitialized()) if (!isInitialized())
return true; // TODO: not sure what's better. so far TRUE to prevent too many SMS return true; // TODO: not sure what's better. so far TRUE to prevent too many SMS
if (pump.pumpProfiles == null) if (pump.pumpProfiles == null)
@ -599,7 +599,7 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, ConstraintsInte
} }
extended.put("BaseBasalRate", getBaseBasalRate()); extended.put("BaseBasalRate", getBaseBasalRate());
try { try {
extended.put("ActiveProfile", MainApp.getConfigBuilder().getActiveProfile().getProfile().getActiveProfile()); extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName());
} catch (Exception e) { } catch (Exception e) {
} }
@ -700,12 +700,17 @@ public class DanaRv2Plugin implements PluginBase, PumpInterface, ConstraintsInte
@Nullable @Nullable
@Override @Override
public NSProfile getProfile() { public ProfileStore getProfile() {
if (pump.lastSettingsRead.getTime() == 0) if (pump.lastSettingsRead.getTime() == 0)
return null; // no info now return null; // no info now
return pump.createConvertedProfile(); return pump.createConvertedProfile();
} }
@Override
public String getProfileName() {
return pump.createConvertedProfileName();
}
// Reply for sms communicator // Reply for sms communicator
public String shortStatus(boolean veryShort) { public String shortStatus(boolean veryShort) {
String ret = ""; String ret = "";

View file

@ -21,16 +21,11 @@ import android.widget.Button;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.PreparedQuery;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.Where;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -39,11 +34,10 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.DanaRHistoryRecord; import info.nightscout.androidaps.db.DanaRHistoryRecord;
import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.PumpDanaR.History.DanaRNSHistorySync; import info.nightscout.androidaps.plugins.PumpDanaR.History.DanaRNSHistorySync;
import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.androidaps.plugins.PumpDanaRv2.services.DanaRv2ExecutionService; import info.nightscout.androidaps.plugins.PumpDanaRv2.services.DanaRv2ExecutionService;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
@ -58,7 +52,7 @@ public class DanaRHistoryActivity extends Activity {
private Handler mHandler; private Handler mHandler;
private static HandlerThread mHandlerThread; private static HandlerThread mHandlerThread;
static NSProfile profile = null; static Profile profile = null;
Spinner historyTypeSpinner; Spinner historyTypeSpinner;
TextView statusView; TextView statusView;
@ -249,7 +243,7 @@ public class DanaRHistoryActivity extends Activity {
clearCardView(); clearCardView();
} }
}); });
profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) { if (profile == null) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile)); ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.noprofile));
finish(); finish();
@ -318,7 +312,7 @@ public class DanaRHistoryActivity extends Activity {
holder.alarm.setVisibility(View.GONE); holder.alarm.setVisibility(View.GONE);
break; break;
case RecordTypes.RECORD_TYPE_GLUCOSE: case RecordTypes.RECORD_TYPE_GLUCOSE:
holder.value.setText(NSProfile.toUnitsString(record.recordValue, record.recordValue * Constants.MGDL_TO_MMOLL, profile.getUnits())); holder.value.setText(Profile.toUnitsString(record.recordValue, record.recordValue * Constants.MGDL_TO_MMOLL, profile.getUnits()));
// rest is the same // rest is the same
case RecordTypes.RECORD_TYPE_CARBO: case RecordTypes.RECORD_TYPE_CARBO:
case RecordTypes.RECORD_TYPE_BASALHOUR: case RecordTypes.RECORD_TYPE_BASALHOUR:

View file

@ -56,6 +56,7 @@ import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRSyncStatus;
import info.nightscout.androidaps.plugins.PumpDanaRv2.services.DanaRv2ExecutionService; import info.nightscout.androidaps.plugins.PumpDanaRv2.services.DanaRv2ExecutionService;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.SP;
import info.nightscout.utils.SafeParse; import info.nightscout.utils.SafeParse;
import info.nightscout.utils.ToastUtils; import info.nightscout.utils.ToastUtils;
@ -167,18 +168,15 @@ public class DanaRStatsActivity extends Activity {
decimalFormat = new DecimalFormat("0.000"); decimalFormat = new DecimalFormat("0.000");
llm = new LinearLayoutManager(this); llm = new LinearLayoutManager(this);
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); TBB = SP.getString("TBB", "10.00");
TBB = preferences.getString("TBB", "10.00");
totalBaseBasal.setText(TBB); totalBaseBasal.setText(TBB);
ProfileInterface pi = ConfigBuilderPlugin.getActiveProfile(); ProfileInterface pi = ConfigBuilderPlugin.getActiveProfileInterface();
if (pi != null && pi instanceof CircadianPercentageProfilePlugin) { if (pi != null && pi instanceof CircadianPercentageProfilePlugin) {
double cppTBB = ((CircadianPercentageProfilePlugin) pi).baseBasalSum(); double cppTBB = ((CircadianPercentageProfilePlugin) pi).baseBasalSum();
totalBaseBasal.setText(decimalFormat.format(cppTBB)); totalBaseBasal.setText(decimalFormat.format(cppTBB));
SharedPreferences.Editor edit = preferences.edit(); SP.putString("TBB", totalBaseBasal.getText().toString());
edit.putString("TBB", totalBaseBasal.getText().toString()); TBB = SP.getString("TBB", "");
edit.commit();
TBB = preferences.getString("TBB", "");
} }
// stats table // stats table
@ -326,10 +324,8 @@ public class DanaRStatsActivity extends Activity {
if (hasFocus) { if (hasFocus) {
totalBaseBasal.getText().clear(); totalBaseBasal.getText().clear();
} else { } else {
SharedPreferences.Editor edit = preferences.edit(); SP.putString("TBB", totalBaseBasal.getText().toString());
edit.putString("TBB", totalBaseBasal.getText().toString()); TBB = SP.getString("TBB", "");
edit.commit();
TBB = preferences.getString("TBB", "");
loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY); loadDataFromDB(RecordTypes.RECORD_TYPE_DAILY);
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(totalBaseBasal.getWindowToken(), 0); imm.hideSoftInputFromWindow(totalBaseBasal.getWindowToken(), 0);

View file

@ -113,13 +113,13 @@ public class MsgHistoryEvents_v2 extends MessageBase {
log.debug("EVENT BOLUS (" + recordCode + ") " + datetime.toLocaleString() + " Bolus: " + (param1 / 100d) + "U Duration: " + param2 + "min"); log.debug("EVENT BOLUS (" + recordCode + ") " + datetime.toLocaleString() + " Bolus: " + (param1 / 100d) + "U Duration: " + param2 + "min");
detailedBolusInfo.date = datetime.getTime(); detailedBolusInfo.date = datetime.getTime();
detailedBolusInfo.insulin = param1 / 100d; detailedBolusInfo.insulin = param1 / 100d;
MainApp.getConfigBuilder().addTreatmentToHistory(detailedBolusInfo); MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
break; break;
case DanaRPump.DUALBOLUS: case DanaRPump.DUALBOLUS:
log.debug("EVENT DUALBOLUS (" + recordCode + ") " + datetime.toLocaleString() + " Bolus: " + (param1 / 100d) + "U Duration: " + param2 + "min"); log.debug("EVENT DUALBOLUS (" + recordCode + ") " + datetime.toLocaleString() + " Bolus: " + (param1 / 100d) + "U Duration: " + param2 + "min");
detailedBolusInfo.date = datetime.getTime(); detailedBolusInfo.date = datetime.getTime();
detailedBolusInfo.insulin = param1 / 100d; detailedBolusInfo.insulin = param1 / 100d;
MainApp.getConfigBuilder().addTreatmentToHistory(detailedBolusInfo); MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
break; break;
case DanaRPump.DUALEXTENDEDSTART: case DanaRPump.DUALEXTENDEDSTART:
log.debug("EVENT DUALEXTENDEDSTART (" + recordCode + ") " + datetime.toLocaleString() + " Amount: " + (param1 / 100d) + "U Duration: " + param2 + "min"); log.debug("EVENT DUALEXTENDEDSTART (" + recordCode + ") " + datetime.toLocaleString() + " Amount: " + (param1 / 100d) + "U Duration: " + param2 + "min");
@ -153,7 +153,7 @@ public class MsgHistoryEvents_v2 extends MessageBase {
log.debug("EVENT CARBS (" + recordCode + ") " + datetime.toLocaleString() + " Carbs: " + param1 + "g"); log.debug("EVENT CARBS (" + recordCode + ") " + datetime.toLocaleString() + " Carbs: " + param1 + "g");
detailedBolusInfo.date = datetime.getTime(); detailedBolusInfo.date = datetime.getTime();
detailedBolusInfo.carbs = param1; detailedBolusInfo.carbs = param1;
MainApp.getConfigBuilder().addTreatmentToHistory(detailedBolusInfo); MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
break; break;
default: default:
log.debug("Event: " + recordCode + " " + datetime.toLocaleString() + " Param1: " + param1 + " Param2: " + param2); log.debug("Event: " + recordCode + " " + datetime.toLocaleString() + " Param1: " + param1 + " Param2: " + param2);

View file

@ -18,7 +18,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -33,7 +32,7 @@ import info.nightscout.androidaps.events.EventInitializationChanged;
import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPreferenceChange;
import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.events.EventPumpStatusChanged;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.Overview.Notification; import info.nightscout.androidaps.plugins.Overview.Notification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
@ -45,7 +44,6 @@ import info.nightscout.androidaps.plugins.PumpDanaRv2.SerialIOThread;
import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgHistoryEvents_v2; import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgHistoryEvents_v2;
import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgSetAPSTempBasalStart_v2; import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgSetAPSTempBasalStart_v2;
import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgSetHistoryEntry_v2; import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgSetHistoryEntry_v2;
import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgStatusAPS_v2;
import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgCheckValue_v2; import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgCheckValue_v2;
import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgStatusBolusExtended_v2; import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgStatusBolusExtended_v2;
import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgStatusTempBasal_v2; import info.nightscout.androidaps.plugins.PumpDanaRv2.comm.MsgStatusTempBasal_v2;
@ -519,7 +517,7 @@ public class DanaRv2ExecutionService extends Service {
return true; return true;
} }
public boolean updateBasalsInPump(final NSProfile profile) { public boolean updateBasalsInPump(final Profile profile) {
connect("updateBasalsInPump"); connect("updateBasalsInPump");
if (!isConnected()) return false; if (!isConnected()) return false;
MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.updatingbasalrates))); MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.updatingbasalrates)));
@ -534,7 +532,7 @@ public class DanaRv2ExecutionService extends Service {
return true; return true;
} }
private double[] buildDanaRProfileRecord(NSProfile nsProfile) { private double[] buildDanaRProfileRecord(Profile nsProfile) {
double[] record = new double[24]; double[] record = new double[24];
for (Integer hour = 0; hour < 24; hour++) { for (Integer hour = 0; hour < 24; hour++) {
double value = Math.round(100d * nsProfile.getBasal(hour * 60 * 60))/100d + 0.00001; double value = Math.round(100d * nsProfile.getBasal(hour * 60 * 60))/100d + 0.00001;

View file

@ -1,7 +1,5 @@
package info.nightscout.androidaps.plugins.PumpMDI; package info.nightscout.androidaps.plugins.PumpMDI;
import android.content.Context;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -15,12 +13,10 @@ import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
/** /**
@ -121,13 +117,13 @@ public class MDIPlugin implements PluginBase, PumpInterface {
} }
@Override @Override
public int setNewBasalProfile(NSProfile profile) { public int setNewBasalProfile(Profile profile) {
// Do nothing here. we are using MainApp.getConfigBuilder().getActiveProfile().getProfile(); // Do nothing here. we are using MainApp.getConfigBuilder().getActiveProfile().getProfile();
return SUCCESS; return SUCCESS;
} }
@Override @Override
public boolean isThisProfileSet(NSProfile profile) { public boolean isThisProfileSet(Profile profile) {
return false; return false;
} }
@ -153,7 +149,7 @@ public class MDIPlugin implements PluginBase, PumpInterface {
result.bolusDelivered = detailedBolusInfo.insulin; result.bolusDelivered = detailedBolusInfo.insulin;
result.carbsDelivered = detailedBolusInfo.carbs; result.carbsDelivered = detailedBolusInfo.carbs;
result.comment = MainApp.instance().getString(R.string.virtualpump_resultok); result.comment = MainApp.instance().getString(R.string.virtualpump_resultok);
MainApp.getConfigBuilder().addTreatmentToHistory(detailedBolusInfo); MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
return result; return result;
} }
@ -220,7 +216,7 @@ public class MDIPlugin implements PluginBase, PumpInterface {
status.put("status", "normal"); status.put("status", "normal");
extended.put("Version", BuildConfig.VERSION_NAME + "-" + BuildConfig.BUILDVERSION); extended.put("Version", BuildConfig.VERSION_NAME + "-" + BuildConfig.BUILDVERSION);
try { try {
extended.put("ActiveProfile", MainApp.getConfigBuilder().getActiveProfile().getProfile().getActiveProfile()); extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName());
} catch (Exception e) { } catch (Exception e) {
} }
status.put("timestamp", DateUtil.toISOString(new Date())); status.put("timestamp", DateUtil.toISOString(new Date()));

View file

@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.PumpVirtual; package info.nightscout.androidaps.plugins.PumpVirtual;
import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
@ -19,15 +18,13 @@ import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.data.PumpEnactResult;
import info.nightscout.androidaps.db.ExtendedBolus; import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.interfaces.InsulinInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpDescription;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.interfaces.TreatmentsInterface; import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress; import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress;
import info.nightscout.androidaps.plugins.PumpVirtual.events.EventVirtualPumpUpdateGui; import info.nightscout.androidaps.plugins.PumpVirtual.events.EventVirtualPumpUpdateGui;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.NSUpload; import info.nightscout.utils.NSUpload;
@ -157,14 +154,14 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface {
} }
@Override @Override
public int setNewBasalProfile(NSProfile profile) { public int setNewBasalProfile(Profile profile) {
// Do nothing here. we are using MainApp.getConfigBuilder().getActiveProfile().getProfile(); // Do nothing here. we are using MainApp.getConfigBuilder().getActiveProfile().getProfile();
lastDataTime = new Date(); lastDataTime = new Date();
return SUCCESS; return SUCCESS;
} }
@Override @Override
public boolean isThisProfileSet(NSProfile profile) { public boolean isThisProfileSet(Profile profile) {
return false; return false;
} }
@ -181,10 +178,7 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface {
@Override @Override
public double getBaseBasalRate() { public double getBaseBasalRate() {
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); return MainApp.getConfigBuilder().getProfile().getBasal();
if (profile == null)
return defaultBasalValue;
return profile.getBasal(profile.secondsFromMidnight());
} }
@Override @Override
@ -224,7 +218,7 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface {
log.debug("Delivering treatment insulin: " + detailedBolusInfo.insulin + "U carbs: " + detailedBolusInfo.carbs + "g " + result); log.debug("Delivering treatment insulin: " + detailedBolusInfo.insulin + "U carbs: " + detailedBolusInfo.carbs + "g " + result);
MainApp.bus().post(new EventVirtualPumpUpdateGui()); MainApp.bus().post(new EventVirtualPumpUpdateGui());
lastDataTime = new Date(); lastDataTime = new Date();
MainApp.getConfigBuilder().addTreatmentToHistory(detailedBolusInfo); MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
return result; return result;
} }
@ -361,8 +355,9 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface {
status.put("status", "normal"); status.put("status", "normal");
extended.put("Version", BuildConfig.VERSION_NAME + "-" + BuildConfig.BUILDVERSION); extended.put("Version", BuildConfig.VERSION_NAME + "-" + BuildConfig.BUILDVERSION);
try { try {
extended.put("ActiveProfile", MainApp.getConfigBuilder().getActiveProfile().getProfile().getActiveProfile()); extended.put("ActiveProfile", MainApp.getConfigBuilder().getProfileName());
} catch (Exception e) {} } catch (Exception e) {
}
TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(new Date().getTime()); TemporaryBasal tb = MainApp.getConfigBuilder().getTempBasalFromHistory(new Date().getTime());
if (tb != null) { if (tb != null) {
extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(new Date().getTime())); extended.put("TempBasalAbsoluteRate", tb.tempBasalConvertedToAbsolute(new Date().getTime()));
@ -383,6 +378,7 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface {
pump.put("reservoir", reservoirInUnits); pump.put("reservoir", reservoirInUnits);
pump.put("clock", DateUtil.toISOString(new Date())); pump.put("clock", DateUtil.toISOString(new Date()));
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace();
} }
return pump; return pump;
} }

View file

@ -32,10 +32,10 @@ import info.nightscout.androidaps.events.EventRefreshGui;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin;
import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin; import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.androidaps.plugins.Overview.Notification; import info.nightscout.androidaps.plugins.Overview.Notification;
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventNewSMS; import info.nightscout.androidaps.plugins.SmsCommunicator.events.EventNewSMS;
@ -237,13 +237,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
BgReading actualBG = DatabaseHelper.actualBg(); BgReading actualBG = DatabaseHelper.actualBg();
BgReading lastBG = DatabaseHelper.lastBg(); BgReading lastBG = DatabaseHelper.lastBg();
if (ConfigBuilderPlugin.getActiveProfile() == null || ConfigBuilderPlugin.getActiveProfile().getProfile() == null) { Profile profile = MainApp.getConfigBuilder().getProfile();
reply = MainApp.sResources.getString(R.string.noprofile);
sendSMS(new Sms(receivedSms.phoneNumber, reply, new Date()));
return;
}
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile();
String units = profile.getUnits(); String units = profile.getUnits();
if (actualBG != null) { if (actualBG != null) {
@ -255,7 +249,7 @@ public class SmsCommunicatorPlugin implements PluginBase {
} }
GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData(); GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData();
if (glucoseStatus != null) if (glucoseStatus != null)
reply += MainApp.sResources.getString(R.string.sms_delta) + " " + NSProfile.toUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) + " " + units + ", "; reply += MainApp.sResources.getString(R.string.sms_delta) + " " + Profile.toUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) + " " + units + ", ";
MainApp.getConfigBuilder().updateTotalIOBTreatments(); MainApp.getConfigBuilder().updateTotalIOBTreatments();
IobTotal bolusIob = MainApp.getConfigBuilder().getLastCalculationTreatments().round(); IobTotal bolusIob = MainApp.getConfigBuilder().getLastCalculationTreatments().round();

View file

@ -11,7 +11,6 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.DetailedBolusInfo;
@ -19,6 +18,7 @@ import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.data.MealData;
import info.nightscout.androidaps.db.ExtendedBolus; import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.ProfileSwitch;
import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
@ -28,11 +28,11 @@ import info.nightscout.androidaps.events.EventTempTargetChange;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.interfaces.TreatmentsInterface; import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensData; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensData;
import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin; import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.OverlappingIntervals; import info.nightscout.utils.OverlappingIntervals;
import info.nightscout.utils.ProfileIntervals;
import info.nightscout.utils.SP; import info.nightscout.utils.SP;
/** /**
@ -123,9 +123,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
public static void initializeTreatmentData() { public static void initializeTreatmentData() {
// Treatments // Treatments
double dia = Constants.defaultDIA; double dia = MainApp.getConfigBuilder().getProfile().getDia();
if (MainApp.getConfigBuilder().getActiveProfile() != null && MainApp.getConfigBuilder().getActiveProfile().getProfile() != null)
dia = MainApp.getConfigBuilder().getActiveProfile().getProfile().getDia();
long fromMills = (long) (new Date().getTime() - 60 * 60 * 1000L * (24 + dia)); long fromMills = (long) (new Date().getTime() - 60 * 60 * 1000L * (24 + dia));
treatments = MainApp.getDbHelper().getTreatmentDataFromTime(fromMills, false); treatments = MainApp.getDbHelper().getTreatmentDataFromTime(fromMills, false);
@ -133,9 +131,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
public static void initializeTempBasalData() { public static void initializeTempBasalData() {
// Treatments // Treatments
double dia = Constants.defaultDIA; double dia = MainApp.getConfigBuilder().getProfile().getDia();
if (MainApp.getConfigBuilder().getActiveProfile() != null && MainApp.getConfigBuilder().getActiveProfile().getProfile() != null)
dia = MainApp.getConfigBuilder().getActiveProfile().getProfile().getDia();
long fromMills = (long) (new Date().getTime() - 60 * 60 * 1000L * (24 + dia)); long fromMills = (long) (new Date().getTime() - 60 * 60 * 1000L * (24 + dia));
tempBasals.reset().add(MainApp.getDbHelper().getTemporaryBasalsDataFromTime(fromMills, false)); tempBasals.reset().add(MainApp.getDbHelper().getTemporaryBasalsDataFromTime(fromMills, false));
@ -144,9 +140,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
public static void initializeExtendedBolusData() { public static void initializeExtendedBolusData() {
// Treatments // Treatments
double dia = Constants.defaultDIA; double dia = MainApp.getConfigBuilder().getProfile().getDia();
if (MainApp.getConfigBuilder().getActiveProfile() != null && MainApp.getConfigBuilder().getActiveProfile().getProfile() != null)
dia = MainApp.getConfigBuilder().getActiveProfile().getProfile().getDia();
long fromMills = (long) (new Date().getTime() - 60 * 60 * 1000L * (24 + dia)); long fromMills = (long) (new Date().getTime() - 60 * 60 * 1000L * (24 + dia));
extendedBoluses.reset().add(MainApp.getDbHelper().getExtendedBolusDataFromTime(fromMills, false)); extendedBoluses.reset().add(MainApp.getDbHelper().getExtendedBolusDataFromTime(fromMills, false));
@ -167,9 +161,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
public IobTotal getCalculationToTimeTreatments(long time) { public IobTotal getCalculationToTimeTreatments(long time) {
IobTotal total = new IobTotal(time); IobTotal total = new IobTotal(time);
if (MainApp.getConfigBuilder() == null || ConfigBuilderPlugin.getActiveProfile() == null) // app not initialized yet Profile profile = MainApp.getConfigBuilder().getProfile();
return total;
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile();
if (profile == null) if (profile == null)
return total; return total;
@ -206,7 +198,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
public MealData getMealData() { public MealData getMealData() {
MealData result = new MealData(); MealData result = new MealData();
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) return result; if (profile == null) return result;
long now = new Date().getTime(); long now = new Date().getTime();
@ -404,7 +396,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
} }
@Override @Override
public void addTreatmentToHistory(DetailedBolusInfo detailedBolusInfo) { public void addToHistoryTreatment(DetailedBolusInfo detailedBolusInfo) {
Treatment treatment = new Treatment(detailedBolusInfo.insulinInterface); Treatment treatment = new Treatment(detailedBolusInfo.insulinInterface);
treatment.date = detailedBolusInfo.date; treatment.date = detailedBolusInfo.date;
treatment.insulin = detailedBolusInfo.insulin; treatment.insulin = detailedBolusInfo.insulin;
@ -425,7 +417,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
} }
@Override @Override
public long oldestDataAvaialable() { public long oldestDataAvailable() {
long oldestTime = new Date().getTime(); long oldestTime = new Date().getTime();
if (tempBasals.size() > 0) if (tempBasals.size() > 0)
oldestTime = Math.min(oldestTime, tempBasals.get(0).date); oldestTime = Math.min(oldestTime, tempBasals.get(0).date);
@ -454,5 +446,21 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
return tempTargets; return tempTargets;
} }
@Override
public ProfileSwitch getProfileSwitchFromHistory(long time) {
return null;
}
@Override
public ProfileIntervals<ProfileSwitch> getProfileSwitchesFromHistory() {
return null;
}
@Override
public void addToHistoryProfileSwitch(ProfileSwitch profileSwitch) {
log.debug("Adding new TemporaryBasal record" + profileSwitch.log());
MainApp.getDbHelper().createOrUpdate(profileSwitch);
}
} }

View file

@ -35,8 +35,7 @@ import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.events.EventNewBG; import info.nightscout.androidaps.events.EventNewBG;
import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.events.EventTreatmentChange;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin; import info.nightscout.androidaps.plugins.Treatments.TreatmentsPlugin;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
@ -71,9 +70,7 @@ public class TreatmentsBolusFragment extends Fragment implements View.OnClickLis
@Override @Override
public void onBindViewHolder(TreatmentsViewHolder holder, int position) { public void onBindViewHolder(TreatmentsViewHolder holder, int position) {
if (MainApp.getConfigBuilder() == null || ConfigBuilderPlugin.getActiveProfile() == null) // app not initialized yet Profile profile = MainApp.getConfigBuilder().getProfile();
return;
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile();
if (profile == null) if (profile == null)
return; return;
holder.date.setText(DateUtil.dateAndTimeString(treatments.get(position).date)); holder.date.setText(DateUtil.dateAndTimeString(treatments.get(position).date));
@ -225,10 +222,7 @@ public class TreatmentsBolusFragment extends Fragment implements View.OnClickLis
public void updateGUI() { public void updateGUI() {
Activity activity = getActivity(); Activity activity = getActivity();
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); if (activity != null)
if (profile == null)
return;
if (activity != null && recyclerView != null)
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {

View file

@ -25,8 +25,7 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents; import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.TempTarget;
import info.nightscout.androidaps.events.EventTempTargetChange; import info.nightscout.androidaps.events.EventTempTargetChange;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.NSClientInternal.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.NSUpload; import info.nightscout.utils.NSUpload;
@ -62,7 +61,7 @@ public class TreatmentsTempTargetFragment extends Fragment implements View.OnCli
@Override @Override
public void onBindViewHolder(TempTargetsViewHolder holder, int position) { public void onBindViewHolder(TempTargetsViewHolder holder, int position) {
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) return; if (profile == null) return;
TempTarget tempTarget = tempTargetList.getReversed(position); TempTarget tempTarget = tempTargetList.getReversed(position);
if (!tempTarget.isEndingEvent()) { if (!tempTarget.isEndingEvent()) {

View file

@ -21,7 +21,7 @@ import info.nightscout.androidaps.interfaces.APSInterface;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.plugins.Actions.dialogs.FillDialog; import info.nightscout.androidaps.plugins.Actions.dialogs.FillDialog;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.BolusWizard; import info.nightscout.utils.BolusWizard;
import info.nightscout.utils.DateUtil; import info.nightscout.utils.DateUtil;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
@ -110,7 +110,7 @@ public class ActionStringHandler {
///////////////////////////////////////////////////////// TEMPTARGET ///////////////////////////////////////////////////////// TEMPTARGET
boolean isMGDL = Boolean.parseBoolean(act[1]); boolean isMGDL = Boolean.parseBoolean(act[1]);
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) { if (profile == null) {
sendError("No profile found!"); sendError("No profile found!");
return; return;
@ -174,7 +174,7 @@ public class ActionStringHandler {
boolean useBolusIOB = Boolean.parseBoolean(act[3]); boolean useBolusIOB = Boolean.parseBoolean(act[3]);
boolean useBasalIOB = Boolean.parseBoolean(act[4]); boolean useBasalIOB = Boolean.parseBoolean(act[4]);
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) { if (profile == null) {
sendError("No profile found!"); sendError("No profile found!");
return; return;
@ -187,7 +187,7 @@ public class ActionStringHandler {
} }
DecimalFormat format = new DecimalFormat("0.00"); DecimalFormat format = new DecimalFormat("0.00");
BolusWizard bolusWizard = new BolusWizard(); BolusWizard bolusWizard = new BolusWizard();
bolusWizard.doCalc(profile.getDefaultProfile(), carbsAfterConstraints, 0d, useBG ? bgReading.valueToUnits(profile.getUnits()) : 0d, 0d, useBolusIOB, useBasalIOB, false, false); bolusWizard.doCalc(profile, carbsAfterConstraints, 0d, useBG ? bgReading.valueToUnits(profile.getUnits()) : 0d, 0d, useBolusIOB, useBasalIOB, false, false);
Double insulinAfterConstraints = MainApp.getConfigBuilder().applyBolusConstraints(bolusWizard.calculatedTotalInsulin); Double insulinAfterConstraints = MainApp.getConfigBuilder().applyBolusConstraints(bolusWizard.calculatedTotalInsulin);
if (insulinAfterConstraints - bolusWizard.calculatedTotalInsulin != 0) { if (insulinAfterConstraints - bolusWizard.calculatedTotalInsulin != 0) {
@ -197,7 +197,6 @@ public class ActionStringHandler {
} }
double insulin = bolusWizard.calculatedTotalInsulin;
if (bolusWizard.calculatedTotalInsulin < 0) { if (bolusWizard.calculatedTotalInsulin < 0) {
bolusWizard.calculatedTotalInsulin = 0d; bolusWizard.calculatedTotalInsulin = 0d;
} }
@ -270,7 +269,7 @@ public class ActionStringHandler {
if (!Config.APS) { if (!Config.APS) {
return "Targets only apply in APS mode!"; return "Targets only apply in APS mode!";
} }
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) { if (profile == null) {
return "No profile set :("; return "No profile set :(";
} }
@ -278,7 +277,7 @@ public class ActionStringHandler {
//Check for Temp-Target: //Check for Temp-Target:
TempTarget tempTarget = MainApp.getConfigBuilder().getTempTargetFromHistory(new Date().getTime()); TempTarget tempTarget = MainApp.getConfigBuilder().getTempTargetFromHistory(new Date().getTime());
if (tempTarget != null) { if (tempTarget != null) {
ret += "Temp Target: " + NSProfile.toUnitsString(tempTarget.low, NSProfile.fromMgdlToUnits(tempTarget.low, profile.getUnits()), profile.getUnits()) + " - " + NSProfile.toUnitsString(tempTarget.high, NSProfile.fromMgdlToUnits(tempTarget.high, profile.getUnits()), profile.getUnits()); ret += "Temp Target: " + Profile.toUnitsString(tempTarget.low, Profile.fromMgdlToUnits(tempTarget.low, profile.getUnits()), profile.getUnits()) + " - " + Profile.toUnitsString(tempTarget.high, Profile.fromMgdlToUnits(tempTarget.high, profile.getUnits()), profile.getUnits());
ret += "\nuntil: " + DateUtil.timeString(tempTarget.originalEnd()); ret += "\nuntil: " + DateUtil.timeString(tempTarget.originalEnd());
ret += "\n\n"; ret += "\n\n";
} }

View file

@ -35,7 +35,7 @@ import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.interfaces.TreatmentsInterface; import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.Overview.OverviewPlugin; import info.nightscout.androidaps.plugins.Overview.OverviewPlugin;
import info.nightscout.androidaps.plugins.Wear.ActionStringHandler; import info.nightscout.androidaps.plugins.Wear.ActionStringHandler;
import info.nightscout.androidaps.plugins.Wear.WearPlugin; import info.nightscout.androidaps.plugins.Wear.WearPlugin;
@ -209,7 +209,7 @@ public class WatchUpdaterService extends WearableListenerService implements
} }
private DataMap dataMapSingleBG(BgReading lastBG, GlucoseStatus glucoseStatus) { private DataMap dataMapSingleBG(BgReading lastBG, GlucoseStatus glucoseStatus) {
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) return null; if (profile == null) return null;
Double lowLine = SafeParse.stringToDouble(mPrefs.getString("low_mark", "0")); Double lowLine = SafeParse.stringToDouble(mPrefs.getString("low_mark", "0"));
@ -339,7 +339,7 @@ public class WatchUpdaterService extends WearableListenerService implements
ArrayList<DataMap> temps = new ArrayList<>(); ArrayList<DataMap> temps = new ArrayList<>();
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null) { if (profile == null) {
return; return;
@ -348,7 +348,7 @@ public class WatchUpdaterService extends WearableListenerService implements
long beginBasalSegmentTime = startTimeWindow; long beginBasalSegmentTime = startTimeWindow;
long runningTime = startTimeWindow; long runningTime = startTimeWindow;
double beginBasalValue = profile.getBasal(NSProfile.secondsFromMidnight(new Date(beginBasalSegmentTime))); double beginBasalValue = profile.getBasal(beginBasalSegmentTime);
double endBasalValue = beginBasalValue; double endBasalValue = beginBasalValue;
TemporaryBasal tb1 = MainApp.getConfigBuilder().getTempBasalFromHistory(runningTime); TemporaryBasal tb1 = MainApp.getConfigBuilder().getTempBasalFromHistory(runningTime);
@ -367,7 +367,7 @@ public class WatchUpdaterService extends WearableListenerService implements
for (; runningTime < now; runningTime += 5 * 60 * 1000) { for (; runningTime < now; runningTime += 5 * 60 * 1000) {
//basal rate //basal rate
endBasalValue = profile.getBasal(NSProfile.secondsFromMidnight(new Date(runningTime))); endBasalValue = profile.getBasal(runningTime);
if (endBasalValue != beginBasalValue) { if (endBasalValue != beginBasalValue) {
//push the segment we recently left //push the segment we recently left
basals.add(basalMap(beginBasalSegmentTime, runningTime, beginBasalValue)); basals.add(basalMap(beginBasalSegmentTime, runningTime, beginBasalValue));
@ -561,12 +561,12 @@ public class WatchUpdaterService extends WearableListenerService implements
+ DecimalFormatter.to2Decimal(bolusIob.iob) + "|" + DecimalFormatter.to2Decimal(bolusIob.iob) + "|"
+ DecimalFormatter.to2Decimal(basalIob.basaliob) + ")"; + DecimalFormatter.to2Decimal(basalIob.basaliob) + ")";
} }
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (!mPrefs.getBoolean("wear_showbgi", false) || profile == null || profile.getIsf(NSProfile.secondsFromMidnight()) == null || profile.getIc(NSProfile.secondsFromMidnight()) == null) { if (!mPrefs.getBoolean("wear_showbgi", false)) {
return status; return status;
} }
double bgi = -(bolusIob.activity + basalIob.activity) * 5 * profile.getIsf(NSProfile.secondsFromMidnight()); double bgi = -(bolusIob.activity + basalIob.activity) * 5 * profile.getIsf();
status += " " + ((bgi >= 0) ? "+" : "") + DecimalFormatter.to2Decimal(bgi); status += " " + ((bgi >= 0) ? "+" : "") + DecimalFormatter.to2Decimal(bgi);

View file

@ -24,7 +24,7 @@ import info.nightscout.androidaps.events.EventTreatmentChange;
import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.TreatmentsInterface; import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.DecimalFormatter;
/** /**
@ -186,12 +186,12 @@ public class StatuslinePlugin implements PluginBase {
+ DecimalFormatter.to2Decimal(bolusIob.iob) + "|" + DecimalFormatter.to2Decimal(bolusIob.iob) + "|"
+ DecimalFormatter.to2Decimal(basalIob.basaliob) + ")"; + DecimalFormatter.to2Decimal(basalIob.basaliob) + ")";
} }
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (!mPrefs.getBoolean("xdripstatus_showbgi", false) || profile == null || profile.getIsf(NSProfile.secondsFromMidnight()) == null || profile.getIc(NSProfile.secondsFromMidnight()) == null) { if (!mPrefs.getBoolean("xdripstatus_showbgi", false)) {
return status; return status;
} }
double bgi = -(bolusIob.activity + basalIob.activity) * 5 * profile.getIsf(NSProfile.secondsFromMidnight()); double bgi = -(bolusIob.activity + basalIob.activity) * 5 * profile.getIsf();
status += " " + ((bgi >= 0) ? "+" : "") + DecimalFormatter.to2Decimal(bgi); status += " " + ((bgi >= 0) ? "+" : "") + DecimalFormatter.to2Decimal(bgi);

View file

@ -21,7 +21,7 @@ import java.util.Date;
import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.interfaces.PumpInterface;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
public class KeepAliveReceiver extends BroadcastReceiver { public class KeepAliveReceiver extends BroadcastReceiver {
private static Logger log = LoggerFactory.getLogger(KeepAliveReceiver.class); private static Logger log = LoggerFactory.getLogger(KeepAliveReceiver.class);
@ -34,15 +34,15 @@ public class KeepAliveReceiver extends BroadcastReceiver {
final PumpInterface pump = MainApp.getConfigBuilder(); final PumpInterface pump = MainApp.getConfigBuilder();
final NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); final Profile profile = MainApp.getConfigBuilder().getProfile();
if (pump != null && profile != null && profile.getBasal(NSProfile.secondsFromMidnight()) != null) { if (pump != null && profile != null && profile.getBasal() != null) {
boolean isBasalOutdated = false; boolean isBasalOutdated = false;
boolean isStatusOutdated = false; boolean isStatusOutdated = false;
Date lastConnection = pump.lastDataTime(); Date lastConnection = pump.lastDataTime();
if (lastConnection.getTime() + 30 * 60 * 1000L < new Date().getTime()) if (lastConnection.getTime() + 30 * 60 * 1000L < new Date().getTime())
isStatusOutdated = true; isStatusOutdated = true;
if (Math.abs(profile.getBasal(NSProfile.secondsFromMidnight()) - pump.getBaseBasalRate()) > pump.getPumpDescription().basalStep) if (Math.abs(profile.getBasal() - pump.getBaseBasalRate()) > pump.getPumpDescription().basalStep)
isBasalOutdated = true; isBasalOutdated = true;
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext()); SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());

View file

@ -1,15 +1,12 @@
package info.nightscout.utils; package info.nightscout.utils;
import org.json.JSONObject;
import java.util.Date; import java.util.Date;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.data.GlucoseStatus; import info.nightscout.androidaps.data.GlucoseStatus;
import info.nightscout.androidaps.interfaces.TreatmentsInterface; import info.nightscout.androidaps.interfaces.TreatmentsInterface;
import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.IobTotal;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
/** /**
* Created by mike on 11.10.2016. * Created by mike on 11.10.2016.
@ -17,7 +14,7 @@ import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile;
public class BolusWizard { public class BolusWizard {
// Inputs // Inputs
JSONObject specificProfile = null; Profile specificProfile = null;
public Integer carbs = 0; public Integer carbs = 0;
Double bg = 0d; Double bg = 0d;
Double correction; Double correction;
@ -52,7 +49,7 @@ public class BolusWizard {
public Double calculatedTotalInsulin = 0d; public Double calculatedTotalInsulin = 0d;
public Double carbsEquivalent = 0d; public Double carbsEquivalent = 0d;
public Double doCalc(JSONObject specificProfile, Integer carbs, Double cob, Double bg, Double correction, Boolean includeBolusIOB, Boolean includeBasalIOB, Boolean superBolus, Boolean trend) { public Double doCalc(Profile specificProfile, Integer carbs, Double cob, Double bg, Double correction, Boolean includeBolusIOB, Boolean includeBasalIOB, Boolean superBolus, Boolean trend) {
this.specificProfile = specificProfile; this.specificProfile = specificProfile;
this.carbs = carbs; this.carbs = carbs;
this.bg = bg; this.bg = bg;
@ -60,12 +57,11 @@ public class BolusWizard {
this.superBolus = superBolus; this.superBolus = superBolus;
this.trend = trend; this.trend = trend;
NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile();
// Insulin from BG // Insulin from BG
sens = profile.getIsf(specificProfile, NSProfile.secondsFromMidnight()); sens = specificProfile.getIsf();
targetBGLow = profile.getTargetLow(specificProfile, NSProfile.secondsFromMidnight()); targetBGLow = specificProfile.getTargetLow();
targetBGHigh = profile.getTargetHigh(specificProfile, NSProfile.secondsFromMidnight()); targetBGHigh = specificProfile.getTargetHigh();
if (bg <= targetBGLow) { if (bg <= targetBGLow) {
bgDiff = bg - targetBGLow; bgDiff = bg - targetBGLow;
} else { } else {
@ -76,11 +72,11 @@ public class BolusWizard {
// Insulin from 15 min trend // Insulin from 15 min trend
glucoseStatus = GlucoseStatus.getGlucoseStatusData(); glucoseStatus = GlucoseStatus.getGlucoseStatusData();
if (glucoseStatus != null && trend) { if (glucoseStatus != null && trend) {
insulinFromTrend = (NSProfile.fromMgdlToUnits(glucoseStatus.short_avgdelta, profile.getUnits()) * 3) / sens; insulinFromTrend = (Profile.fromMgdlToUnits(glucoseStatus.short_avgdelta, specificProfile.getUnits()) * 3) / sens;
} }
// Insuling from carbs // Insuling from carbs
ic = profile.getIc(specificProfile, NSProfile.secondsFromMidnight()); ic = specificProfile.getIc();
insulinFromCarbs = carbs / ic; insulinFromCarbs = carbs / ic;
insulinFromCOB = cob / ic; insulinFromCOB = cob / ic;
@ -100,10 +96,10 @@ public class BolusWizard {
// Insulin from superbolus for 2h. Get basal rate now and after 1h // Insulin from superbolus for 2h. Get basal rate now and after 1h
if (superBolus) { if (superBolus) {
insulinFromSuperBolus = profile.getBasal(NSProfile.secondsFromMidnight()); insulinFromSuperBolus = specificProfile.getBasal();
long timeAfter1h = new Date().getTime(); long timeAfter1h = new Date().getTime();
timeAfter1h += 60L * 60 * 1000; timeAfter1h += 60L * 60 * 1000;
insulinFromSuperBolus += profile.getBasal(NSProfile.secondsFromMidnight(new Date(timeAfter1h))); insulinFromSuperBolus += specificProfile.getBasal(Profile.secondsFromMidnight(new Date(timeAfter1h)));
} }
// Total // Total

View file

@ -19,13 +19,14 @@ import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.DetailedBolusInfo;
import info.nightscout.androidaps.db.CareportalEvent; import info.nightscout.androidaps.db.CareportalEvent;
import info.nightscout.androidaps.db.ExtendedBolus; import info.nightscout.androidaps.db.ExtendedBolus;
import info.nightscout.androidaps.db.ProfileSwitch;
import info.nightscout.androidaps.db.TemporaryBasal; import info.nightscout.androidaps.db.TemporaryBasal;
import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.db.Treatment;
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.LoopPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
import info.nightscout.androidaps.plugins.NSClientInternal.data.DbLogger; import info.nightscout.androidaps.plugins.NSClientInternal.data.DbLogger;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.plugins.OpenAPSAMA.DetermineBasalResultAMA; import info.nightscout.androidaps.plugins.OpenAPSAMA.DetermineBasalResultAMA;
import info.nightscout.androidaps.plugins.OpenAPSMA.DetermineBasalResultMA; import info.nightscout.androidaps.plugins.OpenAPSMA.DetermineBasalResultMA;
@ -69,9 +70,9 @@ public class NSUpload {
if (useAbsolute) { if (useAbsolute) {
TemporaryBasal t = temporaryBasal.clone(); TemporaryBasal t = temporaryBasal.clone();
t.isAbsolute = true; t.isAbsolute = true;
NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile != null) { if (profile != null) {
t.absoluteRate = profile.getBasal(NSProfile.secondsFromMidnight(temporaryBasal.date)) * temporaryBasal.percentRate / 100d; t.absoluteRate = profile.getBasal(temporaryBasal.date) * temporaryBasal.percentRate / 100d;
uploadTempBasalStartAbsolute(t, null); uploadTempBasalStartAbsolute(t, null);
} }
} else { } else {
@ -274,6 +275,27 @@ public class NSUpload {
uploadCareportalEntryToNS(data); uploadCareportalEntryToNS(data);
} }
public static void uploadProfileSwitch(ProfileSwitch profileSwitch) {
try {
JSONObject data = new JSONObject();
data.put("eventType", CareportalEvent.PROFILESWITCH);
data.put("duration", profileSwitch.durationInMinutes);
data.put("profile", profileSwitch.profileName);
data.put("profileJson", profileSwitch.profileJson);
data.put("profilePlugin", profileSwitch.profilePlugin);
if (profileSwitch.isCPP) {
data.put("CircadianPercentageProfile", true);
data.put("timeshift", profileSwitch.timeshift);
data.put("percentage", profileSwitch.percentage);
}
data.put("created_at", DateUtil.toISOString(profileSwitch.date));
data.put("enteredBy", MainApp.instance().getString(R.string.app_name));
uploadCareportalEntryToNS(data);
} catch (JSONException e) {
e.printStackTrace();
}
}
public static void uploadCareportalEntryToNS(JSONObject data) { public static void uploadCareportalEntryToNS(JSONObject data) {
try { try {
if (data.has("preBolus") && data.has("carbs")) { if (data.has("preBolus") && data.has("carbs")) {

View file

@ -14,6 +14,8 @@ import info.nightscout.androidaps.interfaces.Interval;
* Created by mike on 09.05.2017. * Created by mike on 09.05.2017.
*/ */
// Zero duration means end of interval
public class OverlappingIntervals<T extends Interval> { public class OverlappingIntervals<T extends Interval> {
private LongSparseArray<T> rawData = new LongSparseArray<>(); // oldest at index 0 private LongSparseArray<T> rawData = new LongSparseArray<>(); // oldest at index 0

View file

@ -0,0 +1,106 @@
package info.nightscout.utils;
import android.support.annotation.Nullable;
import android.support.v4.util.LongSparseArray;
import java.util.ArrayList;
import java.util.List;
import info.nightscout.androidaps.interfaces.Interval;
/**
* Created by mike on 09.05.2017.
*/
// Zero duration means profile is valid until is chaged
// When no interval match the lastest record without duration is used
public class ProfileIntervals<T extends Interval> {
private LongSparseArray<T> rawData = new LongSparseArray<>(); // oldest at index 0
public ProfileIntervals reset() {
rawData = new LongSparseArray<>();
return this;
}
public void add(T newInterval) {
rawData.put(newInterval.start(), newInterval);
merge();
}
public void add(List<T> list) {
for (T interval : list) {
rawData.put(interval.start(), interval);
}
merge();
}
private void merge() {
for (int index = 0; index < rawData.size() - 1; index++) {
Interval i = rawData.valueAt(index);
long startOfNewer = rawData.valueAt(index + 1).start();
if (i.originalEnd() > startOfNewer) {
i.cutEndTo(startOfNewer);
}
}
}
@Nullable
public Interval getValueToTime(long time) {
int index = binarySearch(time);
if (index >= 0) return rawData.valueAt(index);
return null;
}
public List<T> getList() {
List<T> list = new ArrayList<>();
for (int i = 0; i < rawData.size(); i++)
list.add(rawData.valueAt(i));
return list;
}
public List<T> getReversedList() {
List<T> list = new ArrayList<>();
for (int i = rawData.size() -1; i>=0; i--)
list.add(rawData.valueAt(i));
return list;
}
private int binarySearch(long value) {
int lo = 0;
int hi = rawData.size() - 1;
while (lo <= hi) {
final int mid = (lo + hi) >>> 1;
final Interval midVal = rawData.valueAt(mid);
if (midVal.before(value)) {
lo = mid + 1;
} else if (midVal.after(value)) {
hi = mid - 1;
} else if (midVal.match(value)) {
return mid; // value found
}
}
// not found, try nearest older with duration 0
while (lo >= 0) {
if (rawData.valueAt(lo).isEndingEvent())
return lo;
lo--;
}
return -1; // value not present
}
public int size() {
return rawData.size();
}
public T get(int index) {
return rawData.valueAt(index);
}
public T getReversed(int index) {
return rawData.valueAt(size() - 1 - index);
}
}

View file

@ -98,6 +98,12 @@ public class SP {
editor.apply(); editor.apply();
} }
static public void putString(String key, String value) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.apply();
}
static public void removeString(int resourceID) { static public void removeString(int resourceID) {
SharedPreferences.Editor editor = sharedPreferences.edit(); SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove(MainApp.sResources.getString(resourceID)); editor.remove(MainApp.sResources.getString(resourceID));

View file

@ -17,7 +17,7 @@ import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.Services.Intents; import info.nightscout.androidaps.Services.Intents;
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.data.Profile;
/** /**
* Created by mike on 10.02.2017. * Created by mike on 10.02.2017.
@ -44,7 +44,7 @@ public class XdripCalibrations {
} }
public static boolean sendIntent(Double bg) { public static boolean sendIntent(Double bg) {
final NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); final Profile profile = MainApp.getConfigBuilder().getProfile();
Context context = MainApp.instance().getApplicationContext(); Context context = MainApp.instance().getApplicationContext();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();

View file

@ -620,4 +620,9 @@
<string name="careportal_insulinage_label">Insulin age</string> <string name="careportal_insulinage_label">Insulin age</string>
<string name="hours">hours</string> <string name="hours">hours</string>
<string name="overview_newtempbasal_basaltype_label">Basal type</string> <string name="overview_newtempbasal_basaltype_label">Basal type</string>
<string name="isfmissing">ISF missing in profile. Using default.</string>
<string name="icmissing">IC missing in profile. Using default.</string>
<string name="basalmissing">Basal missing in profile. Using default.</string>
<string name="targetmissing">Target missing in profile. Using default.</string>
<string name="invalidprofile">Invalid profile !!!</string>
</resources> </resources>