diff --git a/app/build.gradle b/app/build.gradle index 31de31b970..985ecf359c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,8 +43,8 @@ android { applicationId "info.nightscout.androidaps" minSdkVersion 21 targetSdkVersion 23 - versionCode 1100 - version "1.33" + versionCode 1400 + version "1.4" buildConfigField "String", "VERSION", '"' + version + '"' buildConfigField "String", "BUILDVERSION", generateGitBuild() } diff --git a/app/src/main/java/info/nightscout/androidaps/Constants.java b/app/src/main/java/info/nightscout/androidaps/Constants.java index da0feef01f..9e5fae4aee 100644 --- a/app/src/main/java/info/nightscout/androidaps/Constants.java +++ b/app/src/main/java/info/nightscout/androidaps/Constants.java @@ -12,6 +12,8 @@ public class Constants { public static final double MMOLL_TO_MGDL = 18; // 18.0182; public static final double MGDL_TO_MMOLL = 1 / MMOLL_TO_MGDL; + public static final double defaultDIA = 3d; + public static final double basalAbsoluteOnlyForCheckLimit = 10101010d; public static final Integer basalPercentOnlyForCheckLimit = 10101010; public static final double bolusOnlyForCheckLimit = 10101010d; diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java index 6568e03a53..e88c2c680b 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.java +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java @@ -27,6 +27,7 @@ import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.DanaR.DanaRFragment; import info.nightscout.androidaps.plugins.DanaRKorean.DanaRKoreanFragment; +import info.nightscout.androidaps.plugins.InsulinFastacting.InsulinFastactingFragment; import info.nightscout.androidaps.plugins.LocalProfile.LocalProfileFragment; import info.nightscout.androidaps.plugins.Loop.LoopFragment; import info.nightscout.androidaps.plugins.MDI.MDIFragment; @@ -86,6 +87,7 @@ public class MainApp extends Application { // Register all tabs in app here pluginsList.add(OverviewFragment.getPlugin()); if (Config.ACTION) pluginsList.add(ActionsFragment.getPlugin()); + pluginsList.add(InsulinFastactingFragment.getPlugin()); if (Config.DANAR) pluginsList.add(DanaRFragment.getPlugin()); if (Config.DANARKOREAN) pluginsList.add(DanaRKoreanFragment.getPlugin()); pluginsList.add(CareportalFragment.getPlugin()); diff --git a/app/src/main/java/info/nightscout/androidaps/Services/DataService.java b/app/src/main/java/info/nightscout/androidaps/Services/DataService.java index f45e59f4c1..2eb6a90002 100644 --- a/app/src/main/java/info/nightscout/androidaps/Services/DataService.java +++ b/app/src/main/java/info/nightscout/androidaps/Services/DataService.java @@ -32,10 +32,12 @@ import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.events.EventNewBG; import info.nightscout.androidaps.events.EventNewBasalProfile; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.DanaR.History.DanaRNSHistorySync; +import info.nightscout.androidaps.plugins.InsulinFastacting.InsulinFastactingFragment; import info.nightscout.androidaps.plugins.NSProfile.NSProfilePlugin; import info.nightscout.androidaps.plugins.Objectives.ObjectivesPlugin; import info.nightscout.androidaps.plugins.Overview.Notification; @@ -520,7 +522,9 @@ public class DataService extends IntentService { } else { if (Config.logIncommingData) log.debug("ADD: New treatment: " + trstring); - Treatment treatment = new Treatment(); + InsulinInterface insulinInterface = MainApp.getConfigBuilder().getActiveInsulin(); + if (insulinInterface == null) insulinInterface = InsulinFastactingFragment.getPlugin(); + Treatment treatment = new Treatment(insulinInterface); treatment._id = _id; treatment.carbs = trJson.has("carbs") ? trJson.getDouble("carbs") : 0; treatment.insulin = trJson.has("insulin") ? trJson.getDouble("insulin") : 0d; @@ -575,7 +579,9 @@ public class DataService extends IntentService { if (Config.logIncommingData) log.debug("CHANGE: Adding new treatment: " + trstring); - Treatment treatment = new Treatment(); + InsulinInterface insulinInterface = MainApp.getConfigBuilder().getActiveInsulin(); + if (insulinInterface == null) insulinInterface = InsulinFastactingFragment.getPlugin(); + Treatment treatment = new Treatment(insulinInterface); treatment._id = _id; treatment.carbs = trJson.has("carbs") ? trJson.getDouble("carbs") : 0; treatment.insulin = trJson.has("insulin") ? trJson.getDouble("insulin") : 0d; diff --git a/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java b/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java index 17ee574678..e6a5acc5bc 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java +++ b/app/src/main/java/info/nightscout/androidaps/db/DatabaseHelper.java @@ -41,7 +41,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { public static final String DATABASE_DANARHISTORY = "DanaRHistory"; public static final String DATABASE_DBREQUESTS = "DBRequests"; - private static final int DATABASE_VERSION = 5; + private static final int DATABASE_VERSION = 6; private long latestTreatmentChange = 0; diff --git a/app/src/main/java/info/nightscout/androidaps/db/TempBasal.java b/app/src/main/java/info/nightscout/androidaps/db/TempBasal.java index 149d188b7c..8091000307 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/TempBasal.java +++ b/app/src/main/java/info/nightscout/androidaps/db/TempBasal.java @@ -11,6 +11,7 @@ import java.util.Date; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.data.IobTotal; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; @@ -55,6 +56,7 @@ public class TempBasal { public IobTotal iobCalc(Date time) { IobTotal result = new IobTotal(time.getTime()); NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); + InsulinInterface insulinInterface = MainApp.getConfigBuilder().getActiveInsulin(); if (profile == null) return result; @@ -93,12 +95,12 @@ public class TempBasal { if (tempBolusCount > 0) { Long tempBolusSpacing = realDuration / tempBolusCount; for (Long j = 0l; j < tempBolusCount; j++) { - Treatment tempBolusPart = new Treatment(); + Treatment tempBolusPart = new Treatment(insulinInterface); tempBolusPart.insulin = tempBolusSize; Long date = this.timeStart.getTime() + j * tempBolusSpacing * 60 * 1000; tempBolusPart.created_at = new Date(date); - Iob aIOB = tempBolusPart.iobCalc(time, profile.getDia()); + Iob aIOB = insulinInterface.iobCalc(tempBolusPart, time, profile.getDia()); result.basaliob += aIOB.iobContrib; result.activity += aIOB.activityContrib; Double dia_ago = time.getTime() - profile.getDia() * 60 * 60 * 1000; diff --git a/app/src/main/java/info/nightscout/androidaps/db/Treatment.java b/app/src/main/java/info/nightscout/androidaps/db/Treatment.java index a8afacd767..dc933e59ee 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/Treatment.java +++ b/app/src/main/java/info/nightscout/androidaps/db/Treatment.java @@ -11,8 +11,10 @@ import org.slf4j.LoggerFactory; import java.util.Date; import java.util.List; +import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.data.Iob; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.Overview.graphExtensions.DataPointWithLabelInterface; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; @@ -43,12 +45,34 @@ public class Treatment implements DataPointWithLabelInterface { @DatabaseField public Double insulin = 0d; + @DatabaseField + public int insulinType = InsulinInterface.FASTACTINGINSULIN; + + @DatabaseField + public double dia = Constants.defaultDIA; + @DatabaseField public Double carbs = 0d; @DatabaseField public boolean mealBolus = true; // true for meal bolus , false for correction bolus + public Treatment() { + InsulinInterface insulin = MainApp.getConfigBuilder().getActiveInsulin(); + if (insulin != null) { + insulinType = insulin.getId(); + dia = insulin.getDia(); + } else { + insulinType = InsulinInterface.FASTACTINGINSULIN; + dia = Constants.defaultDIA; + } + } + + public Treatment(InsulinInterface insulin) { + insulinType = insulin.getId(); + dia = insulin.getDia(); + } + public void copyFrom(Treatment t) { this._id = t._id; this.created_at = t.created_at; @@ -57,32 +81,6 @@ public class Treatment implements DataPointWithLabelInterface { this.mealBolus = t.mealBolus; } - public Iob iobCalc(Date time, Double dia) { - Iob result = new Iob(); - - Double scaleFactor = 3.0 / dia; - Double peak = 75d; - Double end = 180d; - - if (this.insulin != 0d) { - Long bolusTime = this.created_at.getTime(); - Double minAgo = scaleFactor * (time.getTime() - bolusTime) / 1000d / 60d; - - if (minAgo < peak) { - Double x1 = minAgo / 5d + 1; - result.iobContrib = this.insulin * (1 - 0.001852 * x1 * x1 + 0.001852 * x1); - // units: BG (mg/dL) = (BG/U) * U insulin * scalar - result.activityContrib = this.insulin * (2 / dia / 60 / peak) * minAgo; - - } else if (minAgo < end) { - Double x2 = (minAgo - 75) / 5; - result.iobContrib = this.insulin * (0.001323 * x2 * x2 - 0.054233 * x2 + 0.55556); - result.activityContrib = this.insulin * (2 / dia / 60 - (minAgo - peak) * 2 / dia / 60 / (60 * 3 - peak)); - } - } - return result; - } - public long getMillisecondsFromStart() { return new Date().getTime() - created_at.getTime(); } diff --git a/app/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.java b/app/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.java new file mode 100644 index 0000000000..05261e2916 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/interfaces/InsulinInterface.java @@ -0,0 +1,21 @@ +package info.nightscout.androidaps.interfaces; + +import java.util.Date; + +import info.nightscout.androidaps.data.Iob; +import info.nightscout.androidaps.db.Treatment; + +/** + * Created by mike on 17.04.2017. + */ + +public interface InsulinInterface { + final int FASTACTINGINSULIN = 0; + + int getId(); + String getFriendlyName(); + String getComment(); + int getResourcePicture(); + double getDia(); + public Iob iobCalc(Treatment treatment, Date time, Double dia); +} diff --git a/app/src/main/java/info/nightscout/androidaps/interfaces/PluginBase.java b/app/src/main/java/info/nightscout/androidaps/interfaces/PluginBase.java index 4442b83041..357737aa65 100644 --- a/app/src/main/java/info/nightscout/androidaps/interfaces/PluginBase.java +++ b/app/src/main/java/info/nightscout/androidaps/interfaces/PluginBase.java @@ -15,7 +15,8 @@ public interface PluginBase { int CONSTRAINTS = 7; int LOOP = 8; int BGSOURCE = 9; - int LAST = 10; // keep always highest number + int INSULIN = 10; + int LAST = 11; // keep always highest number int getType(); String getFragmentClass(); diff --git a/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java b/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java index 6b6d8e856f..b9c7e18650 100644 --- a/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java +++ b/app/src/main/java/info/nightscout/androidaps/interfaces/PumpInterface.java @@ -39,7 +39,7 @@ public interface PumpInterface { TempBasal getTempBasal(); TempBasal getExtendedBolus(); - PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context); + PumpEnactResult deliverTreatment(InsulinInterface insulinType, Double insulin, Integer carbs, Context context); void stopBolusDelivering(); PumpEnactResult setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes); PumpEnactResult setTempBasalPercent(Integer percent, Integer durationInMinutes); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java index 8f50ac28e0..dd623c38e9 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java @@ -159,7 +159,7 @@ public class FillDialog extends DialogFragment implements OnClickListener { mHandler.post(new Runnable() { @Override public void run() { - PumpEnactResult result = pump.deliverTreatment(finalInsulinAfterConstraints, 0, context, false); + PumpEnactResult result = pump.deliverTreatment(MainApp.getConfigBuilder().getActiveInsulin(), finalInsulinAfterConstraints, 0, context, false); if (!result.success) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(MainApp.sResources.getString(R.string.treatmentdeliveryerror)); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java index 201b2ac37b..b7032edb5d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java @@ -129,7 +129,7 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte mgdl = SP.getBoolean(SETTINGS_PREFIX + "mgdl", true); mmol = SP.getBoolean(SETTINGS_PREFIX + "mmol", false); - dia = SP.getDouble(SETTINGS_PREFIX + "dia", 3d); + dia = SP.getDouble(SETTINGS_PREFIX + "dia", Constants.defaultDIA); targetLow = SP.getDouble(SETTINGS_PREFIX + "targetlow", 80d); targetHigh = SP.getDouble(SETTINGS_PREFIX + "targethigh", 120d); percentage = SP.getInt(SETTINGS_PREFIX + "percentage", 100); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java index 6436441890..0565cac925 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderFragment.java @@ -21,6 +21,9 @@ import com.crashlytics.android.answers.CustomEvent; import java.util.ArrayList; +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.events.EventConfigBuilderChange; @@ -29,9 +32,11 @@ import info.nightscout.androidaps.interfaces.APSInterface; import info.nightscout.androidaps.interfaces.BgSourceInterface; import info.nightscout.androidaps.interfaces.ConstraintsInterface; import info.nightscout.androidaps.interfaces.FragmentBase; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.PumpInterface; +import info.nightscout.androidaps.plugins.InsulinFastacting.InsulinFastactingPlugin; import info.nightscout.androidaps.plugins.NSProfile.NSProfilePlugin; import info.nightscout.androidaps.plugins.VirtualPump.VirtualPumpPlugin; import info.nightscout.utils.PasswordProtection; @@ -45,23 +50,44 @@ public class ConfigBuilderFragment extends Fragment implements FragmentBase { return configBuilderPlugin; } + @BindView(R.id.configbuilder_insulinlistview) + ListView insulinListView; + @BindView(R.id.configbuilder_bgsourcelistview) ListView bgsourceListView; + @BindView(R.id.configbuilder_pumplistview) ListView pumpListView; + @BindView(R.id.configbuilder_pumplabel) TextView pumpLabel; + @BindView(R.id.configbuilder_looplistview) ListView loopListView; + @BindView(R.id.configbuilder_looplabel) TextView loopLabel; + @BindView(R.id.configbuilder_treatmentslistview) ListView treatmentsListView; + @BindView(R.id.configbuilder_tempslistview) ListView tempsListView; + @BindView(R.id.configbuilder_tempslabel) TextView tempsLabel; + @BindView(R.id.configbuilder_profilelistview) ListView profileListView; + @BindView(R.id.configbuilder_apslistview) ListView apsListView; + @BindView(R.id.configbuilder_apslabel) TextView apsLabel; + @BindView(R.id.configbuilder_constraintslistview) ListView constraintsListView; + @BindView(R.id.configbuilder_constraintslabel) TextView constraintsLabel; + @BindView(R.id.configbuilder_generallistview) ListView generalListView; + @BindView(R.id.configbuilder_nsclientversion) TextView nsclientVerView; + @BindView(R.id.configbuilder_nightscoutversion) TextView nightscoutVerView; + private Unbinder unbinder; + + PluginCustomAdapter insulinDataAdapter = null; PluginCustomAdapter bgsourceDataAdapter = null; PluginCustomAdapter pumpDataAdapter = null; PluginCustomAdapter loopDataAdapter = null; @@ -72,7 +98,9 @@ public class ConfigBuilderFragment extends Fragment implements FragmentBase { PluginCustomAdapter constraintsDataAdapter = null; PluginCustomAdapter generalDataAdapter = null; + @BindView(R.id.configbuilder_mainlayout) LinearLayout mainLayout; + @BindView(R.id.configbuilder_unlock) Button unlock; // TODO: sorting @@ -81,22 +109,8 @@ public class ConfigBuilderFragment extends Fragment implements FragmentBase { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.configbuilder_fragment, container, false); - bgsourceListView = (ListView) view.findViewById(R.id.configbuilder_bgsourcelistview); - pumpListView = (ListView) view.findViewById(R.id.configbuilder_pumplistview); - pumpLabel = (TextView) view.findViewById(R.id.configbuilder_pumplabel); - loopListView = (ListView) view.findViewById(R.id.configbuilder_looplistview); - loopLabel = (TextView) view.findViewById(R.id.configbuilder_looplabel); - treatmentsListView = (ListView) view.findViewById(R.id.configbuilder_treatmentslistview); - tempsListView = (ListView) view.findViewById(R.id.configbuilder_tempslistview); - tempsLabel = (TextView) view.findViewById(R.id.configbuilder_tempslabel); - profileListView = (ListView) view.findViewById(R.id.configbuilder_profilelistview); - apsListView = (ListView) view.findViewById(R.id.configbuilder_apslistview); - apsLabel = (TextView) view.findViewById(R.id.configbuilder_apslabel); - constraintsListView = (ListView) view.findViewById(R.id.configbuilder_constraintslistview); - constraintsLabel = (TextView) view.findViewById(R.id.configbuilder_constraintslabel); - generalListView = (ListView) view.findViewById(R.id.configbuilder_generallistview); - nsclientVerView = (TextView) view.findViewById(R.id.configbuilder_nsclientversion); - nightscoutVerView = (TextView) view.findViewById(R.id.configbuilder_nightscoutversion); + + unbinder = ButterKnife.bind(this, view); nsclientVerView.setText(ConfigBuilderPlugin.nsClientVersionName); nightscoutVerView.setText(ConfigBuilderPlugin.nightscoutVersionName); @@ -105,9 +119,6 @@ public class ConfigBuilderFragment extends Fragment implements FragmentBase { nightscoutVerView.setTextColor(Color.RED); setViews(); - unlock = (Button) view.findViewById(R.id.configbuilder_unlock); - mainLayout = (LinearLayout) view.findViewById(R.id.configbuilder_mainlayout); - if (PasswordProtection.isLocked("settings_password")) { mainLayout.setVisibility(View.GONE); unlock.setOnClickListener(new View.OnClickListener() { @@ -128,7 +139,16 @@ public class ConfigBuilderFragment extends Fragment implements FragmentBase { return view; } + @Override + public void onDestroyView() { + super.onDestroyView(); + unbinder.unbind(); + } + void setViews() { + insulinDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsListByInterface(InsulinInterface.class), PluginBase.INSULIN); + insulinListView.setAdapter(insulinDataAdapter); + setListViewHeightBasedOnChildren(insulinListView); bgsourceDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainApp.getSpecificPluginsListByInterface(BgSourceInterface.class), PluginBase.BGSOURCE); bgsourceListView.setAdapter(bgsourceDataAdapter); setListViewHeightBasedOnChildren(bgsourceListView); @@ -253,7 +273,7 @@ public class ConfigBuilderFragment extends Fragment implements FragmentBase { } // Hide enabled control and force enabled plugin if there is only one plugin available - if (type == PluginBase.PUMP || type == PluginBase.TREATMENT || type == PluginBase.TEMPBASAL || type == PluginBase.PROFILE) + if (type == PluginBase.INSULIN || type == PluginBase.PUMP || type == PluginBase.TREATMENT || type == PluginBase.TEMPBASAL || type == PluginBase.PROFILE) if (pluginList.size() < 2) { holder.checkboxEnabled.setEnabled(false); plugin.setFragmentEnabled(type, true); @@ -299,6 +319,9 @@ public class ConfigBuilderFragment extends Fragment implements FragmentBase { case PluginBase.LOOP: break; // Single selection allowed + case PluginBase.INSULIN: + pluginsInCategory = MainApp.getSpecificPluginsListByInterface(InsulinInterface.class); + break; case PluginBase.APS: pluginsInCategory = MainApp.getSpecificPluginsListByInterface(APSInterface.class); break; @@ -328,6 +351,8 @@ public class ConfigBuilderFragment extends Fragment implements FragmentBase { } else { // enable first plugin in list if (type == PluginBase.PUMP) MainApp.getSpecificPlugin(VirtualPumpPlugin.class).setFragmentEnabled(type, true); + else if (type == PluginBase.INSULIN) + MainApp.getSpecificPlugin(InsulinFastactingPlugin.class).setFragmentEnabled(type, true); else if (type == PluginBase.PROFILE) MainApp.getSpecificPlugin(NSProfilePlugin.class).setFragmentEnabled(type, true); else diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java index 2c42ffaa41..30baa566eb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java @@ -37,6 +37,7 @@ import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.interfaces.APSInterface; import info.nightscout.androidaps.interfaces.BgSourceInterface; import info.nightscout.androidaps.interfaces.ConstraintsInterface; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.PumpDescription; @@ -74,6 +75,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain static TempBasalsInterface activeTempBasals; static APSInterface activeAPS; static LoopPlugin activeLoop; + static InsulinInterface activeInsulin; static public String nightscoutVersionName = ""; static public Integer nightscoutVersionCode = 0; @@ -205,6 +207,10 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain return activeTempBasals; } + public static InsulinInterface getActiveInsulin() { + return activeInsulin; + } + public static APSInterface getActiveAPS() { return activeAPS; } @@ -224,7 +230,8 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain (p.isEnabled(6) ? " PUMP" : "") + (p.isEnabled(7) ? " CONSTRAINTS" : "") + (p.isEnabled(8) ? " LOOP" : "") + - (p.isEnabled(9) ? " BGSOURCE" : "") + (p.isEnabled(9) ? " BGSOURCE" : "") + + (p.isEnabled(10) ? " INSULIN" : "") ); } } @@ -245,7 +252,18 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain } } - // PluginBase.PROFILE + // PluginBase.INSULIN + pluginsInCategory = MainApp.getSpecificPluginsListByInterface(InsulinInterface.class); + activeInsulin = (InsulinInterface) getTheOneEnabledInArray(pluginsInCategory, PluginBase.INSULIN); + if (Config.logConfigBuilder) + log.debug("Selected insulin interface: " + ((PluginBase) activeInsulin).getName()); + for (PluginBase p : pluginsInCategory) { + if (!p.getName().equals(((PluginBase) activeInsulin).getName())) { + p.setFragmentVisible(PluginBase.INSULIN, false); + } + } + + // PluginBase.PROFILE pluginsInCategory = MainApp.getSpecificPluginsListByInterface(ProfileInterface.class); activeProfile = (ProfileInterface) getTheOneEnabledInArray(pluginsInCategory, PluginBase.PROFILE); if (Config.logConfigBuilder) @@ -463,7 +481,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain return null; } - public PumpEnactResult deliverTreatmentFromBolusWizard(Context context, Double insulin, Integer carbs, Double glucose, String glucoseType, int carbTime, JSONObject boluscalc) { + public PumpEnactResult deliverTreatmentFromBolusWizard(InsulinInterface insulinType, Context context, Double insulin, Integer carbs, Double glucose, String glucoseType, int carbTime, JSONObject boluscalc) { mWakeLock.acquire(); PumpEnactResult result; if (activePump != null) { @@ -479,14 +497,14 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain MainApp.bus().post(new EventBolusRequested(insulin)); - result = activePump.deliverTreatment(insulin, carbs, context); + result = activePump.deliverTreatment(insulinType, insulin, carbs, context); BolusProgressDialog.bolusEnded = true; MainApp.bus().post(new EventDismissBolusprogressIfRunning(result)); if (result.success) { - Treatment t = new Treatment(); + Treatment t = new Treatment(insulinType); t.insulin = result.bolusDelivered; if (carbTime == 0) t.carbs = (double) result.carbsDelivered; // with different carbTime record will come back from nightscout @@ -500,7 +518,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain } else { if (Config.logCongigBuilderActions) log.debug("Creating treatment: " + insulin + " carbs: " + carbs); - Treatment t = new Treatment(); + Treatment t = new Treatment(insulinType); t.insulin = insulin; t.carbs = (double) carbs; t.created_at = new Date(); @@ -518,11 +536,11 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain } @Override - public PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context) { - return deliverTreatment(insulin, carbs, context, true); + public PumpEnactResult deliverTreatment(InsulinInterface insulinType, Double insulin, Integer carbs, Context context) { + return deliverTreatment(insulinType, insulin, carbs, context, true); } - public PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context, boolean createTreatment) { + public PumpEnactResult deliverTreatment(InsulinInterface insulinType, Double insulin, Integer carbs, Context context, boolean createTreatment) { mWakeLock.acquire(); PumpEnactResult result; if (activePump != null) { @@ -544,7 +562,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain MainApp.bus().post(new EventBolusRequested(insulin)); - result = activePump.deliverTreatment(insulin, carbs, context); + result = activePump.deliverTreatment(insulinType, insulin, carbs, context); BolusProgressDialog.bolusEnded = true; @@ -554,7 +572,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain log.debug("deliverTreatment insulin: " + insulin + " carbs: " + carbs + " success: " + result.success + " enacted: " + result.enacted + " bolusDelivered: " + result.bolusDelivered); if (result.success && createTreatment) { - Treatment t = new Treatment(); + Treatment t = new Treatment(insulinType); t.insulin = result.bolusDelivered; t.carbs = (double) result.carbsDelivered; t.created_at = new Date(); @@ -566,7 +584,7 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain } else { if (Config.logCongigBuilderActions) log.debug("Creating treatment: " + insulin + " carbs: " + carbs); - Treatment t = new Treatment(); + Treatment t = new Treatment(insulinType); t.insulin = insulin; t.carbs = (double) carbs; t.created_at = new Date(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRPlugin.java index 4a2d9d3a56..2984980090 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRPlugin.java @@ -30,6 +30,7 @@ import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.interfaces.ConstraintsInterface; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.PumpDescription; @@ -357,11 +358,11 @@ public class DanaRPlugin implements PluginBase, PumpInterface, ConstraintsInterf } @Override - public PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context) { + public PumpEnactResult deliverTreatment(InsulinInterface insulinType, Double insulin, Integer carbs, Context context) { ConfigBuilderPlugin configBuilderPlugin = MainApp.getConfigBuilder(); insulin = configBuilderPlugin.applyBolusConstraints(insulin); if (insulin > 0 || carbs > 0) { - Treatment t = new Treatment(); + Treatment t = new Treatment(insulinType); boolean connectionOK = false; if (insulin > 0 || carbs > 0) connectionOK = sExecutionService.bolus(insulin, carbs, t); PumpEnactResult result = new PumpEnactResult(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRPump.java b/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRPump.java index c68bac86ac..65e65b11a5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRPump.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/DanaR/DanaRPump.java @@ -119,7 +119,7 @@ public class DanaRPump { // Evening / 17:00–21:59 // Night / 22:00–5:59 - double dia = SP.getDouble(R.string.key_danarprofile_dia, 3d); + double dia = SP.getDouble(R.string.key_danarprofile_dia, Constants.defaultDIA); try { json.put("defaultProfile", PROFILE_PREFIX + (activeProfile + 1)); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanPlugin.java index 11debc415a..f32cd1a8a1 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanPlugin.java @@ -30,6 +30,7 @@ import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.interfaces.ConstraintsInterface; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.PumpDescription; @@ -358,11 +359,11 @@ public class DanaRKoreanPlugin implements PluginBase, PumpInterface, Constraints } @Override - public PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context) { + public PumpEnactResult deliverTreatment(InsulinInterface insulinType, Double insulin, Integer carbs, Context context) { ConfigBuilderPlugin configBuilderPlugin = MainApp.getConfigBuilder(); insulin = configBuilderPlugin.applyBolusConstraints(insulin); if (insulin > 0 || carbs > 0) { - Treatment t = new Treatment(); + Treatment t = new Treatment(insulinType); boolean connectionOK = false; if (insulin > 0 || carbs > 0) connectionOK = sExecutionService.bolus(insulin, carbs, t); PumpEnactResult result = new PumpEnactResult(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanPump.java b/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanPump.java index 6786cc4c2e..b768c1c2ab 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanPump.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/DanaRKorean/DanaRKoreanPump.java @@ -114,7 +114,7 @@ public class DanaRKoreanPump { // Evening / 17:00–21:59 // Night / 22:00–5:59 - double dia = SP.getDouble(R.string.key_danarprofile_dia, 3d); + double dia = SP.getDouble(R.string.key_danarprofile_dia, Constants.defaultDIA); try { json.put("defaultProfile", PROFILE_PREFIX + (activeProfile + 1)); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/InsulinFastactingFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/InsulinFastactingFragment.java new file mode 100644 index 0000000000..bff8436861 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/InsulinFastactingFragment.java @@ -0,0 +1,19 @@ +package info.nightscout.androidaps.plugins.InsulinFastacting; + +import android.support.v4.app.Fragment; + +import info.nightscout.androidaps.interfaces.FragmentBase; + +/** + * Created by mike on 17.04.2017. + */ + +public class InsulinFastactingFragment extends Fragment implements FragmentBase { + static InsulinFastactingPlugin insulinFastactingPlugin = new InsulinFastactingPlugin(); + + static public InsulinFastactingPlugin getPlugin() { + return insulinFastactingPlugin; + } + + +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/InsulinFastactingPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/InsulinFastactingPlugin.java new file mode 100644 index 0000000000..a43bccf927 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/InsulinFastacting/InsulinFastactingPlugin.java @@ -0,0 +1,124 @@ +package info.nightscout.androidaps.plugins.InsulinFastacting; + +import java.util.Date; + +import info.nightscout.androidaps.Constants; +import info.nightscout.androidaps.MainApp; +import info.nightscout.androidaps.R; +import info.nightscout.androidaps.data.Iob; +import info.nightscout.androidaps.db.Treatment; +import info.nightscout.androidaps.interfaces.InsulinInterface; +import info.nightscout.androidaps.interfaces.PluginBase; +import info.nightscout.androidaps.interfaces.ProfileInterface; + +/** + * Created by mike on 17.04.2017. + */ + +public class InsulinFastactingPlugin implements PluginBase, InsulinInterface { + + private static boolean fragmentEnabled = true; + private static boolean fragmentVisible = false; + + @Override + public int getType() { + return INSULIN; + } + + @Override + public String getFragmentClass() { + return InsulinFastactingFragment.class.getName(); + } + + @Override + public String getName() { + return MainApp.sResources.getString(R.string.fastactinginsulin); + } + + @Override + public String getNameShort() { + return MainApp.sResources.getString(R.string.insulin_shortname); + } + + @Override + public boolean isEnabled(int type) { + return type == INSULIN && fragmentEnabled; + } + + @Override + public boolean isVisibleInTabs(int type) { + return type == INSULIN && fragmentVisible; + } + + @Override + public boolean canBeHidden(int type) { + return true; + } + + @Override + public void setFragmentEnabled(int type, boolean fragmentEnabled) { + if (type == INSULIN) this.fragmentEnabled = fragmentEnabled; + } + + @Override + public void setFragmentVisible(int type, boolean fragmentVisible) { + if (type == INSULIN) this.fragmentVisible = fragmentVisible; + } + + // Insulin interface + @Override + public int getId() { + return FASTACTINGINSULIN; + } + + @Override + public String getFriendlyName() { + return MainApp.sResources.getString(R.string.fastactinginsulin); + } + + @Override + public String getComment() { + return MainApp.sResources.getString(R.string.fastactinginsulincomment); + } + + @Override + public int getResourcePicture() { + return R.drawable.insulin0; + } + + @Override + public double getDia() { + ProfileInterface profileInterface = MainApp.getConfigBuilder().getActiveProfile(); + if (profileInterface.getProfile() != null) + return profileInterface.getProfile().getDia(); + return Constants.defaultDIA; + } + + @Override + public Iob iobCalc(Treatment treatment, Date time, Double dia) { + Iob result = new Iob(); + + Double scaleFactor = 3.0 / dia; + Double peak = 75d; + Double end = 180d; + + if (treatment.insulin != 0d) { + Long bolusTime = treatment.created_at.getTime(); + Double minAgo = scaleFactor * (time.getTime() - bolusTime) / 1000d / 60d; + + if (minAgo < peak) { + Double x1 = minAgo / 5d + 1; + result.iobContrib = treatment.insulin * (1 - 0.001852 * x1 * x1 + 0.001852 * x1); + // units: BG (mg/dL) = (BG/U) * U insulin * scalar + result.activityContrib = treatment.insulin * (2 / dia / 60 / peak) * minAgo; + + } else if (minAgo < end) { + Double x2 = (minAgo - 75) / 5; + result.iobContrib = treatment.insulin * (0.001323 * x2 * x2 - 0.054233 * x2 + 0.55556); + result.activityContrib = treatment.insulin * (2 / dia / 60 - (minAgo - peak) * 2 / dia / 60 / (60 * 3 - peak)); + } + } + return result; + } + +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/LocalProfile/LocalProfilePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/LocalProfile/LocalProfilePlugin.java index a4c65e83dd..44d2ba9397 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/LocalProfile/LocalProfilePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/LocalProfile/LocalProfilePlugin.java @@ -120,7 +120,7 @@ public class LocalProfilePlugin implements PluginBase, ProfileInterface { mgdl = SP.getBoolean("LocalProfile" + "mgdl", false); mmol = SP.getBoolean("LocalProfile" + "mmol", true); - dia = SP.getDouble("LocalProfile" + "dia", 3d); + dia = SP.getDouble("LocalProfile" + "dia", Constants.defaultDIA); try { ic = new JSONArray(SP.getString("LocalProfile" + "ic", DEFAULTARRAY)); } catch (JSONException e1) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/MDI/MDIPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/MDI/MDIPlugin.java index 534a77b766..821249ea83 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/MDI/MDIPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/MDI/MDIPlugin.java @@ -15,6 +15,7 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.db.TempBasal; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpInterface; @@ -183,7 +184,7 @@ public class MDIPlugin implements PluginBase, PumpInterface { } @Override - public PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context) { + public PumpEnactResult deliverTreatment(InsulinInterface insulinType, Double insulin, Integer carbs, Context context) { PumpEnactResult result = new PumpEnactResult(); result.success = true; result.bolusDelivered = insulin; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java index ec25d2a0b0..e97104437d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java @@ -110,7 +110,7 @@ public class NewTreatmentDialog extends DialogFragment implements OnClickListene mHandler.post(new Runnable() { @Override public void run() { - PumpEnactResult result = pump.deliverTreatment(finalInsulinAfterConstraints, finalCarbsAfterConstraints, context); + PumpEnactResult result = pump.deliverTreatment(MainApp.getConfigBuilder().getActiveInsulin(), finalInsulinAfterConstraints, finalCarbsAfterConstraints, context); if (!result.success) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(MainApp.sResources.getString(R.string.treatmentdeliveryerror)); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java index eaebeec73e..20c9c0a0db 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java @@ -314,6 +314,7 @@ public class WizardDialog extends DialogFragment { @Override public void run() { PumpEnactResult result = pump.deliverTreatmentFromBolusWizard( + MainApp.getConfigBuilder().getActiveInsulin(), context, finalInsulinAfterConstraints, finalCarbsAfterConstraints, diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java index 22d5e48b57..b5c7ee298a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java @@ -510,6 +510,7 @@ public class OverviewFragment extends Fragment { @Override public void run() { PumpEnactResult result = pump.deliverTreatmentFromBolusWizard( + MainApp.getConfigBuilder().getActiveInsulin(), getContext(), finalInsulinAfterConstraints, finalCarbsAfterConstraints, diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/SimpleProfile/SimpleProfilePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/SimpleProfile/SimpleProfilePlugin.java index f40d85371e..27548a2bd7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/SimpleProfile/SimpleProfilePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/SimpleProfile/SimpleProfilePlugin.java @@ -118,7 +118,7 @@ public class SimpleProfilePlugin implements PluginBase, ProfileInterface { mgdl = SP.getBoolean("SimpleProfile" + "mgdl", true); mmol = SP.getBoolean("SimpleProfile" + "mmol", false); - dia = SP.getDouble("SimpleProfile" + "dia", 3d); + dia = SP.getDouble("SimpleProfile" + "dia", Constants.defaultDIA); ic = SP.getDouble("SimpleProfile" + "ic", 20d); isf = SP.getDouble("SimpleProfile" + "isf", 200d); basal = SP.getDouble("SimpleProfile" + "basal", 1d); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java index fcaf379af2..e9fcd3b0f6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java @@ -442,7 +442,7 @@ public class SmsCommunicatorPlugin implements PluginBase { PumpInterface pumpInterface = MainApp.getConfigBuilder(); if (pumpInterface != null) { danaRPlugin = (DanaRPlugin) MainApp.getSpecificPlugin(DanaRPlugin.class); - PumpEnactResult result = pumpInterface.deliverTreatment(bolusWaitingForConfirmation.bolusRequested, 0, null); + PumpEnactResult result = pumpInterface.deliverTreatment(MainApp.getConfigBuilder().getActiveInsulin() ,bolusWaitingForConfirmation.bolusRequested, 0, null); if (result.success) { reply = String.format(MainApp.sResources.getString(R.string.smscommunicator_bolusdelivered), result.bolusDelivered); if (danaRPlugin != null) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java index 320aba3956..f1539c4e4c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsFragment.java @@ -38,6 +38,7 @@ import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.interfaces.FragmentBase; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.utils.DateUtil; import info.nightscout.utils.DecimalFormatter; @@ -81,12 +82,13 @@ public class TreatmentsFragment extends Fragment implements View.OnClickListener if (MainApp.getConfigBuilder() == null || MainApp.getConfigBuilder().getActiveProfile() == null) // app not initialized yet return; NSProfile profile = MainApp.getConfigBuilder().getActiveProfile().getProfile(); - if (profile == null) + InsulinInterface insulinInterface = MainApp.getConfigBuilder().getActiveInsulin(); + if (profile == null || insulinInterface == null) return; holder.date.setText(DateUtil.dateAndTimeString(treatments.get(position).created_at)); holder.insulin.setText(DecimalFormatter.to2Decimal(treatments.get(position).insulin) + " U"); holder.carbs.setText(DecimalFormatter.to0Decimal(treatments.get(position).carbs) + " g"); - Iob iob = treatments.get(position).iobCalc(new Date(), profile.getDia()); + Iob iob = insulinInterface.iobCalc(treatments.get(position), new Date(), profile.getDia()); holder.iob.setText(DecimalFormatter.to2Decimal(iob.iobContrib) + " U"); holder.activity.setText(DecimalFormatter.to3Decimal(iob.activityContrib) + " U"); holder.mealOrCorrection.setText(treatments.get(position).mealBolus ? MainApp.sResources.getString(R.string.mealbolus) : MainApp.sResources.getString(R.string.correctionbous)); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java index c49e26553e..9f1bed187f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Treatments/TreatmentsPlugin.java @@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory; import java.util.Date; import java.util.List; +import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.Iob; @@ -15,6 +16,7 @@ import info.nightscout.androidaps.data.IobTotal; import info.nightscout.androidaps.data.MealData; import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.events.EventTreatmentChange; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.TreatmentsInterface; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; @@ -92,7 +94,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface { } public void initializeData() { - double dia = 3; + double dia = Constants.defaultDIA; 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)); @@ -120,6 +122,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface { if (MainApp.getConfigBuilder() == null || ConfigBuilderPlugin.getActiveProfile() == null) // app not initialized yet return total; NSProfile profile = ConfigBuilderPlugin.getActiveProfile().getProfile(); + InsulinInterface insulinInterface = MainApp.getConfigBuilder().getActiveInsulin(); if (profile == null) return total; @@ -129,10 +132,10 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface { for (Integer pos = 0; pos < treatments.size(); pos++) { Treatment t = treatments.get(pos); if (t.created_at.getTime() > time) continue; - Iob tIOB = t.iobCalc(now, dia); + Iob tIOB = insulinInterface.iobCalc(t, now, dia); total.iob += tIOB.iobContrib; total.activity += tIOB.activityContrib; - Iob bIOB = t.iobCalc(now, dia / SP.getInt("openapsama_bolussnooze_dia_divisor", 2)); + Iob bIOB = insulinInterface.iobCalc(t, now, dia / SP.getInt("openapsama_bolussnooze_dia_divisor", 2)); total.bolussnooze += bIOB.iobContrib; } return total; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/VirtualPump/VirtualPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/VirtualPump/VirtualPumpPlugin.java index 2e3a802a7a..f99b237eab 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/VirtualPump/VirtualPumpPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/VirtualPump/VirtualPumpPlugin.java @@ -18,6 +18,7 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.db.TempBasal; +import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpInterface; @@ -219,7 +220,7 @@ public class VirtualPumpPlugin implements PluginBase, PumpInterface { } @Override - public PumpEnactResult deliverTreatment(Double insulin, Integer carbs, Context context) { + public PumpEnactResult deliverTreatment(InsulinInterface insulinType, Double insulin, Integer carbs, Context context) { PumpEnactResult result = new PumpEnactResult(); result.success = true; result.bolusDelivered = insulin; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java index ba93968e78..682073d42f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java @@ -384,7 +384,7 @@ public class ActionStringHandler { handler.post(new Runnable() { @Override public void run() { - PumpEnactResult result = MainApp.getConfigBuilder().deliverTreatment(amount, 0, null, false); + PumpEnactResult result = MainApp.getConfigBuilder().deliverTreatment(MainApp.getConfigBuilder().getActiveInsulin(), amount, 0, null, false); if (!result.success) { sendError(MainApp.sResources.getString(R.string.treatmentdeliveryerror) + "\n" + @@ -400,7 +400,7 @@ public class ActionStringHandler { handler.post(new Runnable() { @Override public void run() { - PumpEnactResult result = MainApp.getConfigBuilder().deliverTreatment(amount, carbs, null, true); + PumpEnactResult result = MainApp.getConfigBuilder().deliverTreatment(MainApp.getConfigBuilder().getActiveInsulin(), amount, carbs, null, true); if (!result.success) { sendError(MainApp.sResources.getString(R.string.treatmentdeliveryerror) + "\n" + diff --git a/app/src/main/res/drawable/insulin0.png b/app/src/main/res/drawable/insulin0.png new file mode 100644 index 0000000000..f0cbe937f8 Binary files /dev/null and b/app/src/main/res/drawable/insulin0.png differ diff --git a/app/src/main/res/layout/configbuilder_fragment.xml b/app/src/main/res/layout/configbuilder_fragment.xml index 5be24ddefb..7e7aaea0a1 100644 --- a/app/src/main/res/layout/configbuilder_fragment.xml +++ b/app/src/main/res/layout/configbuilder_fragment.xml @@ -25,6 +25,23 @@ android:layout_height="match_parent" android:orientation="vertical"> + + + + + Log app start to NS ns_logappstartedevent Exiting application to apply settings. + Insulin + Fast Acting Insulin + Novorapid, Novolog, Humalog + INS