From be556cf388003dfa49e2eacb22dc029563954f7f Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sat, 12 Nov 2016 17:32:32 +0100 Subject: [PATCH 01/18] CPP copy simple profile --- .../info/nightscout/androidaps/MainApp.java | 2 + .../CircadianPercentageProfileFragment.java | 118 +++++++++ .../CircadianPercentageProfilePlugin.java | 246 ++++++++++++++++++ .../circadianpercentageprofile_fragment.xml | 155 +++++++++++ 4 files changed, 521 insertions(+) create mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java create mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java create mode 100644 app/src/main/res/layout/circadianpercentageprofile_fragment.xml diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java index 94ccb45521..6eb3e03e98 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.java +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java @@ -18,6 +18,7 @@ import info.nightscout.androidaps.db.DatabaseHelper; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.plugins.Actions.ActionsFragment; import info.nightscout.androidaps.plugins.Careportal.CareportalFragment; +import info.nightscout.androidaps.plugins.CircadianPercentageProfile.CircadianPercentageProfileFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.DanaR.DanaRFragment; @@ -75,6 +76,7 @@ public class MainApp extends Application { if (Config.OPENAPSMAENABLED) pluginsList.add(OpenAPSMAFragment.getPlugin()); pluginsList.add(NSProfileViewerFragment.getPlugin()); pluginsList.add(SimpleProfileFragment.getPlugin()); + pluginsList.add(CircadianPercentageProfileFragment.getPlugin()); pluginsList.add(TreatmentsFragment.getPlugin()); pluginsList.add(TempBasalsFragment.getPlugin()); pluginsList.add(SafetyFragment.getPlugin()); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java new file mode 100644 index 0000000000..c0711aaee8 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java @@ -0,0 +1,118 @@ +package info.nightscout.androidaps.plugins.CircadianPercentageProfile; + + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.RadioButton; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import info.nightscout.androidaps.R; +import info.nightscout.androidaps.interfaces.FragmentBase; +import info.nightscout.utils.SafeParse; + +public class CircadianPercentageProfileFragment extends Fragment implements FragmentBase { + private static Logger log = LoggerFactory.getLogger(CircadianPercentageProfileFragment.class); + + private static CircadianPercentageProfilePlugin circadianPercentageProfilePlugin = new CircadianPercentageProfilePlugin(); + + public static CircadianPercentageProfilePlugin getPlugin() { + return circadianPercentageProfilePlugin; + } + + EditText diaView; + RadioButton mgdlView; + RadioButton mmolView; + EditText icView; + EditText isfView; + EditText carView; + EditText basalView; + EditText targetlowView; + EditText targethighView; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.circadianpercentageprofile_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(circadianPercentageProfilePlugin.mgdl); + mmolView.setChecked(circadianPercentageProfilePlugin.mmol); + diaView.setText(circadianPercentageProfilePlugin.dia.toString()); + icView.setText(circadianPercentageProfilePlugin.ic.toString()); + isfView.setText(circadianPercentageProfilePlugin.isf.toString()); + carView.setText(circadianPercentageProfilePlugin.car.toString()); + basalView.setText(circadianPercentageProfilePlugin.basal.toString()); + targetlowView.setText(circadianPercentageProfilePlugin.targetLow.toString()); + targethighView.setText(circadianPercentageProfilePlugin.targetHigh.toString()); + + mgdlView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + circadianPercentageProfilePlugin.mgdl = mgdlView.isChecked(); + circadianPercentageProfilePlugin.mmol = !circadianPercentageProfilePlugin.mgdl; + mmolView.setChecked(circadianPercentageProfilePlugin.mmol); + circadianPercentageProfilePlugin.storeSettings(); + } + }); + mmolView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + circadianPercentageProfilePlugin.mmol = mmolView.isChecked(); + circadianPercentageProfilePlugin.mgdl = !circadianPercentageProfilePlugin.mmol; + mgdlView.setChecked(circadianPercentageProfilePlugin.mgdl); + circadianPercentageProfilePlugin.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) { + circadianPercentageProfilePlugin.dia = SafeParse.stringToDouble(diaView.getText().toString()); + circadianPercentageProfilePlugin.ic = SafeParse.stringToDouble(icView.getText().toString()); + circadianPercentageProfilePlugin.isf = SafeParse.stringToDouble(isfView.getText().toString()); + circadianPercentageProfilePlugin.car = SafeParse.stringToDouble(carView.getText().toString()); + circadianPercentageProfilePlugin.basal = SafeParse.stringToDouble(basalView.getText().toString()); + circadianPercentageProfilePlugin.targetLow = SafeParse.stringToDouble(targetlowView.getText().toString()); + circadianPercentageProfilePlugin.targetHigh = SafeParse.stringToDouble(targethighView.getText().toString()); + circadianPercentageProfilePlugin.storeSettings(); + } + }; + + diaView.addTextChangedListener(textWatch); + icView.addTextChangedListener(textWatch); + isfView.addTextChangedListener(textWatch); + carView.addTextChangedListener(textWatch); + basalView.addTextChangedListener(textWatch); + targetlowView.addTextChangedListener(textWatch); + targethighView.addTextChangedListener(textWatch); + return layout; + } + +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java new file mode 100644 index 0000000000..a1d24881a9 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java @@ -0,0 +1,246 @@ +package info.nightscout.androidaps.plugins.CircadianPercentageProfile; + +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import info.nightscout.androidaps.Config; +import info.nightscout.androidaps.Constants; +import info.nightscout.androidaps.MainApp; +import info.nightscout.androidaps.R; +import info.nightscout.androidaps.interfaces.PluginBase; +import info.nightscout.androidaps.interfaces.ProfileInterface; +import info.nightscout.client.data.NSProfile; +import info.nightscout.utils.SafeParse; + +/** + * Created by mike on 05.08.2016. + */ +public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInterface { + public static final String SETTINGS_PREFIX = "CircadianPercentageProfile"; + private static Logger log = LoggerFactory.getLogger(CircadianPercentageProfilePlugin.class); + + private static boolean fragmentEnabled = true; + private static boolean fragmentVisible = true; + + private static NSProfile convertedProfile = null; + + boolean mgdl; + boolean mmol; + Double dia; + Double ic; + Double isf; + Double car; + Double basal; + Double targetLow; + Double targetHigh; + + public CircadianPercentageProfilePlugin() { + loadSettings(); + } + + @Override + public String getFragmentClass() { + return CircadianPercentageProfileFragment.class.getName(); + } + + @Override + public int getType() { + return PluginBase.PROFILE; + } + + @Override + public String getName() { + // TODO Adrian: stringify! (omitted to prevent merge conflicts) + return "CPP"; + //return MainApp.instance().getString(R.string.simpleprofile); + } + + @Override + public boolean isEnabled(int type) { + return fragmentEnabled; + } + + @Override + public boolean isVisibleInTabs(int type) { + return fragmentVisible; + } + + @Override + public boolean canBeHidden(int type) { + return true; + } + + @Override + public void setFragmentEnabled(int type, boolean fragmentEnabled) { + this.fragmentEnabled = fragmentEnabled; + } + + @Override + public void setFragmentVisible(int type, boolean fragmentVisible) { + this.fragmentVisible = fragmentVisible; + } + + public void storeSettings() { + if (Config.logPrefsChange) + log.debug("Storing settings"); + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext()); + SharedPreferences.Editor editor = settings.edit(); + editor.putBoolean(SETTINGS_PREFIX + "mmol", mmol); + editor.putBoolean(SETTINGS_PREFIX + "mgdl", mgdl); + editor.putString(SETTINGS_PREFIX + "dia", dia.toString()); + editor.putString(SETTINGS_PREFIX + "ic", ic.toString()); + editor.putString(SETTINGS_PREFIX + "isf", isf.toString()); + editor.putString(SETTINGS_PREFIX + "car", car.toString()); + editor.putString(SETTINGS_PREFIX + "basal", basal.toString()); + editor.putString(SETTINGS_PREFIX + "targetlow", targetLow.toString()); + editor.putString(SETTINGS_PREFIX + "targethigh", targetHigh.toString()); + + + editor.commit(); + createConvertedProfile(); + } + + private void loadSettings() { + if (Config.logPrefsChange) + log.debug("Loading stored settings"); + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext()); + + if (settings.contains(SETTINGS_PREFIX+ "mgdl")) + try { + mgdl = settings.getBoolean(SETTINGS_PREFIX + "mgdl", true); + } catch (Exception e) { + log.debug(e.getMessage()); + } + else mgdl = true; + if (settings.contains(SETTINGS_PREFIX + "mmol")) + try { + mmol = settings.getBoolean(SETTINGS_PREFIX + "mmol", false); + } catch (Exception e) { + log.debug(e.getMessage()); + } + else mmol = false; + if (settings.contains(SETTINGS_PREFIX + "dia")) + try { + dia = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "dia", "3")); + } catch (Exception e) { + log.debug(e.getMessage()); + } + else dia = 3d; + if (settings.contains(SETTINGS_PREFIX + "ic")) + try { + ic = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "ic", "20")); + } catch (Exception e) { + log.debug(e.getMessage()); + } + else ic = 20d; + if (settings.contains(SETTINGS_PREFIX + "isf")) + try { + isf = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "isf", "200")); + } catch (Exception e) { + log.debug(e.getMessage()); + } + else isf = 200d; + if (settings.contains(SETTINGS_PREFIX + "car")) + try { + car = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "car", "20")); + } catch (Exception e) { + log.debug(e.getMessage()); + } + else car = 20d; + if (settings.contains(SETTINGS_PREFIX + "basal")) + try { + basal = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "basal", "1")); + } catch (Exception e) { + log.debug(e.getMessage()); + } + else basal = 1d; + if (settings.contains(SETTINGS_PREFIX + "targetlow")) + try { + targetLow = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "targetlow", "80")); + } catch (Exception e) { + log.debug(e.getMessage()); + } + else targetLow = 80d; + if (settings.contains(SETTINGS_PREFIX + "targethigh")) + try { + targetHigh = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "targethigh", "120")); + } catch (Exception e) { + log.debug(e.getMessage()); + } + 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", "CircadianPercentage"); + 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("CircadianPercentage", profile); + } catch (JSONException e) { + e.printStackTrace(); + } + convertedProfile = new NSProfile(json, "CircadianPercentage"); + } + + @Override + public NSProfile getProfile() { + return convertedProfile; + } + +} diff --git a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml new file mode 100644 index 0000000000..6ef5df5912 --- /dev/null +++ b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 364b3d6710b7c9d3554299dea261bb502d0fc7a8 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sat, 12 Nov 2016 20:00:13 +0100 Subject: [PATCH 02/18] CPP percentage and shift working on hard coded basal rate --- .../CircadianPercentageProfileFragment.java | 17 +- .../CircadianPercentageProfilePlugin.java | 54 +++- .../circadianpercentageprofile_fragment.xml | 283 ++++++++++-------- 3 files changed, 219 insertions(+), 135 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java index c0711aaee8..9307532b86 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java @@ -36,6 +36,9 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag EditText basalView; EditText targetlowView; EditText targethighView; + EditText percentageView; + EditText timeshiftView; + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -47,9 +50,11 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag 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); + percentageView = (EditText) layout.findViewById(R.id.circadianpercentageprofile_percentage); + timeshiftView = (EditText) layout.findViewById(R.id.circadianpercentageprofile_timeshift); + mgdlView.setChecked(circadianPercentageProfilePlugin.mgdl); mmolView.setChecked(circadianPercentageProfilePlugin.mmol); @@ -57,9 +62,10 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag icView.setText(circadianPercentageProfilePlugin.ic.toString()); isfView.setText(circadianPercentageProfilePlugin.isf.toString()); carView.setText(circadianPercentageProfilePlugin.car.toString()); - basalView.setText(circadianPercentageProfilePlugin.basal.toString()); targetlowView.setText(circadianPercentageProfilePlugin.targetLow.toString()); targethighView.setText(circadianPercentageProfilePlugin.targetHigh.toString()); + percentageView.setText("" + circadianPercentageProfilePlugin.percentage); + timeshiftView.setText("" + circadianPercentageProfilePlugin.timeshift); mgdlView.setOnClickListener(new View.OnClickListener() { @Override @@ -98,9 +104,10 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag circadianPercentageProfilePlugin.ic = SafeParse.stringToDouble(icView.getText().toString()); circadianPercentageProfilePlugin.isf = SafeParse.stringToDouble(isfView.getText().toString()); circadianPercentageProfilePlugin.car = SafeParse.stringToDouble(carView.getText().toString()); - circadianPercentageProfilePlugin.basal = SafeParse.stringToDouble(basalView.getText().toString()); circadianPercentageProfilePlugin.targetLow = SafeParse.stringToDouble(targetlowView.getText().toString()); circadianPercentageProfilePlugin.targetHigh = SafeParse.stringToDouble(targethighView.getText().toString()); + circadianPercentageProfilePlugin.timeshift = SafeParse.stringToInt(timeshiftView.getText().toString()); + circadianPercentageProfilePlugin.percentage = SafeParse.stringToInt(percentageView.getText().toString()); circadianPercentageProfilePlugin.storeSettings(); } }; @@ -109,9 +116,11 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag icView.addTextChangedListener(textWatch); isfView.addTextChangedListener(textWatch); carView.addTextChangedListener(textWatch); - basalView.addTextChangedListener(textWatch); targetlowView.addTextChangedListener(textWatch); targethighView.addTextChangedListener(textWatch); + percentageView.addTextChangedListener(textWatch); + timeshiftView.addTextChangedListener(textWatch); + return layout; } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java index a1d24881a9..4eb9ee49a1 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java @@ -16,6 +16,7 @@ import info.nightscout.androidaps.R; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.client.data.NSProfile; +import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.SafeParse; /** @@ -36,9 +37,11 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte Double ic; Double isf; Double car; - Double basal; Double targetLow; Double targetHigh; + int percentage; + int timeshift; + double[] basebasal = new double[]{1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d}; public CircadianPercentageProfilePlugin() { loadSettings(); @@ -97,11 +100,15 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte editor.putString(SETTINGS_PREFIX + "ic", ic.toString()); editor.putString(SETTINGS_PREFIX + "isf", isf.toString()); editor.putString(SETTINGS_PREFIX + "car", car.toString()); - editor.putString(SETTINGS_PREFIX + "basal", basal.toString()); editor.putString(SETTINGS_PREFIX + "targetlow", targetLow.toString()); editor.putString(SETTINGS_PREFIX + "targethigh", targetHigh.toString()); + editor.putString(SETTINGS_PREFIX + "timeshift", timeshift+""); + editor.putString(SETTINGS_PREFIX + "percentage", percentage+""); + for (int i = 0; i<24; i++) { + editor.putString(SETTINGS_PREFIX + "basebasal" + i, DecimalFormatter.to2Decimal(basebasal[i])); + } editor.commit(); createConvertedProfile(); } @@ -153,13 +160,6 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte log.debug(e.getMessage()); } else car = 20d; - if (settings.contains(SETTINGS_PREFIX + "basal")) - try { - basal = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "basal", "1")); - } catch (Exception e) { - log.debug(e.getMessage()); - } - else basal = 1d; if (settings.contains(SETTINGS_PREFIX + "targetlow")) try { targetLow = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "targetlow", "80")); @@ -174,6 +174,31 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte log.debug(e.getMessage()); } else targetHigh = 120d; + if (settings.contains(SETTINGS_PREFIX + "percentage")) + try { + percentage = SafeParse.stringToInt(settings.getString(SETTINGS_PREFIX + "percentage", "100")); + } catch (Exception e) { + log.debug(e.getMessage()); + } + else percentage = 100; + + if (settings.contains(SETTINGS_PREFIX + "timeshift")) + try { + timeshift = SafeParse.stringToInt(settings.getString(SETTINGS_PREFIX + "timeshift", "0")); + } catch (Exception e) { + log.debug(e.getMessage()); + } + else timeshift = 0; + + for (int i = 0; i<24; i++){ + try { + basebasal[i] = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "basebasal" + i, DecimalFormatter.to2Decimal(basebasal[i]))); + } catch (Exception e) { + log.debug(e.getMessage()); + } + } + + createConvertedProfile(); } @@ -227,7 +252,16 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte 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))); + + JSONArray basalArray = new JSONArray(); + + for (int i = 0; i<24; i++){ + basalArray.put(new JSONObject().put("timeAsSeconds", ((i+timeshift)%24)*60*60).put("value", basebasal[i]*percentage/100d)); + } + + profile.put("basal", basalArray); + + 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); diff --git a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml index 6ef5df5912..135be42219 100644 --- a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml +++ b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml @@ -3,153 +3,194 @@ android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".plugins.CircadianPercentageProfile.CircadianPercentageProfileFragment"> - - - - + + android:layout_height="match_parent" + android:layout_gravity="left|top"> - + + + - + - + - + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - + - + - - - + + + + + + + + + + + + + + + + + From 8c93925865ff770de8e76f1c1c422f06f0da45b1 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 13 Nov 2016 02:24:19 +0100 Subject: [PATCH 03/18] CPP simple representation string --- .../CircadianPercentageProfileFragment.java | 14 +++- .../CircadianPercentageProfilePlugin.java | 67 +++++++------------ .../circadianpercentageprofile_fragment.xml | 18 ++++- 3 files changed, 55 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java index 9307532b86..c2dcf32a74 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java @@ -10,6 +10,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.RadioButton; +import android.widget.TextView; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,11 +34,11 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag EditText icView; EditText isfView; EditText carView; - EditText basalView; EditText targetlowView; EditText targethighView; EditText percentageView; EditText timeshiftView; + TextView profileView; @Override @@ -54,6 +55,7 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag targethighView = (EditText) layout.findViewById(R.id.simpleprofile_targethigh); percentageView = (EditText) layout.findViewById(R.id.circadianpercentageprofile_percentage); timeshiftView = (EditText) layout.findViewById(R.id.circadianpercentageprofile_timeshift); + profileView = (TextView) layout.findViewById(R.id.circadianpercentageprofile_profileview); mgdlView.setChecked(circadianPercentageProfilePlugin.mgdl); @@ -66,6 +68,7 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag targethighView.setText(circadianPercentageProfilePlugin.targetHigh.toString()); percentageView.setText("" + circadianPercentageProfilePlugin.percentage); timeshiftView.setText("" + circadianPercentageProfilePlugin.timeshift); + updateProfileInfo(); mgdlView.setOnClickListener(new View.OnClickListener() { @Override @@ -74,6 +77,7 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag circadianPercentageProfilePlugin.mmol = !circadianPercentageProfilePlugin.mgdl; mmolView.setChecked(circadianPercentageProfilePlugin.mmol); circadianPercentageProfilePlugin.storeSettings(); + updateProfileInfo(); } }); mmolView.setOnClickListener(new View.OnClickListener() { @@ -83,6 +87,7 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag circadianPercentageProfilePlugin.mgdl = !circadianPercentageProfilePlugin.mmol; mgdlView.setChecked(circadianPercentageProfilePlugin.mgdl); circadianPercentageProfilePlugin.storeSettings(); + updateProfileInfo(); } }); @@ -109,6 +114,7 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag circadianPercentageProfilePlugin.timeshift = SafeParse.stringToInt(timeshiftView.getText().toString()); circadianPercentageProfilePlugin.percentage = SafeParse.stringToInt(percentageView.getText().toString()); circadianPercentageProfilePlugin.storeSettings(); + updateProfileInfo(); } }; @@ -124,4 +130,10 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag return layout; } + private void updateProfileInfo() { + profileView.setText("Basal: " + circadianPercentageProfilePlugin.basalString()); + profileView.append("\n\n"); + profileView.append("Base-Basal: " + circadianPercentageProfilePlugin.baseBasalString()); + } + } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java index 4eb9ee49a1..6f72706ada 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java @@ -2,6 +2,7 @@ package info.nightscout.androidaps.plugins.CircadianPercentageProfile; import android.content.SharedPreferences; import android.preference.PreferenceManager; +import android.util.StringBuilderPrinter; import org.json.JSONArray; import org.json.JSONException; @@ -12,7 +13,6 @@ import org.slf4j.LoggerFactory; import info.nightscout.androidaps.Config; import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.client.data.NSProfile; @@ -20,7 +20,8 @@ import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.SafeParse; /** - * Created by mike on 05.08.2016. + * Created by Adrian on 12.11.2016. + * Based on SimpleProfile created by mike on 05.08.2016. */ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInterface { public static final String SETTINGS_PREFIX = "CircadianPercentageProfile"; @@ -201,45 +202,6 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte 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(); @@ -277,4 +239,27 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte return convertedProfile; } + public String basalString(){ + return profileString(basebasal, timeshift, percentage); + } + + public String baseBasalString(){ + return profileString(basebasal, 0, 100); + } + + private static String profileString(double[] values, int timeshift, int percentage){ + StringBuilder sb = new StringBuilder(); + sb.append(0); sb.append("h: "); + sb.append(DecimalFormatter.to2Decimal(values[(timeshift+0)%24]*percentage/100d)); + double prevVal = values[(timeshift+0)%24]; + for (int i = 1; i < 24; i++) { + if(prevVal != values[(timeshift+i)%24]){ + sb.append(", "); sb.append(i); sb.append("h: "); + sb.append(DecimalFormatter.to2Decimal(values[(timeshift+i)%24]*percentage/100d)); + prevVal = values[(timeshift+i)%24]; + } + } + return sb.toString(); + } + } diff --git a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml index 135be42219..25b05eff85 100644 --- a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml +++ b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml @@ -7,9 +7,22 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> - + + + + + From f815f7fce62e58a7a50e5726558f7d135c252d18 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 13 Nov 2016 02:56:08 +0100 Subject: [PATCH 04/18] CPP ic and isf data --- .../CircadianPercentageProfileFragment.java | 22 +++--- .../CircadianPercentageProfilePlugin.java | 69 ++++++++++++------- .../circadianpercentageprofile_fragment.xml | 36 ---------- 3 files changed, 54 insertions(+), 73 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java index c2dcf32a74..2a65e77295 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java @@ -31,8 +31,6 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag EditText diaView; RadioButton mgdlView; RadioButton mmolView; - EditText icView; - EditText isfView; EditText carView; EditText targetlowView; EditText targethighView; @@ -48,8 +46,6 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag 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); targetlowView = (EditText) layout.findViewById(R.id.simpleprofile_targetlow); targethighView = (EditText) layout.findViewById(R.id.simpleprofile_targethigh); @@ -61,8 +57,6 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag mgdlView.setChecked(circadianPercentageProfilePlugin.mgdl); mmolView.setChecked(circadianPercentageProfilePlugin.mmol); diaView.setText(circadianPercentageProfilePlugin.dia.toString()); - icView.setText(circadianPercentageProfilePlugin.ic.toString()); - isfView.setText(circadianPercentageProfilePlugin.isf.toString()); carView.setText(circadianPercentageProfilePlugin.car.toString()); targetlowView.setText(circadianPercentageProfilePlugin.targetLow.toString()); targethighView.setText(circadianPercentageProfilePlugin.targetHigh.toString()); @@ -106,8 +100,6 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag public void onTextChanged(CharSequence s, int start, int before, int count) { circadianPercentageProfilePlugin.dia = SafeParse.stringToDouble(diaView.getText().toString()); - circadianPercentageProfilePlugin.ic = SafeParse.stringToDouble(icView.getText().toString()); - circadianPercentageProfilePlugin.isf = SafeParse.stringToDouble(isfView.getText().toString()); circadianPercentageProfilePlugin.car = SafeParse.stringToDouble(carView.getText().toString()); circadianPercentageProfilePlugin.targetLow = SafeParse.stringToDouble(targetlowView.getText().toString()); circadianPercentageProfilePlugin.targetHigh = SafeParse.stringToDouble(targethighView.getText().toString()); @@ -119,8 +111,6 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag }; diaView.addTextChangedListener(textWatch); - icView.addTextChangedListener(textWatch); - isfView.addTextChangedListener(textWatch); carView.addTextChangedListener(textWatch); targetlowView.addTextChangedListener(textWatch); targethighView.addTextChangedListener(textWatch); @@ -131,9 +121,15 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag } private void updateProfileInfo() { - profileView.setText("Basal: " + circadianPercentageProfilePlugin.basalString()); - profileView.append("\n\n"); - profileView.append("Base-Basal: " + circadianPercentageProfilePlugin.baseBasalString()); + profileView.setText("Active Profile:\n"); + profileView.append("Basal: " + circadianPercentageProfilePlugin.basalString() + "\n"); + profileView.append("IC: " + circadianPercentageProfilePlugin.icString() + "\n"); + profileView.append("ISF: " + circadianPercentageProfilePlugin.isfString() + "\n"); + profileView.append("\n"); + profileView.append("Base Profile:\n"); + profileView.append("Basal: " + circadianPercentageProfilePlugin.baseBasalString() + "\n"); + profileView.append("IC: " + circadianPercentageProfilePlugin.baseIcString() + "\n"); + profileView.append("ISF: " + circadianPercentageProfilePlugin.baseIsfString() + "\n"); } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java index 6f72706ada..830b4a0360 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java @@ -35,14 +35,14 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte boolean mgdl; boolean mmol; Double dia; - Double ic; - Double isf; Double car; Double targetLow; Double targetHigh; int percentage; int timeshift; double[] basebasal = new double[]{1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d, 1d}; + double[] baseisf = new double[]{35d, 35d, 35d, 35.1d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d, 35d}; + double[] baseic = new double[]{4d, 4d, 4d, 4d, 4.1d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d}; public CircadianPercentageProfilePlugin() { loadSettings(); @@ -98,8 +98,6 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte editor.putBoolean(SETTINGS_PREFIX + "mmol", mmol); editor.putBoolean(SETTINGS_PREFIX + "mgdl", mgdl); editor.putString(SETTINGS_PREFIX + "dia", dia.toString()); - editor.putString(SETTINGS_PREFIX + "ic", ic.toString()); - editor.putString(SETTINGS_PREFIX + "isf", isf.toString()); editor.putString(SETTINGS_PREFIX + "car", car.toString()); editor.putString(SETTINGS_PREFIX + "targetlow", targetLow.toString()); editor.putString(SETTINGS_PREFIX + "targethigh", targetHigh.toString()); @@ -109,6 +107,8 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte for (int i = 0; i<24; i++) { editor.putString(SETTINGS_PREFIX + "basebasal" + i, DecimalFormatter.to2Decimal(basebasal[i])); + editor.putString(SETTINGS_PREFIX + "baseisf" + i, DecimalFormatter.to2Decimal(baseisf[i])); + editor.putString(SETTINGS_PREFIX + "baseic" + i, DecimalFormatter.to2Decimal(baseic[i])); } editor.commit(); createConvertedProfile(); @@ -140,20 +140,6 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte log.debug(e.getMessage()); } else dia = 3d; - if (settings.contains(SETTINGS_PREFIX + "ic")) - try { - ic = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "ic", "20")); - } catch (Exception e) { - log.debug(e.getMessage()); - } - else ic = 20d; - if (settings.contains(SETTINGS_PREFIX + "isf")) - try { - isf = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "isf", "200")); - } catch (Exception e) { - log.debug(e.getMessage()); - } - else isf = 200d; if (settings.contains(SETTINGS_PREFIX + "car")) try { car = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "car", "20")); @@ -197,6 +183,16 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte } catch (Exception e) { log.debug(e.getMessage()); } + try { + baseic[i] = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "baseic" + i, DecimalFormatter.to2Decimal(baseic[i]))); + } catch (Exception e) { + log.debug(e.getMessage()); + } + try { + baseisf[i] = SafeParse.stringToDouble(settings.getString(SETTINGS_PREFIX + "baseisf" + i, DecimalFormatter.to2Decimal(baseisf[i]))); + } catch (Exception e) { + log.debug(e.getMessage()); + } } @@ -211,16 +207,25 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte json.put("defaultProfile", "CircadianPercentage"); json.put("store", store); profile.put("dia", dia); - profile.put("carbratio", new JSONArray().put(new JSONObject().put("timeAsSeconds", 0).put("value", ic))); + + JSONArray icArray = new JSONArray(); + for (int i = 0; i<24; i++){ + icArray.put(new JSONObject().put("timeAsSeconds", ((i+timeshift)%24)*60*60).put("value", baseic[i]*percentage/100d)); + } + profile.put("carbratio", icArray); + profile.put("carbs_hr", car); - profile.put("sens", new JSONArray().put(new JSONObject().put("timeAsSeconds", 0).put("value", isf))); + + JSONArray isfArray = new JSONArray(); + for (int i = 0; i<24; i++){ + isfArray.put(new JSONObject().put("timeAsSeconds", ((i+timeshift)%24)*60*60).put("value", baseisf[i]*percentage/100d)); + } + profile.put("sens", isfArray); JSONArray basalArray = new JSONArray(); - for (int i = 0; i<24; i++){ basalArray.put(new JSONObject().put("timeAsSeconds", ((i+timeshift)%24)*60*60).put("value", basebasal[i]*percentage/100d)); } - profile.put("basal", basalArray); @@ -239,11 +244,27 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte return convertedProfile; } - public String basalString(){ + public String basalString() { return profileString(basebasal, timeshift, percentage); } - public String baseBasalString(){ + public String icString() { + return profileString(baseic, timeshift, percentage); + } + + public String isfString() { + return profileString(baseisf, timeshift, percentage); + } + + public String baseIcString() { + return profileString(baseic, 0, 100); + } + + public String baseIsfString() { + return profileString(baseisf, 0, 100); + } + + public String baseBasalString() { return profileString(basebasal, 0, 100); } diff --git a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml index 25b05eff85..f0331c5423 100644 --- a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml +++ b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml @@ -70,42 +70,6 @@ android:inputType="numberDecimal" /> - - - - - - - - - - - - - - From 4dbb20b8c560ef9a09d2427d5528ac6cec777379 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 13 Nov 2016 03:32:45 +0100 Subject: [PATCH 05/18] CPP small redesign --- .../CircadianPercentageProfileFragment.java | 14 +- .../circadianpercentageprofile_fragment.xml | 272 ++++++++++-------- 2 files changed, 153 insertions(+), 133 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java index 2a65e77295..7a1b5ab1c4 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java @@ -37,6 +37,8 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag EditText percentageView; EditText timeshiftView; TextView profileView; + TextView baseprofileView; + @Override @@ -52,7 +54,7 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag percentageView = (EditText) layout.findViewById(R.id.circadianpercentageprofile_percentage); timeshiftView = (EditText) layout.findViewById(R.id.circadianpercentageprofile_timeshift); profileView = (TextView) layout.findViewById(R.id.circadianpercentageprofile_profileview); - + baseprofileView = (TextView) layout.findViewById(R.id.circadianpercentageprofile_baseprofileview); mgdlView.setChecked(circadianPercentageProfilePlugin.mgdl); mmolView.setChecked(circadianPercentageProfilePlugin.mmol); @@ -125,11 +127,11 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag profileView.append("Basal: " + circadianPercentageProfilePlugin.basalString() + "\n"); profileView.append("IC: " + circadianPercentageProfilePlugin.icString() + "\n"); profileView.append("ISF: " + circadianPercentageProfilePlugin.isfString() + "\n"); - profileView.append("\n"); - profileView.append("Base Profile:\n"); - profileView.append("Basal: " + circadianPercentageProfilePlugin.baseBasalString() + "\n"); - profileView.append("IC: " + circadianPercentageProfilePlugin.baseIcString() + "\n"); - profileView.append("ISF: " + circadianPercentageProfilePlugin.baseIsfString() + "\n"); + + baseprofileView.setText("Base Profile:\n"); + baseprofileView.append("Basal: " + circadianPercentageProfilePlugin.baseBasalString() + "\n"); + baseprofileView.append("IC: " + circadianPercentageProfilePlugin.baseIcString() + "\n"); + baseprofileView.append("ISF: " + circadianPercentageProfilePlugin.baseIsfString() + "\n"); } } diff --git a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml index f0331c5423..6d6b4263f5 100644 --- a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml +++ b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml @@ -3,172 +3,190 @@ android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".plugins.CircadianPercentageProfile.CircadianPercentageProfileFragment"> + - - - - + android:orientation="vertical"> - + android:layout_height="wrap_content" + android:layout_marginLeft="10dp" + android:layout_marginRight="10dp" + android:background="@color/cardColorBackground" + android:text="Profile View" + android:textAppearance="?android:attr/textAppearanceSmall" /> - + + + android:orientation="horizontal" + android:layout_gravity="center_horizontal" + android:background="@drawable/pillborder" + android:padding="5dp"> + + + + - + + + android:orientation="horizontal" + android:layout_gravity="center_horizontal" + android:background="@drawable/pillborder" + android:padding="5dp"> - + - + - + + + + + android:layout_height="wrap_content" + android:layout_marginLeft="10dp" + android:layout_marginRight="10dp" + android:background="@color/cardColorBackground" + android:text="Profile View" + android:textAppearance="?android:attr/textAppearanceSmall" /> - - - - - + android:layout_height="wrap_content" + android:layout_gravity="left|top"> - + - - + - + - + - + - + - - + + - + - + - - - + + - + - - + - + + + + + + + From a57a864c242c9e40575d72ff8e89ffd32baf8b17 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 13 Nov 2016 04:33:07 +0100 Subject: [PATCH 06/18] CPP icons --- app/src/main/ic_percentage-web.png | Bin 0 -> 32502 bytes app/src/main/ic_time-web.png | Bin 0 -> 25373 bytes .../circadianpercentageprofile_fragment.xml | 12 ++++++------ app/src/main/res/mipmap-hdpi/ic_percentage.png | Bin 0 -> 2539 bytes app/src/main/res/mipmap-hdpi/ic_time.png | Bin 0 -> 1925 bytes app/src/main/res/mipmap-mdpi/ic_percentage.png | Bin 0 -> 1634 bytes app/src/main/res/mipmap-mdpi/ic_time.png | Bin 0 -> 1224 bytes app/src/main/res/mipmap-xhdpi/ic_percentage.png | Bin 0 -> 3715 bytes app/src/main/res/mipmap-xhdpi/ic_time.png | Bin 0 -> 2734 bytes .../main/res/mipmap-xxhdpi/ic_percentage.png | Bin 0 -> 6034 bytes app/src/main/res/mipmap-xxhdpi/ic_time.png | Bin 0 -> 4305 bytes .../main/res/mipmap-xxxhdpi/ic_percentage.png | Bin 0 -> 9376 bytes app/src/main/res/mipmap-xxxhdpi/ic_time.png | Bin 0 -> 6337 bytes 13 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 app/src/main/ic_percentage-web.png create mode 100644 app/src/main/ic_time-web.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_percentage.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_time.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_percentage.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_time.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_percentage.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_time.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_percentage.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_time.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_percentage.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_time.png diff --git a/app/src/main/ic_percentage-web.png b/app/src/main/ic_percentage-web.png new file mode 100644 index 0000000000000000000000000000000000000000..ea4174b1920ac017d9bd6a57e64d9e958ca805f3 GIT binary patch literal 32502 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ν)5oIlkTagxXYk*W33-Ls%tYXEpS`c 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 - + android:textAppearance="?android:attr/textAppearanceMedium" + android:src="@mipmap/ic_percentage"/> - + android:textAppearance="?android:attr/textAppearanceMedium" + android:src="@mipmap/ic_time"/> 2nbiFF(_(4&* zm=pSp&u2!=Iee(szhZi6t7~R@W_xd@ffJX5UwoV!Hvs7*!`2&i!?1gX-OZ-yv3KuYv1rjE(YtqVQMqzu30#B#`olNYkO7K!3!vE8SW%-!4KaQCbaCm@CGq+5 zXYuprPsjG@(rO7XeDOjMrO$;^N{&vu4f2_U+rnhYue@0>z)b zfB#-=-n>~fZroVj-vxj+W(1%|;Xb%rxpHFl>eX^UZUCd&+qZA!6fIr4bVdQ%k00XW$B*Ln?c0)fPMta>Klv`xiuPdlxOwxYXx+MX_5dg$Awf)= zHZ35>;891891){NjS>wSG!TUf6|zMw{wAU|YSc)K9z9wdJ9aGK6a~!jS#eCx;c~pkpT#iwr0&5?X;>_ub%CCqE)L_twiU}okfclEo92! z6oj&6%ZhH@x{0n`yJ`s@Ptr}dWy_X15tEStsCo0|HW3IRGYB;i9X@=x9DqsUd_H;d zMD**|FDO6JzJLFI`Mr%BH~LL8;3So}5tArx&jI4Cq@|_V-q@y1n{01v#E22HX`>C#08fTvHNii#C01_YAmruK;l8YFjfAE4yqWT}AF zsYN1by{<%w65{pi*V1Fgj2V;OQ3f+-&K#+fA3l62iWe`g?R=3UMbh~NVd+Eys8bCu zSNj!lfM(5_WqVWe=FPKRH)O~V*+wZNZ{EB%VfpCMBMDNE9zC@30TB8A*|TTm^-lN- zF{$=#^5n_h0YpcyT)ASK>pCI0ZrwWB&Zn+(J9qAs?T9VXU?3d?cBWuG+^wefoF< zkonfFB@4uw?%^hf?Ay0b+kX1=Y1uw@?AY{kMT-^{_wL=3#O@DxCkk6Fl`LMo*c*V3 z9zFWYgWtV-=a)c{`waBu%a^uD0>=;u3H42zHnkD+nKNfZ!GZUiK;I(3*)^jI%xCf&$oqb2%Jb&vSdlW&!l{7{SMD%>SZ|(a$+dv`}gll zVl{~w46Ma4&J7|ez4X?`-&ASw51g_S44Pv66RN}T4mEgwQAK03miPsBxY($)+jS>+&Foj7ov+k zX8VZ~Cv0u3mZ&;t$&w}B00al9Ds|}4pH%jT^)memNuP60C042;sP z?i!}tTDQB;`*+ddH3(9rG3C3vw|$j;Y+PT{|0ZQA1J- zdFU&%Qs6m240iqc^|m+0RP$FKij*NXSu{}l0-%|;E{3rTWAcI3u3o(wY~H(OR0~LV z)IN}EIIKoS4j|m0siL~J2~wmzi4|NOI81e>VV2q50WavbzA)Y3B$xIQ{t_fu!PQMG z2z<(vDOqcO5TO?0)oq#MZ4%v_NB}2>B4!0w=e4{f*5gCmpykaDGwR2Hr1K=xoA5Lg zcc^Iz14iSpIH~g*({lhPjLL#{dlc~`RJQKzTGJA8H`Fmz00yK^LH;JCfx{@EQMab7 z;_se#Dbp&{t$mrc%N5?yMK|3pR|XEzQkkTD%O`)MVVvx8C0aqq8Q5IzEkGtnNC3FU ztqtV5-Le$%lai9M*FI@gOrp4V@7`_8-NH2zT&jue;CCrHW*$IRPJvHII4Pd%cBlq2 zIE`BPj2SbeFm(C18krA}8touwvT~*fnLUGNS%xJgR!#Vuq8GKE0Rsle4HFrudq?uO z8vl)Ss(?3;wNn&h-3u&JG1GvKF=;67UWAKfG-_W-+tZ1my%X;KBth8Y%MyURm z@wwHoKMhMWY-cvJG+*Dh`o@yt8(Y4Z3>>&!e#1%{R>iPn!)j%7OZJVWgkc3@T>2j# z2|ia$H0+<*+!B3bNr;KS5t~CSdPI-t5k0cS@qdg_3SF9OP67Y`002ovPDHLkV1jd8 B+lc@G literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_time.png b/app/src/main/res/mipmap-hdpi/ic_time.png new file mode 100644 index 0000000000000000000000000000000000000000..19dc1b09e8560af51cc1d8f1c9e2ea5412ad8afe GIT binary patch literal 1925 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_time.png b/app/src/main/res/mipmap-xhdpi/ic_time.png new file mode 100644 index 0000000000000000000000000000000000000000..b41cdd02c1f7e6710c44163e1206c2d4ca6ceb8a GIT binary patch literal 2734 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_percentage.png b/app/src/main/res/mipmap-xxhdpi/ic_percentage.png new file mode 100644 index 0000000000000000000000000000000000000000..34482b99beeec4d2c833d91acbdad3ac65fad710 GIT binary patch literal 6034 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 Cnq52q literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_time.png b/app/src/main/res/mipmap-xxhdpi/ic_time.png new file mode 100644 index 0000000000000000000000000000000000000000..56ba251ad238a680d16bb6e1e301014232e9badd GIT binary patch literal 4305 zcmV;?5H9bDP)<6GW|*Oa;7V0Sssc+>5m*FKR$_|2eEw|iq%PqIua?35Z+;Yn;x7>2eEw|iq%PqIu3cH$UWHho4u_9w+VGU`@&8FQ- z*2);!B$iC&_5NL@(M_XTqq{>as5UaF$|0-RS2nP*DH=;OR%>k1*sih7Ar@>mGFWY7 zG9^HsY|_XxT4SY#a!53g(U_!=$lt)f0vp_6P^a;yLn2TYkc%&;f5%NCUlooCY-+oE z!xN97jQ$yyP2^kh6&kA?d8{STe>IxblWAnyhYy?@IJTT%?1C?|=|+|nQTr4)JC`~F zSx=y4Mj>RQJib6HjasvbIwuh8;LB{C#_j>RMy7pwX>2x|_|pl*I`}f%qA@TK`iR8- z0sR7M&{_gDYt~G4>C#2@@84gI9z9weal{eoq?1lkXPj|{y6B>d)CCt@piVpOG&OPJ zM0NP#hpU4QI!Nui@4l*I$BwG9vN8<>LWaYPOe>-y5Fa!kV9i@Ypl;o|sUwd(QeAuP zwQBL=#cKKT<*K%}R&Cm}N!8WWiSX;Mzp5|3_(Hw))?4a<2OdyYTycdOH*TCqDoY78 z+{iQ%0`Vc08iQ;gP&S)YBS(%@S6_X#diB*;)wkb%tF~?1CMJs%Teogi>({SW&p!LC znl)>d8a#Ng%49OO5NM>4Y11ePG&rdQYTC4^>fO7yy8QCX)ykDC)%NY%3r?6^;4|NQ z?>%+lg%_&5_S#ETR8%CHK>u(A(rDhixo5*X{q)mn%a$#Xljg6Eyhk5>RE-%kCP{Wv ztOTk`5`iGjgb5SWOE0}tl;f#TfYeKtEK%dfkN31>!U$AVas+D9q=`E8&_mT5Z@i)Y z_~Vbn5~m>|J^%dk>c9gJbOefnKoDooJ@-`i+;dN&HI9Tx3l}a_d+f1?BT$rnn{&=N z$Gh>^N}T#wy?V7e<&;yRKGsT)KsfyHyA)gN?A*CiZQi_D{qVyN>c<~{^nNZjiEslf zTC_;DZ{OY#s2CVEYLxoqlTQkMJ6g7EnY!bSJJigXGu1K29HaKzZ$H(iPan1S-g|pa zM~+H@xN9&p(GYtS3*N>yt(noWq*^-Jv2u1oFZomEZ#^x5;PavFn z)2B}tJKT7{cDow=gOnSxVC>uU}cxe#`uPn!r)Jb^$`R7NX0jTrZ)jm!*;e<%9`1pyW z&PHsfJd)AuB@nS8>BG7I{`(_y5+;Q}zOxaJwKO%Bs@akt5ZdRp*IpAnm<<~?c!p(E zLQ4{Xe0xY5JHxdR@>*{vfryezv=3MIv(7pzQh_CnK!5Y3FO<1k_?64e)}yBFgk-hj^|qRATgnOhqVZ z0ukzwJX6LpSWlo6PdrhS`$JbSM<5yKlqMlijx0qx2*l8mTwfILDsAK(fn=cFo`gW8 zfmlxGl)o%rnmvHBPFo zu1++8{0dn#YJ|cn+O%o0 z6Ns)~q~3<Zzxm z3f1_Eg!fZVJ+Z`9pja7K= zx#zrryTwfBpl(jmj4KuC9K12u3c0>8)0C6gAiQ0>cHXh}(@#H%iNqC~L2@(?E%biK zuab1LedLix(v#9ktA5FY=jccpfr4o%G@1(2Abic5HEQbAsRgZbBWpqO*>tu~4S_fc zBt?Z7he;(+nQ0Dj^2sNA?e@ZqDR|+97rYx$A#Q7os*)U~f__2v5C|U+InM>EXNnz! zU2eGHhET)iICgHk?Y2g>C&nC*)Ys9tRB(LSRahvgXCjL(33)+MVRB8zXbv+m8e8w| zv(HwoTD8jS7?qF~BU|wI>?&>Mnl8Bx$6Xs17WCucSfkT^7$+p7%EOj1;cqHndAMB! zV!pe?4tn?9cN2LVlN@Ul{Yks4Vy8en>EEZEhY*Uy<{CC^So#RWn_632D{2@SM{}t{ zIUzY_a9iZkMnw0+yeQJfq>xPLPqVMVl%y;dU{}~QzNtR&MkDagKKraeB5|RBXwtuj z8-Vehl4r;CY2n|sk3i(pNZulh(sAR)SwFgfv=5w+!R$c@HD}J8(7{tlSOo*SXV0GL zB@kLg;)eH|XE$;hO=50qer%1GhnQKIVKE$YRGCVi8GWTg#NzC1^DA{K@}?4;w4Fe~ z*cu65g030=2WG%ZJNl0wKR*3^qKV~561TwGwQEx~7c49&3uln9GBb@v5~U9|;f%YarkLObk#?l_FBx6Cb}ikRsk}LOP9@iR|7yQ@@nX-0N*j6b z4KcDwN*?T^M%sqy82gQzo=m?mW4|F$nlurEgo%wwUnFqvz4tbDno&9k*Dj5_z7jd-kWIMV1s!XV)= zX|TS(hiuIP*3PAmKz`5>-$qyx`PW(kut|*K^Szh>E2+|L=;APc{`^8~*>n=fznSrt z=0hTWhg1;qiIR|%Mmh!=mV_Jf`96?m(V|7gcq!6LAfH6}Y9ilHLS`evizCOH{nL(@ z{HL&XUGUgq&Pb6oYPt#Jt9?{=z5?*=BNFwoAEGE3V%`~55d@3F+Bx+N=2^3574veC zeggT1HQwqlMSQzD+Ne9Dc#+#4S%PS$#u%miE`NjICj`Ye71kB8tClg`wu;AO3fPmiD+^~6)i1kxGhnt1NfP~glI5o(;3UaY!4bzg^A@!eOnQY zy(%pNm6_&}ggwHz{PWRNXgks==pGCBnT{Lz+GA3Chwwy%u87hjkZ+uFq!s$jj}u>i z{k2!_+{oCLBT$$y0LRJWk3TL>N=qWpI(OfFw-*nKAskb>1PZ2pa#dcjVue*i;&w)D zJT_O1aXd$$V2<^aDO0@qsbbnkh0r+og(ggxkc9ewN1(C>N`@#YW+Y@|d`E=_z9{PD z<8o>`0_73yrqSh%H{R&Q$KudR9I50s<5XlkQv&02jzCgJBt9hiG`|1-``(qj7=(f_ zq-VVO=9^ykGNuL6Q8mGt0ggcVc#gTfF@B+@rpAkv;kYBGD9n+E5zN&aw|JFvrCBG&8w?qg(GWn>!(fhvsJ>!vZS{>B`vAP+y!Ff#05WEvTP%8knF zs?j@>$;_#z8h08a?N5h9pe`U6k33pt^O2n)P)j4zNC@QHK~?7L?4i+5Z)k>5iS8{= zw(o0$meovTW@Oji$TCwF;qs3$nA=gKuf~A#^77$&b2WOCEA+oNYHT&E-{BAob{ZLM zL?&7`3$={!`3x{J>u6+H5vBGCY9Wm2wi;cGG1kALqGFK75WUf{*=%;A#$<Pgg?y)CTjN;lX*T$GV94YUGkkd%+4MBBYHMVdjYIo1M55Lj zyBov0TBDDzl^kNlKE_zCHnQ2>$SQX7)F%;vxaMYa7-oMnXKW{f&JK~nf9@TPERabX zBcrBCAy1G*K9MTSx!TNZwuM1Uhe+W+_vS_xl}0w%fV>j7{EcM{vJQ!WFOS3$Cl{d{ z;)Ppox#gByZn@=_TW-1KmRoMQ<(6A+HER72uOG}r$CKkY00000NkvXXu0mjf5sFBP literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_percentage.png b/app/src/main/res/mipmap-xxxhdpi/ic_percentage.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7c8cc7c6439f1d86170695e3d27040fa4c7213 GIT binary patch literal 9376 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 L=qT4IT8I4)X44n!Rl0!(hbT@)XcOxi*l7b3I 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 literal 0 HcmV?d00001 From 2c5b20a72131a8996fb9ece9c78586baf5f7ec70 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 13 Nov 2016 05:30:46 +0100 Subject: [PATCH 07/18] CPP html-ify and send to pump button --- .../CircadianPercentageProfileFragment.java | 29 ++++++++++++++++--- .../CircadianPercentageProfilePlugin.java | 4 +-- .../circadianpercentageprofile_fragment.xml | 22 +++++++++++--- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java index 7a1b5ab1c4..4af04d95e4 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfileFragment.java @@ -4,10 +4,12 @@ package info.nightscout.androidaps.plugins.CircadianPercentageProfile; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.Editable; +import android.text.Html; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; import android.widget.TextView; @@ -17,6 +19,8 @@ import org.slf4j.LoggerFactory; import info.nightscout.androidaps.R; import info.nightscout.androidaps.interfaces.FragmentBase; +import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog; +import info.nightscout.androidaps.plugins.Careportal.OptionsToShow; import info.nightscout.utils.SafeParse; public class CircadianPercentageProfileFragment extends Fragment implements FragmentBase { @@ -38,6 +42,7 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag EditText timeshiftView; TextView profileView; TextView baseprofileView; + Button profileswitchButton; @@ -55,6 +60,7 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag timeshiftView = (EditText) layout.findViewById(R.id.circadianpercentageprofile_timeshift); profileView = (TextView) layout.findViewById(R.id.circadianpercentageprofile_profileview); baseprofileView = (TextView) layout.findViewById(R.id.circadianpercentageprofile_baseprofileview); + profileswitchButton = (Button) layout.findViewById(R.id.circadianpercentageprofile_profileswitch); mgdlView.setChecked(circadianPercentageProfilePlugin.mgdl); mmolView.setChecked(circadianPercentageProfilePlugin.mmol); @@ -87,6 +93,17 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag } }); + profileswitchButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + NewNSTreatmentDialog newDialog = new NewNSTreatmentDialog(); + final OptionsToShow profileswitch = new OptionsToShow(R.id.careportal_profileswitch, R.string.careportal_profileswitch, true, false, false, false, false, false, false, true, false); + profileswitch.executeProfileSwitch = true; + newDialog.setOptions(profileswitch); + newDialog.show(getFragmentManager(), "NewNSTreatmentDialog"); + } + }); + TextWatcher textWatch = new TextWatcher() { @Override @@ -123,10 +140,14 @@ public class CircadianPercentageProfileFragment extends Fragment implements Frag } private void updateProfileInfo() { - profileView.setText("Active Profile:\n"); - profileView.append("Basal: " + circadianPercentageProfilePlugin.basalString() + "\n"); - profileView.append("IC: " + circadianPercentageProfilePlugin.icString() + "\n"); - profileView.append("ISF: " + circadianPercentageProfilePlugin.isfString() + "\n"); + StringBuilder sb = new StringBuilder(); + sb.append("

"); + sb.append("Active Profile:"); + sb.append("

"); + sb.append("

Basal:

" + circadianPercentageProfilePlugin.basalString()); + sb.append("

IC:

" + circadianPercentageProfilePlugin.icString()); + sb.append("

ISF:

" + circadianPercentageProfilePlugin.isfString()); + profileView.setText(Html.fromHtml(sb.toString())); baseprofileView.setText("Base Profile:\n"); baseprofileView.append("Basal: " + circadianPercentageProfilePlugin.baseBasalString() + "\n"); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java index 830b4a0360..ec8f459f2c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/CircadianPercentageProfile/CircadianPercentageProfilePlugin.java @@ -270,12 +270,12 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte private static String profileString(double[] values, int timeshift, int percentage){ StringBuilder sb = new StringBuilder(); - sb.append(0); sb.append("h: "); + sb.append(""); sb.append(0); sb.append("h: "); sb.append(""); sb.append(DecimalFormatter.to2Decimal(values[(timeshift+0)%24]*percentage/100d)); double prevVal = values[(timeshift+0)%24]; for (int i = 1; i < 24; i++) { if(prevVal != values[(timeshift+i)%24]){ - sb.append(", "); sb.append(i); sb.append("h: "); + sb.append(", ");sb.append(""); sb.append(i); sb.append("h: ");sb.append(""); sb.append(DecimalFormatter.to2Decimal(values[(timeshift+i)%24]*percentage/100d)); prevVal = values[(timeshift+i)%24]; } diff --git a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml index a5389a8e83..f0e33d15b3 100644 --- a/app/src/main/res/layout/circadianpercentageprofile_fragment.xml +++ b/app/src/main/res/layout/circadianpercentageprofile_fragment.xml @@ -18,8 +18,8 @@ android:id="@+id/circadianpercentageprofile_profileview" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="10dp" - android:layout_marginRight="10dp" + android:layout_margin="6dp" + android:padding="6dp" android:background="@color/cardColorBackground" android:text="Profile View" android:textAppearance="?android:attr/textAppearanceSmall" /> @@ -80,13 +80,27 @@ +