Merge remote-tracking branch 'origin/dev' into develop
* origin/dev: (35 commits) fix displaying target in mmol Profile.getValuesList: don't add trailing newline. Fix some warnings. Use OK/Cancel buttons for profile removal dialog. static variables -> object variables Avoid npe if no string is assigned to the profile switch isValid implementation Show profile on tap in Treatments->ProfileSwitch Check for tempbasal not RealTempbasla Overlapping interval - regard first element on cut AcceptTempButton visible show notification on toast alarm parse 12h format properly fix index Show profile switch button in profiles set pump time only if needed restrict DIA for expectedDelta Overlappinginterfals - find first element Extract method Profile.toTargetRangeString. Simplify. ... # Conflicts: # app/src/main/java/info/nightscout/androidaps/PreferencesActivity.java
This commit is contained in:
commit
bffcd3ceee
|
@ -32,6 +32,9 @@ import info.nightscout.androidaps.plugins.ConstraintsObjectives.ObjectivesFragme
|
|||
import info.nightscout.androidaps.plugins.ConstraintsSafety.SafetyPlugin;
|
||||
import info.nightscout.androidaps.plugins.InsulinFastacting.InsulinFastactingFragment;
|
||||
import info.nightscout.androidaps.plugins.InsulinFastactingProlonged.InsulinFastactingProlongedFragment;
|
||||
import info.nightscout.androidaps.plugins.InsulinOrefCurves.InsulinOrefFreePeakFragment;
|
||||
import info.nightscout.androidaps.plugins.InsulinOrefCurves.InsulinOrefRapidActingFragment;
|
||||
import info.nightscout.androidaps.plugins.InsulinOrefCurves.InsulinOrefUltraRapidActingFragment;
|
||||
import info.nightscout.androidaps.plugins.IobCobCalculator.IobCobCalculatorPlugin;
|
||||
import info.nightscout.androidaps.plugins.Loop.LoopFragment;
|
||||
import info.nightscout.androidaps.plugins.NSClientInternal.NSClientInternalFragment;
|
||||
|
@ -114,6 +117,9 @@ public class MainApp extends Application {
|
|||
if (Config.ACTION) pluginsList.add(ActionsFragment.getPlugin());
|
||||
pluginsList.add(InsulinFastactingFragment.getPlugin());
|
||||
pluginsList.add(InsulinFastactingProlongedFragment.getPlugin());
|
||||
pluginsList.add(InsulinOrefRapidActingFragment.getPlugin());
|
||||
pluginsList.add(InsulinOrefUltraRapidActingFragment.getPlugin());
|
||||
pluginsList.add(InsulinOrefFreePeakFragment.getPlugin());
|
||||
pluginsList.add(SensitivityOref0Plugin.getPlugin());
|
||||
pluginsList.add(SensitivityAAPSPlugin.getPlugin());
|
||||
pluginsList.add(SensitivityWeightedAveragePlugin.getPlugin());
|
||||
|
|
|
@ -15,6 +15,7 @@ import info.nightscout.androidaps.events.EventPreferenceChange;
|
|||
import info.nightscout.androidaps.events.EventRefreshGui;
|
||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||
import info.nightscout.androidaps.plugins.PumpCombo.ComboPlugin;
|
||||
import info.nightscout.androidaps.plugins.InsulinOrefCurves.InsulinOrefFreePeakPlugin;
|
||||
import info.nightscout.androidaps.plugins.PumpDanaR.BluetoothDevicePreference;
|
||||
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin;
|
||||
import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin;
|
||||
|
@ -146,6 +147,11 @@ public class PreferencesActivity extends PreferenceActivity implements SharedPre
|
|||
if (virtualPumpPlugin != null && virtualPumpPlugin.isEnabled(PluginBase.PUMP)) {
|
||||
addPreferencesFromResource(R.xml.pref_virtualpump);
|
||||
}
|
||||
InsulinOrefFreePeakPlugin insulinOrefFreePeakPlugin = (InsulinOrefFreePeakPlugin) MainApp.getSpecificPlugin(InsulinOrefFreePeakPlugin.class);
|
||||
if(insulinOrefFreePeakPlugin.isEnabled(PluginBase.INSULIN)){
|
||||
addPreferencesFromResource(R.xml.pref_insulinoreffreepeak);
|
||||
}
|
||||
|
||||
NSClientInternalPlugin nsClientInternalPlugin = (NSClientInternalPlugin) MainApp.getSpecificPlugin(NSClientInternalPlugin.class);
|
||||
if (nsClientInternalPlugin != null && nsClientInternalPlugin.isEnabled(PluginBase.GENERAL)) {
|
||||
addPreferencesFromResource(R.xml.pref_nsclientinternal);
|
||||
|
|
|
@ -37,6 +37,7 @@ import info.nightscout.androidaps.plugins.SourceNSClient.SourceNSClientPlugin;
|
|||
import info.nightscout.androidaps.plugins.SourceXdrip.SourceXdripPlugin;
|
||||
import info.nightscout.androidaps.receivers.DataReceiver;
|
||||
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSDeviceStatus;
|
||||
import info.nightscout.utils.BundleLogger;
|
||||
import info.nightscout.utils.SP;
|
||||
|
||||
|
||||
|
@ -56,7 +57,7 @@ public class DataService extends IntentService {
|
|||
@Override
|
||||
protected void onHandleIntent(final Intent intent) {
|
||||
if (Config.logFunctionCalls)
|
||||
log.debug("onHandleIntent " + intent);
|
||||
log.debug("onHandleIntent " + BundleLogger.log(intent.getExtras()));
|
||||
|
||||
if (ConfigBuilderPlugin.getActiveBgSource().getClass().equals(SourceXdripPlugin.class)) {
|
||||
xDripEnabled = true;
|
||||
|
|
|
@ -22,12 +22,12 @@ public class DetailedBolusInfo {
|
|||
public double insulin = 0;
|
||||
public double carbs = 0;
|
||||
public int source = Source.NONE;
|
||||
public boolean isValid = true;
|
||||
public double glucose = 0; // Bg value in current units
|
||||
public String glucoseType = ""; // NS values: Manual, Finger, Sensor
|
||||
public int carbTime = 0; // time shift of carbs in minutes
|
||||
public JSONObject boluscalc = null; // additional bolus wizard info
|
||||
public Context context = null; // context for progress dialog
|
||||
public boolean addToTreatments = true;
|
||||
public long pumpId = 0; // id of record if comming from pump history (not a newly created treatment)
|
||||
public boolean isSMB = false; // is a Super-MicroBolus
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ public class OverlappingIntervals<T extends Interval> extends Intervals<T> {
|
|||
boolean needToCut = false;
|
||||
long cutTime = 0;
|
||||
|
||||
for (int index = rawData.size()-1; index > 0; index--) { //begin with newest
|
||||
for (int index = rawData.size()-1; index >= 0; index--) { //begin with newest
|
||||
Interval cur = rawData.valueAt(index);
|
||||
if (cur.isEndingEvent()){
|
||||
needToCut = true;
|
||||
|
@ -31,7 +31,7 @@ public class OverlappingIntervals<T extends Interval> extends Intervals<T> {
|
|||
|
||||
@Nullable
|
||||
public synchronized T getValueByInterval(long time) {
|
||||
for (int index = rawData.size()-1; index > 0; index--) { //begin with newest
|
||||
for (int index = rawData.size()-1; index >= 0; index--) { //begin with newest
|
||||
T cur = rawData.valueAt(index);
|
||||
if (cur.match(time)){
|
||||
return cur;
|
||||
|
|
|
@ -212,7 +212,8 @@ public class Profile {
|
|||
retValue += format.format(o2.getDouble("value"));
|
||||
}
|
||||
retValue += " " + units;
|
||||
retValue += "\n";
|
||||
if (index + 1 < array.length())
|
||||
retValue += "\n";
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -391,4 +392,10 @@ public class Profile {
|
|||
if (units.equals(Constants.MGDL)) return DecimalFormatter.to0Decimal(valueInMgdl);
|
||||
else return DecimalFormatter.to1Decimal(valueInMmol);
|
||||
}
|
||||
|
||||
// targets are stored in mg/dl
|
||||
public static String toTargetRangeString(double low, double high, String units) {
|
||||
if (low == high) return toUnitsString(low, Profile.fromMgdlToUnits(low, Constants.MMOL), units);
|
||||
else return toUnitsString(low, Profile.fromMgdlToUnits(low, Constants.MMOL), units) + " - " + toUnitsString(high, Profile.fromMgdlToUnits(high, Constants.MMOL), units);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -598,6 +598,16 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
|
|||
scheduleTreatmentChange();
|
||||
}
|
||||
|
||||
public void update(Treatment treatment) {
|
||||
try {
|
||||
getDaoTreatments().update(treatment);
|
||||
updateEarliestDataChange(treatment.date);
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
scheduleTreatmentChange();
|
||||
}
|
||||
|
||||
public void deleteTreatmentById(String _id) {
|
||||
Treatment stored = findTreatmentById(_id);
|
||||
if (stored != null) {
|
||||
|
|
|
@ -181,6 +181,8 @@ public class Treatment implements DataPointWithLabelInterface {
|
|||
// ----------------- DataPointInterface end --------------------
|
||||
|
||||
public Iob iobCalc(long time, double dia) {
|
||||
if (!isValid)
|
||||
return new Iob();
|
||||
InsulinInterface insulinInterface = MainApp.getInsulinIterfaceById(insulinInterfaceID);
|
||||
if (insulinInterface == null)
|
||||
insulinInterface = ConfigBuilderPlugin.getActiveInsulin();
|
||||
|
|
|
@ -12,6 +12,10 @@ import info.nightscout.androidaps.db.Treatment;
|
|||
public interface InsulinInterface {
|
||||
final int FASTACTINGINSULIN = 0;
|
||||
final int FASTACTINGINSULINPROLONGED = 1;
|
||||
final int OREF_RAPID_ACTING = 2;
|
||||
final int OREF_ULTRA_RAPID_ACTING = 3;
|
||||
final int OREF_FREE_PEAK = 4;
|
||||
|
||||
|
||||
int getId();
|
||||
String getFriendlyName();
|
||||
|
|
|
@ -215,7 +215,7 @@ public class ActionsFragment extends SubscriberFragment implements View.OnClickL
|
|||
}
|
||||
break;
|
||||
case R.id.actions_canceltempbasal:
|
||||
if (MainApp.getConfigBuilder().isInHistoryRealTempBasalInProgress()) {
|
||||
if (MainApp.getConfigBuilder().isTempBasalInProgress()) {
|
||||
sHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
|
|
@ -164,8 +164,8 @@ public class FillDialog extends DialogFragment implements OnClickListener {
|
|||
DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo();
|
||||
detailedBolusInfo.insulin = finalInsulinAfterConstraints;
|
||||
detailedBolusInfo.context = context;
|
||||
detailedBolusInfo.addToTreatments = false;
|
||||
detailedBolusInfo.source = Source.NONE;
|
||||
detailedBolusInfo.isValid = false; // do not count it in IOB (for pump history)
|
||||
PumpEnactResult result = pump.deliverTreatment(detailedBolusInfo);
|
||||
if (!result.success) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
|
|
|
@ -887,10 +887,8 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
|
|||
@Override
|
||||
// return true if new record is created
|
||||
public boolean addToHistoryTreatment(DetailedBolusInfo detailedBolusInfo) {
|
||||
if (!detailedBolusInfo.addToTreatments)
|
||||
return false;
|
||||
boolean newRecordCreated = activeTreatments.addToHistoryTreatment(detailedBolusInfo);
|
||||
if (newRecordCreated)
|
||||
if (newRecordCreated && detailedBolusInfo.isValid)
|
||||
NSUpload.uploadBolusWizardRecord(detailedBolusInfo);
|
||||
return newRecordCreated;
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ public class DetailedBolusInfoStorage {
|
|||
public static DetailedBolusInfo findDetailedBolusInfo(long bolustime) {
|
||||
DetailedBolusInfo found = null;
|
||||
for (int i = 0; i < store.size(); i++) {
|
||||
long infoTime = store.get(0).date;
|
||||
long infoTime = store.get(i).date;
|
||||
log.debug("Existing info: " + new Date(infoTime).toLocaleString());
|
||||
if (bolustime > infoTime - 60 * 1000 && bolustime < infoTime + 60 * 1000) {
|
||||
found = store.get(i);
|
||||
|
|
|
@ -21,7 +21,6 @@ import info.nightscout.androidaps.interfaces.InsulinInterface;
|
|||
*/
|
||||
|
||||
public class ActivityGraph extends GraphView {
|
||||
|
||||
Context context;
|
||||
|
||||
public ActivityGraph(Context context) {
|
||||
|
@ -35,6 +34,8 @@ public class ActivityGraph extends GraphView {
|
|||
}
|
||||
|
||||
public void show(InsulinInterface insulin) {
|
||||
removeAllSeries();
|
||||
mSecondScale = null;
|
||||
double dia = insulin.getDia();
|
||||
int hours = (int) Math.floor(dia + 1);
|
||||
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
package info.nightscout.androidaps.plugins.InsulinOrefCurves;
|
||||
|
||||
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.plugins.Overview.Notification;
|
||||
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
|
||||
|
||||
/**
|
||||
* Created by adrian on 13.08.2017.
|
||||
*/
|
||||
|
||||
public abstract class InsulinOrefBasePlugin implements PluginBase, InsulinInterface {
|
||||
|
||||
public static double MIN_DIA = 5;
|
||||
|
||||
long lastWarned = 0;
|
||||
|
||||
@Override
|
||||
public int getType() {
|
||||
return INSULIN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNameShort() {
|
||||
return MainApp.sResources.getString(R.string.insulin_shortname);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeHidden(int type) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasFragment() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean showInList(int type) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDia() {
|
||||
double dia = getUserDefinedDia();
|
||||
if(dia >= MIN_DIA){
|
||||
return dia;
|
||||
} else {
|
||||
if((System.currentTimeMillis() - lastWarned) > 60*1000) {
|
||||
lastWarned = System.currentTimeMillis();
|
||||
Notification notification = new Notification(Notification.SHORT_DIA, String.format(MainApp.sResources.getString(R.string.dia_too_short), dia, MIN_DIA), Notification.URGENT);
|
||||
MainApp.bus().post(new EventNewNotification(notification));
|
||||
}
|
||||
return MIN_DIA;
|
||||
}
|
||||
}
|
||||
|
||||
public double getUserDefinedDia() {
|
||||
return MainApp.getConfigBuilder().getProfile() != null ? MainApp.getConfigBuilder().getProfile().getDia() : Constants.defaultDIA;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iob iobCalcForTreatment(Treatment treatment, long time, Double dia) {
|
||||
Iob result = new Iob();
|
||||
|
||||
int peak = getPeak();
|
||||
|
||||
|
||||
if (treatment.insulin != 0d) {
|
||||
|
||||
long bolusTime = treatment.date;
|
||||
double t = (time - bolusTime) / 1000d / 60d;
|
||||
|
||||
double td = getDia()*60; //getDIA() always > 5
|
||||
double tp = peak;
|
||||
|
||||
// force the IOB to 0 if over DIA hours have passed
|
||||
if (t < td) {
|
||||
double tau = tp * (1 - tp / td) / (1 - 2 * tp / td);
|
||||
double a = 2 * tau / td;
|
||||
double S = 1 / (1 - a + (1 + a) * Math.exp(-td / tau));
|
||||
result.activityContrib = treatment.insulin * (S / Math.pow(tau, 2)) * t * (1 - t / td) * Math.exp(-t / tau);
|
||||
result.iobContrib = treatment.insulin * (1 - S * (1 - a) * ((Math.pow(t, 2) / (tau * td * (1 - a)) - t / tau - 1) * Math.exp(-t / tau) + 1));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComment() {
|
||||
String comment = commentStandardText();
|
||||
double userDia = getUserDefinedDia();
|
||||
if(userDia < MIN_DIA){
|
||||
comment += "\n" + String.format(MainApp.sResources.getString(R.string.dia_too_short), userDia, MIN_DIA);
|
||||
}
|
||||
return comment;
|
||||
}
|
||||
|
||||
abstract int getPeak();
|
||||
|
||||
abstract String commentStandardText();
|
||||
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
package info.nightscout.androidaps.plugins.InsulinOrefCurves;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.plugins.InsulinFastacting.ActivityGraph;
|
||||
|
||||
/**
|
||||
* Created by adrian on 14/08/17.
|
||||
*/
|
||||
|
||||
public class InsulinOrefFreePeakFragment extends Fragment {
|
||||
|
||||
static InsulinOrefFreePeakPlugin insulinPlugin = new InsulinOrefFreePeakPlugin();
|
||||
|
||||
static public InsulinOrefFreePeakPlugin getPlugin() {
|
||||
return insulinPlugin;
|
||||
}
|
||||
|
||||
TextView insulinName;
|
||||
TextView insulinComment;
|
||||
TextView insulinDia;
|
||||
ActivityGraph insulinGraph;
|
||||
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.insulin_fragment, container, false);
|
||||
|
||||
insulinName = (TextView) view.findViewById(R.id.insulin_name);
|
||||
insulinComment = (TextView) view.findViewById(R.id.insulin_comment);
|
||||
insulinDia = (TextView) view.findViewById(R.id.insulin_dia);
|
||||
insulinGraph = (ActivityGraph) view.findViewById(R.id.insuling_graph);
|
||||
|
||||
updateGUI();
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
updateGUI();
|
||||
}
|
||||
|
||||
private void updateGUI() {
|
||||
insulinName.setText(insulinPlugin.getFriendlyName());
|
||||
insulinComment.setText(insulinPlugin.getComment());
|
||||
insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinPlugin.getDia()).toString() + "h");
|
||||
insulinGraph.show(insulinPlugin);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
package info.nightscout.androidaps.plugins.InsulinOrefCurves;
|
||||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.utils.SP;
|
||||
|
||||
/**
|
||||
* Created by adrian on 14/08/17.
|
||||
*/
|
||||
|
||||
public class InsulinOrefFreePeakPlugin extends InsulinOrefBasePlugin {
|
||||
|
||||
private static boolean fragmentEnabled = false;
|
||||
private static boolean fragmentVisible = false;
|
||||
|
||||
public static final int DEFAULT_PEAK = 75;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return OREF_FREE_PEAK;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return MainApp.sResources.getString(R.string.free_peak_oref);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFragmentClass() {
|
||||
return InsulinOrefFreePeakFragment.class.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFriendlyName() {
|
||||
return MainApp.sResources.getString(R.string.free_peak_oref);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String commentStandardText() {
|
||||
return MainApp.sResources.getString(R.string.insulin_peak_time) + ": " + getPeak();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled(int type) {
|
||||
return type == INSULIN && fragmentEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisibleInTabs(int type) {
|
||||
return type == INSULIN && fragmentVisible;
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getPeak() {
|
||||
return SP.getInt(R.string.key_insulin_oref_peak, DEFAULT_PEAK);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
package info.nightscout.androidaps.plugins.InsulinOrefCurves;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.plugins.InsulinFastacting.ActivityGraph;
|
||||
|
||||
/**
|
||||
* Created by adrian on 14/08/17.
|
||||
*/
|
||||
|
||||
public class InsulinOrefRapidActingFragment extends Fragment {
|
||||
|
||||
static InsulinOrefRapidActingPlugin insulinPlugin = new InsulinOrefRapidActingPlugin();
|
||||
|
||||
static public InsulinOrefRapidActingPlugin getPlugin() {
|
||||
return insulinPlugin;
|
||||
}
|
||||
|
||||
TextView insulinName;
|
||||
TextView insulinComment;
|
||||
TextView insulinDia;
|
||||
ActivityGraph insulinGraph;
|
||||
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.insulin_fragment, container, false);
|
||||
|
||||
insulinName = (TextView) view.findViewById(R.id.insulin_name);
|
||||
insulinComment = (TextView) view.findViewById(R.id.insulin_comment);
|
||||
insulinDia = (TextView) view.findViewById(R.id.insulin_dia);
|
||||
insulinGraph = (ActivityGraph) view.findViewById(R.id.insuling_graph);
|
||||
|
||||
updateGUI();
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
updateGUI();
|
||||
}
|
||||
|
||||
private void updateGUI() {
|
||||
insulinName.setText(insulinPlugin.getFriendlyName());
|
||||
insulinComment.setText(insulinPlugin.getComment());
|
||||
insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinPlugin.getDia()).toString() + "h");
|
||||
insulinGraph.show(insulinPlugin);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package info.nightscout.androidaps.plugins.InsulinOrefCurves;
|
||||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
|
||||
/**
|
||||
* Created by adrian on 14/08/17.
|
||||
*/
|
||||
|
||||
public class InsulinOrefRapidActingPlugin extends InsulinOrefBasePlugin {
|
||||
|
||||
private static boolean fragmentEnabled = false;
|
||||
private static boolean fragmentVisible = false;
|
||||
|
||||
public static final int PEAK = 75;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return OREF_RAPID_ACTING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return MainApp.sResources.getString(R.string.rapid_acting_oref);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFragmentClass() {
|
||||
return InsulinOrefRapidActingFragment.class.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFriendlyName() {
|
||||
return MainApp.sResources.getString(R.string.rapid_acting_oref);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String commentStandardText() {
|
||||
return MainApp.sResources.getString(R.string.fastactinginsulincomment);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled(int type) {
|
||||
return type == INSULIN && fragmentEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisibleInTabs(int type) {
|
||||
return type == INSULIN && fragmentVisible;
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getPeak() {
|
||||
return PEAK;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
package info.nightscout.androidaps.plugins.InsulinOrefCurves;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.plugins.InsulinFastacting.ActivityGraph;
|
||||
|
||||
/**
|
||||
* Created by adrian on 14/08/17.
|
||||
*/
|
||||
|
||||
public class InsulinOrefUltraRapidActingFragment extends Fragment {
|
||||
|
||||
static InsulinOrefUltraRapidActingPlugin insulinPlugin = new InsulinOrefUltraRapidActingPlugin();
|
||||
|
||||
static public InsulinOrefUltraRapidActingPlugin getPlugin() {
|
||||
return insulinPlugin;
|
||||
}
|
||||
|
||||
TextView insulinName;
|
||||
TextView insulinComment;
|
||||
TextView insulinDia;
|
||||
ActivityGraph insulinGraph;
|
||||
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.insulin_fragment, container, false);
|
||||
|
||||
insulinName = (TextView) view.findViewById(R.id.insulin_name);
|
||||
insulinComment = (TextView) view.findViewById(R.id.insulin_comment);
|
||||
insulinDia = (TextView) view.findViewById(R.id.insulin_dia);
|
||||
insulinGraph = (ActivityGraph) view.findViewById(R.id.insuling_graph);
|
||||
|
||||
updateGUI();
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
updateGUI();
|
||||
}
|
||||
|
||||
private void updateGUI() {
|
||||
insulinName.setText(insulinPlugin.getFriendlyName());
|
||||
insulinComment.setText(insulinPlugin.getComment());
|
||||
insulinDia.setText(MainApp.sResources.getText(R.string.dia) + " " + new Double(insulinPlugin.getDia()).toString() + "h");
|
||||
insulinGraph.show(insulinPlugin);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package info.nightscout.androidaps.plugins.InsulinOrefCurves;
|
||||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
|
||||
/**
|
||||
* Created by adrian on 14/08/17.
|
||||
*/
|
||||
|
||||
public class InsulinOrefUltraRapidActingPlugin extends InsulinOrefBasePlugin {
|
||||
|
||||
private static boolean fragmentEnabled = false;
|
||||
private static boolean fragmentVisible = false;
|
||||
|
||||
public static final int PEAK = 55;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return OREF_ULTRA_RAPID_ACTING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return MainApp.sResources.getString(R.string.ultrarapid_oref);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFragmentClass() {
|
||||
return InsulinOrefUltraRapidActingFragment.class.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFriendlyName() {
|
||||
return MainApp.sResources.getString(R.string.ultrarapid_oref);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String commentStandardText() {
|
||||
return MainApp.sResources.getString(R.string.ultrafastactinginsulincomment);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled(int type) {
|
||||
return type == INSULIN && fragmentEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisibleInTabs(int type) {
|
||||
return type == INSULIN && fragmentVisible;
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getPeak() {
|
||||
return PEAK;
|
||||
}
|
||||
}
|
|
@ -208,7 +208,7 @@ public class DetermineBasalAdapterAMAJS {
|
|||
|
||||
mProfile = new V8Object(mV8rt);
|
||||
mProfile.add("max_iob", maxIob);
|
||||
mProfile.add("dia", profile.getDia());
|
||||
mProfile.add("dia", Math.min(profile.getDia(), 3d));
|
||||
mProfile.add("type", "current");
|
||||
mProfile.add("max_daily_basal", profile.getMaxDailyBasal());
|
||||
mProfile.add("max_basal", maxBasal);
|
||||
|
|
|
@ -231,7 +231,7 @@ public class DetermineBasalAdapterMAJS {
|
|||
String units = profile.getUnits();
|
||||
|
||||
mProfile.add("max_iob", maxIob);
|
||||
mProfile.add("dia", profile.getDia());
|
||||
mProfile.add("dia", Math.min(profile.getDia(), 3d));
|
||||
mProfile.add("type", "current");
|
||||
mProfile.add("max_daily_basal", profile.getMaxDailyBasal());
|
||||
mProfile.add("max_basal", maxBasal);
|
||||
|
|
|
@ -47,6 +47,9 @@ public class Notification {
|
|||
public static final int NSANNOUNCEMENT = 18;
|
||||
public static final int NSALARM = 19;
|
||||
public static final int NSURGENTALARM = 20;
|
||||
public static final int SHORT_DIA = 21;
|
||||
public static final int TOAST_ALARM = 22;
|
||||
|
||||
|
||||
public int id;
|
||||
public Date date;
|
||||
|
|
|
@ -952,19 +952,11 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
|
|||
tempTargetView.setTextColor(Color.BLACK);
|
||||
tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetBackground));
|
||||
tempTargetView.setVisibility(View.VISIBLE);
|
||||
if (tempTarget.low == tempTarget.high)
|
||||
tempTargetView.setText(Profile.toUnitsString(tempTarget.low, Profile.fromMgdlToUnits(tempTarget.low, units), units));
|
||||
else
|
||||
tempTargetView.setText(Profile.toUnitsString(tempTarget.low, Profile.fromMgdlToUnits(tempTarget.low, units), units) + " - " + Profile.toUnitsString(tempTarget.high, Profile.fromMgdlToUnits(tempTarget.high, units), units));
|
||||
tempTargetView.setText(Profile.toTargetRangeString(tempTarget.low, tempTarget.high, units));
|
||||
} else {
|
||||
tempTargetView.setTextColor(Color.WHITE);
|
||||
tempTargetView.setBackgroundColor(MainApp.sResources.getColor(R.color.tempTargetDisabledBackground));
|
||||
double low = MainApp.getConfigBuilder().getProfile().getTargetLow();
|
||||
double high = MainApp.getConfigBuilder().getProfile().getTargetHigh();
|
||||
if (low == high)
|
||||
tempTargetView.setText("" + low);
|
||||
else
|
||||
tempTargetView.setText(low + " - " + high);
|
||||
tempTargetView.setText(Profile.toTargetRangeString(profile.getTargetLow(), profile.getTargetHigh(), units));
|
||||
tempTargetView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
if (Config.NSCLIENT && tempTarget == null) {
|
||||
|
@ -1605,7 +1597,9 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
|
|||
List<Treatment> treatments = MainApp.getConfigBuilder().getTreatmentsFromHistory();
|
||||
|
||||
for (int tx = 0; tx < treatments.size(); tx++) {
|
||||
DataPointWithLabelInterface t = treatments.get(tx);
|
||||
Treatment t = treatments.get(tx);
|
||||
if (!t.isValid)
|
||||
continue;
|
||||
if (t.getX() < fromTime || t.getX() > endTime) continue;
|
||||
t.setY(getNearestBg((long) t.getX(), bgReadingsArray));
|
||||
filteredTreatments.add(t);
|
||||
|
|
|
@ -500,9 +500,13 @@ public class CircadianPercentageProfileFragment extends SubscriberFragment {
|
|||
activity.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended() || !MainApp.getConfigBuilder().getPumpDescription().isSetBasalProfileCapable) {
|
||||
if (!MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended()) {
|
||||
profileswitchButton.setVisibility(View.GONE);
|
||||
} else if (!MainApp.getConfigBuilder().getPumpDescription().isSetBasalProfileCapable) {
|
||||
profileswitchButton.setText(MainApp.instance().getText(R.string.activate_profile));
|
||||
profileswitchButton.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
profileswitchButton.setText(MainApp.instance().getText(R.string.send_to_pump));
|
||||
profileswitchButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -148,9 +148,13 @@ public class LocalProfileFragment extends SubscriberFragment {
|
|||
activity.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended() || !MainApp.getConfigBuilder().getPumpDescription().isSetBasalProfileCapable) {
|
||||
if (!MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended()) {
|
||||
profileswitchButton.setVisibility(View.GONE);
|
||||
} else if (!MainApp.getConfigBuilder().getPumpDescription().isSetBasalProfileCapable) {
|
||||
profileswitchButton.setText(MainApp.instance().getText(R.string.activate_profile));
|
||||
profileswitchButton.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
profileswitchButton.setText(MainApp.instance().getText(R.string.send_to_pump));
|
||||
profileswitchButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,14 +24,14 @@ public class NSProfileFragment extends SubscriberFragment {
|
|||
return nsProfilePlugin;
|
||||
}
|
||||
|
||||
private static TextView noProfile;
|
||||
private static TextView units;
|
||||
private static TextView dia;
|
||||
private static TextView activeProfile;
|
||||
private static TextView ic;
|
||||
private static TextView isf;
|
||||
private static TextView basal;
|
||||
private static TextView target;
|
||||
private TextView noProfile;
|
||||
private TextView units;
|
||||
private TextView dia;
|
||||
private TextView activeProfile;
|
||||
private TextView ic;
|
||||
private TextView isf;
|
||||
private TextView basal;
|
||||
private TextView target;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
|
|
|
@ -156,9 +156,13 @@ public class SimpleProfileFragment extends SubscriberFragment {
|
|||
activity.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended() || !MainApp.getConfigBuilder().getPumpDescription().isSetBasalProfileCapable) {
|
||||
if (!MainApp.getConfigBuilder().isInitialized() || MainApp.getConfigBuilder().isSuspended()) {
|
||||
profileswitchButton.setVisibility(View.GONE);
|
||||
} else if (!MainApp.getConfigBuilder().getPumpDescription().isSetBasalProfileCapable) {
|
||||
profileswitchButton.setText(MainApp.instance().getText(R.string.activate_profile));
|
||||
profileswitchButton.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
profileswitchButton.setText(MainApp.instance().getText(R.string.send_to_pump));
|
||||
profileswitchButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,16 +33,16 @@ import info.nightscout.utils.DecimalFormatter;
|
|||
public class ProfileViewDialog extends DialogFragment {
|
||||
private static Logger log = LoggerFactory.getLogger(ProfileViewDialog.class);
|
||||
|
||||
private static TextView noProfile;
|
||||
private static TextView units;
|
||||
private static TextView dia;
|
||||
private static TextView activeProfile;
|
||||
private static TextView ic;
|
||||
private static TextView isf;
|
||||
private static TextView basal;
|
||||
private static TextView target;
|
||||
private TextView noProfile;
|
||||
private TextView units;
|
||||
private TextView dia;
|
||||
private TextView activeProfile;
|
||||
private TextView ic;
|
||||
private TextView isf;
|
||||
private TextView basal;
|
||||
private TextView target;
|
||||
|
||||
private static Button refreshButton;
|
||||
private Button refreshButton;
|
||||
|
||||
Handler mHandler;
|
||||
static HandlerThread mHandlerThread;
|
||||
|
|
|
@ -13,9 +13,11 @@ import info.nightscout.androidaps.Config;
|
|||
|
||||
public class MsgSetTime extends MessageBase {
|
||||
private static Logger log = LoggerFactory.getLogger(MsgSetTime.class);
|
||||
private static Date time;
|
||||
|
||||
public MsgSetTime(Date time) {
|
||||
SetCommand(0x330a);
|
||||
this.time = time;
|
||||
AddParamDateTime(time);
|
||||
}
|
||||
|
||||
|
@ -23,6 +25,6 @@ public class MsgSetTime extends MessageBase {
|
|||
int result = intFromBuff(bytes, 0, 1);
|
||||
|
||||
if (Config.logDanaMessageDetail)
|
||||
log.debug("Result: " + result);
|
||||
log.debug("Result of setting time: " + time + " is " + result);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ public class MsgSettingPumpTime extends MessageBase {
|
|||
);
|
||||
|
||||
if (Config.logDanaMessageDetail)
|
||||
log.debug("Pump time: " + time);
|
||||
log.debug("Pump time: " + time + " Phone time: " + new Date());
|
||||
|
||||
DanaRPump.getInstance().pumpTime = time;
|
||||
}
|
||||
|
|
|
@ -326,11 +326,18 @@ public class DanaRExecutionService extends Service {
|
|||
//0x3201
|
||||
mSerialIOThread.sendMessage(new MsgSettingMaxValues());
|
||||
mSerialIOThread.sendMessage(new MsgSettingGlucose());
|
||||
mSerialIOThread.sendMessage(new MsgSettingPumpTime());
|
||||
mSerialIOThread.sendMessage(new MsgSettingActiveProfile());
|
||||
mSerialIOThread.sendMessage(new MsgSettingProfileRatios());
|
||||
mSerialIOThread.sendMessage(new MsgSettingProfileRatiosAll());
|
||||
mSerialIOThread.sendMessage(new MsgSetTime(new Date()));
|
||||
mSerialIOThread.sendMessage(new MsgSettingPumpTime());
|
||||
long timeDiff = (danaRPump.pumpTime.getTime() - System.currentTimeMillis()) / 1000L;
|
||||
log.debug("Pump time difference: " + timeDiff + " seconds");
|
||||
if (Math.abs(timeDiff) > 10) {
|
||||
mSerialIOThread.sendMessage(new MsgSetTime(new Date()));
|
||||
mSerialIOThread.sendMessage(new MsgSettingPumpTime());
|
||||
timeDiff = (danaRPump.pumpTime.getTime() - System.currentTimeMillis()) / 1000L;
|
||||
log.debug("Pump time difference: " + timeDiff + " seconds");
|
||||
}
|
||||
danaRPump.lastSettingsRead = now;
|
||||
}
|
||||
|
||||
|
|
|
@ -322,9 +322,15 @@ public class DanaRKoreanExecutionService extends Service {
|
|||
//0x3201
|
||||
mSerialIOThread.sendMessage(new MsgSettingMaxValues());
|
||||
mSerialIOThread.sendMessage(new MsgSettingGlucose());
|
||||
mSerialIOThread.sendMessage(new MsgSettingPumpTime());
|
||||
mSerialIOThread.sendMessage(new MsgSettingProfileRatios());
|
||||
mSerialIOThread.sendMessage(new MsgSetTime(new Date()));
|
||||
long timeDiff = (danaRPump.pumpTime.getTime() - System.currentTimeMillis()) / 1000L;
|
||||
log.debug("Pump time difference: " + timeDiff + " seconds");
|
||||
if (Math.abs(timeDiff) > 10) {
|
||||
mSerialIOThread.sendMessage(new MsgSetTime(new Date()));
|
||||
mSerialIOThread.sendMessage(new MsgSettingPumpTime());
|
||||
timeDiff = (danaRPump.pumpTime.getTime() - System.currentTimeMillis()) / 1000L;
|
||||
log.debug("Pump time difference: " + timeDiff + " seconds");
|
||||
}
|
||||
danaRPump.lastSettingsRead = now;
|
||||
}
|
||||
|
||||
|
|
|
@ -99,14 +99,14 @@ public class MsgHistoryEvents_v2 extends MessageBase {
|
|||
MainApp.getConfigBuilder().addToHistoryExtendedBolus(extendedBolus);
|
||||
break;
|
||||
case DanaRPump.BOLUS:
|
||||
log.debug("EVENT BOLUS (" + recordCode + ") " + datetime.toLocaleString() + " Bolus: " + (param1 / 100d) + "U Duration: " + param2 + "min");
|
||||
detailedBolusInfo.insulin = param1 / 100d;
|
||||
MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
|
||||
boolean newRecord = MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
|
||||
log.debug((newRecord ? "**NEW** " : "") + "EVENT BOLUS (" + recordCode + ") " + datetime.toLocaleString() + " Bolus: " + (param1 / 100d) + "U Duration: " + param2 + "min");
|
||||
break;
|
||||
case DanaRPump.DUALBOLUS:
|
||||
log.debug("EVENT DUALBOLUS (" + recordCode + ") " + datetime.toLocaleString() + " Bolus: " + (param1 / 100d) + "U Duration: " + param2 + "min");
|
||||
detailedBolusInfo.insulin = param1 / 100d;
|
||||
MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
|
||||
newRecord = MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
|
||||
log.debug((newRecord ? "**NEW** " : "") + "EVENT DUALBOLUS (" + recordCode + ") " + datetime.toLocaleString() + " Bolus: " + (param1 / 100d) + "U Duration: " + param2 + "min");
|
||||
break;
|
||||
case DanaRPump.DUALEXTENDEDSTART:
|
||||
log.debug("EVENT DUALEXTENDEDSTART (" + recordCode + ") " + datetime.toLocaleString() + " Amount: " + (param1 / 100d) + "U Duration: " + param2 + "min");
|
||||
|
@ -134,9 +134,9 @@ public class MsgHistoryEvents_v2 extends MessageBase {
|
|||
log.debug("EVENT PROFILECHANGE (" + recordCode + ") " + datetime.toLocaleString() + " No: " + param1 + " CurrentRate: " + (param2 / 100d) + "U/h");
|
||||
break;
|
||||
case DanaRPump.CARBS:
|
||||
log.debug("EVENT CARBS (" + recordCode + ") " + datetime.toLocaleString() + " Carbs: " + param1 + "g");
|
||||
detailedBolusInfo.carbs = param1;
|
||||
MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
|
||||
newRecord = MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo);
|
||||
log.debug((newRecord ? "**NEW** " : "") + "EVENT CARBS (" + recordCode + ") " + datetime.toLocaleString() + " Carbs: " + param1 + "g");
|
||||
break;
|
||||
default:
|
||||
log.debug("Event: " + recordCode + " " + datetime.toLocaleString() + " Param1: " + param1 + " Param2: " + param2);
|
||||
|
|
|
@ -297,11 +297,18 @@ public class DanaRv2ExecutionService extends Service {
|
|||
//0x3201
|
||||
mSerialIOThread.sendMessage(new MsgSettingMaxValues());
|
||||
mSerialIOThread.sendMessage(new MsgSettingGlucose());
|
||||
mSerialIOThread.sendMessage(new MsgSettingPumpTime());
|
||||
mSerialIOThread.sendMessage(new MsgSettingActiveProfile());
|
||||
mSerialIOThread.sendMessage(new MsgSettingProfileRatios());
|
||||
mSerialIOThread.sendMessage(new MsgSettingProfileRatiosAll());
|
||||
mSerialIOThread.sendMessage(new MsgSetTime(new Date()));
|
||||
mSerialIOThread.sendMessage(new MsgSettingPumpTime());
|
||||
long timeDiff = (danaRPump.pumpTime.getTime() - System.currentTimeMillis()) / 1000L;
|
||||
log.debug("Pump time difference: " + timeDiff + " seconds");
|
||||
if (Math.abs(timeDiff) > 10) {
|
||||
mSerialIOThread.sendMessage(new MsgSetTime(new Date()));
|
||||
mSerialIOThread.sendMessage(new MsgSettingPumpTime());
|
||||
timeDiff = (danaRPump.pumpTime.getTime() - System.currentTimeMillis()) / 1000L;
|
||||
log.debug("Pump time difference: " + timeDiff + " seconds");
|
||||
}
|
||||
danaRPump.lastSettingsRead = now;
|
||||
}
|
||||
|
||||
|
|
|
@ -179,6 +179,7 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
|
|||
|
||||
for (Integer pos = 0; pos < treatments.size(); pos++) {
|
||||
Treatment t = treatments.get(pos);
|
||||
if (!t.isValid) continue;
|
||||
if (t.date > time) continue;
|
||||
Iob tIOB = t.iobCalc(time, dia);
|
||||
total.iob += tIOB.iobContrib;
|
||||
|
@ -222,6 +223,8 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
|
|||
long dia_ago = now - (new Double(1.5d * profile.getDia() * 60 * 60 * 1000l)).longValue();
|
||||
|
||||
for (Treatment treatment : treatments) {
|
||||
if (!treatment.isValid)
|
||||
continue;
|
||||
long t = treatment.date;
|
||||
if (t > dia_ago && t <= now) {
|
||||
if (treatment.carbs >= 1) {
|
||||
|
@ -250,6 +253,8 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
|
|||
List<Treatment> in5minback = new ArrayList<>();
|
||||
for (Integer pos = 0; pos < treatments.size(); pos++) {
|
||||
Treatment t = treatments.get(pos);
|
||||
if (!t.isValid)
|
||||
continue;
|
||||
if (t.date <= time && t.date > time - 5 * 60 * 1000 && t.carbs > 0)
|
||||
in5minback.add(t);
|
||||
}
|
||||
|
@ -411,6 +416,8 @@ public class TreatmentsPlugin implements PluginBase, TreatmentsInterface {
|
|||
treatment.source = detailedBolusInfo.source;
|
||||
treatment.pumpId = detailedBolusInfo.pumpId;
|
||||
treatment.insulin = detailedBolusInfo.insulin;
|
||||
treatment.isValid = detailedBolusInfo.isValid;
|
||||
treatment.isSMB = detailedBolusInfo.isSMB;
|
||||
if (detailedBolusInfo.carbTime == 0)
|
||||
treatment.carbs = detailedBolusInfo.carbs;
|
||||
treatment.source = detailedBolusInfo.source;
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
package info.nightscout.androidaps.plugins.Treatments.fragments;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.data.Profile;
|
||||
import info.nightscout.androidaps.db.ProfileSwitch;
|
||||
import info.nightscout.androidaps.plugins.PumpDanaR.Dialogs.ProfileViewDialog;
|
||||
import info.nightscout.utils.DateUtil;
|
||||
import info.nightscout.utils.DecimalFormatter;
|
||||
|
||||
/**
|
||||
* Created by adrian on 17/08/17.
|
||||
*/
|
||||
|
||||
public class ProfileViewerDialog extends DialogFragment {
|
||||
|
||||
private long time;
|
||||
|
||||
private static Logger log = LoggerFactory.getLogger(ProfileViewDialog.class);
|
||||
|
||||
private TextView noProfile;
|
||||
private TextView units;
|
||||
private TextView dia;
|
||||
private TextView activeProfile;
|
||||
private TextView ic;
|
||||
private TextView isf;
|
||||
private TextView basal;
|
||||
private TextView target;
|
||||
private View dateDelimiter;
|
||||
private LinearLayout dateLayout;
|
||||
private TextView dateTextView;
|
||||
private Button refreshButton;
|
||||
|
||||
static ProfileViewerDialog newInstance(long time) {
|
||||
ProfileViewerDialog dialog = new ProfileViewerDialog();
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putLong("time", time);
|
||||
dialog.setArguments(args);
|
||||
|
||||
return dialog;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
time = getArguments().getLong("time");
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View layout = inflater.inflate(R.layout.nsprofileviewer_fragment, container, false);
|
||||
|
||||
noProfile = (TextView) layout.findViewById(R.id.profileview_noprofile);
|
||||
units = (TextView) layout.findViewById(R.id.profileview_units);
|
||||
dia = (TextView) layout.findViewById(R.id.profileview_dia);
|
||||
activeProfile = (TextView) layout.findViewById(R.id.profileview_activeprofile);
|
||||
ic = (TextView) layout.findViewById(R.id.profileview_ic);
|
||||
isf = (TextView) layout.findViewById(R.id.profileview_isf);
|
||||
basal = (TextView) layout.findViewById(R.id.profileview_basal);
|
||||
target = (TextView) layout.findViewById(R.id.profileview_target);
|
||||
refreshButton = (Button) layout.findViewById(R.id.profileview_reload);
|
||||
refreshButton.setVisibility(View.GONE);
|
||||
dateDelimiter = layout.findViewById(R.id.profileview_datedelimiter);
|
||||
dateDelimiter.setVisibility(View.VISIBLE);
|
||||
dateLayout = (LinearLayout) layout.findViewById(R.id.profileview_datelayout);
|
||||
dateLayout.setVisibility(View.VISIBLE);
|
||||
dateTextView = (TextView) layout.findViewById(R.id.profileview_date);
|
||||
|
||||
setContent();
|
||||
return layout;
|
||||
}
|
||||
|
||||
private void setContent() {
|
||||
Profile profile = null;
|
||||
ProfileSwitch profileSwitch = MainApp.getConfigBuilder().getProfileSwitchFromHistory(time);
|
||||
if(profileSwitch!=null && profileSwitch.profileJson != null){
|
||||
profile = profileSwitch.getProfileObject();
|
||||
}
|
||||
if (profile != null) {
|
||||
noProfile.setVisibility(View.GONE);
|
||||
units.setText(profile.getUnits());
|
||||
dia.setText(DecimalFormatter.to2Decimal(profile.getDia()) + " h");
|
||||
activeProfile.setText(profileSwitch.profileName);
|
||||
dateTextView.setText(DateUtil.dateAndTimeString(profileSwitch.date));
|
||||
ic.setText(profile.getIcList());
|
||||
isf.setText(profile.getIsfList());
|
||||
basal.setText(profile.getBasalList());
|
||||
target.setText(profile.getTargetList());
|
||||
} else {
|
||||
noProfile.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -85,6 +85,7 @@ public class TreatmentsBolusFragment extends SubscriberFragment implements View.
|
|||
holder.mealOrCorrection.setText(t.mealBolus ? MainApp.sResources.getString(R.string.mealbolus) : MainApp.sResources.getString(R.string.correctionbous));
|
||||
holder.ph.setVisibility(t.source == Source.PUMP ? View.VISIBLE : View.GONE);
|
||||
holder.ns.setVisibility(t._id != null ? View.VISIBLE : View.GONE);
|
||||
holder.invalid.setVisibility(t.isValid ? View.GONE : View.VISIBLE);
|
||||
if (iob.iobContrib != 0)
|
||||
holder.iob.setTextColor(ContextCompat.getColor(MainApp.instance(), R.color.colorActive));
|
||||
else
|
||||
|
@ -113,6 +114,7 @@ public class TreatmentsBolusFragment extends SubscriberFragment implements View.
|
|||
TextView remove;
|
||||
TextView ph;
|
||||
TextView ns;
|
||||
TextView invalid;
|
||||
|
||||
TreatmentsViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
@ -125,6 +127,7 @@ public class TreatmentsBolusFragment extends SubscriberFragment implements View.
|
|||
mealOrCorrection = (TextView) itemView.findViewById(R.id.treatments_mealorcorrection);
|
||||
ph = (TextView) itemView.findViewById(R.id.pump_sign);
|
||||
ns = (TextView) itemView.findViewById(R.id.ns_sign);
|
||||
invalid = (TextView) itemView.findViewById(R.id.invalid_sign);
|
||||
remove = (TextView) itemView.findViewById(R.id.treatments_remove);
|
||||
remove.setOnClickListener(this);
|
||||
remove.setPaintFlags(remove.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
|
||||
|
@ -141,10 +144,15 @@ public class TreatmentsBolusFragment extends SubscriberFragment implements View.
|
|||
builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
final String _id = treatment._id;
|
||||
if (_id != null && !_id.equals("")) {
|
||||
NSUpload.removeCareportalEntryFromNS(_id);
|
||||
if (treatment.source == Source.PUMP) {
|
||||
treatment.isValid = false;
|
||||
MainApp.getDbHelper().update(treatment);
|
||||
} else {
|
||||
if (_id != null && !_id.equals("")) {
|
||||
NSUpload.removeCareportalEntryFromNS(_id);
|
||||
}
|
||||
MainApp.getDbHelper().delete(treatment);
|
||||
}
|
||||
MainApp.getDbHelper().delete(treatment);
|
||||
updateGUI();
|
||||
Answers.getInstance().logCustom(new CustomEvent("RemoveTreatment"));
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import android.content.Intent;
|
|||
import android.graphics.Paint;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.CardView;
|
||||
|
@ -84,6 +85,9 @@ public class TreatmentsProfileSwitchFragment extends SubscriberFragment implemen
|
|||
else
|
||||
holder.date.setTextColor(holder.duration.getCurrentTextColor());
|
||||
holder.remove.setTag(profileSwitch);
|
||||
holder.name.setTag(profileSwitch);
|
||||
holder.date.setTag(profileSwitch);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -116,6 +120,9 @@ public class TreatmentsProfileSwitchFragment extends SubscriberFragment implemen
|
|||
remove = (TextView) itemView.findViewById(R.id.profileswitch_remove);
|
||||
remove.setOnClickListener(this);
|
||||
remove.setPaintFlags(remove.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
|
||||
name.setOnClickListener(this);
|
||||
date.setOnClickListener(this);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -123,9 +130,11 @@ public class TreatmentsProfileSwitchFragment extends SubscriberFragment implemen
|
|||
final ProfileSwitch profileSwitch = (ProfileSwitch) v.getTag();
|
||||
switch (v.getId()) {
|
||||
case R.id.profileswitch_remove:
|
||||
OKDialog.show(getActivity(), MainApp.sResources.getString(R.string.confirmation), MainApp.sResources.getString(R.string.removerecord) + "\n" + DateUtil.dateAndTimeString(profileSwitch.date), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
builder.setTitle(MainApp.sResources.getString(R.string.confirmation));
|
||||
builder.setMessage(MainApp.sResources.getString(R.string.removerecord) + "\n" + DateUtil.dateAndTimeString(profileSwitch.date));
|
||||
builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
final String _id = profileSwitch._id;
|
||||
if (_id != null && !_id.equals("")) {
|
||||
NSUpload.removeCareportalEntryFromNS(_id);
|
||||
|
@ -133,6 +142,15 @@ public class TreatmentsProfileSwitchFragment extends SubscriberFragment implemen
|
|||
MainApp.getDbHelper().delete(profileSwitch);
|
||||
}
|
||||
});
|
||||
builder.setNegativeButton(MainApp.sResources.getString(R.string.cancel), null);
|
||||
builder.show();
|
||||
break;
|
||||
case R.id.profileswitch_date:
|
||||
case R.id.profileswitch_name:
|
||||
long time = ((ProfileSwitch)v.getTag()).date;
|
||||
ProfileViewerDialog pvd = ProfileViewerDialog.newInstance(time);
|
||||
FragmentManager manager = getFragmentManager();
|
||||
pvd.show(manager, "ProfileViewDialog");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -141,7 +141,6 @@ public class TreatmentsTempTargetFragment extends SubscriberFragment implements
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
final TempTarget tempTarget = (TempTarget) v.getTag();
|
||||
final Context finalContext = context;
|
||||
switch (v.getId()) {
|
||||
case R.id.temptargetrange_remove:
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
|
|
|
@ -472,7 +472,7 @@ public class ActionStringHandler {
|
|||
//Check for Temp-Target:
|
||||
TempTarget tempTarget = MainApp.getConfigBuilder().getTempTargetFromHistory(System.currentTimeMillis());
|
||||
if (tempTarget != null) {
|
||||
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 += "Temp Target: " + Profile.toTargetRangeString(tempTarget.low, tempTarget.low, profile.getUnits());
|
||||
ret += "\nuntil: " + DateUtil.timeString(tempTarget.originalEnd());
|
||||
ret += "\n\n";
|
||||
}
|
||||
|
@ -615,7 +615,7 @@ public class ActionStringHandler {
|
|||
public void run() {
|
||||
DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo();
|
||||
detailedBolusInfo.insulin = amount;
|
||||
detailedBolusInfo.addToTreatments = false;
|
||||
detailedBolusInfo.isValid = false;
|
||||
detailedBolusInfo.source = Source.USER;
|
||||
PumpEnactResult result = MainApp.getConfigBuilder().deliverTreatment(detailedBolusInfo);
|
||||
if (!result.success) {
|
||||
|
|
21
app/src/main/java/info/nightscout/utils/BundleLogger.java
Normal file
21
app/src/main/java/info/nightscout/utils/BundleLogger.java
Normal file
|
@ -0,0 +1,21 @@
|
|||
package info.nightscout.utils;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
/**
|
||||
* Created by mike on 14.08.2017.
|
||||
*/
|
||||
|
||||
public class BundleLogger {
|
||||
public static String log(Bundle bundle) {
|
||||
if (bundle == null) {
|
||||
return null;
|
||||
}
|
||||
String string = "Bundle{";
|
||||
for (String key : bundle.keySet()) {
|
||||
string += " " + key + " => " + bundle.get(key) + ";";
|
||||
}
|
||||
string += " }Bundle";
|
||||
return string;
|
||||
}
|
||||
}
|
|
@ -85,12 +85,16 @@ public class DateUtil {
|
|||
}
|
||||
|
||||
public static int toSeconds(String hh_colon_mm) {
|
||||
Pattern p = Pattern.compile("(\\d+):(\\d+)");
|
||||
Pattern p = Pattern.compile("(\\d+):(\\d+)( a.m.| p.m.|)");
|
||||
Matcher m = p.matcher(hh_colon_mm);
|
||||
int retval = 0;
|
||||
|
||||
if (m.find()) {
|
||||
retval = SafeParse.stringToInt(m.group(1)) * 60 * 60 + SafeParse.stringToInt(m.group(2)) * 60;
|
||||
if (m.group(3).equals(" .a.m") && m.group(1).equals("12"))
|
||||
retval -= 12 * 60 * 60;
|
||||
if (m.group(3).equals(" p.m.") && !m.group(1).equals("12"))
|
||||
retval += 12 * 60 * 60;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,10 @@ import android.os.Handler;
|
|||
import android.os.Looper;
|
||||
import android.widget.Toast;
|
||||
|
||||
import info.nightscout.androidaps.MainApp;
|
||||
import info.nightscout.androidaps.plugins.Overview.Notification;
|
||||
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
|
||||
|
||||
|
||||
public class ToastUtils {
|
||||
public static void showToastInUiThread(final Context ctx,
|
||||
|
@ -25,6 +29,13 @@ public class ToastUtils {
|
|||
|
||||
showToastInUiThread(ctx, string);
|
||||
playSound(ctx, soundID);
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Notification notification = new Notification(Notification.TOAST_ALARM, string, Notification.URGENT);
|
||||
MainApp.bus().post(new EventNewNotification(notification));
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
private static void playSound(final Context ctx, final int soundID) {
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
android:layout_weight="2"
|
||||
android:gravity="end"
|
||||
android:paddingRight="5dp"
|
||||
android:text="@string/nsprofileview_activeprofile_label"
|
||||
android:text="@string/careportal_newnstreatment_profile_label"
|
||||
android:textSize="14sp" />
|
||||
|
||||
<TextView
|
||||
|
@ -60,6 +60,55 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="2dip"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_marginRight="20dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:background="@color/listdelimiter"
|
||||
android:id="@+id/profileview_datedelimiter"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:id="@+id/profileview_datelayout"
|
||||
android:visibility="gone">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:gravity="end"
|
||||
android:paddingRight="5dp"
|
||||
android:text="@string/date"
|
||||
android:textSize="14sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="5dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0"
|
||||
android:gravity="center_horizontal"
|
||||
android:paddingEnd="2dp"
|
||||
android:paddingStart="2dp"
|
||||
android:text=":"
|
||||
android:textSize="14sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profileview_date"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="start"
|
||||
android:paddingLeft="5dp"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="14sp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="2dip"
|
||||
|
|
|
@ -375,7 +375,8 @@
|
|||
android:id="@+id/overview_accepttemplayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone">
|
||||
|
||||
<Button
|
||||
android:id="@+id/overview_accepttempbutton"
|
||||
|
@ -386,8 +387,7 @@
|
|||
android:layout_marginTop="3dp"
|
||||
android:layout_weight="0.5"
|
||||
android:text="Accept new temp\n0.25U/h"
|
||||
android:textColor="@color/colorAcceptTempButton"
|
||||
android:visibility="gone" />
|
||||
android:textColor="@color/colorAcceptTempButton" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
|
|
@ -80,7 +80,6 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginRight="30dp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
|
@ -106,6 +105,14 @@
|
|||
android:text="NS"
|
||||
android:textColor="@color/colorSetTempButton" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/invalid_sign"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="10dp"
|
||||
android:text="@string/invalid"
|
||||
android:textColor="@android:color/holo_red_light" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
|
4
app/src/main/res/values-nl/strings.xml
Normal file
4
app/src/main/res/values-nl/strings.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">AndroidAPS</string>
|
||||
</resources>
|
|
@ -581,4 +581,5 @@
|
|||
<string name="sms_delta">Delta:</string>
|
||||
<string name="sms_iob">IOB:</string>
|
||||
<string name="sms_minago" formatted="false">%dmin sedan</string>
|
||||
<string name="app_name">AndroidAPS</string>
|
||||
</resources>
|
|
@ -15,6 +15,7 @@
|
|||
<item>@string/bg_lang</item>
|
||||
<item>@string/cs_lang</item>
|
||||
<item>@string/de_lang</item>
|
||||
<item>@string/nl_lang</item>
|
||||
<item>@string/es_lang</item>
|
||||
<item>@string/el_lang</item>
|
||||
<item>@string/it_lang</item>
|
||||
|
@ -27,6 +28,7 @@
|
|||
<item>bg</item>
|
||||
<item>cs</item>
|
||||
<item>de</item>
|
||||
<item>nl</item>
|
||||
<item>es</item>
|
||||
<item>el</item>
|
||||
<item>it</item>
|
||||
|
|
|
@ -203,6 +203,7 @@
|
|||
<string name="filenotfound">File not found</string>
|
||||
<string name="nav_export">Export settings</string>
|
||||
<string name="nav_import">Import settings</string>
|
||||
<string name="nl_lang">Dutch</string>
|
||||
<string name="de_lang">German</string>
|
||||
<string name="es_lang">Spanish</string>
|
||||
<string name="el_lang">Greek</string>
|
||||
|
@ -580,6 +581,7 @@
|
|||
<string name="configbuilder_insulin">Insulin</string>
|
||||
<string name="fastactinginsulin">Fast Acting Insulin</string>
|
||||
<string name="fastactinginsulincomment">Novorapid, Novolog, Humalog</string>
|
||||
<string name="ultrafastactinginsulincomment">Fiasp</string>
|
||||
<string name="insulin_shortname">INS</string>
|
||||
<string name="fastactinginsulinprolonged">Fast Acting Insulin Prolonged</string>
|
||||
<string name="key_usesuperbolus" translatable="false">key_usersuperbolus</string>
|
||||
|
@ -692,5 +694,15 @@
|
|||
<string name="careportal_pump_label">PUMP</string>
|
||||
<string name="overview_newtempbasal_basalabsolute">Basal value [U/h]</string>
|
||||
<string name="careportal_newnstreatment_duration_min_label">Duration [min]</string>
|
||||
<string name="key_insulin_oref_peak" translatable="false">insulin_oref_peak</string>
|
||||
<string name="insulin_oref_peak">IOB Curve Peak Time</string>
|
||||
<string name="insulin_peak_time">Peak Time [min]</string>
|
||||
<string name="free_peak_oref">Free-Peak Oref</string>
|
||||
<string name="rapid_acting_oref">Rapid-Acting Oref</string>
|
||||
<string name="ultrarapid_oref">Ultra-Rapid Oref</string>
|
||||
<string name="dia_too_short" formatted="false">"DIA of %s too short - using %s instead!"</string>
|
||||
<string name="activate_profile">ACTIVATE PROFILE</string>
|
||||
<string name="date">Date</string>
|
||||
<string name="invalid">INVALID</string>
|
||||
</resources>
|
||||
|
||||
|
|
21
app/src/main/res/xml/pref_insulinoreffreepeak.xml
Normal file
21
app/src/main/res/xml/pref_insulinoreffreepeak.xml
Normal file
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:validate="http://schemas.android.com/apk/res-auto">
|
||||
<PreferenceCategory
|
||||
android:key="InsulinOrefFreePeak"
|
||||
android:title="@string/insulin_oref_peak">
|
||||
|
||||
<com.andreabaccega.widget.ValidatingEditTextPreference
|
||||
validate:testType="numericRange"
|
||||
validate:minNumber="35"
|
||||
validate:maxNumber="120"
|
||||
android:digits="0123456789"
|
||||
android:defaultValue="75"
|
||||
android:selectAllOnFocus="true"
|
||||
android:inputType="number"
|
||||
android:maxLines="20"
|
||||
android:title="@string/insulin_peak_time"
|
||||
android:key="@string/key_insulin_oref_peak" />
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
Loading…
Reference in a new issue