commit
ea50f29ec2
15 changed files with 888 additions and 185 deletions
|
@ -115,10 +115,6 @@ public class MainActivity extends AppCompatActivity {
|
||||||
MainApp.bus().register(this);
|
MainApp.bus().register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TabPageAdapter getPageAdapter() {
|
|
||||||
return pageAdapter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ArrayList<PluginBase> getPluginsList() {
|
public static ArrayList<PluginBase> getPluginsList() {
|
||||||
return pluginsList;
|
return pluginsList;
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,7 +168,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
|
||||||
/*
|
/*
|
||||||
* Returns glucose_status for openAPS or null if no actual data available
|
* Returns glucose_status for openAPS or null if no actual data available
|
||||||
*/
|
*/
|
||||||
public class GlucoseStatus {
|
public static class GlucoseStatus {
|
||||||
public double glucose = 0d;
|
public double glucose = 0d;
|
||||||
public double delta = 0d;
|
public double delta = 0d;
|
||||||
public double avgdelta = 0d;
|
public double avgdelta = 0d;
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package info.nightscout.androidaps.interfaces;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by mike on 15.06.2016.
|
||||||
|
*/
|
||||||
|
public interface ConstrainsInterface {
|
||||||
|
}
|
|
@ -12,6 +12,7 @@ public interface PluginBase {
|
||||||
int PROFILE = 4;
|
int PROFILE = 4;
|
||||||
int APS = 5;
|
int APS = 5;
|
||||||
int PUMP = 6;
|
int PUMP = 6;
|
||||||
|
int CONSTRAINS = 7;
|
||||||
|
|
||||||
public int getType();
|
public int getType();
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package info.nightscout.androidaps.plugins;
|
package info.nightscout.androidaps.plugins;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
|
|
||||||
|
@ -11,7 +13,7 @@ import info.nightscout.androidaps.R;
|
||||||
/**
|
/**
|
||||||
* Created by mike on 09.06.2016.
|
* Created by mike on 09.06.2016.
|
||||||
*/
|
*/
|
||||||
public class APSResult {
|
public class APSResult implements Parcelable {
|
||||||
public String reason;
|
public String reason;
|
||||||
public double rate;
|
public double rate;
|
||||||
public int duration;
|
public int duration;
|
||||||
|
@ -31,4 +33,37 @@ public class APSResult {
|
||||||
else
|
else
|
||||||
return MainApp.instance().getApplicationContext().getString(R.string.nochangerequested);
|
return MainApp.instance().getApplicationContext().getString(R.string.nochangerequested);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
dest.writeString(reason);
|
||||||
|
dest.writeDouble(rate);
|
||||||
|
dest.writeInt(duration);
|
||||||
|
dest.writeInt(changeRequested ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public final Parcelable.Creator<APSResult> CREATOR = new Parcelable.Creator<APSResult>() {
|
||||||
|
public APSResult createFromParcel(Parcel in) {
|
||||||
|
return new APSResult(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
public APSResult[] newArray(int size) {
|
||||||
|
return new APSResult[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private APSResult(Parcel in) {
|
||||||
|
reason = in.readString();
|
||||||
|
rate = in.readDouble();
|
||||||
|
duration = in.readInt();
|
||||||
|
changeRequested = in.readInt() == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public APSResult() {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.ListAdapter;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
@ -30,6 +31,7 @@ import info.nightscout.androidaps.R;
|
||||||
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.events.EventRefreshGui;
|
import info.nightscout.androidaps.events.EventRefreshGui;
|
||||||
|
import info.nightscout.androidaps.interfaces.ConstrainsInterface;
|
||||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||||
import info.nightscout.androidaps.interfaces.ProfileInterface;
|
import info.nightscout.androidaps.interfaces.ProfileInterface;
|
||||||
import info.nightscout.androidaps.interfaces.PumpInterface;
|
import info.nightscout.androidaps.interfaces.PumpInterface;
|
||||||
|
@ -39,10 +41,7 @@ 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;
|
||||||
|
|
||||||
/**
|
public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpInterface, ConstrainsInterface {
|
||||||
* A simple {@link Fragment} subclass.
|
|
||||||
*/
|
|
||||||
public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpInterface {
|
|
||||||
private static Logger log = LoggerFactory.getLogger(ConfigBuilderFragment.class);
|
private static Logger log = LoggerFactory.getLogger(ConfigBuilderFragment.class);
|
||||||
|
|
||||||
private static final String PREFS_NAME = "Settings";
|
private static final String PREFS_NAME = "Settings";
|
||||||
|
@ -52,6 +51,7 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
ListView tempsListView;
|
ListView tempsListView;
|
||||||
ListView profileListView;
|
ListView profileListView;
|
||||||
ListView apsListView;
|
ListView apsListView;
|
||||||
|
ListView constrainsListView;
|
||||||
ListView generalListView;
|
ListView generalListView;
|
||||||
|
|
||||||
PluginCustomAdapter pumpDataAdapter = null;
|
PluginCustomAdapter pumpDataAdapter = null;
|
||||||
|
@ -59,6 +59,7 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
PluginCustomAdapter tempsDataAdapter = null;
|
PluginCustomAdapter tempsDataAdapter = null;
|
||||||
PluginCustomAdapter profileDataAdapter = null;
|
PluginCustomAdapter profileDataAdapter = null;
|
||||||
PluginCustomAdapter apsDataAdapter = null;
|
PluginCustomAdapter apsDataAdapter = null;
|
||||||
|
PluginCustomAdapter constrainsDataAdapter = null;
|
||||||
PluginCustomAdapter generalDataAdapter = null;
|
PluginCustomAdapter generalDataAdapter = null;
|
||||||
|
|
||||||
|
|
||||||
|
@ -102,6 +103,7 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
tempsListView = (ListView) view.findViewById(R.id.configbuilder_tempslistview);
|
tempsListView = (ListView) view.findViewById(R.id.configbuilder_tempslistview);
|
||||||
profileListView = (ListView) view.findViewById(R.id.configbuilder_profilelistview);
|
profileListView = (ListView) view.findViewById(R.id.configbuilder_profilelistview);
|
||||||
apsListView = (ListView) view.findViewById(R.id.configbuilder_apslistview);
|
apsListView = (ListView) view.findViewById(R.id.configbuilder_apslistview);
|
||||||
|
constrainsListView = (ListView) view.findViewById(R.id.configbuilder_constrainslistview);
|
||||||
generalListView = (ListView) view.findViewById(R.id.configbuilder_generallistview);
|
generalListView = (ListView) view.findViewById(R.id.configbuilder_generallistview);
|
||||||
|
|
||||||
setViews();
|
setViews();
|
||||||
|
@ -111,28 +113,26 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
void setViews() {
|
void setViews() {
|
||||||
pumpDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.PUMP));
|
pumpDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.PUMP));
|
||||||
pumpListView.setAdapter(pumpDataAdapter);
|
pumpListView.setAdapter(pumpDataAdapter);
|
||||||
|
setListViewHeightBasedOnChildren(pumpListView);
|
||||||
treatmentsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.TREATMENT));
|
treatmentsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.TREATMENT));
|
||||||
treatmentsListView.setAdapter(treatmentsDataAdapter);
|
treatmentsListView.setAdapter(treatmentsDataAdapter);
|
||||||
|
setListViewHeightBasedOnChildren(treatmentsListView);
|
||||||
tempsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.TEMPBASAL));
|
tempsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.TEMPBASAL));
|
||||||
tempsListView.setAdapter(tempsDataAdapter);
|
tempsListView.setAdapter(tempsDataAdapter);
|
||||||
|
setListViewHeightBasedOnChildren(tempsListView);
|
||||||
profileDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.PROFILE));
|
profileDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.PROFILE));
|
||||||
profileListView.setAdapter(profileDataAdapter);
|
profileListView.setAdapter(profileDataAdapter);
|
||||||
|
setListViewHeightBasedOnChildren(profileListView);
|
||||||
apsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.APS));
|
apsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.APS));
|
||||||
apsListView.setAdapter(apsDataAdapter);
|
apsListView.setAdapter(apsDataAdapter);
|
||||||
|
setListViewHeightBasedOnChildren(apsListView);
|
||||||
|
constrainsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.CONSTRAINS));
|
||||||
|
constrainsListView.setAdapter(constrainsDataAdapter);
|
||||||
|
setListViewHeightBasedOnChildren(constrainsListView);
|
||||||
generalDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.GENERAL));
|
generalDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getSpecificPluginsList(PluginBase.GENERAL));
|
||||||
generalListView.setAdapter(generalDataAdapter);
|
generalListView.setAdapter(generalDataAdapter);
|
||||||
|
setListViewHeightBasedOnChildren(generalListView);
|
||||||
|
|
||||||
|
|
||||||
apsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
|
||||||
public void onItemClick(AdapterView<?> parent, View view,
|
|
||||||
int position, long id) {
|
|
||||||
// When clicked, show a toast with the TextView text
|
|
||||||
PluginBase plugin = (PluginBase) parent.getItemAtPosition(position);
|
|
||||||
Toast.makeText(MainApp.instance().getApplicationContext(),
|
|
||||||
"Clicked on Row: " + plugin.getName(),
|
|
||||||
Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -307,12 +307,10 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
CheckBox cb = (CheckBox) v;
|
CheckBox cb = (CheckBox) v;
|
||||||
PluginBase plugin = (PluginBase) cb.getTag();
|
PluginBase plugin = (PluginBase) cb.getTag();
|
||||||
Toast.makeText(MainApp.instance().getApplicationContext(),
|
|
||||||
"Clicked on ENABLED: " + plugin.getName() +
|
|
||||||
" is " + cb.isChecked(),
|
|
||||||
Toast.LENGTH_LONG).show();
|
|
||||||
plugin.setFragmentEnabled(cb.isChecked());
|
plugin.setFragmentEnabled(cb.isChecked());
|
||||||
|
if (cb.isChecked()) plugin.setFragmentVisible(true);
|
||||||
onEnabledCategoryChanged(plugin);
|
onEnabledCategoryChanged(plugin);
|
||||||
|
storeSettings();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -320,13 +318,9 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
CheckBox cb = (CheckBox) v;
|
CheckBox cb = (CheckBox) v;
|
||||||
PluginBase plugin = (PluginBase) cb.getTag();
|
PluginBase plugin = (PluginBase) cb.getTag();
|
||||||
Toast.makeText(MainApp.instance().getApplicationContext(),
|
|
||||||
"Clicked on VISIBLE: " + plugin.getName() +
|
|
||||||
" is " + cb.isChecked(),
|
|
||||||
Toast.LENGTH_LONG).show();
|
|
||||||
plugin.setFragmentVisible(cb.isChecked());
|
plugin.setFragmentVisible(cb.isChecked());
|
||||||
MainApp.bus().post(new EventRefreshGui());
|
|
||||||
storeSettings();
|
storeSettings();
|
||||||
|
MainApp.bus().post(new EventRefreshGui());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -347,10 +341,25 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
}
|
}
|
||||||
|
|
||||||
int type = plugin.getType();
|
int type = plugin.getType();
|
||||||
|
// Force enabled if there is only one plugin
|
||||||
if (type == PluginBase.PUMP || type == PluginBase.TREATMENT || type == PluginBase.TEMPBASAL || type == PluginBase.PROFILE)
|
if (type == PluginBase.PUMP || type == PluginBase.TREATMENT || type == PluginBase.TEMPBASAL || type == PluginBase.PROFILE)
|
||||||
if (pluginList.size() < 2)
|
if (pluginList.size() < 2)
|
||||||
holder.checkboxEnabled.setEnabled(false);
|
holder.checkboxEnabled.setEnabled(false);
|
||||||
|
|
||||||
|
// Constrains cannot be disabled
|
||||||
|
if (type == PluginBase.CONSTRAINS)
|
||||||
|
holder.checkboxEnabled.setEnabled(false);
|
||||||
|
|
||||||
|
// Hide disabled profiles by default
|
||||||
|
if (type == PluginBase.PROFILE) {
|
||||||
|
if (!plugin.isEnabled()) {
|
||||||
|
holder.checkboxVisible.setEnabled(false);
|
||||||
|
holder.checkboxVisible.setChecked(false);
|
||||||
|
} else {
|
||||||
|
holder.checkboxVisible.setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return convertView;
|
return convertView;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -378,6 +387,7 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
// Multiple selection allowed
|
// Multiple selection allowed
|
||||||
case PluginBase.APS:
|
case PluginBase.APS:
|
||||||
case PluginBase.GENERAL:
|
case PluginBase.GENERAL:
|
||||||
|
case PluginBase.CONSTRAINS:
|
||||||
break;
|
break;
|
||||||
// Single selection allowed
|
// Single selection allowed
|
||||||
case PluginBase.PROFILE:
|
case PluginBase.PROFILE:
|
||||||
|
@ -399,7 +409,6 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
storeSettings();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void verifySelectionInCategories() {
|
private void verifySelectionInCategories() {
|
||||||
|
@ -409,27 +418,48 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
// Multiple selection allowed
|
// Multiple selection allowed
|
||||||
case PluginBase.APS:
|
case PluginBase.APS:
|
||||||
case PluginBase.GENERAL:
|
case PluginBase.GENERAL:
|
||||||
|
case PluginBase.CONSTRAINS:
|
||||||
break;
|
break;
|
||||||
// Single selection allowed
|
// Single selection allowed
|
||||||
case PluginBase.PROFILE:
|
case PluginBase.PROFILE:
|
||||||
activeProfile = (ProfileInterface) getTheOneEnabledInArray(pluginsInCategory);
|
activeProfile = (ProfileInterface) getTheOneEnabledInArray(pluginsInCategory);
|
||||||
if (Config.logConfigBuilder)
|
if (Config.logConfigBuilder)
|
||||||
log.debug("Selected profile interface: " + ((PluginBase) activeProfile).getName());
|
log.debug("Selected profile interface: " + ((PluginBase) activeProfile).getName());
|
||||||
|
for (PluginBase p : pluginsInCategory) {
|
||||||
|
if (!p.getName().equals(((PluginBase) activeProfile).getName())) {
|
||||||
|
p.setFragmentVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case PluginBase.PUMP:
|
case PluginBase.PUMP:
|
||||||
activePump = (PumpInterface) getTheOneEnabledInArray(pluginsInCategory);
|
activePump = (PumpInterface) getTheOneEnabledInArray(pluginsInCategory);
|
||||||
if (Config.logConfigBuilder)
|
if (Config.logConfigBuilder)
|
||||||
log.debug("Selected pump interface: " + ((PluginBase) activePump).getName());
|
log.debug("Selected pump interface: " + ((PluginBase) activePump).getName());
|
||||||
|
for (PluginBase p : pluginsInCategory) {
|
||||||
|
if (!p.getName().equals(((PluginBase) activePump).getName())) {
|
||||||
|
p.setFragmentVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case PluginBase.TEMPBASAL:
|
case PluginBase.TEMPBASAL:
|
||||||
activeTempBasals = (TempBasalsInterface) getTheOneEnabledInArray(pluginsInCategory);
|
activeTempBasals = (TempBasalsInterface) getTheOneEnabledInArray(pluginsInCategory);
|
||||||
if (Config.logConfigBuilder)
|
if (Config.logConfigBuilder)
|
||||||
log.debug("Selected tempbasal interface: " + ((PluginBase) activeTempBasals).getName());
|
log.debug("Selected tempbasal interface: " + ((PluginBase) activeTempBasals).getName());
|
||||||
|
for (PluginBase p : pluginsInCategory) {
|
||||||
|
if (!p.getName().equals(((PluginBase) activeTempBasals).getName())) {
|
||||||
|
p.setFragmentVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case PluginBase.TREATMENT:
|
case PluginBase.TREATMENT:
|
||||||
activeTreatments = (TreatmentsInterface) getTheOneEnabledInArray(pluginsInCategory);
|
activeTreatments = (TreatmentsInterface) getTheOneEnabledInArray(pluginsInCategory);
|
||||||
if (Config.logConfigBuilder)
|
if (Config.logConfigBuilder)
|
||||||
log.debug("Selected treatment interface: " + ((PluginBase) activeTreatments).getName());
|
log.debug("Selected treatment interface: " + ((PluginBase) activeTreatments).getName());
|
||||||
|
for (PluginBase p : pluginsInCategory) {
|
||||||
|
if (!p.getName().equals(((PluginBase) activeTreatments).getName())) {
|
||||||
|
p.setFragmentVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,5 +510,29 @@ public class ConfigBuilderFragment extends Fragment implements PluginBase, PumpI
|
||||||
verifySelectionInCategories();
|
verifySelectionInCategories();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****
|
||||||
|
* Method for Setting the Height of the ListView dynamically.
|
||||||
|
* *** Hack to fix the issue of not showing all the items of the ListView
|
||||||
|
* *** when placed inside a ScrollView
|
||||||
|
****/
|
||||||
|
public static void setListViewHeightBasedOnChildren(ListView listView) {
|
||||||
|
ListAdapter listAdapter = listView.getAdapter();
|
||||||
|
if (listAdapter == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.UNSPECIFIED);
|
||||||
|
int totalHeight = 0;
|
||||||
|
View view = null;
|
||||||
|
for (int i = 0; i < listAdapter.getCount(); i++) {
|
||||||
|
view = listAdapter.getView(i, view, listView);
|
||||||
|
if (i == 0)
|
||||||
|
view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||||
|
|
||||||
|
view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
|
||||||
|
totalHeight += view.getMeasuredHeight();
|
||||||
|
}
|
||||||
|
ViewGroup.LayoutParams params = listView.getLayoutParams();
|
||||||
|
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
|
||||||
|
listView.setLayoutParams(params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package info.nightscout.androidaps.plugins.LowSuspend;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
@ -42,11 +44,64 @@ public class LowSuspendFragment extends Fragment implements View.OnClickListener
|
||||||
TextView resultView;
|
TextView resultView;
|
||||||
TextView requestView;
|
TextView requestView;
|
||||||
|
|
||||||
Date lastAPSRun = null;
|
// last values
|
||||||
APSResult lastAPSResult = null;
|
class LastRun implements Parcelable {
|
||||||
|
public Boolean lastLow = null;
|
||||||
|
public Boolean lastLowProjected = null;
|
||||||
|
public Double lastMinBg = null;
|
||||||
|
public String lastUnits = null;
|
||||||
|
public DatabaseHelper.GlucoseStatus lastGlucoseStatus = null;
|
||||||
|
public Date lastAPSRun = null;
|
||||||
|
public APSResult lastAPSResult = null;
|
||||||
|
|
||||||
boolean fragmentEnabled = false;
|
@Override
|
||||||
boolean fragmentVisible = true;
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
dest.writeInt(lastLow ? 1 : 0);
|
||||||
|
dest.writeInt(lastLowProjected ? 1 : 0);
|
||||||
|
dest.writeDouble(lastMinBg);
|
||||||
|
dest.writeString(lastUnits);
|
||||||
|
dest.writeDouble(lastGlucoseStatus.avgdelta);
|
||||||
|
dest.writeDouble(lastGlucoseStatus.delta);
|
||||||
|
dest.writeDouble(lastGlucoseStatus.glucose);
|
||||||
|
dest.writeLong(lastAPSRun.getTime());
|
||||||
|
dest.writeParcelable(lastAPSResult, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public final Parcelable.Creator<LastRun> CREATOR = new Parcelable.Creator<LastRun>() {
|
||||||
|
public LastRun createFromParcel(Parcel in) {
|
||||||
|
return new LastRun(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LastRun[] newArray(int size) {
|
||||||
|
return new LastRun[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private LastRun(Parcel in) {
|
||||||
|
lastLow = in.readInt() == 1;
|
||||||
|
lastLowProjected = in.readInt() == 1;
|
||||||
|
lastMinBg = in.readDouble();
|
||||||
|
lastUnits = in.readString();
|
||||||
|
lastGlucoseStatus = new DatabaseHelper.GlucoseStatus();
|
||||||
|
lastGlucoseStatus.avgdelta = in.readDouble();
|
||||||
|
lastGlucoseStatus.delta = in.readDouble();
|
||||||
|
lastGlucoseStatus.glucose = in.readDouble();
|
||||||
|
lastAPSRun = new Date(in.readLong());
|
||||||
|
lastAPSResult = in.readParcelable(APSResult.class.getClassLoader());
|
||||||
|
}
|
||||||
|
|
||||||
|
public LastRun() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
static LastRun lastRun = null;
|
||||||
|
|
||||||
|
private boolean fragmentEnabled = false;
|
||||||
|
private boolean fragmentVisible = true;
|
||||||
|
|
||||||
public LowSuspendFragment() {
|
public LowSuspendFragment() {
|
||||||
super();
|
super();
|
||||||
|
@ -90,12 +145,16 @@ public class LowSuspendFragment extends Fragment implements View.OnClickListener
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public APSResult getLastAPSResult() {
|
public APSResult getLastAPSResult() {
|
||||||
return lastAPSResult;
|
if (lastRun != null)
|
||||||
|
return lastRun.lastAPSResult;
|
||||||
|
else return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Date getLastAPSRun() {
|
public Date getLastAPSRun() {
|
||||||
return lastAPSRun;
|
if (lastRun != null)
|
||||||
|
return lastRun.lastAPSRun;
|
||||||
|
else return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LowSuspendFragment newInstance() {
|
public static LowSuspendFragment newInstance() {
|
||||||
|
@ -121,9 +180,19 @@ public class LowSuspendFragment extends Fragment implements View.OnClickListener
|
||||||
resultView = (TextView) view.findViewById(R.id.lowsuspend_result);
|
resultView = (TextView) view.findViewById(R.id.lowsuspend_result);
|
||||||
requestView = (TextView) view.findViewById(R.id.lowsuspend_request);
|
requestView = (TextView) view.findViewById(R.id.lowsuspend_request);
|
||||||
|
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
lastRun = savedInstanceState.getParcelable("lastrun");
|
||||||
|
}
|
||||||
|
updateGUI();
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putParcelable("lastrun", lastRun);
|
||||||
|
}
|
||||||
|
|
||||||
private void registerBus() {
|
private void registerBus() {
|
||||||
try {
|
try {
|
||||||
MainApp.bus().unregister(this);
|
MainApp.bus().unregister(this);
|
||||||
|
@ -161,7 +230,6 @@ public class LowSuspendFragment extends Fragment implements View.OnClickListener
|
||||||
public void invoke() {
|
public void invoke() {
|
||||||
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
|
||||||
DatabaseHelper.GlucoseStatus glucoseStatus = MainApp.getDbHelper().getGlucoseStatusData();
|
DatabaseHelper.GlucoseStatus glucoseStatus = MainApp.getDbHelper().getGlucoseStatusData();
|
||||||
DecimalFormat formatNumber1decimalplaces = new DecimalFormat("0.0");
|
|
||||||
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
NSProfile profile = MainActivity.getConfigBuilder().getActiveProfile().getProfile();
|
||||||
PumpInterface pump = MainActivity.getConfigBuilder().getActivePump();
|
PumpInterface pump = MainActivity.getConfigBuilder().getActivePump();
|
||||||
|
|
||||||
|
@ -197,6 +265,7 @@ public class LowSuspendFragment extends Fragment implements View.OnClickListener
|
||||||
Double baseBasalRate = pump.getBaseBasalRate();
|
Double baseBasalRate = pump.getBaseBasalRate();
|
||||||
boolean isTempBasalInProgress = pump.isTempBasalInProgress();
|
boolean isTempBasalInProgress = pump.isTempBasalInProgress();
|
||||||
Double tempBasalRate = pump.getTempBasalAbsoluteRate();
|
Double tempBasalRate = pump.getTempBasalAbsoluteRate();
|
||||||
|
Date now = new Date();
|
||||||
|
|
||||||
if (low && !lowProjected) {
|
if (low && !lowProjected) {
|
||||||
if (!isTempBasalInProgress || tempBasalRate != 0d) {
|
if (!isTempBasalInProgress || tempBasalRate != 0d) {
|
||||||
|
@ -227,13 +296,26 @@ public class LowSuspendFragment extends Fragment implements View.OnClickListener
|
||||||
request.changeRequested = false;
|
request.changeRequested = false;
|
||||||
request.reason = getString(R.string.nochangerequested);
|
request.reason = getString(R.string.nochangerequested);
|
||||||
}
|
}
|
||||||
glucoseStatusView.setText(glucoseStatus.toString());
|
|
||||||
minBgView.setText(formatNumber1decimalplaces.format(minBg) + " " + profile.getUnits());
|
|
||||||
resultView.setText(getString(R.string.lowsuspend_low) + " " + low + "\n" + getString(R.string.lowsuspend_lowprojected) + " " + lowProjected);
|
|
||||||
requestView.setText(request.toString());
|
|
||||||
lastRunView.setText(new Date().toLocaleString());
|
|
||||||
|
|
||||||
lastAPSResult = request;
|
lastRun = new LastRun();
|
||||||
lastAPSRun = new Date();
|
lastRun.lastMinBg = minBg;
|
||||||
|
lastRun.lastLow = low;
|
||||||
|
lastRun.lastLowProjected = lowProjected;
|
||||||
|
lastRun.lastGlucoseStatus = glucoseStatus;
|
||||||
|
lastRun.lastUnits = profile.getUnits();
|
||||||
|
lastRun.lastAPSResult = request;
|
||||||
|
lastRun.lastAPSRun = now;
|
||||||
|
updateGUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateGUI() {
|
||||||
|
if (lastRun != null) {
|
||||||
|
DecimalFormat formatNumber1decimalplaces = new DecimalFormat("0.0");
|
||||||
|
glucoseStatusView.setText(lastRun.lastGlucoseStatus.toString());
|
||||||
|
minBgView.setText(formatNumber1decimalplaces.format(lastRun.lastMinBg) + " " + lastRun.lastUnits);
|
||||||
|
resultView.setText(getString(R.string.lowsuspend_low) + " " + lastRun.lastLow + "\n" + getString(R.string.lowsuspend_lowprojected) + " " + lastRun.lastLowProjected);
|
||||||
|
requestView.setText(lastRun.lastAPSResult.toString());
|
||||||
|
lastRunView.setText(lastRun.lastAPSRun.toLocaleString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package info.nightscout.androidaps.plugins.Objectives;
|
package info.nightscout.androidaps.plugins.Objectives;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v7.widget.CardView;
|
import android.support.v7.widget.CardView;
|
||||||
|
@ -8,25 +10,38 @@ import android.support.v7.widget.RecyclerView;
|
||||||
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.CheckBox;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.Config;
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
|
import info.nightscout.androidaps.interfaces.ConstrainsInterface;
|
||||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||||
|
|
||||||
public class ObjectivesFragment extends Fragment implements PluginBase {
|
public class ObjectivesFragment extends Fragment implements View.OnClickListener, PluginBase, ConstrainsInterface {
|
||||||
|
private static Logger log = LoggerFactory.getLogger(ObjectivesFragment.class);
|
||||||
|
|
||||||
RecyclerView recyclerView;
|
RecyclerView recyclerView;
|
||||||
LinearLayoutManager llm;
|
LinearLayoutManager llm;
|
||||||
|
CheckBox enableFakeTime;
|
||||||
|
|
||||||
boolean fragmentVisible = true;
|
boolean fragmentVisible = true;
|
||||||
|
|
||||||
|
String PREFS_NAME = "Objectives";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getType() {
|
public int getType() {
|
||||||
return PluginBase.GENERAL;
|
return PluginBase.CONSTRAINS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -58,6 +73,15 @@ public class ObjectivesFragment extends Fragment implements PluginBase {
|
||||||
this.fragmentVisible = fragmentVisible;
|
this.fragmentVisible = fragmentVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
int id = v.getId();
|
||||||
|
switch (id) {
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class Objective {
|
class Objective {
|
||||||
String objective;
|
String objective;
|
||||||
String gate;
|
String gate;
|
||||||
|
@ -95,13 +119,41 @@ public class ObjectivesFragment extends Fragment implements PluginBase {
|
||||||
new Date(0, 0, 0), 1, new Date(0, 0, 0)));
|
new Date(0, 0, 0), 1, new Date(0, 0, 0)));
|
||||||
objectives.add(new Objective("Adjust basals and ratios if needed, and then enable auto-sens",
|
objectives.add(new Objective("Adjust basals and ratios if needed, and then enable auto-sens",
|
||||||
"1 week successful daytime looping with regular carb entry",
|
"1 week successful daytime looping with regular carb entry",
|
||||||
new Date(0, 0, 0), 1, new Date(0, 0, 0)));
|
new Date(0, 0, 0), 7, new Date(0, 0, 0)));
|
||||||
objectives.add(new Objective("Enabling additional features for daytime use, such as advanced meal assist",
|
objectives.add(new Objective("Enabling additional features for daytime use, such as advanced meal assist",
|
||||||
"",
|
"",
|
||||||
new Date(0, 0, 0), 1, new Date(0, 0, 0)));
|
new Date(0, 0, 0), 1, new Date(0, 0, 0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ObjectiveViewHolder> {
|
void saveProgress() {
|
||||||
|
SharedPreferences settings = MainApp.instance().getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
|
||||||
|
SharedPreferences.Editor editor = settings.edit();
|
||||||
|
for (int num = 0; num < objectives.size(); num++) {
|
||||||
|
Objective o = objectives.get(num);
|
||||||
|
editor.putLong(num + "started", o.started.getTime());
|
||||||
|
editor.putLong(num + "accomplished", o.accomplished.getTime());
|
||||||
|
}
|
||||||
|
editor.commit();
|
||||||
|
if (Config.logPrefsChange)
|
||||||
|
log.debug("Objectives stored");
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadProgress() {
|
||||||
|
SharedPreferences settings = MainApp.instance().getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
|
||||||
|
for (int num = 0; num < objectives.size(); num++) {
|
||||||
|
Objective o = objectives.get(num);
|
||||||
|
o.started = new Date(settings.getLong(num + "started", 0));
|
||||||
|
o.accomplished = new Date(settings.getLong(num + "accomplished", 0));
|
||||||
|
}
|
||||||
|
if (Config.logPrefsChange)
|
||||||
|
log.debug("Objectives loaded");
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isAPSEnabledAtAll() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ObjectiveViewHolder> {
|
||||||
|
|
||||||
List<Objective> objectives;
|
List<Objective> objectives;
|
||||||
|
|
||||||
|
@ -118,11 +170,61 @@ public class ObjectivesFragment extends Fragment implements PluginBase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(ObjectiveViewHolder holder, int position) {
|
public void onBindViewHolder(ObjectiveViewHolder holder, int position) {
|
||||||
|
Objective o = objectives.get(position);
|
||||||
|
Context context = MainApp.instance().getApplicationContext();
|
||||||
holder.position.setText(String.valueOf(position + 1));
|
holder.position.setText(String.valueOf(position + 1));
|
||||||
holder.objective.setText(objectives.get(position).objective);
|
holder.objective.setText(o.objective);
|
||||||
holder.gate.setText(objectives.get(position).gate);
|
holder.gate.setText(o.gate);
|
||||||
holder.started.setText(objectives.get(position).started.toString());
|
holder.duration.setText(context.getString(R.string.minimalduration) + " " + o.durationInDays + " " + context.getString(R.string.days));
|
||||||
holder.accomplished.setText(objectives.get(position).accomplished.toString());
|
holder.started.setText(o.started.toLocaleString());
|
||||||
|
holder.accomplished.setText(o.accomplished.toLocaleString());
|
||||||
|
|
||||||
|
holder.startButton.setTag(o);
|
||||||
|
holder.verifyButton.setTag(o);
|
||||||
|
|
||||||
|
holder.startButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
public void onClick(View v) {
|
||||||
|
Objective o = (Objective) v.getTag();
|
||||||
|
o.started = new Date();
|
||||||
|
updateView();
|
||||||
|
//saveProgress();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
holder.verifyButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
public void onClick(View v) {
|
||||||
|
Objective o = (Objective) v.getTag();
|
||||||
|
o.accomplished = new Date();
|
||||||
|
updateView();
|
||||||
|
//saveProgress();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Long now = new Date().getTime();
|
||||||
|
if (position > 0 && objectives.get(position - 1).accomplished.getTime() == 0) {
|
||||||
|
// Phase 0: previous not completed
|
||||||
|
holder.startedLayout.setVisibility(View.GONE);
|
||||||
|
holder.durationLayout.setVisibility(View.GONE);
|
||||||
|
holder.verifyLayout.setVisibility(View.GONE);
|
||||||
|
} else if (o.started.getTime() == 0) {
|
||||||
|
// Phase 1: not started
|
||||||
|
holder.durationLayout.setVisibility(View.GONE);
|
||||||
|
holder.verifyLayout.setVisibility(View.GONE);
|
||||||
|
holder.started.setVisibility(View.GONE);
|
||||||
|
} else if (o.started.getTime() > 0 && !enableFakeTime.isChecked() && o.accomplished.getTime() == 0 && o.started.getTime() + o.durationInDays * 24 * 60 * 60 * 1000 > now) {
|
||||||
|
// Phase 2: started, waiting for duration
|
||||||
|
holder.startButton.setEnabled(false);
|
||||||
|
holder.verifyLayout.setVisibility(View.GONE);
|
||||||
|
} else if (o.accomplished.getTime() == 0 ) {
|
||||||
|
// Phase 3: started, after duration
|
||||||
|
holder.startButton.setEnabled(false);
|
||||||
|
holder.accomplished.setVisibility(View.INVISIBLE);
|
||||||
|
} else {
|
||||||
|
// Phase 4: verified
|
||||||
|
holder.gateLayout.setVisibility(View.GONE);
|
||||||
|
holder.startedLayout.setVisibility(View.GONE);
|
||||||
|
holder.durationLayout.setVisibility(View.GONE);
|
||||||
|
holder.verifyButton.setVisibility(View.INVISIBLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -135,22 +237,36 @@ public class ObjectivesFragment extends Fragment implements PluginBase {
|
||||||
super.onAttachedToRecyclerView(recyclerView);
|
super.onAttachedToRecyclerView(recyclerView);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ObjectiveViewHolder extends RecyclerView.ViewHolder {
|
public class ObjectiveViewHolder extends RecyclerView.ViewHolder {
|
||||||
CardView cv;
|
CardView cv;
|
||||||
TextView position;
|
TextView position;
|
||||||
TextView objective;
|
TextView objective;
|
||||||
|
LinearLayout gateLayout;
|
||||||
TextView gate;
|
TextView gate;
|
||||||
|
TextView duration;
|
||||||
|
LinearLayout durationLayout;
|
||||||
TextView started;
|
TextView started;
|
||||||
|
Button startButton;
|
||||||
|
LinearLayout startedLayout;
|
||||||
TextView accomplished;
|
TextView accomplished;
|
||||||
|
Button verifyButton;
|
||||||
|
LinearLayout verifyLayout;
|
||||||
|
|
||||||
ObjectiveViewHolder(View itemView) {
|
ObjectiveViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
cv = (CardView) itemView.findViewById(R.id.objectives_cardview);
|
cv = (CardView) itemView.findViewById(R.id.objectives_cardview);
|
||||||
position = (TextView) itemView.findViewById(R.id.objectives_position);
|
position = (TextView) itemView.findViewById(R.id.objectives_position);
|
||||||
objective = (TextView) itemView.findViewById(R.id.objectives_objective);
|
objective = (TextView) itemView.findViewById(R.id.objectives_objective);
|
||||||
|
durationLayout = (LinearLayout) itemView.findViewById(R.id.objectives_duration_linearlayout);
|
||||||
|
duration = (TextView) itemView.findViewById(R.id.objectives_duration);
|
||||||
|
gateLayout = (LinearLayout) itemView.findViewById(R.id.objectives_gate_linearlayout);
|
||||||
gate = (TextView) itemView.findViewById(R.id.objectives_gate);
|
gate = (TextView) itemView.findViewById(R.id.objectives_gate);
|
||||||
|
startedLayout = (LinearLayout) itemView.findViewById(R.id.objectives_start_linearlayout);
|
||||||
started = (TextView) itemView.findViewById(R.id.objectives_started);
|
started = (TextView) itemView.findViewById(R.id.objectives_started);
|
||||||
|
startButton = (Button) itemView.findViewById(R.id.objectives_start);
|
||||||
|
verifyLayout = (LinearLayout) itemView.findViewById(R.id.objectives_verify_linearlayout);
|
||||||
accomplished = (TextView) itemView.findViewById(R.id.objectives_accomplished);
|
accomplished = (TextView) itemView.findViewById(R.id.objectives_accomplished);
|
||||||
|
verifyButton = (Button) itemView.findViewById(R.id.objectives_verify);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -158,6 +274,7 @@ public class ObjectivesFragment extends Fragment implements PluginBase {
|
||||||
public ObjectivesFragment() {
|
public ObjectivesFragment() {
|
||||||
super();
|
super();
|
||||||
initializeData();
|
initializeData();
|
||||||
|
loadProgress();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ObjectivesFragment newInstance() {
|
public static ObjectivesFragment newInstance() {
|
||||||
|
@ -179,11 +296,20 @@ public class ObjectivesFragment extends Fragment implements PluginBase {
|
||||||
recyclerView.setHasFixedSize(true);
|
recyclerView.setHasFixedSize(true);
|
||||||
llm = new LinearLayoutManager(view.getContext());
|
llm = new LinearLayoutManager(view.getContext());
|
||||||
recyclerView.setLayoutManager(llm);
|
recyclerView.setLayoutManager(llm);
|
||||||
|
enableFakeTime = (CheckBox) view.findViewById(R.id.objectives_faketime);
|
||||||
RecyclerViewAdapter adapter = new RecyclerViewAdapter(objectives);
|
enableFakeTime.setOnClickListener(new View.OnClickListener() {
|
||||||
recyclerView.setAdapter(adapter);
|
public void onClick(View v) {
|
||||||
|
updateView();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
updateView();
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void updateView() {
|
||||||
|
RecyclerViewAdapter adapter = new RecyclerViewAdapter(objectives);
|
||||||
|
recyclerView.setAdapter(adapter);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,26 @@
|
||||||
package info.nightscout.androidaps.plugins.SimpleProfile;
|
package info.nightscout.androidaps.plugins.SimpleProfile;
|
||||||
|
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.text.Editable;
|
||||||
|
import android.text.TextWatcher;
|
||||||
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.EditText;
|
||||||
|
import android.widget.RadioButton;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.Config;
|
||||||
|
import info.nightscout.androidaps.Constants;
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||||
|
@ -19,12 +30,37 @@ import info.nightscout.client.data.NSProfile;
|
||||||
public class SimpleProfileFragment extends Fragment implements PluginBase, ProfileInterface {
|
public class SimpleProfileFragment extends Fragment implements PluginBase, ProfileInterface {
|
||||||
private static Logger log = LoggerFactory.getLogger(SimpleProfileFragment.class);
|
private static Logger log = LoggerFactory.getLogger(SimpleProfileFragment.class);
|
||||||
|
|
||||||
|
private static final String PREFS_NAME = "SimpleProfile";
|
||||||
|
|
||||||
boolean fragmentEnabled = true;
|
boolean fragmentEnabled = true;
|
||||||
boolean fragmentVisible = true;
|
boolean fragmentVisible = true;
|
||||||
|
|
||||||
|
EditText diaView;
|
||||||
|
RadioButton mgdlView;
|
||||||
|
RadioButton mmolView;
|
||||||
|
EditText icView;
|
||||||
|
EditText isfView;
|
||||||
|
EditText carView;
|
||||||
|
EditText basalView;
|
||||||
|
EditText targetlowView;
|
||||||
|
EditText targethighView;
|
||||||
|
|
||||||
|
boolean mgdl;
|
||||||
|
boolean mmol;
|
||||||
|
Double dia;
|
||||||
|
Double ic;
|
||||||
|
Double isf;
|
||||||
|
Double car;
|
||||||
|
Double basal;
|
||||||
|
Double targetLow;
|
||||||
|
Double targetHigh;
|
||||||
|
|
||||||
|
NSProfile convertedProfile = null;
|
||||||
|
|
||||||
public SimpleProfileFragment() {
|
public SimpleProfileFragment() {
|
||||||
super();
|
super();
|
||||||
registerBus();
|
registerBus();
|
||||||
|
loadSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -71,7 +107,75 @@ public class SimpleProfileFragment extends Fragment implements PluginBase, Profi
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
View layout = inflater.inflate(R.layout.simpleprofile_fragment, container, false);
|
View layout = inflater.inflate(R.layout.simpleprofile_fragment, container, false);
|
||||||
|
diaView = (EditText) layout.findViewById(R.id.simpleprofile_dia);
|
||||||
|
mgdlView = (RadioButton) layout.findViewById(R.id.simpleprofile_mgdl);
|
||||||
|
mmolView = (RadioButton) layout.findViewById(R.id.simpleprofile_mmol);
|
||||||
|
icView = (EditText) layout.findViewById(R.id.simpleprofile_ic);
|
||||||
|
isfView = (EditText) layout.findViewById(R.id.simpleprofile_isf);
|
||||||
|
carView = (EditText) layout.findViewById(R.id.simpleprofile_car);
|
||||||
|
basalView = (EditText) layout.findViewById(R.id.simpleprofile_basalrate);
|
||||||
|
targetlowView = (EditText) layout.findViewById(R.id.simpleprofile_targetlow);
|
||||||
|
targethighView = (EditText) layout.findViewById(R.id.simpleprofile_targethigh);
|
||||||
|
|
||||||
|
mgdlView.setChecked(mgdl);
|
||||||
|
mmolView.setChecked(mmol);
|
||||||
|
diaView.setText(dia.toString());
|
||||||
|
icView.setText(ic.toString());
|
||||||
|
isfView.setText(isf.toString());
|
||||||
|
carView.setText(car.toString());
|
||||||
|
basalView.setText(basal.toString());
|
||||||
|
targetlowView.setText(targetLow.toString());
|
||||||
|
targethighView.setText(targetHigh.toString());
|
||||||
|
|
||||||
|
mgdlView.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
mgdl = mgdlView.isChecked();
|
||||||
|
mmol = !mgdl;
|
||||||
|
mmolView.setChecked(mmol);
|
||||||
|
storeSettings();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mmolView.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
mmol = mmolView.isChecked();
|
||||||
|
mgdl = !mmol;
|
||||||
|
mgdlView.setChecked(mgdl);
|
||||||
|
storeSettings();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
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) {
|
||||||
|
dia = Double.parseDouble(diaView.getText().toString().replace(",", "."));
|
||||||
|
ic = Double.parseDouble(icView.getText().toString().replace(",", "."));
|
||||||
|
isf = Double.parseDouble(isfView.getText().toString().replace(",", "."));
|
||||||
|
car = Double.parseDouble(carView.getText().toString().replace(",", "."));
|
||||||
|
basal = Double.parseDouble(basalView.getText().toString().replace(",", "."));
|
||||||
|
targetLow = Double.parseDouble(targetlowView.getText().toString().replace(",", "."));
|
||||||
|
targetHigh = Double.parseDouble(targethighView.getText().toString().replace(",", "."));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
diaView.addTextChangedListener(textWatch);
|
||||||
|
icView.addTextChangedListener(textWatch);
|
||||||
|
isfView.addTextChangedListener(textWatch);
|
||||||
|
carView.addTextChangedListener(textWatch);
|
||||||
|
basalView.addTextChangedListener(textWatch);
|
||||||
|
targetlowView.addTextChangedListener(textWatch);
|
||||||
|
targethighView.addTextChangedListener(textWatch);
|
||||||
return layout;
|
return layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,8 +193,107 @@ public class SimpleProfileFragment extends Fragment implements PluginBase, Profi
|
||||||
MainApp.bus().register(this);
|
MainApp.bus().register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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.putBoolean("mmol", mmol);
|
||||||
|
editor.putBoolean("mgdl", mgdl);
|
||||||
|
editor.putFloat("dia", new Float(dia));
|
||||||
|
editor.putFloat("ic", new Float(ic));
|
||||||
|
editor.putFloat("isf", new Float(isf));
|
||||||
|
editor.putFloat("car", new Float(car));
|
||||||
|
editor.putFloat("basal", new Float(basal));
|
||||||
|
editor.putFloat("targetlow", new Float(targetLow));
|
||||||
|
editor.putFloat("targethigh", new Float(targetHigh));
|
||||||
|
|
||||||
|
editor.commit();
|
||||||
|
createConvertedProfile();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadSettings() {
|
||||||
|
if (Config.logPrefsChange)
|
||||||
|
log.debug("Loading stored settings");
|
||||||
|
SharedPreferences settings = MainApp.instance().getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
|
||||||
|
|
||||||
|
if (settings.contains("mgdl")) mgdl = settings.getBoolean("mgdl", true); else mgdl = true;
|
||||||
|
if (settings.contains("mmol")) mmol = settings.getBoolean("mmol", false); else mmol = false;
|
||||||
|
if (settings.contains("dia")) dia = (double) settings.getFloat("dia", 3); else dia = 3d;
|
||||||
|
if (settings.contains("ic")) ic = (double) settings.getFloat("ic", 20); else ic = 20d;
|
||||||
|
if (settings.contains("isf")) isf = (double) settings.getFloat("isf", 200); else isf = 200d;
|
||||||
|
if (settings.contains("car")) car = (double) settings.getFloat("car", 20); else car = 20d;
|
||||||
|
if (settings.contains("basal")) basal = (double) settings.getFloat("basal", 1); else basal = 1d;
|
||||||
|
if (settings.contains("targetlow")) targetLow = (double) settings.getFloat("targetlow", 80); else targetLow = 80d;
|
||||||
|
if (settings.contains("targethigh"))
|
||||||
|
targetHigh = (double) settings.getFloat("targethigh", 120); else targetHigh = 120d;
|
||||||
|
createConvertedProfile();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
"_id": "576264a12771b7500d7ad184",
|
||||||
|
"startDate": "2016-06-16T08:35:00.000Z",
|
||||||
|
"defaultProfile": "Default",
|
||||||
|
"store": {
|
||||||
|
"Default": {
|
||||||
|
"dia": "3",
|
||||||
|
"carbratio": [{
|
||||||
|
"time": "00:00",
|
||||||
|
"value": "30"
|
||||||
|
}],
|
||||||
|
"carbs_hr": "20",
|
||||||
|
"delay": "20",
|
||||||
|
"sens": [{
|
||||||
|
"time": "00:00",
|
||||||
|
"value": "100"
|
||||||
|
}],
|
||||||
|
"timezone": "UTC",
|
||||||
|
"basal": [{
|
||||||
|
"time": "00:00",
|
||||||
|
"value": "0.1"
|
||||||
|
}],
|
||||||
|
"target_low": [{
|
||||||
|
"time": "00:00",
|
||||||
|
"value": "0"
|
||||||
|
}],
|
||||||
|
"target_high": [{
|
||||||
|
"time": "00:00",
|
||||||
|
"value": "0"
|
||||||
|
}],
|
||||||
|
"startDate": "1970-01-01T00:00:00.000Z",
|
||||||
|
"units": "mmol"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"created_at": "2016-06-16T08:34:41.256Z"
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
void createConvertedProfile() {
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
JSONObject store = new JSONObject();
|
||||||
|
JSONObject profile = new JSONObject();
|
||||||
|
|
||||||
|
try {
|
||||||
|
json.put("defaultProfile", "Profile");
|
||||||
|
json.put("store", store);
|
||||||
|
profile.put("dia", dia);
|
||||||
|
profile.put("carbratio", new JSONArray().put(new JSONObject().put("timeAsSeconds", 0).put("value", ic)));
|
||||||
|
profile.put("carbs_hr", car);
|
||||||
|
profile.put("sens", new JSONArray().put(new JSONObject().put("timeAsSeconds", 0).put("value", isf)));
|
||||||
|
profile.put("basal", new JSONArray().put(new JSONObject().put("timeAsSeconds", 0).put("value", basal)));
|
||||||
|
profile.put("target_low", new JSONArray().put(new JSONObject().put("timeAsSeconds", 0).put("value", targetLow)));
|
||||||
|
profile.put("target_high", new JSONArray().put(new JSONObject().put("timeAsSeconds", 0).put("value", targetHigh)));
|
||||||
|
profile.put("units", mgdl ? Constants.MGDL : Constants.MMOL);
|
||||||
|
store.put("Profile", profile);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
convertedProfile = new NSProfile(json, null);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NSProfile getProfile() {
|
public NSProfile getProfile() {
|
||||||
return null;
|
return convertedProfile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,10 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context="info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment">
|
tools:context="info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment">
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -14,7 +18,8 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/configbuilder_pump"
|
android:text="@string/configbuilder_pump"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:layout_marginLeft="5dp" />
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@+id/configbuilder_pumplistview"
|
android:id="@+id/configbuilder_pumplistview"
|
||||||
|
@ -29,7 +34,8 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/configbuilder_treatments"
|
android:text="@string/configbuilder_treatments"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:layout_marginLeft="5dp" />
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@+id/configbuilder_treatmentslistview"
|
android:id="@+id/configbuilder_treatmentslistview"
|
||||||
|
@ -44,7 +50,8 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/configbuilder_tempbasals"
|
android:text="@string/configbuilder_tempbasals"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:layout_marginLeft="5dp" />
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@+id/configbuilder_tempslistview"
|
android:id="@+id/configbuilder_tempslistview"
|
||||||
|
@ -59,7 +66,8 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/configbuilder_profile"
|
android:text="@string/configbuilder_profile"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:layout_marginLeft="5dp" />
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@+id/configbuilder_profilelistview"
|
android:id="@+id/configbuilder_profilelistview"
|
||||||
|
@ -74,7 +82,8 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/configbuilder_aps"
|
android:text="@string/configbuilder_aps"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:layout_marginLeft="5dp" />
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@+id/configbuilder_apslistview"
|
android:id="@+id/configbuilder_apslistview"
|
||||||
|
@ -84,12 +93,29 @@
|
||||||
android:layout_marginRight="10dp"
|
android:layout_marginRight="10dp"
|
||||||
android:background="@color/cardColorBackground" />
|
android:background="@color/cardColorBackground" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/configbuilder_constrains"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:layout_marginLeft="5dp" />
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@+id/configbuilder_constrainslistview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="10dp"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:background="@color/cardColorBackground" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/configbuilder_general"
|
android:text="@string/configbuilder_general"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:layout_marginLeft="5dp" />
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@+id/configbuilder_generallistview"
|
android:id="@+id/configbuilder_generallistview"
|
||||||
|
@ -99,5 +125,5 @@
|
||||||
android:layout_marginRight="10dp"
|
android:layout_marginRight="10dp"
|
||||||
android:background="@color/cardColorBackground" />
|
android:background="@color/cardColorBackground" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
</ScrollView>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
@ -27,7 +23,7 @@
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:focusable="false"
|
android:focusable="false"
|
||||||
android:focusableInTouchMode="false"
|
android:focusableInTouchMode="false"
|
||||||
android:text="Visible" />
|
android:text="Show" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/configbuilder_simpleitem_upimage"
|
android:id="@+id/configbuilder_simpleitem_upimage"
|
||||||
|
@ -46,4 +42,3 @@
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
|
|
@ -4,12 +4,24 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".plugins.Objectives.ObjectivesFragment">
|
tools:context=".plugins.Objectives.ObjectivesFragment">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Enable fake time"
|
||||||
|
android:id="@+id/objectives_faketime" />
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
android:id="@+id/objectives_recyclerview"
|
android:id="@+id/objectives_recyclerview"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
</android.support.v7.widget.RecyclerView>
|
</android.support.v7.widget.RecyclerView>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
|
@ -68,7 +68,8 @@
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal"
|
||||||
|
android:id="@+id/objectives_gate_linearlayout">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/objectives_gate_label"
|
android:id="@+id/objectives_gate_label"
|
||||||
|
@ -93,7 +94,8 @@
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal"
|
||||||
|
android:id="@+id/objectives_start_linearlayout">
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/objectives_start"
|
android:id="@+id/objectives_start"
|
||||||
|
@ -109,10 +111,23 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/objectives_duration_linearlayout">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/objectives_duration" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal"
|
||||||
|
android:id="@+id/objectives_verify_linearlayout">
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/objectives_verify"
|
android:id="@+id/objectives_verify"
|
||||||
|
|
|
@ -4,4 +4,152 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".plugins.SimpleProfile.SimpleProfileFragment">
|
tools:context=".plugins.SimpleProfile.SimpleProfileFragment">
|
||||||
|
|
||||||
|
<TableLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_gravity="left|top">
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Units:"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
|
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/simpleprofile_mgdl"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_column="2"
|
||||||
|
android:text="mgdl" />
|
||||||
|
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/simpleprofile_mmol"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_column="3"
|
||||||
|
android:text="mmol" />
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="DIA:"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/simpleprofile_dia"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_column="2"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="IC:"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/simpleprofile_ic"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_column="2"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="ISF:"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/simpleprofile_isf"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_column="2"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Absorption rate:"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/simpleprofile_car"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_column="2"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Basal rate:"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/simpleprofile_basalrate"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_column="2"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Target range:"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/simpleprofile_targetlow"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_column="2"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/simpleprofile_targethigh"
|
||||||
|
android:layout_width="100dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_column="2"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
</TableRow>
|
||||||
|
</TableLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
|
@ -105,5 +105,8 @@
|
||||||
<string name="configbuilder_profile">Profile</string>
|
<string name="configbuilder_profile">Profile</string>
|
||||||
<string name="configbuilder_aps">APS</string>
|
<string name="configbuilder_aps">APS</string>
|
||||||
<string name="configbuilder_general">General</string>
|
<string name="configbuilder_general">General</string>
|
||||||
|
<string name="days">days</string>
|
||||||
|
<string name="minimalduration">Minimal duration</string>
|
||||||
|
<string name="configbuilder_constrains">Constrains</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue