menu, preferences, treatment&wizard buttons, ns upload
This commit is contained in:
parent
aa97722283
commit
5ac31bd0ca
27 changed files with 556 additions and 414 deletions
|
@ -60,8 +60,9 @@
|
||||||
<!-- Service processing incomming data -->
|
<!-- Service processing incomming data -->
|
||||||
<service
|
<service
|
||||||
android:name=".Services.DataService"
|
android:name=".Services.DataService"
|
||||||
android:exported="false"></service>
|
android:exported="false" />
|
||||||
|
|
||||||
|
<activity android:name=".PreferencesActivity"></activity>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
|
@ -4,6 +4,13 @@ package info.nightscout.androidaps;
|
||||||
* Created by mike on 07.06.2016.
|
* Created by mike on 07.06.2016.
|
||||||
*/
|
*/
|
||||||
public class Config {
|
public class Config {
|
||||||
|
// MAIN FUCTIONALITY
|
||||||
|
public static final boolean APS = true;
|
||||||
|
// PLUGINS
|
||||||
|
public static final boolean LOWSUSPEDENABLED = APS && true;
|
||||||
|
public static final boolean OPENAPSMAENABLED = APS && true;
|
||||||
|
public static final boolean LOOPENABLED = APS && true;
|
||||||
|
|
||||||
public static final boolean detailedLog = true;
|
public static final boolean detailedLog = true;
|
||||||
public static final boolean logFunctionCalls = true;
|
public static final boolean logFunctionCalls = true;
|
||||||
public static final boolean logIncommingBG = true;
|
public static final boolean logIncommingBG = true;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package info.nightscout.androidaps;
|
package info.nightscout.androidaps;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
@ -59,10 +60,13 @@ public class MainActivity extends AppCompatActivity {
|
||||||
pluginsList = new ArrayList<PluginBase>();
|
pluginsList = new ArrayList<PluginBase>();
|
||||||
// Register all tabs in app here
|
// Register all tabs in app here
|
||||||
pluginsList.add(OverviewFragment.newInstance());
|
pluginsList.add(OverviewFragment.newInstance());
|
||||||
pluginsList.add(LoopFragment.newInstance());
|
|
||||||
pluginsList.add(VirtualPumpFragment.newInstance());
|
pluginsList.add(VirtualPumpFragment.newInstance());
|
||||||
pluginsList.add(LowSuspendFragment.newInstance());
|
if (Config.LOOPENABLED)
|
||||||
pluginsList.add(OpenAPSMAFragment.newInstance());
|
pluginsList.add(LoopFragment.newInstance());
|
||||||
|
if (Config.LOWSUSPEDENABLED)
|
||||||
|
pluginsList.add(LowSuspendFragment.newInstance());
|
||||||
|
if (Config.OPENAPSMAENABLED)
|
||||||
|
pluginsList.add(OpenAPSMAFragment.newInstance());
|
||||||
pluginsList.add(NSProfileViewerFragment.newInstance());
|
pluginsList.add(NSProfileViewerFragment.newInstance());
|
||||||
pluginsList.add(SimpleProfileFragment.newInstance());
|
pluginsList.add(SimpleProfileFragment.newInstance());
|
||||||
pluginsList.add(TreatmentsFragment.newInstance());
|
pluginsList.add(TreatmentsFragment.newInstance());
|
||||||
|
@ -108,6 +112,11 @@ public class MainActivity extends AppCompatActivity {
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
int id = item.getItemId();
|
int id = item.getItemId();
|
||||||
switch (id) {
|
switch (id) {
|
||||||
|
case R.id.nav_preferences: {
|
||||||
|
Intent i = new Intent(getApplicationContext(), PreferencesActivity.class);
|
||||||
|
startActivity(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case R.id.nav_resetdb:
|
case R.id.nav_resetdb:
|
||||||
MainApp.getDbHelper().resetDatabases();
|
MainApp.getDbHelper().resetDatabases();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
package info.nightscout.androidaps;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.preference.PreferenceActivity;
|
||||||
|
import android.preference.PreferenceFragment;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.events.EventPreferenceChange;
|
||||||
|
|
||||||
|
public class PreferencesActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
|
MainApp.bus().post(new EventPreferenceChange());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class MyPreferenceFragment extends PreferenceFragment {
|
||||||
|
@Override
|
||||||
|
public void onCreate(final Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
addPreferencesFromResource(R.xml.pref_treatments);
|
||||||
|
if (Config.OPENAPSMAENABLED)
|
||||||
|
addPreferencesFromResource(R.xml.pref_openapsma);
|
||||||
|
if (Config.LOWSUSPEDENABLED)
|
||||||
|
addPreferencesFromResource(R.xml.pref_lowsuspend);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -182,6 +182,7 @@ public class DataService extends IntentService {
|
||||||
stored._id = _id;
|
stored._id = _id;
|
||||||
MainApp.getDbHelper().getDaoTreatments().update(stored);
|
MainApp.getDbHelper().getDaoTreatments().update(stored);
|
||||||
}
|
}
|
||||||
|
MainApp.bus().post(new EventTreatmentChange());
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
if (Config.logIncommingData)
|
if (Config.logIncommingData)
|
||||||
|
@ -196,10 +197,10 @@ public class DataService extends IntentService {
|
||||||
MainApp.getDbHelper().getDaoTreatments().create(treatment);
|
MainApp.getDbHelper().getDaoTreatments().create(treatment);
|
||||||
if (Config.logIncommingData)
|
if (Config.logIncommingData)
|
||||||
log.debug("ADD: Stored treatment: " + treatment.log());
|
log.debug("ADD: Stored treatment: " + treatment.log());
|
||||||
MainApp.bus().post(new EventTreatmentChange());
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
MainApp.bus().post(new EventTreatmentChange());
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
|
@ -255,10 +256,10 @@ public class DataService extends IntentService {
|
||||||
MainApp.getDbHelper().getDaoTreatments().create(treatment);
|
MainApp.getDbHelper().getDaoTreatments().create(treatment);
|
||||||
if (Config.logIncommingData)
|
if (Config.logIncommingData)
|
||||||
log.debug("CHANGE: Stored treatment: " + treatment.log());
|
log.debug("CHANGE: Stored treatment: " + treatment.log());
|
||||||
MainApp.bus().post(new EventTreatmentChange());
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
MainApp.bus().post(new EventTreatmentChange());
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
|
|
|
@ -18,7 +18,13 @@ public class Result extends Object implements Parcelable{
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Success: " + success + "\nEnacted: " + enacted + "\nComment: " + comment + "\nDuration: " + duration + "\nAbsolute: " + absolute;
|
String ret = "Success: " + success;
|
||||||
|
if (enacted) {
|
||||||
|
ret += "\nEnacted: " + enacted + "\nComment: " + comment + "\nDuration: " + duration + " min\nAbsolute: " + absolute + " U/h";
|
||||||
|
} else {
|
||||||
|
ret += "\nComment: " + comment;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -6,6 +6,9 @@ import com.j256.ormlite.table.DatabaseTable;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
|
@ -183,8 +186,7 @@ public class TempBasal {
|
||||||
return (remainingMin < 0) ? 0 : (int) remainingMin;
|
return (remainingMin < 0) ? 0 : (int) remainingMin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public String log() {
|
||||||
public String toString() {
|
|
||||||
return "TempBasal{" +
|
return "TempBasal{" +
|
||||||
"timeIndex=" + timeIndex +
|
"timeIndex=" + timeIndex +
|
||||||
", timeStart=" + timeStart +
|
", timeStart=" + timeStart +
|
||||||
|
@ -196,4 +198,20 @@ public class TempBasal {
|
||||||
", isExtended=" + isExtended +
|
", isExtended=" + isExtended +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
DateFormat formatDateToJustTime = new SimpleDateFormat("HH:mm");
|
||||||
|
DecimalFormat formatNumber2decimalplaces = new DecimalFormat("0.00");
|
||||||
|
|
||||||
|
if (isAbsolute) {
|
||||||
|
return formatNumber2decimalplaces.format(absolute) + "U/h @" +
|
||||||
|
formatDateToJustTime.format(timeStart) +
|
||||||
|
" " + getRealDuration() + "/" + duration + "min";
|
||||||
|
} else { // percent
|
||||||
|
return percent + "% @" +
|
||||||
|
formatDateToJustTime.format(timeStart) +
|
||||||
|
" " + getRealDuration() + "/" + duration + "min";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package info.nightscout.androidaps.events;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by mike on 19.06.2016.
|
||||||
|
*/
|
||||||
|
public class EventPreferenceChange {
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ package info.nightscout.androidaps.interfaces;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import info.nightscout.androidaps.data.Result;
|
import info.nightscout.androidaps.data.Result;
|
||||||
|
import info.nightscout.androidaps.db.TempBasal;
|
||||||
import info.nightscout.androidaps.plugins.APSResult;
|
import info.nightscout.androidaps.plugins.APSResult;
|
||||||
import info.nightscout.client.data.NSProfile;
|
import info.nightscout.client.data.NSProfile;
|
||||||
|
|
||||||
|
@ -23,6 +24,7 @@ public interface PumpInterface {
|
||||||
double getBaseBasalRate(); // base basal rate, not temp basal
|
double getBaseBasalRate(); // base basal rate, not temp basal
|
||||||
double getTempBasalAbsoluteRate();
|
double getTempBasalAbsoluteRate();
|
||||||
double getTempBasalRemainingMinutes();
|
double getTempBasalRemainingMinutes();
|
||||||
|
TempBasal getTempBasal();
|
||||||
|
|
||||||
Result deliverTreatment(Double insulin, Double carbs);
|
Result deliverTreatment(Double insulin, Double carbs);
|
||||||
Result setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes);
|
Result setTempBasalAbsolute(Double absoluteRate, Integer durationInMinutes);
|
||||||
|
|
|
@ -2,8 +2,11 @@ package info.nightscout.androidaps.plugins.ConfigBuilder;
|
||||||
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.ResolveInfo;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
@ -22,15 +25,21 @@ import org.json.JSONObject;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import info.nightscout.androidaps.Config;
|
import info.nightscout.androidaps.Config;
|
||||||
import info.nightscout.androidaps.MainActivity;
|
import info.nightscout.androidaps.MainActivity;
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
|
import info.nightscout.androidaps.Services.Intents;
|
||||||
import info.nightscout.androidaps.data.Result;
|
import info.nightscout.androidaps.data.Result;
|
||||||
import info.nightscout.androidaps.db.TempBasal;
|
import info.nightscout.androidaps.db.TempBasal;
|
||||||
|
import info.nightscout.androidaps.db.Treatment;
|
||||||
import info.nightscout.androidaps.events.EventRefreshGui;
|
import info.nightscout.androidaps.events.EventRefreshGui;
|
||||||
|
import info.nightscout.androidaps.events.EventTreatmentChange;
|
||||||
import info.nightscout.androidaps.interfaces.APSInterface;
|
import info.nightscout.androidaps.interfaces.APSInterface;
|
||||||
import info.nightscout.androidaps.interfaces.ConstrainsInterface;
|
import info.nightscout.androidaps.interfaces.ConstrainsInterface;
|
||||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||||
|
@ -42,6 +51,7 @@ import info.nightscout.androidaps.plugins.APSResult;
|
||||||
import info.nightscout.androidaps.plugins.TempBasals.TempBasalsFragment;
|
import info.nightscout.androidaps.plugins.TempBasals.TempBasalsFragment;
|
||||||
import info.nightscout.androidaps.plugins.Treatments.TreatmentsFragment;
|
import info.nightscout.androidaps.plugins.Treatments.TreatmentsFragment;
|
||||||
import info.nightscout.client.data.NSProfile;
|
import info.nightscout.client.data.NSProfile;
|
||||||
|
import info.nightscout.utils.DateUtil;
|
||||||
|
|
||||||
public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpInterface, ConstrainsInterface {
|
public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpInterface, ConstrainsInterface {
|
||||||
private static Logger log = LoggerFactory.getLogger(ConfigBuilderFragment.class);
|
private static Logger log = LoggerFactory.getLogger(ConfigBuilderFragment.class);
|
||||||
|
@ -237,10 +247,40 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
return activePump.getTempBasalRemainingMinutes();
|
return activePump.getTempBasalRemainingMinutes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TempBasal getTempBasal() {
|
||||||
|
return activePump.getTempBasal();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result deliverTreatment(Double insulin, Double carbs) {
|
public Result deliverTreatment(Double insulin, Double carbs) {
|
||||||
// TODO: constrains here
|
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
||||||
return activePump.deliverTreatment(insulin, carbs);
|
Double maxbolus = Double.parseDouble(SP.getString("treatmentssafety_maxbolus", "3"));
|
||||||
|
Double maxcarbs = Double.parseDouble(SP.getString("treatmentssafety_maxcarbs", "48"));
|
||||||
|
|
||||||
|
if (insulin > maxbolus || carbs > maxcarbs) {
|
||||||
|
Result failResult = new Result();
|
||||||
|
failResult.success = false;
|
||||||
|
failResult.comment = MainApp.instance().getString(R.string.constrains_violation);
|
||||||
|
return failResult;
|
||||||
|
}
|
||||||
|
Result result = activePump.deliverTreatment(insulin, carbs);
|
||||||
|
|
||||||
|
if (result.success) {
|
||||||
|
Treatment t = new Treatment();
|
||||||
|
t.insulin = result.bolusDelivered;
|
||||||
|
t.carbs = carbs;
|
||||||
|
t.created_at = new Date();
|
||||||
|
try {
|
||||||
|
MainApp.instance().getDbHelper().getDaoTreatments().create(t);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
t.setTimeIndex(t.getTimeIndex());
|
||||||
|
t.sendToNSClient();
|
||||||
|
MainApp.bus().post(new EventTreatmentChange());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -263,7 +303,10 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result cancelTempBasal() {
|
public Result cancelTempBasal() {
|
||||||
return activePump.cancelTempBasal();
|
Result result = activePump.cancelTempBasal();
|
||||||
|
if (result.enacted)
|
||||||
|
uploadTempBasalEnd();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -273,7 +316,10 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result applyAPSRequest(APSResult request) {
|
public Result applyAPSRequest(APSResult request) {
|
||||||
return activePump.applyAPSRequest(request);
|
Result result = activePump.applyAPSRequest(request);
|
||||||
|
if (result.enacted)
|
||||||
|
uploadTempBasalStart(result.absolute, result.duration);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -568,7 +614,7 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
boolean result = true;
|
boolean result = true;
|
||||||
|
|
||||||
ArrayList<PluginBase> constrainsPlugins = MainActivity.getSpecificPluginsList(PluginBase.CONSTRAINS);
|
ArrayList<PluginBase> constrainsPlugins = MainActivity.getSpecificPluginsList(PluginBase.CONSTRAINS);
|
||||||
for(PluginBase p: constrainsPlugins) {
|
for (PluginBase p : constrainsPlugins) {
|
||||||
ConstrainsInterface constrain = (ConstrainsInterface) p;
|
ConstrainsInterface constrain = (ConstrainsInterface) p;
|
||||||
if (!p.isEnabled()) continue;
|
if (!p.isEnabled()) continue;
|
||||||
result = result && constrain.isAutomaticProcessingEnabled();
|
result = result && constrain.isAutomaticProcessingEnabled();
|
||||||
|
@ -581,7 +627,7 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
|
|
||||||
ArrayList<PluginBase> constrainsPlugins = MainActivity.getSpecificPluginsList(PluginBase.CONSTRAINS);
|
ArrayList<PluginBase> constrainsPlugins = MainActivity.getSpecificPluginsList(PluginBase.CONSTRAINS);
|
||||||
for(PluginBase p: constrainsPlugins) {
|
for (PluginBase p : constrainsPlugins) {
|
||||||
ConstrainsInterface constrain = (ConstrainsInterface) p;
|
ConstrainsInterface constrain = (ConstrainsInterface) p;
|
||||||
if (!p.isEnabled()) continue;
|
if (!p.isEnabled()) continue;
|
||||||
result = result || constrain.manualConfirmationNeeded();
|
result = result || constrain.manualConfirmationNeeded();
|
||||||
|
@ -592,7 +638,7 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
@Override
|
@Override
|
||||||
public APSResult applyBasalConstrains(APSResult result) {
|
public APSResult applyBasalConstrains(APSResult result) {
|
||||||
ArrayList<PluginBase> constrainsPlugins = MainActivity.getSpecificPluginsList(PluginBase.CONSTRAINS);
|
ArrayList<PluginBase> constrainsPlugins = MainActivity.getSpecificPluginsList(PluginBase.CONSTRAINS);
|
||||||
for(PluginBase p: constrainsPlugins) {
|
for (PluginBase p : constrainsPlugins) {
|
||||||
ConstrainsInterface constrain = (ConstrainsInterface) p;
|
ConstrainsInterface constrain = (ConstrainsInterface) p;
|
||||||
if (!p.isEnabled()) continue;
|
if (!p.isEnabled()) continue;
|
||||||
constrain.applyBasalConstrains(result);
|
constrain.applyBasalConstrains(result);
|
||||||
|
@ -600,4 +646,58 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void uploadTempBasalStart(Double absolute, double durationInMinutes) {
|
||||||
|
try {
|
||||||
|
//SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
||||||
|
//boolean useAbsoluteForUpload = sp.getBoolean("ns_sync_use_absolute", false);
|
||||||
|
|
||||||
|
Context context = MainApp.instance().getApplicationContext();
|
||||||
|
JSONObject data = new JSONObject();
|
||||||
|
data.put("eventType", "Temp Basal");
|
||||||
|
data.put("duration", durationInMinutes);
|
||||||
|
//if (useAbsoluteForUpload && absolute != null)
|
||||||
|
data.put("absolute", absolute);
|
||||||
|
//else
|
||||||
|
// data.put("percent", percent - 100);
|
||||||
|
data.put("created_at", DateUtil.toISOString(new Date()));
|
||||||
|
data.put("enteredBy", MainApp.instance().getString(R.string.app_name));
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putString("action", "dbAdd");
|
||||||
|
bundle.putString("collection", "treatments");
|
||||||
|
bundle.putString("data", data.toString());
|
||||||
|
Intent intent = new Intent(Intents.ACTION_DATABASE);
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
|
||||||
|
context.sendBroadcast(intent);
|
||||||
|
List<ResolveInfo> q = context.getPackageManager().queryBroadcastReceivers(intent, 0);
|
||||||
|
if (q.size() < 1) {
|
||||||
|
log.error("DBADD No receivers");
|
||||||
|
} else log.debug("DBADD dbAdd " + q.size() + " receivers " + data.toString());
|
||||||
|
} catch (JSONException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void uploadTempBasalEnd() {
|
||||||
|
try {
|
||||||
|
Context context = MainApp.instance().getApplicationContext();
|
||||||
|
JSONObject data = new JSONObject();
|
||||||
|
data.put("eventType", "Temp Basal");
|
||||||
|
data.put("created_at", DateUtil.toISOString(new Date()));
|
||||||
|
data.put("enteredBy", MainApp.instance().getString(R.string.app_name));
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putString("action", "dbAdd");
|
||||||
|
bundle.putString("collection", "treatments");
|
||||||
|
bundle.putString("data", data.toString());
|
||||||
|
Intent intent = new Intent(Intents.ACTION_DATABASE);
|
||||||
|
intent.putExtras(bundle);
|
||||||
|
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
|
||||||
|
context.sendBroadcast(intent);
|
||||||
|
List<ResolveInfo> q = context.getPackageManager().queryBroadcastReceivers(intent, 0);
|
||||||
|
if (q.size() < 1) {
|
||||||
|
log.error("DBADD No receivers");
|
||||||
|
} else log.debug("DBADD dbAdd " + q.size() + " receivers " + data.toString());
|
||||||
|
} catch (JSONException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import android.os.Bundle;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -223,7 +222,7 @@ public class LoopFragment extends Fragment implements View.OnClickListener, Plug
|
||||||
PumpInterface pumpInterface = MainActivity.getConfigBuilder().getActivePump();
|
PumpInterface pumpInterface = MainActivity.getConfigBuilder().getActivePump();
|
||||||
APSResult result = null;
|
APSResult result = null;
|
||||||
|
|
||||||
if (constrainsInterface == null || pumpInterface == null)
|
if (constrainsInterface == null || pumpInterface == null || !isEnabled())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
APSInterface usedAPS = null;
|
APSInterface usedAPS = null;
|
||||||
|
|
|
@ -32,15 +32,14 @@ import info.nightscout.androidaps.interfaces.PluginBase;
|
||||||
import info.nightscout.client.data.NSProfile;
|
import info.nightscout.client.data.NSProfile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LOW SUSPEND ALGORITHM
|
* LOW SUSPEND ALGORITHM
|
||||||
*
|
* <p/>
|
||||||
* Define projection as BG + 6 * avgdelta (estimated BG in 30 min)
|
* Define projection as BG + 6 * avgdelta (estimated BG in 30 min)
|
||||||
*
|
* <p/>
|
||||||
* If BG is bellow low threshold and projection too: set basal rate to 0 U/h if low temp is not running
|
* If BG is bellow low threshold and projection too: set basal rate to 0 U/h if low temp is not running
|
||||||
* else if projection is bellow low threshold: set basal rate to 0 U/h if low temp is not running
|
* else if projection is bellow low threshold: set basal rate to 0 U/h if low temp is not running
|
||||||
* else if exists low temp: cancel it
|
* else if exists low temp: cancel it
|
||||||
* else no change
|
* else no change
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class LowSuspendFragment extends Fragment implements View.OnClickListener, PluginBase, APSInterface {
|
public class LowSuspendFragment extends Fragment implements View.OnClickListener, PluginBase, APSInterface {
|
||||||
|
@ -224,21 +223,31 @@ public class LowSuspendFragment extends Fragment implements View.OnClickListener
|
||||||
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
||||||
PumpInterface pump = MainActivity.getConfigBuilder().getActivePump();
|
PumpInterface pump = MainActivity.getConfigBuilder().getActivePump();
|
||||||
|
|
||||||
|
if (!isEnabled()) {
|
||||||
|
updateResultGUI(MainApp.instance().getString(R.string.openapsma_disabled));
|
||||||
|
if (Config.logAPSResult)
|
||||||
|
log.debug(MainApp.instance().getString(R.string.openapsma_disabled));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (glucoseStatus == null) {
|
if (glucoseStatus == null) {
|
||||||
updateResultGUI(MainApp.instance().getString(R.string.openapsma_noglucosedata));
|
updateResultGUI(MainApp.instance().getString(R.string.openapsma_noglucosedata));
|
||||||
if (Config.logAPSResult) log.debug(MainApp.instance().getString(R.string.openapsma_noglucosedata));
|
if (Config.logAPSResult)
|
||||||
|
log.debug(MainApp.instance().getString(R.string.openapsma_noglucosedata));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (profile == null) {
|
if (profile == null) {
|
||||||
updateResultGUI(MainApp.instance().getString(R.string.openapsma_noprofile));
|
updateResultGUI(MainApp.instance().getString(R.string.openapsma_noprofile));
|
||||||
if (Config.logAPSResult) log.debug(MainApp.instance().getString(R.string.openapsma_noprofile));
|
if (Config.logAPSResult)
|
||||||
|
log.debug(MainApp.instance().getString(R.string.openapsma_noprofile));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pump == null) {
|
if (pump == null) {
|
||||||
updateResultGUI(MainApp.instance().getString(R.string.openapsma_nopump));
|
updateResultGUI(MainApp.instance().getString(R.string.openapsma_nopump));
|
||||||
if (Config.logAPSResult) log.debug(MainApp.instance().getString(R.string.openapsma_nopump));
|
if (Config.logAPSResult)
|
||||||
|
log.debug(MainApp.instance().getString(R.string.openapsma_nopump));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,7 +256,7 @@ public class LowSuspendFragment extends Fragment implements View.OnClickListener
|
||||||
minBgDefault = "5";
|
minBgDefault = "5";
|
||||||
}
|
}
|
||||||
|
|
||||||
double minBg = NSProfile.toMgdl(Double.parseDouble(SP.getString("min_bg", minBgDefault).replace(",", ".")), profile.getUnits());
|
double minBg = NSProfile.toMgdl(Double.parseDouble(SP.getString("lowsuspend_lowthreshold", minBgDefault).replace(",", ".")), profile.getUnits());
|
||||||
|
|
||||||
boolean lowProjected = (glucoseStatus.glucose + 6.0 * glucoseStatus.avgdelta) < minBg;
|
boolean lowProjected = (glucoseStatus.glucose + 6.0 * glucoseStatus.avgdelta) < minBg;
|
||||||
boolean low = glucoseStatus.glucose < minBg;
|
boolean low = glucoseStatus.glucose < minBg;
|
||||||
|
@ -325,16 +334,12 @@ public class LowSuspendFragment extends Fragment implements View.OnClickListener
|
||||||
activity.runOnUiThread(new Runnable() {
|
activity.runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (lastRun != null) {
|
resultView.setText(text);
|
||||||
resultView.setText(text);
|
glucoseStatusView.setText("");
|
||||||
glucoseStatusView.setText("");
|
minBgView.setText("");
|
||||||
minBgView.setText("");
|
requestView.setText("");
|
||||||
requestView.setText("");
|
lastRunView.setText("");
|
||||||
lastRunView.setText("");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
else
|
|
||||||
log.debug("EventNewBG: Activity is null");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,21 +218,31 @@ public class OpenAPSMAFragment extends Fragment implements View.OnClickListener,
|
||||||
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
||||||
PumpInterface pump = MainActivity.getConfigBuilder().getActivePump();
|
PumpInterface pump = MainActivity.getConfigBuilder().getActivePump();
|
||||||
|
|
||||||
|
if (!isEnabled()) {
|
||||||
|
updateResultGUI(MainApp.instance().getString(R.string.openapsma_disabled));
|
||||||
|
if (Config.logAPSResult)
|
||||||
|
log.debug(MainApp.instance().getString(R.string.openapsma_disabled));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (glucoseStatus == null) {
|
if (glucoseStatus == null) {
|
||||||
updateResultGUI(MainApp.instance().getString(R.string.openapsma_noglucosedata));
|
updateResultGUI(MainApp.instance().getString(R.string.openapsma_noglucosedata));
|
||||||
if (Config.logAPSResult) log.debug(MainApp.instance().getString(R.string.openapsma_noglucosedata));
|
if (Config.logAPSResult)
|
||||||
|
log.debug(MainApp.instance().getString(R.string.openapsma_noglucosedata));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (profile == null) {
|
if (profile == null) {
|
||||||
updateResultGUI(MainApp.instance().getString(R.string.openapsma_noprofile));
|
updateResultGUI(MainApp.instance().getString(R.string.openapsma_noprofile));
|
||||||
if (Config.logAPSResult) log.debug(MainApp.instance().getString(R.string.openapsma_noprofile));
|
if (Config.logAPSResult)
|
||||||
|
log.debug(MainApp.instance().getString(R.string.openapsma_noprofile));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pump == null) {
|
if (pump == null) {
|
||||||
updateResultGUI(getString(R.string.openapsma_nopump));
|
updateResultGUI(getString(R.string.openapsma_nopump));
|
||||||
if (Config.logAPSResult) log.debug(MainApp.instance().getString(R.string.openapsma_nopump));
|
if (Config.logAPSResult)
|
||||||
|
log.debug(MainApp.instance().getString(R.string.openapsma_nopump));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,12 +258,10 @@ public class OpenAPSMAFragment extends Fragment implements View.OnClickListener,
|
||||||
|
|
||||||
Date now = new Date();
|
Date now = new Date();
|
||||||
|
|
||||||
// TODO: objectives limits
|
double maxIob = Double.parseDouble(SP.getString("openapsma_max_iob", "1.5").replace(",", "."));
|
||||||
double maxIob = Double.parseDouble(SP.getString("max_iob", "1.5").replace(",", "."));
|
double maxBasal = Double.parseDouble(SP.getString("openapsma_max_basal", "1").replace(",", "."));
|
||||||
double maxBasal = Double.parseDouble(SP.getString("max_basal", "1").replace(",", "."));
|
double minBg = NSProfile.toMgdl(Double.parseDouble(SP.getString("openapsma_min_bg", minBgDefault).replace(",", ".")), units);
|
||||||
// TODO: min_bg, max_bg in prefs
|
double maxBg = NSProfile.toMgdl(Double.parseDouble(SP.getString("openapsma_max_bg", maxBgDefault).replace(",", ".")), units);
|
||||||
double minBg = NSProfile.toMgdl(Double.parseDouble(SP.getString("min_bg", minBgDefault).replace(",", ".")), units);
|
|
||||||
double maxBg = NSProfile.toMgdl(Double.parseDouble(SP.getString("max_bg", maxBgDefault).replace(",", ".")), units);
|
|
||||||
|
|
||||||
TreatmentsInterface treatments = MainActivity.getConfigBuilder().getActiveTreatments();
|
TreatmentsInterface treatments = MainActivity.getConfigBuilder().getActiveTreatments();
|
||||||
TempBasalsInterface tempBasals = MainActivity.getConfigBuilder().getActiveTempBasals();
|
TempBasalsInterface tempBasals = MainActivity.getConfigBuilder().getActiveTempBasals();
|
||||||
|
@ -306,8 +314,6 @@ public class OpenAPSMAFragment extends Fragment implements View.OnClickListener,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
else
|
|
||||||
log.debug("EventNewBG: Activity is null");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateResultGUI(final String text) {
|
void updateResultGUI(final String text) {
|
||||||
|
@ -316,19 +322,15 @@ public class OpenAPSMAFragment extends Fragment implements View.OnClickListener,
|
||||||
activity.runOnUiThread(new Runnable() {
|
activity.runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (lastRun != null) {
|
resultView.setText(text);
|
||||||
resultView.setText(text);
|
glucoseStatusView.setText("");
|
||||||
glucoseStatusView.setText("");
|
currentTempView.setText("");
|
||||||
currentTempView.setText("");
|
iobDataView.setText("");
|
||||||
iobDataView.setText("");
|
profileView.setText("");
|
||||||
profileView.setText("");
|
mealDataView.setText("");
|
||||||
mealDataView.setText("");
|
requestView.setText("");
|
||||||
requestView.setText("");
|
lastRunView.setText("");
|
||||||
lastRunView.setText("");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
else
|
|
||||||
log.debug("EventNewBG: Activity is null");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
package info.nightscout.androidaps.plugins.Treatments.Dialogs;
|
package info.nightscout.androidaps.plugins.Overview.Dialogs;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.content.DialogInterface;
|
||||||
import android.app.DialogFragment;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.view.*;
|
import android.view.*;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
@ -13,6 +15,8 @@ import android.widget.TextView;
|
||||||
import info.nightscout.androidaps.MainActivity;
|
import info.nightscout.androidaps.MainActivity;
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
|
import info.nightscout.androidaps.Services.Intents;
|
||||||
|
import info.nightscout.androidaps.data.Result;
|
||||||
|
|
||||||
public class NewTreatmentDialogFragment extends DialogFragment implements OnClickListener {
|
public class NewTreatmentDialogFragment extends DialogFragment implements OnClickListener {
|
||||||
|
|
||||||
|
@ -41,8 +45,8 @@ public class NewTreatmentDialogFragment extends DialogFragment implements OnClic
|
||||||
switch (view.getId()) {
|
switch (view.getId()) {
|
||||||
case R.id.treatments_newtreatment_deliverbutton:
|
case R.id.treatments_newtreatment_deliverbutton:
|
||||||
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
||||||
Double maxbolus = Double.parseDouble(SP.getString("safety_maxbolus", "3"));
|
Double maxbolus = Double.parseDouble(SP.getString("treatmentssafety_maxbolus", "3"));
|
||||||
Double maxcarbs = Double.parseDouble(SP.getString("safety_maxcarbs", "48"));
|
Double maxcarbs = Double.parseDouble(SP.getString("treatmentssafety_maxcarbs", "48"));
|
||||||
|
|
||||||
|
|
||||||
String insulinText = this.insulin.getText().toString().replace(",", ".");
|
String insulinText = this.insulin.getText().toString().replace(",", ".");
|
||||||
|
@ -55,7 +59,15 @@ public class NewTreatmentDialogFragment extends DialogFragment implements OnClic
|
||||||
this.carbs.setText("");
|
this.carbs.setText("");
|
||||||
} else if (insulin > 0d || carbs > 0d) {
|
} else if (insulin > 0d || carbs > 0d) {
|
||||||
dismiss();
|
dismiss();
|
||||||
MainActivity.getConfigBuilder().getActivePump().deliverTreatment(insulin, carbs);
|
Result result = MainActivity.getConfigBuilder().getActivePump().deliverTreatment(insulin, carbs);
|
||||||
|
if (!result.success) {
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());
|
||||||
|
builder.setTitle(this.getContext().getString(R.string.bolusdeliveryerror));
|
||||||
|
builder.setMessage(result.comment);
|
||||||
|
builder.setPositiveButton(this.getContext().getString(R.string.ok), null);
|
||||||
|
builder.show();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
|
@ -1,10 +1,9 @@
|
||||||
package info.nightscout.androidaps.plugins.Treatments.Dialogs;
|
package info.nightscout.androidaps.plugins.Overview.Dialogs;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.DialogFragment;
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.view.*;
|
import android.view.*;
|
||||||
|
@ -15,19 +14,15 @@ import android.widget.CompoundButton;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
import info.nightscout.androidaps.Constants;
|
import info.nightscout.androidaps.Constants;
|
||||||
import info.nightscout.androidaps.MainActivity;
|
import info.nightscout.androidaps.MainActivity;
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.data.Iob;
|
|
||||||
import info.nightscout.androidaps.db.BgReading;
|
import info.nightscout.androidaps.db.BgReading;
|
||||||
import info.nightscout.androidaps.db.Treatment;
|
|
||||||
import info.nightscout.androidaps.interfaces.TempBasalsInterface;
|
import info.nightscout.androidaps.interfaces.TempBasalsInterface;
|
||||||
import info.nightscout.androidaps.interfaces.TreatmentsInterface;
|
import info.nightscout.androidaps.interfaces.TreatmentsInterface;
|
||||||
import info.nightscout.androidaps.plugins.OpenAPSMA.IobTotal;
|
import info.nightscout.androidaps.plugins.OpenAPSMA.IobTotal;
|
||||||
import info.nightscout.androidaps.plugins.Treatments.TreatmentsFragment;
|
|
||||||
import info.nightscout.client.data.NSProfile;
|
import info.nightscout.client.data.NSProfile;
|
||||||
import info.nightscout.utils.*;
|
import info.nightscout.utils.*;
|
||||||
|
|
||||||
|
@ -123,8 +118,6 @@ public class WizardDialogFragment extends DialogFragment implements OnClickListe
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initDialog() {
|
private void initDialog() {
|
||||||
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
|
||||||
String units = SP.getString("ns_units", Constants.MGDL);
|
|
||||||
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
||||||
|
|
||||||
if (profile == null) {
|
if (profile == null) {
|
||||||
|
@ -133,6 +126,7 @@ public class WizardDialogFragment extends DialogFragment implements OnClickListe
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String units = profile.getUnits();
|
||||||
bgUnits.setText(units);
|
bgUnits.setText(units);
|
||||||
|
|
||||||
// Set BG if not old
|
// Set BG if not old
|
||||||
|
@ -177,9 +171,8 @@ public class WizardDialogFragment extends DialogFragment implements OnClickListe
|
||||||
|
|
||||||
private void calculateInsulin() {
|
private void calculateInsulin() {
|
||||||
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
||||||
Double maxbolus = Double.parseDouble(SP.getString("safety_maxbolus", "3"));
|
Double maxbolus = Double.parseDouble(SP.getString("treatmentssafety_maxbolus", "3"));
|
||||||
Double maxcarbs = Double.parseDouble(SP.getString("safety_maxcarbs", "48"));
|
Double maxcarbs = Double.parseDouble(SP.getString("treatmentssafety_maxcarbs", "48"));
|
||||||
String units = SP.getString("ns_units", Constants.MGDL);
|
|
||||||
|
|
||||||
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
||||||
|
|
||||||
|
@ -268,11 +261,6 @@ public class WizardDialogFragment extends DialogFragment implements OnClickListe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private double fromMgdl(Double value, String units) {
|
|
||||||
if (units.equals(Constants.MGDL)) return value;
|
|
||||||
else return value / 18;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Double roundTo(Double x, Double step) {
|
private Double roundTo(Double x, Double step) {
|
||||||
if (x != 0d) {
|
if (x != 0d) {
|
||||||
return Math.round(x / step) * step;
|
return Math.round(x / step) * step;
|
|
@ -6,9 +6,12 @@ import android.graphics.Paint;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.jjoe64.graphview.GraphView;
|
import com.jjoe64.graphview.GraphView;
|
||||||
|
@ -32,9 +35,13 @@ import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.db.BgReading;
|
import info.nightscout.androidaps.db.BgReading;
|
||||||
import info.nightscout.androidaps.db.DatabaseHelper;
|
import info.nightscout.androidaps.db.DatabaseHelper;
|
||||||
|
import info.nightscout.androidaps.db.TempBasal;
|
||||||
import info.nightscout.androidaps.events.EventNewBG;
|
import info.nightscout.androidaps.events.EventNewBG;
|
||||||
import info.nightscout.androidaps.events.EventTempBasalChange;
|
import info.nightscout.androidaps.events.EventTempBasalChange;
|
||||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||||
|
import info.nightscout.androidaps.interfaces.PumpInterface;
|
||||||
|
import info.nightscout.androidaps.plugins.Overview.Dialogs.NewTreatmentDialogFragment;
|
||||||
|
import info.nightscout.androidaps.plugins.Overview.Dialogs.WizardDialogFragment;
|
||||||
import info.nightscout.client.data.NSProfile;
|
import info.nightscout.client.data.NSProfile;
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,6 +53,10 @@ public class OverviewFragment extends Fragment implements PluginBase {
|
||||||
TextView deltaView;
|
TextView deltaView;
|
||||||
GraphView bgGraph;
|
GraphView bgGraph;
|
||||||
|
|
||||||
|
Button cancelTempButton;
|
||||||
|
Button treatmentButton;
|
||||||
|
Button wizardButton;
|
||||||
|
|
||||||
boolean visibleNow = false;
|
boolean visibleNow = false;
|
||||||
Handler loopHandler = new Handler();
|
Handler loopHandler = new Handler();
|
||||||
Runnable refreshLoop = null;
|
Runnable refreshLoop = null;
|
||||||
|
@ -108,7 +119,7 @@ public class OverviewFragment extends Fragment implements PluginBase {
|
||||||
activity.runOnUiThread(new Runnable() {
|
activity.runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
updateData();
|
updateGUI();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -127,8 +138,39 @@ public class OverviewFragment extends Fragment implements PluginBase {
|
||||||
timeAgoView = (TextView) view.findViewById(R.id.overview_timeago);
|
timeAgoView = (TextView) view.findViewById(R.id.overview_timeago);
|
||||||
deltaView = (TextView) view.findViewById(R.id.overview_delta);
|
deltaView = (TextView) view.findViewById(R.id.overview_delta);
|
||||||
bgGraph = (GraphView) view.findViewById(R.id.overview_bggraph);
|
bgGraph = (GraphView) view.findViewById(R.id.overview_bggraph);
|
||||||
|
cancelTempButton = (Button) view.findViewById(R.id.overview_canceltemp);
|
||||||
|
treatmentButton = (Button) view.findViewById(R.id.overview_treatment);
|
||||||
|
wizardButton = (Button) view.findViewById(R.id.overview_wizard);
|
||||||
|
|
||||||
updateData();
|
treatmentButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
FragmentManager manager = getFragmentManager();
|
||||||
|
NewTreatmentDialogFragment treatmentDialogFragment = new NewTreatmentDialogFragment();
|
||||||
|
treatmentDialogFragment.show(manager, "TreatmentDialog");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
wizardButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
FragmentManager manager = getFragmentManager();
|
||||||
|
WizardDialogFragment wizardDialogFragment = new WizardDialogFragment();
|
||||||
|
wizardDialogFragment.show(manager, "WizardDialog");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
cancelTempButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
PumpInterface pump = MainActivity.getConfigBuilder().getActivePump();
|
||||||
|
if (pump.isTempBasalInProgress()) {
|
||||||
|
pump.cancelTempBasal();
|
||||||
|
MainApp.bus().post(new EventTempBasalChange());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
updateGUI();
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,7 +183,47 @@ public class OverviewFragment extends Fragment implements PluginBase {
|
||||||
MainApp.bus().register(this);
|
MainApp.bus().register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateData() {
|
@Subscribe
|
||||||
|
public void onStatusEvent(final EventTempBasalChange ev) {
|
||||||
|
Activity activity = getActivity();
|
||||||
|
if (activity != null)
|
||||||
|
activity.runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
updateGUI();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
else
|
||||||
|
log.debug("EventTempBasalChange: Activity is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onStatusEvent(final EventNewBG ev) {
|
||||||
|
Activity activity = getActivity();
|
||||||
|
if (activity != null)
|
||||||
|
activity.runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
updateGUI();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
else
|
||||||
|
log.debug("EventNewBG: Activity is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||||
|
super.setUserVisibleHint(isVisibleToUser);
|
||||||
|
|
||||||
|
if (isVisibleToUser) {
|
||||||
|
updateGUI();
|
||||||
|
visibleNow = true;
|
||||||
|
} else {
|
||||||
|
visibleNow = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateGUI() {
|
||||||
BgReading actualBG = MainApp.getDbHelper().actualBg();
|
BgReading actualBG = MainApp.getDbHelper().actualBg();
|
||||||
BgReading lastBG = MainApp.getDbHelper().lastBg();
|
BgReading lastBG = MainApp.getDbHelper().lastBg();
|
||||||
if (MainActivity.getConfigBuilder() == null || MainActivity.getConfigBuilder().getActiveProfile() == null) // app not initialized yet
|
if (MainActivity.getConfigBuilder() == null || MainActivity.getConfigBuilder().getActiveProfile() == null) // app not initialized yet
|
||||||
|
@ -156,6 +238,17 @@ public class OverviewFragment extends Fragment implements PluginBase {
|
||||||
if (bgGraph == null)
|
if (bgGraph == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// **** Temp button ****
|
||||||
|
PumpInterface pump = MainActivity.getConfigBuilder().getActivePump();
|
||||||
|
|
||||||
|
if (pump.isTempBasalInProgress()) {
|
||||||
|
TempBasal activeTemp = pump.getTempBasal();
|
||||||
|
cancelTempButton.setVisibility(View.VISIBLE);
|
||||||
|
cancelTempButton.setText(MainApp.instance().getString(R.string.cancel) + ": " + activeTemp.toString());
|
||||||
|
} else {
|
||||||
|
cancelTempButton.setVisibility(View.INVISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
// **** BG value ****
|
// **** BG value ****
|
||||||
if (profile != null && lastBG != null && bgView != null) {
|
if (profile != null && lastBG != null && bgView != null) {
|
||||||
bgView.setText(lastBG.valueToUnitsToString(profile.getUnits()));
|
bgView.setText(lastBG.valueToUnitsToString(profile.getUnits()));
|
||||||
|
@ -260,44 +353,4 @@ public class OverviewFragment extends Fragment implements PluginBase {
|
||||||
bgGraph.getGridLabelRenderer().setNumVerticalLabels(11);
|
bgGraph.getGridLabelRenderer().setNumVerticalLabels(11);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onStatusEvent(final EventTempBasalChange ev) {
|
|
||||||
Activity activity = getActivity();
|
|
||||||
if (activity != null)
|
|
||||||
activity.runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
updateData();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
else
|
|
||||||
log.debug("EventTempBasalChange: Activity is null");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onStatusEvent(final EventNewBG ev) {
|
|
||||||
Activity activity = getActivity();
|
|
||||||
if (activity != null)
|
|
||||||
activity.runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
updateData();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
else
|
|
||||||
log.debug("EventNewBG: Activity is null");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
|
||||||
super.setUserVisibleHint(isVisibleToUser);
|
|
||||||
|
|
||||||
if (isVisibleToUser) {
|
|
||||||
updateData();
|
|
||||||
visibleNow = true;
|
|
||||||
} else {
|
|
||||||
visibleNow = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ package info.nightscout.androidaps.plugins.SafetyFragment;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceFragment;
|
import android.preference.PreferenceFragment;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
|
@ -29,24 +30,6 @@ import info.nightscout.client.data.NSProfile;
|
||||||
public class SafetyFragment extends Fragment implements PluginBase, ConstrainsInterface {
|
public class SafetyFragment extends Fragment implements PluginBase, ConstrainsInterface {
|
||||||
private static Logger log = LoggerFactory.getLogger(SafetyFragment.class);
|
private static Logger log = LoggerFactory.getLogger(SafetyFragment.class);
|
||||||
|
|
||||||
private static final String PREFS_NAME = "Safety";
|
|
||||||
|
|
||||||
EditText maxBolusEdit;
|
|
||||||
EditText maxCarbsEdit;
|
|
||||||
EditText maxBasalEdit;
|
|
||||||
EditText maxBasalIOBEdit;
|
|
||||||
|
|
||||||
Double maxBolus;
|
|
||||||
Double maxCarbs;
|
|
||||||
Double maxBasal;
|
|
||||||
Double maxBasalIOB;
|
|
||||||
|
|
||||||
boolean fragmentVisible = true;
|
|
||||||
|
|
||||||
public SafetyFragment() {
|
|
||||||
super();
|
|
||||||
loadSettings();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getType() {
|
public int getType() {
|
||||||
|
@ -65,7 +48,7 @@ public class SafetyFragment extends Fragment implements PluginBase, ConstrainsIn
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isVisibleInTabs() {
|
public boolean isVisibleInTabs() {
|
||||||
return fragmentVisible;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -80,7 +63,6 @@ public class SafetyFragment extends Fragment implements PluginBase, ConstrainsIn
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setFragmentVisible(boolean fragmentVisible) {
|
public void setFragmentVisible(boolean fragmentVisible) {
|
||||||
this.fragmentVisible = fragmentVisible;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SafetyFragment newInstance() {
|
public static SafetyFragment newInstance() {
|
||||||
|
@ -88,72 +70,6 @@ public class SafetyFragment extends Fragment implements PluginBase, ConstrainsIn
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
||||||
Bundle savedInstanceState) {
|
|
||||||
View layout = inflater.inflate(R.layout.safety_fragment, container, false);
|
|
||||||
maxBolusEdit = (EditText) layout.findViewById(R.id.safety_maxbolus);
|
|
||||||
maxCarbsEdit = (EditText) layout.findViewById(R.id.safety_maxcarbs);
|
|
||||||
maxBasalEdit = (EditText) layout.findViewById(R.id.safety_maxbasal);
|
|
||||||
maxBasalIOBEdit = (EditText) layout.findViewById(R.id.safety_maxiob);
|
|
||||||
|
|
||||||
maxBolusEdit.setText(maxBolus.toString());
|
|
||||||
maxCarbsEdit.setText(maxCarbs.toString());
|
|
||||||
maxBasalEdit.setText(maxBasal.toString());
|
|
||||||
maxBasalIOBEdit.setText(maxBasalIOB.toString());
|
|
||||||
|
|
||||||
TextWatcher textWatch = new TextWatcher() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterTextChanged(Editable s) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void beforeTextChanged(CharSequence s, int start,
|
|
||||||
int count, int after) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTextChanged(CharSequence s, int start,
|
|
||||||
int before, int count) {
|
|
||||||
try { maxBolus = Double.parseDouble(maxBolusEdit.getText().toString().replace(",", ".")); } catch (Exception e) {};
|
|
||||||
try { maxCarbs = Double.parseDouble(maxCarbsEdit.getText().toString().replace(",", ".")); } catch (Exception e) {};
|
|
||||||
try { maxBasal = Double.parseDouble(maxBasalEdit.getText().toString().replace(",", ".")); } catch (Exception e) {};
|
|
||||||
try { maxBasalIOB = Double.parseDouble(maxBasalIOBEdit.getText().toString().replace(",", ".")); } catch (Exception e) {};
|
|
||||||
storeSettings();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
maxBolusEdit.addTextChangedListener(textWatch);
|
|
||||||
maxCarbsEdit.addTextChangedListener(textWatch);
|
|
||||||
maxBasalEdit.addTextChangedListener(textWatch);
|
|
||||||
maxBasalIOBEdit.addTextChangedListener(textWatch);
|
|
||||||
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void storeSettings() {
|
|
||||||
if (Config.logPrefsChange)
|
|
||||||
log.debug("Storing settings");
|
|
||||||
SharedPreferences settings = MainApp.instance().getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
|
|
||||||
SharedPreferences.Editor editor = settings.edit();
|
|
||||||
editor.putFloat("maxBolus", new Float(maxBolus));
|
|
||||||
editor.putFloat("maxCarbs", new Float(maxCarbs));
|
|
||||||
editor.putFloat("maxBasal", new Float(maxBasal));
|
|
||||||
editor.putFloat("maxBasalIOB", new Float(maxBasalIOB));
|
|
||||||
editor.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadSettings() {
|
|
||||||
if (Config.logPrefsChange)
|
|
||||||
log.debug("Loading stored settings");
|
|
||||||
SharedPreferences settings = MainApp.instance().getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
|
|
||||||
|
|
||||||
if (settings.contains("maxBolus")) maxBolus = (double) settings.getFloat("maxBolus", 3); else maxBolus = 3d;
|
|
||||||
if (settings.contains("maxCarbs")) maxCarbs = (double) settings.getFloat("maxCarbs", 48); else maxCarbs = 48d;
|
|
||||||
if (settings.contains("maxBasal")) maxBasal = (double) settings.getFloat("maxBasal", 1); else maxBasal = 1d;
|
|
||||||
if (settings.contains("maxBasalIOB")) maxBasalIOB = (double) settings.getFloat("maxBasalIOB", 1); else maxBasalIOB = 1d;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constrains interface
|
* Constrains interface
|
||||||
**/
|
**/
|
||||||
|
@ -169,6 +85,9 @@ public class SafetyFragment extends Fragment implements PluginBase, ConstrainsIn
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public APSResult applyBasalConstrains(APSResult result) {
|
public APSResult applyBasalConstrains(APSResult result) {
|
||||||
|
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
||||||
|
Double maxBasal = Double.parseDouble(SP.getString("openapsma_max_basal", "1").replace(",", "."));
|
||||||
|
|
||||||
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
||||||
if (result.rate < 0) result.rate = 0;
|
if (result.rate < 0) result.rate = 0;
|
||||||
|
|
||||||
|
@ -179,7 +98,7 @@ public class SafetyFragment extends Fragment implements PluginBase, ConstrainsIn
|
||||||
if (result.rate > maxBasal) {
|
if (result.rate > maxBasal) {
|
||||||
result.rate = maxBasal;
|
result.rate = maxBasal;
|
||||||
if (Config.logConstrainsChnages)
|
if (Config.logConstrainsChnages)
|
||||||
log.debug("Limiting rate " + origRate + " by maxBasal to " + result.rate + "U/h");
|
log.debug("Limiting rate " + origRate + " by maxBasal preference to " + result.rate + "U/h");
|
||||||
}
|
}
|
||||||
if (result.rate > maxBasalMult * profile.getBasal(NSProfile.secondsFromMidnight())) {
|
if (result.rate > maxBasalMult * profile.getBasal(NSProfile.secondsFromMidnight())) {
|
||||||
result.rate = Math.floor(maxBasalMult * profile.getBasal(NSProfile.secondsFromMidnight()) * 100) / 100;
|
result.rate = Math.floor(maxBasalMult * profile.getBasal(NSProfile.secondsFromMidnight()) * 100) / 100;
|
||||||
|
|
|
@ -326,6 +326,7 @@ public class TreatmentsFragment extends Fragment implements View.OnClickListener
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onStatusEvent(final EventTreatmentChange ev) {
|
public void onStatusEvent(final EventTreatmentChange ev) {
|
||||||
initializeData();
|
initializeData();
|
||||||
|
updateGUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateGUI() {
|
public void updateGUI() {
|
||||||
|
|
|
@ -3,6 +3,8 @@ package info.nightscout.androidaps.plugins.VirtualPump;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -24,6 +26,7 @@ import info.nightscout.androidaps.Config;
|
||||||
import info.nightscout.androidaps.MainActivity;
|
import info.nightscout.androidaps.MainActivity;
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
|
import info.nightscout.androidaps.events.EventTreatmentChange;
|
||||||
import info.nightscout.androidaps.interfaces.PumpInterface;
|
import info.nightscout.androidaps.interfaces.PumpInterface;
|
||||||
import info.nightscout.androidaps.data.Result;
|
import info.nightscout.androidaps.data.Result;
|
||||||
import info.nightscout.androidaps.db.TempBasal;
|
import info.nightscout.androidaps.db.TempBasal;
|
||||||
|
@ -49,6 +52,9 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
|
||||||
TextView batteryView;
|
TextView batteryView;
|
||||||
TextView reservoirView;
|
TextView reservoirView;
|
||||||
|
|
||||||
|
Handler loopHandler = new Handler();
|
||||||
|
Runnable refreshLoop = null;
|
||||||
|
|
||||||
boolean fragmentEnabled = true;
|
boolean fragmentEnabled = true;
|
||||||
boolean fragmentVisible = true;
|
boolean fragmentVisible = true;
|
||||||
boolean visibleNow = false;
|
boolean visibleNow = false;
|
||||||
|
@ -92,6 +98,21 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
if (refreshLoop == null) {
|
||||||
|
refreshLoop = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
updateGUI();
|
||||||
|
loopHandler.postDelayed(refreshLoop, 60 * 1000l);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
loopHandler.postDelayed(refreshLoop, 60 * 1000l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
|
@ -121,6 +142,7 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
|
||||||
if (Config.logPumpComm)
|
if (Config.logPumpComm)
|
||||||
log.debug("Canceling expired temp: " + tempBasal);
|
log.debug("Canceling expired temp: " + tempBasal);
|
||||||
tempBasal = null;
|
tempBasal = null;
|
||||||
|
MainApp.bus().post(new EventTreatmentChange());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isExtendedBoluslInProgress()) {
|
if (isExtendedBoluslInProgress()) {
|
||||||
|
@ -189,6 +211,11 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TempBasal getTempBasal() {
|
||||||
|
return tempBasal;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getTempBasalRemainingMinutes() {
|
public double getTempBasalRemainingMinutes() {
|
||||||
if (!isTempBasalInProgress())
|
if (!isTempBasalInProgress())
|
||||||
|
@ -203,19 +230,8 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
|
||||||
result.bolusDelivered = insulin;
|
result.bolusDelivered = insulin;
|
||||||
result.comment = getString(R.string.virtualpump_resultok);
|
result.comment = getString(R.string.virtualpump_resultok);
|
||||||
|
|
||||||
Treatment t = new Treatment();
|
|
||||||
t.insulin = insulin;
|
|
||||||
t.carbs = carbs;
|
|
||||||
t.created_at = new Date();
|
|
||||||
try {
|
|
||||||
MainApp.instance().getDbHelper().getDaoTreatments().create(t);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
result.success = false;
|
|
||||||
result.comment = getString(R.string.virtualpump_sqlerror);
|
|
||||||
}
|
|
||||||
if (Config.logPumpComm)
|
if (Config.logPumpComm)
|
||||||
log.debug("Delivering treatment: " + t + " " + result);
|
log.debug("Delivering treatment insulin: " + insulin + "U carbs: " + carbs + "g " + result);
|
||||||
updateGUI();
|
updateGUI();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -233,6 +249,8 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
|
||||||
tempBasal.duration = durationInMinutes;
|
tempBasal.duration = durationInMinutes;
|
||||||
result.success = true;
|
result.success = true;
|
||||||
result.enacted = true;
|
result.enacted = true;
|
||||||
|
result.absolute = absoluteRate;
|
||||||
|
result.duration = durationInMinutes;
|
||||||
result.comment = getString(R.string.virtualpump_resultok);
|
result.comment = getString(R.string.virtualpump_resultok);
|
||||||
try {
|
try {
|
||||||
MainApp.instance().getDbHelper().getDaoTempBasals().create(tempBasal);
|
MainApp.instance().getDbHelper().getDaoTempBasals().create(tempBasal);
|
||||||
|
@ -263,6 +281,8 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
|
||||||
tempBasal.duration = durationInMinutes;
|
tempBasal.duration = durationInMinutes;
|
||||||
result.success = true;
|
result.success = true;
|
||||||
result.enacted = true;
|
result.enacted = true;
|
||||||
|
result.percent = percent;
|
||||||
|
result.duration = durationInMinutes;
|
||||||
result.comment = getString(R.string.virtualpump_resultok);
|
result.comment = getString(R.string.virtualpump_resultok);
|
||||||
try {
|
try {
|
||||||
MainApp.instance().getDbHelper().getDaoTempBasals().create(tempBasal);
|
MainApp.instance().getDbHelper().getDaoTempBasals().create(tempBasal);
|
||||||
|
@ -308,19 +328,20 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
|
||||||
public Result cancelTempBasal() {
|
public Result cancelTempBasal() {
|
||||||
checkForExpiredTempsAndExtended();
|
checkForExpiredTempsAndExtended();
|
||||||
Result result = new Result();
|
Result result = new Result();
|
||||||
|
result.success = true;
|
||||||
|
result.comment = getString(R.string.virtualpump_resultok);
|
||||||
if (isTempBasalInProgress()) {
|
if (isTempBasalInProgress()) {
|
||||||
|
result.enacted = true;
|
||||||
tempBasal.timeEnd = new Date();
|
tempBasal.timeEnd = new Date();
|
||||||
try {
|
try {
|
||||||
MainApp.instance().getDbHelper().getDaoTempBasals().update(tempBasal);
|
MainApp.instance().getDbHelper().getDaoTempBasals().update(tempBasal);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
result.success = false;
|
result.success = false;
|
||||||
|
result.enacted = false;
|
||||||
result.comment = getString(R.string.virtualpump_sqlerror);
|
result.comment = getString(R.string.virtualpump_sqlerror);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result.success = true;
|
|
||||||
result.enacted = true;
|
|
||||||
result.comment = getString(R.string.virtualpump_resultok);
|
|
||||||
tempBasal = null;
|
tempBasal = null;
|
||||||
if (Config.logPumpComm)
|
if (Config.logPumpComm)
|
||||||
log.debug("Canceling temp basal: " + result);
|
log.debug("Canceling temp basal: " + result);
|
||||||
|
@ -421,28 +442,15 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, PumpInt
|
||||||
activity.runOnUiThread(new Runnable() {
|
activity.runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
DateFormat formatDateToJustTime = new SimpleDateFormat("HH:mm");
|
|
||||||
DecimalFormat formatNumber2decimalplaces = new DecimalFormat("0.00");
|
|
||||||
|
|
||||||
|
|
||||||
basaBasalRateView.setText(getBaseBasalRate() + "U");
|
basaBasalRateView.setText(getBaseBasalRate() + "U");
|
||||||
if (isTempBasalInProgress()) {
|
if (isTempBasalInProgress()) {
|
||||||
if (tempBasal.isAbsolute) {
|
tempBasalView.setText(tempBasal.toString());
|
||||||
tempBasalView.setText(formatNumber2decimalplaces.format(tempBasal.absolute) + "U/h @" +
|
|
||||||
formatDateToJustTime.format(tempBasal.timeStart) +
|
|
||||||
" " + tempBasal.getRemainingMinutes() + "/" + tempBasal.duration + "min");
|
|
||||||
} else { // percent
|
|
||||||
tempBasalView.setText(tempBasal.percent + "% @" +
|
|
||||||
formatDateToJustTime.format(tempBasal.timeStart) +
|
|
||||||
" " + tempBasal.getRemainingMinutes() + "/" + tempBasal.duration + "min");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
tempBasalView.setText("");
|
tempBasalView.setText("");
|
||||||
}
|
}
|
||||||
if (isExtendedBoluslInProgress()) {
|
if (isExtendedBoluslInProgress()) {
|
||||||
extendedBolusView.setText(formatNumber2decimalplaces.format(extendedBolus.absolute) + "U/h @" +
|
extendedBolusView.setText(extendedBolus.toString());
|
||||||
formatDateToJustTime.format(extendedBolus.timeStart) +
|
|
||||||
" " + extendedBolus.getRemainingMinutes() + "/" + extendedBolus.duration + "min");
|
|
||||||
} else {
|
} else {
|
||||||
extendedBolusView.setText("");
|
extendedBolusView.setText("");
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,18 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<Button
|
<LinearLayout
|
||||||
android:id="@+id/openapsma_run"
|
android:orientation="horizontal"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent">
|
||||||
android:text="@string/openapsma_run" />
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/openapsma_run"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/openapsma_run" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -50,6 +50,46 @@
|
||||||
android:id="@+id/overview_bggraph"
|
android:id="@+id/overview_bggraph"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="200dip" />
|
android:layout_height="200dip" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Cancel temp basal"
|
||||||
|
android:id="@+id/overview_canceltemp"
|
||||||
|
android:background="@color/colorCancelTempButton"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:layout_weight="0.5" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Treatment"
|
||||||
|
android:id="@+id/overview_treatment"
|
||||||
|
android:background="@color/colorTreatmentButton"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:layout_weight="0.5" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Calculator"
|
||||||
|
android:id="@+id/overview_wizard"
|
||||||
|
android:background="@color/colorWizardButton"
|
||||||
|
android:layout_margin="10dp"
|
||||||
|
android:layout_weight="0.5" />
|
||||||
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
|
@ -1,161 +0,0 @@
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
tools:context="info.nightscout.androidaps.plugins.OpenAPSMA.OpenAPSMAFragment">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/treatments"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
|
||||||
android:layout_gravity="center_horizontal" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/safety_maxbolus_title"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:layout_marginTop="20dp" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_horizontal">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/safety_maxbolus"
|
|
||||||
android:layout_width="100dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_column="1"
|
|
||||||
android:inputType="numberDecimal" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_column="2"
|
|
||||||
android:text="U"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/safety_maxcarbs_title"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:layout_marginTop="10dp" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_horizontal">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/safety_maxcarbs"
|
|
||||||
android:layout_width="100dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:ems="10"
|
|
||||||
android:inputType="numberDecimal" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:text="g" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="20dp"
|
|
||||||
android:text="@string/configbuilder_aps"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
|
||||||
android:layout_gravity="center_horizontal" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/maxbasal_title"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:layout_marginTop="20dp" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_horizontal">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/safety_maxbasal"
|
|
||||||
android:layout_width="100dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:ems="10"
|
|
||||||
android:inputType="numberDecimal" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:text="U/h" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/maxbasaliob_title"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:layout_marginTop="10dp" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_horizontal">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/safety_maxiob"
|
|
||||||
android:layout_width="100dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:ems="10"
|
|
||||||
android:inputType="numberDecimal" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:text="U" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<TableLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<TableRow
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
</TableRow>
|
|
||||||
|
|
||||||
</TableLayout>
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
|
@ -8,4 +8,8 @@
|
||||||
<color name="cardObjectiveText">#779ECB</color>
|
<color name="cardObjectiveText">#779ECB</color>
|
||||||
|
|
||||||
<color name="linearBlockBackground">#3e3d3d</color>
|
<color name="linearBlockBackground">#3e3d3d</color>
|
||||||
|
|
||||||
|
<color name="colorTreatmentButton">#FFB347</color>
|
||||||
|
<color name="colorWizardButton">#77dd77</color>
|
||||||
|
<color name="colorCancelTempButton">#FF47C8FF</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -3,9 +3,10 @@
|
||||||
<string name="title_activity_main">AndroidAPS</string>
|
<string name="title_activity_main">AndroidAPS</string>
|
||||||
|
|
||||||
<string name="title_activity_preferences">Preferences</string>
|
<string name="title_activity_preferences">Preferences</string>
|
||||||
<string name="safety_title">Safety</string>
|
<string name="treatmentssafety_title">Tratments safety</string>
|
||||||
<string name="safety_maxbolus_title">Max allowed bolus</string>
|
<string name="treatmentssafety_maxbolus_title">Max allowed bolus</string>
|
||||||
<string name="safety_maxcarbs_title">Max allowed carbs</string>
|
<string name="treatmentssafety_maxcarbs_title">Max allowed carbs</string>
|
||||||
|
|
||||||
<string name="nav_preferences">Preferences</string>
|
<string name="nav_preferences">Preferences</string>
|
||||||
<string name="nav_refreshtreatments">Refresh treatments from NS</string>
|
<string name="nav_refreshtreatments">Refresh treatments from NS</string>
|
||||||
<string name="nav_backup">Backup</string>
|
<string name="nav_backup">Backup</string>
|
||||||
|
@ -114,6 +115,7 @@
|
||||||
<string name="loop_setbypump_label">Set by pump</string>
|
<string name="loop_setbypump_label">Set by pump</string>
|
||||||
<string name="openapsma_lastenact_label">Last enacted</string>
|
<string name="openapsma_lastenact_label">Last enacted</string>
|
||||||
<string name="dialog">Dialog</string>
|
<string name="dialog">Dialog</string>
|
||||||
|
<string name="alert">Alert</string>
|
||||||
<string name="refreshfromnightscout">Do you want to refresh treatments from Nightscout</string>
|
<string name="refreshfromnightscout">Do you want to refresh treatments from Nightscout</string>
|
||||||
<string name="ok">OK</string>
|
<string name="ok">OK</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">Cancel</string>
|
||||||
|
@ -124,5 +126,9 @@
|
||||||
<string name="maxbasal_summary">Max U/hr a Temp Basal can be set to</string>
|
<string name="maxbasal_summary">Max U/hr a Temp Basal can be set to</string>
|
||||||
<string name="maxbasaliob_title">Max basal IOB</string>
|
<string name="maxbasaliob_title">Max basal IOB</string>
|
||||||
<string name="maxbasaliob_summary">Maximum amount of non-bolus IOB OpenAPS can deliver</string>
|
<string name="maxbasaliob_summary">Maximum amount of non-bolus IOB OpenAPS can deliver</string>
|
||||||
|
<string name="lowsuspend_low_title">Low BG threshold</string>
|
||||||
|
<string name="openapsma_disabled">Plugin is disabled</string>
|
||||||
|
<string name="constrains_violation">Constrains violation</string>
|
||||||
|
<string name="bolusdeliveryerror">Treatment delivery error</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
14
app/src/main/res/xml/pref_lowsuspend.xml
Normal file
14
app/src/main/res/xml/pref_lowsuspend.xml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="lowsuspend"
|
||||||
|
android:title="@string/lowsuspend">
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:title="@string/lowsuspend_low_title"
|
||||||
|
android:key="lowsuspend_lowthreshold"
|
||||||
|
android:inputType="numberDecimal">
|
||||||
|
</EditTextPreference>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
</PreferenceScreen>
|
37
app/src/main/res/xml/pref_openapsma.xml
Normal file
37
app/src/main/res/xml/pref_openapsma.xml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="bgRange"
|
||||||
|
android:title="APS target BG range">
|
||||||
|
<EditTextPreference
|
||||||
|
android:defaultValue=""
|
||||||
|
android:key="openapsma_min_bg"
|
||||||
|
android:numeric="decimal"
|
||||||
|
android:summary="The minimum value you consider to be in range."
|
||||||
|
android:title="Low Value" />
|
||||||
|
<EditTextPreference
|
||||||
|
android:defaultValue=""
|
||||||
|
android:key="openapsma_max_bg"
|
||||||
|
android:numeric="decimal"
|
||||||
|
android:summary="The maximum value you consider to be in range."
|
||||||
|
android:title="High Value" />
|
||||||
|
</PreferenceCategory>
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="aps_limits"
|
||||||
|
android:title="APS Limits">
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:defaultValue="1"
|
||||||
|
android:key="openapsma_max_basal"
|
||||||
|
android:numeric="decimal"
|
||||||
|
android:summary="Max U/hr a Temp Basal can be set to"
|
||||||
|
android:title="Max Basal" />
|
||||||
|
<EditTextPreference
|
||||||
|
android:defaultValue="1.5"
|
||||||
|
android:key="openapsma_max_iob"
|
||||||
|
android:numeric="decimal"
|
||||||
|
android:summary="Maximum amount of non-bolus IOB OpenAPS can deliver"
|
||||||
|
android:title="Max Basal IOB" />
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
20
app/src/main/res/xml/pref_treatments.xml
Normal file
20
app/src/main/res/xml/pref_treatments.xml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="treatmentssafety"
|
||||||
|
android:title="@string/treatmentssafety_title">
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:title="@string/treatmentssafety_maxbolus_title"
|
||||||
|
android:key="treatmentssafety_maxbolus"
|
||||||
|
android:defaultValue="3"
|
||||||
|
android:inputType="numberDecimal">
|
||||||
|
</EditTextPreference>
|
||||||
|
<EditTextPreference
|
||||||
|
android:title="@string/treatmentssafety_maxcarbs_title"
|
||||||
|
android:key="treatmentssafety_maxcarbs"
|
||||||
|
android:defaultValue="48"
|
||||||
|
android:inputType="numberDecimal">
|
||||||
|
</EditTextPreference>
|
||||||
|
</PreferenceCategory>
|
||||||
|
</PreferenceScreen>
|
Loading…
Reference in a new issue