remove CPP profile

This commit is contained in:
Milos Kozak 2018-02-11 23:02:21 +01:00
parent 943205c782
commit fa2e46fbe5
20 changed files with 23 additions and 1463 deletions

View file

@ -47,7 +47,6 @@ import info.nightscout.androidaps.plugins.OpenAPSMA.OpenAPSMAPlugin;
import info.nightscout.androidaps.plugins.OpenAPSSMB.OpenAPSSMBPlugin;
import info.nightscout.androidaps.plugins.Overview.OverviewPlugin;
import info.nightscout.androidaps.plugins.Persistentnotification.PersistentNotificationPlugin;
import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfileFragment;
import info.nightscout.androidaps.plugins.ProfileLocal.LocalProfilePlugin;
import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin;
import info.nightscout.androidaps.plugins.ProfileSimple.SimpleProfilePlugin;
@ -141,8 +140,6 @@ public class MainApp extends Application {
pluginsList.add(NSProfilePlugin.getPlugin());
if (Config.OTHERPROFILES) pluginsList.add(SimpleProfilePlugin.getPlugin());
if (Config.OTHERPROFILES) pluginsList.add(LocalProfilePlugin.getPlugin());
if (Config.OTHERPROFILES)
pluginsList.add(CircadianPercentageProfileFragment.getPlugin());
pluginsList.add(TreatmentsPlugin.getPlugin());
if (Config.SAFETY) pluginsList.add(SafetyPlugin.getPlugin());
if (Config.APS) pluginsList.add(ObjectivesPlugin.getPlugin());

View file

@ -1,546 +0,0 @@
package info.nightscout.androidaps.plugins.ProfileCircadianPercentage;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.app.DialogFragment;
import android.support.v4.content.ContextCompat;
import android.text.Editable;
import android.text.Html;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.TextView;
import com.andreabaccega.widget.FormEditText;
import com.squareup.otto.Subscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.events.EventInitializationChanged;
import info.nightscout.androidaps.events.EventProfileSwitchChange;
import info.nightscout.androidaps.plugins.Careportal.CareportalFragment;
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
import info.nightscout.androidaps.plugins.Careportal.OptionsToShow;
import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.SafeParse;
public class CircadianPercentageProfileFragment extends SubscriberFragment {
private static Logger log = LoggerFactory.getLogger(CircadianPercentageProfileFragment.class);
private static CircadianPercentageProfilePlugin circadianPercentageProfilePlugin = new CircadianPercentageProfilePlugin();
private Object snackbarCaller;
public static CircadianPercentageProfilePlugin getPlugin() {
return circadianPercentageProfilePlugin;
}
FormEditText diaView;
RadioButton mgdlView;
RadioButton mmolView;
FormEditText targetlowView;
FormEditText targethighView;
FormEditText percentageView;
FormEditText timeshiftView;
TextView profileView;
TextView baseprofileIC;
TextView baseprofileBasal;
LinearLayout baseprofileBasalLayout;
TextView baseprofileISF;
Button profileswitchButton;
ImageView percentageIcon;
ImageView timeIcon;
ImageView basaleditIcon;
ImageView iceditIcon;
ImageView isfeditIcon;
BasalEditDialog basalEditDialog;
FrameLayout fl;
Snackbar mSnackBar;
static Boolean percentageViewHint = true;
static Boolean timeshiftViewHint = true;
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) {
if (percentageView.testValidity()) {
if (SafeParse.stringToInt(percentageView.getText().toString()) == 0) {
circadianPercentageProfilePlugin.percentage = 100;
} else {
circadianPercentageProfilePlugin.percentage = SafeParse.stringToInt(percentageView.getText().toString());
}
updateProfileInfo();
}
if (timeshiftView.testValidity()) {
circadianPercentageProfilePlugin.timeshift = SafeParse.stringToInt(timeshiftView.getText().toString());
updateProfileInfo();
}
if (diaView.testValidity()) {
circadianPercentageProfilePlugin.dia = SafeParse.stringToDouble(diaView.getText().toString());
updateProfileInfo();
}
if (targethighView.testValidity()) {
circadianPercentageProfilePlugin.targetLow = SafeParse.stringToDouble(targetlowView.getText().toString());
updateProfileInfo();
}
if (targetlowView.testValidity()) {
circadianPercentageProfilePlugin.targetHigh = SafeParse.stringToDouble(targethighView.getText().toString());
updateProfileInfo();
}
circadianPercentageProfilePlugin.storeSettings();
updateProfileInfo();
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
showDeprecatedDialog();
View layout = inflater.inflate(R.layout.circadianpercentageprofile_fragment, container, false);
fl = (FrameLayout) layout.findViewById(R.id.circadianpercentageprofile_framelayout);
fl.requestFocusFromTouch();
diaView = (FormEditText) layout.findViewById(R.id.circadianpercentageprofile_dia);
mgdlView = (RadioButton) layout.findViewById(R.id.circadianpercentageprofile_mgdl);
mmolView = (RadioButton) layout.findViewById(R.id.circadianpercentageprofile_mmol);
targetlowView = (FormEditText) layout.findViewById(R.id.circadianpercentageprofile_targetlow);
targethighView = (FormEditText) layout.findViewById(R.id.circadianpercentageprofile_targethigh);
percentageView = (FormEditText) layout.findViewById(R.id.circadianpercentageprofile_percentage);
timeshiftView = (FormEditText) layout.findViewById(R.id.circadianpercentageprofile_timeshift);
profileView = (TextView) layout.findViewById(R.id.circadianpercentageprofile_profileview);
baseprofileBasal = (TextView) layout.findViewById(R.id.circadianpercentageprofile_baseprofilebasal);
baseprofileBasalLayout = (LinearLayout) layout.findViewById(R.id.circadianpercentageprofile_baseprofilebasal_layout);
baseprofileIC = (TextView) layout.findViewById(R.id.circadianpercentageprofile_baseprofileic);
baseprofileISF = (TextView) layout.findViewById(R.id.circadianpercentageprofile_baseprofileisf);
percentageIcon = (ImageView) layout.findViewById(R.id.circadianpercentageprofile_percentageicon);
timeIcon = (ImageView) layout.findViewById(R.id.circadianpercentageprofile_timeicon);
profileswitchButton = (Button) layout.findViewById(R.id.circadianpercentageprofile_profileswitch);
basaleditIcon = (ImageView) layout.findViewById(R.id.circadianpercentageprofile_basaledit);
iceditIcon = (ImageView) layout.findViewById(R.id.circadianpercentageprofile_icedit);
isfeditIcon = (ImageView) layout.findViewById(R.id.circadianpercentageprofile_isfedit);
if (!ConfigBuilderPlugin.getActivePump().getPumpDescription().isTempBasalCapable) {
layout.findViewById(R.id.circadianpercentageprofile_baseprofilebasal_layout).setVisibility(View.GONE);
}
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();
updateProfileInfo();
}
});
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();
updateProfileInfo();
}
});
profileswitchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
NewNSTreatmentDialog newDialog = new NewNSTreatmentDialog();
final OptionsToShow profileswitch = CareportalFragment.PROFILESWITCHDIRECT;
profileswitch.executeProfileSwitch = true;
newDialog.setOptions(profileswitch, R.string.careportal_profileswitch);
newDialog.show(getFragmentManager(), "NewNSTreatmentDialog");
}
});
timeIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
timeshiftView.requestFocusFromTouch();
timeshiftView.setSelection(timeshiftView.getText().length());
((InputMethodManager) getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(timeshiftView, InputMethodManager.SHOW_IMPLICIT);
}
});
percentageIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
percentageView.requestFocusFromTouch();
percentageView.setSelection(percentageView.getText().length());
((InputMethodManager) getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(percentageView, InputMethodManager.SHOW_IMPLICIT);
}
});
basaleditIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
basalEditDialog = new BasalEditDialog();
basalEditDialog.setup(getPlugin().basebasal, getString(R.string.edit_base_basal), CircadianPercentageProfileFragment.this);
basalEditDialog.show(getFragmentManager(), getString(R.string.edit_base_basal));
}
});
isfeditIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
basalEditDialog = new BasalEditDialog();
basalEditDialog.setup(getPlugin().baseisf, getString(R.string.edit_base_isf), CircadianPercentageProfileFragment.this);
basalEditDialog.show(getFragmentManager(), getString(R.string.edit_base_isf));
}
});
iceditIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
basalEditDialog = new BasalEditDialog();
basalEditDialog.setup(getPlugin().baseic, getString(R.string.edit_base_ic), CircadianPercentageProfileFragment.this);
basalEditDialog.show(getFragmentManager(), getString(R.string.edit_base_ic));
}
});
/*timeshiftView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (!hasFocus) {
if(mSnackBar!=null && snackbarCaller == timeshiftView){
mSnackBar.dismiss();
}
timeshiftView.clearFocus();
fl.requestFocusFromTouch();
}
else {
if (timeshiftViewHint) {
customSnackbar(view, getString(R.string.timeshift_hint), timeshiftView);
}
}
}
});
percentageView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (!hasFocus) {
if(mSnackBar!=null && snackbarCaller == percentageView){
mSnackBar.dismiss();
}
percentageView.clearFocus();
fl.requestFocusFromTouch();
}
else {
if (percentageViewHint) {
customSnackbar(view, getString(R.string.percentagefactor_hint), percentageView);
}
}
}
});*/
diaView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (!hasFocus) {
diaView.clearFocus();
fl.requestFocusFromTouch();
}
}
});
targethighView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (!hasFocus) {
targethighView.clearFocus();
fl.requestFocusFromTouch();
}
}
});
targetlowView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (!hasFocus) {
targetlowView.clearFocus();
fl.requestFocusFromTouch();
}
}
});
diaView.addTextChangedListener(textWatch);
targetlowView.addTextChangedListener(textWatch);
targethighView.addTextChangedListener(textWatch);
percentageView.addTextChangedListener(textWatch);
timeshiftView.addTextChangedListener(textWatch);
updateGUI();
onStatusEvent(new EventInitializationChanged());
return layout;
}
private void showDeprecatedDialog() {
AlertDialog.Builder adb = new AlertDialog.Builder(getContext());
adb.setTitle("DEPRECATED! Please migrate!");
adb.setMessage("CircadianPercentageProfile has been deprecated. " +
"It is recommended to migrate to LocalProfile.\n\n" +
"Good news: You won't lose any functionality! Percentage and Timeshift have been ported to the ProfileSwitch :) \n\n " +
"How to migrate:\n" +
"1) Press MIGRATE, the system will automatically fill the LocalProfile for you.\n" +
"2) Switch to LocalProfile in the ConfigBuilder\n" +
"3) CHECK that all settings are correct in the LocalProfile!!!");
adb.setIcon(android.R.drawable.ic_dialog_alert);
adb.setPositiveButton("MIGRATE", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
CircadianPercentageProfilePlugin.migrateToLP();
}
});
adb.setNegativeButton("Cancel", null);
adb.show();
}
public void updateGUI() {
updateProfileInfo();
diaView.removeTextChangedListener(textWatch);
targetlowView.removeTextChangedListener(textWatch);
targethighView.removeTextChangedListener(textWatch);
percentageView.removeTextChangedListener(textWatch);
timeshiftView.removeTextChangedListener(textWatch);
mgdlView.setChecked(circadianPercentageProfilePlugin.mgdl);
mmolView.setChecked(circadianPercentageProfilePlugin.mmol);
diaView.setText(circadianPercentageProfilePlugin.dia.toString());
targetlowView.setText(circadianPercentageProfilePlugin.targetLow.toString());
targethighView.setText(circadianPercentageProfilePlugin.targetHigh.toString());
percentageView.setText("" + circadianPercentageProfilePlugin.percentage);
timeshiftView.setText("" + circadianPercentageProfilePlugin.timeshift);
diaView.addTextChangedListener(textWatch);
targetlowView.addTextChangedListener(textWatch);
targethighView.addTextChangedListener(textWatch);
percentageView.addTextChangedListener(textWatch);
timeshiftView.addTextChangedListener(textWatch);
}
private void customSnackbar(View view, final String Msg, Object snackbarCaller) {
if (mSnackBar != null) mSnackBar.dismiss();
this.snackbarCaller = snackbarCaller;
if (timeshiftViewHint || percentageViewHint) {
//noinspection WrongConstant
mSnackBar = Snackbar.make(view, Msg, 7000)
.setActionTextColor(ContextCompat.getColor(MainApp.instance(), R.color.notificationInfo))
.setAction(getString(R.string.dont_show_again), new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Msg.equals(getString(R.string.percentagefactor_hint))) {
percentageViewHint = false;
} else if (Msg.equals(getString(R.string.timeshift_hint))) {
timeshiftViewHint = false;
}
}
});
view = mSnackBar.getView();
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
view.setLayoutParams(params);
view.setBackgroundColor(ContextCompat.getColor(MainApp.instance(), R.color.cardview_dark_background));
TextView mainTextView = (TextView) (view).findViewById(android.support.design.R.id.snackbar_text);
mainTextView.setTextColor(ContextCompat.getColor(MainApp.instance(), R.color.mdtp_white));
mSnackBar.show();
}
}
private void updateProfileInfo() {
StringBuilder sb = new StringBuilder();
sb.append("<h3>");
sb.append(getString(R.string.nsprofileview_activeprofile_label));
sb.append("</h3>");
sb.append("<h4>");
sb.append(getString(R.string.nsprofileview_basal_label));
sb.append(" ( ∑");
sb.append(DecimalFormatter.to2Decimal(circadianPercentageProfilePlugin.percentageBasalSum()));
sb.append("U )");
sb.append("</h4> " + circadianPercentageProfilePlugin.basalString());
sb.append("<h4>");
sb.append(getString(R.string.nsprofileview_ic_label));
sb.append("</h4> " + circadianPercentageProfilePlugin.icString());
sb.append("<h4>");
sb.append(getString(R.string.nsprofileview_isf_label));
sb.append("</h4> " + circadianPercentageProfilePlugin.isfString());
profileView.setText(Html.fromHtml(sb.toString()));
baseprofileBasal.setText(Html.fromHtml("<h3>" + getString(R.string.base_profile_label) + " ( ∑" + DecimalFormatter.to2Decimal(circadianPercentageProfilePlugin.baseBasalSum()) + "U )</h3>" +
"<h4>" + getString(R.string.nsprofileview_basal_label) + "</h4>" + circadianPercentageProfilePlugin.baseBasalString()));
baseprofileIC.setText(Html.fromHtml("<h4>" + getString(R.string.nsprofileview_ic_label) + "</h4>" + circadianPercentageProfilePlugin.baseIcString()));
baseprofileISF.setText(Html.fromHtml("<h4>" + getString(R.string.nsprofileview_isf_label) + "</h4>" + circadianPercentageProfilePlugin.baseIsfString()));
}
@Override
public void onStop() {
super.onStop();
if (basalEditDialog != null && basalEditDialog.isVisible()) {
basalEditDialog.dismiss();
}
basalEditDialog = null;
fl.requestFocusFromTouch();
}
public static class BasalEditDialog extends DialogFragment {
private double[] values;
private String title;
private CircadianPercentageProfileFragment fragment;
public void setup(double[] values, String title, CircadianPercentageProfileFragment fragment) {
this.values = values;
this.title = title;
this.fragment = fragment;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().setTitle(title);
View view = inflater.inflate(R.layout.circadianpercentageprofile_editbasal_dialog, container, false);
LinearLayout list = (LinearLayout) view.findViewById(R.id.circadianpp_editbasal_listlayout);
final EditText[] editTexts = new EditText[24];
for (int i = 0; i < 24; i++) {
View childview = inflater.inflate(R.layout.circadianpercentageprofile_listelement, container, false);
((TextView) childview.findViewById(R.id.basal_time_elem)).setText((i < 10 ? "0" : "") + i + ":00: ");
ImageView copyprevbutton = (ImageView) childview.findViewById(R.id.basal_copyprev_elem);
if (i == 0) {
copyprevbutton.setVisibility(View.INVISIBLE);
} else {
final int j = i; //needs to be final to be passed to inner class.
copyprevbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
editTexts[j].setText(editTexts[j - 1].getText());
}
});
}
editTexts[i] = ((EditText) childview.findViewById(R.id.basal_edittext_elem));
editTexts[i].setText(DecimalFormatter.to2Decimal(values[i]));
list.addView(childview);
}
getDialog().setCancelable(true);
view.findViewById(R.id.ok_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < 24; i++) {
if (editTexts[i].getText().length() != 0) {
values[i] = SafeParse.stringToDouble(editTexts[i].getText().toString());
}
}
fragment.updateProfileInfo();
getPlugin().storeSettings();
dismiss();
}
});
view.findViewById(R.id.cancel_action).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
return view;
}
}
@Override
public void onPause() {
super.onPause();
if (basalEditDialog != null && basalEditDialog.isVisible()) {
basalEditDialog.dismiss();
}
basalEditDialog = null;
fl.requestFocusFromTouch();
}
@Override
public void onResume() {
super.onResume();
onStatusEvent(new EventInitializationChanged());
fl.requestFocusFromTouch();
}
@Subscribe
public void onStatusEvent(final EventInitializationChanged e) {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (!ConfigBuilderPlugin.getActivePump().isInitialized() || ConfigBuilderPlugin.getActivePump().isSuspended()) {
profileswitchButton.setVisibility(View.GONE);
} else {
profileswitchButton.setVisibility(View.VISIBLE);
}
}
});
}
@Subscribe
public void onStatusEvent(final EventProfileSwitchChange e) {
Activity activity = getActivity();
if (activity != null)
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
updateGUI();
}
});
}
}

View file

@ -1,455 +0,0 @@
package info.nightscout.androidaps.plugins.ProfileCircadianPercentage;
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 java.text.DecimalFormat;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Profile;
import info.nightscout.androidaps.data.ProfileStore;
import info.nightscout.androidaps.interfaces.PluginBase;
import info.nightscout.androidaps.interfaces.ProfileInterface;
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
import info.nightscout.androidaps.plugins.ProfileLocal.LocalProfilePlugin;
import info.nightscout.utils.DecimalFormatter;
import info.nightscout.utils.NSUpload;
import info.nightscout.utils.SP;
import info.nightscout.utils.SafeParse;
import info.nightscout.utils.ToastUtils;
/**
* 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";
private static Logger log = LoggerFactory.getLogger(CircadianPercentageProfilePlugin.class);
private boolean fragmentEnabled = false;
private boolean fragmentVisible = false;
private static ProfileStore convertedProfile = null;
private static String convertedProfileName = null;
boolean mgdl;
boolean mmol;
Double dia;
Double targetLow;
Double targetHigh;
public int percentage;
public 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, 35d, 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, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d, 4d};
public CircadianPercentageProfilePlugin() {
loadSettings();
}
@Override
public String getFragmentClass() {
return CircadianPercentageProfileFragment.class.getName();
}
@Override
public int getType() {
return PluginBase.PROFILE;
}
@Override
public String getName() {
return MainApp.instance().getString(R.string.circadian_percentage_profile);
}
@Override
public String getNameShort() {
String name = MainApp.sResources.getString(R.string.circadian_percentage_profile_shortname);
if (!name.trim().isEmpty()) {
//only if translation exists
return name;
}
// use long name as fallback
return getName();
}
@Override
public boolean isEnabled(int type) {
return type == PROFILE && fragmentEnabled;
}
@Override
public boolean isVisibleInTabs(int type) {
return type == PROFILE && fragmentVisible;
}
@Override
public boolean canBeHidden(int type) {
return true;
}
@Override
public boolean hasFragment() {
return true;
}
@Override
public boolean showInList(int type) {
return true;
}
@Override
public void setFragmentEnabled(int type, boolean fragmentEnabled) {
if (type == PROFILE) this.fragmentEnabled = fragmentEnabled;
}
@Override
public void setFragmentVisible(int type, boolean fragmentVisible) {
if (type == PROFILE) this.fragmentVisible = fragmentVisible;
}
@Override
public int getPreferencesId() {
return -1;
}
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 + "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.putString(SETTINGS_PREFIX + "baseisf" + i, DecimalFormatter.to2Decimal(baseisf[i]));
editor.putString(SETTINGS_PREFIX + "baseic" + i, DecimalFormatter.to2Decimal(baseic[i]));
}
editor.commit();
createConvertedProfile();
}
void loadSettings() {
if (Config.logPrefsChange)
log.debug("Loading stored settings");
mgdl = SP.getBoolean(SETTINGS_PREFIX + "mgdl", true);
mmol = SP.getBoolean(SETTINGS_PREFIX + "mmol", false);
dia = SP.getDouble(SETTINGS_PREFIX + "dia", Constants.defaultDIA);
targetLow = SP.getDouble(SETTINGS_PREFIX + "targetlow", 80d);
targetHigh = SP.getDouble(SETTINGS_PREFIX + "targethigh", 120d);
percentage = SP.getInt(SETTINGS_PREFIX + "percentage", 100);
timeshift = SP.getInt(SETTINGS_PREFIX + "timeshift", 0);
for (int i = 0; i < 24; i++) {
basebasal[i] = SP.getDouble(SETTINGS_PREFIX + "basebasal" + i, basebasal[i]);
baseic[i] = SP.getDouble(SETTINGS_PREFIX + "baseic" + i, baseic[i]);
baseisf[i] = SP.getDouble(SETTINGS_PREFIX + "baseisf" + i, baseisf[i]);
}
}
public String externallySetParameters(int timeshift, int percentage) {
String msg = "";
if (!fragmentEnabled) {
msg += "NO CPP!" + "\n";
}
//check for validity
if (percentage < Constants.CPP_MIN_PERCENTAGE || percentage > Constants.CPP_MAX_PERCENTAGE) {
msg += String.format(MainApp.sResources.getString(R.string.valueoutofrange), "Profile-Percentage") + "\n";
}
if (timeshift < 0 || timeshift > 23) {
msg += String.format(MainApp.sResources.getString(R.string.valueoutofrange), "Profile-Timeshift") + "\n";
}
final Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null || profile.getBasal() == null) {
msg += MainApp.sResources.getString(R.string.cpp_notloadedplugins) + "\n";
}
if (!"".equals(msg)) {
msg += MainApp.sResources.getString(R.string.cpp_valuesnotstored);
return msg;
}
//store profile
this.timeshift = timeshift;
this.percentage = percentage;
storeSettings();
//send profile to pumpe
new NewNSTreatmentDialog(); //init
NewNSTreatmentDialog.doProfileSwitch(this.getProfile(), this.getProfileName(), 0, percentage, timeshift);
//return formatted string
/*msg += "%: " + this.percentage + " h: +" + this.timeshift;
msg += "\n";
msg += "\nBasal:\n" + basalString() + "\n";
msg += "\nISF:\n" + isfString() + "\n";
msg += "\nIC:\n" + isfString() + "\n";*/
return msg;
}
public static void migrateToLP() {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("LocalProfile" + "mmol", SP.getBoolean(SETTINGS_PREFIX + "mmol", false));
editor.putBoolean("LocalProfile" + "mgdl", SP.getBoolean(SETTINGS_PREFIX + "mgdl", true));
editor.putString("LocalProfile" + "dia", "" + SP.getDouble(SETTINGS_PREFIX + "dia", Constants.defaultDIA));
editor.putString("LocalProfile" + "ic", getLPic());
editor.putString("LocalProfile" + "isf", getLPisf());
editor.putString("LocalProfile" + "basal", getLPbasal());
try {
JSONArray targetLow = new JSONArray().put(new JSONObject().put("time", "00:00").put("timeAsSeconds", 0).put("value", SP.getDouble(SETTINGS_PREFIX + "targetlow", 120d)));
JSONArray targetHigh = new JSONArray().put(new JSONObject().put("time", "00:00").put("timeAsSeconds", 0).put("value", SP.getDouble(SETTINGS_PREFIX + "targethigh", 120d)));
editor.putString("LocalProfile" + "targetlow", targetLow.toString());
editor.putString("LocalProfile" + "targethigh", targetHigh.toString());
} catch (JSONException e) {
e.printStackTrace();
}
editor.commit();
LocalProfilePlugin lp = MainApp.getSpecificPlugin(LocalProfilePlugin.class);
lp.loadSettings();
/* TODO: remove Settings and switch to LP later on
* For now only nag the user every time (s)he opens the CPP fragment and offer to migrate.
* Keep settings for now in order to allow the user to check that the migration went well.
*/
//removeSettings();
}
public static String getLPisf() {
return getLPConversion("baseisf", 35d);
}
public static String getLPic() {
return getLPConversion("baseic", 4);
}
public static String getLPbasal() {
return getLPConversion("basebasal", 1);
}
public static String getLPConversion(String type, double defaultValue) {
try {
JSONArray jsonArray = new JSONArray();
double last = -1d;
for (int i = 0; i < 24; i++) {
double value = SP.getDouble(SETTINGS_PREFIX + type + i, defaultValue);
String time;
DecimalFormat df = new DecimalFormat("00");
time = df.format(i) + ":00";
if (last != value) {
jsonArray.put(new JSONObject().put("time", time).put("timeAsSeconds", i * 60 * 60).put("value", value));
}
last = value;
}
return jsonArray.toString();
} catch (JSONException e) {
log.error("Unhandled exception", e);
}
return LocalProfilePlugin.DEFAULTARRAY;
}
static void removeSettings() {
if (Config.logPrefsChange)
log.debug("Removing settings");
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext());
SharedPreferences.Editor editor = settings.edit();
editor.remove(SETTINGS_PREFIX + "mmol");
editor.remove(SETTINGS_PREFIX + "mgdl");
editor.remove(SETTINGS_PREFIX + "dia");
editor.remove(SETTINGS_PREFIX + "targetlow");
editor.remove(SETTINGS_PREFIX + "targethigh");
editor.remove(SETTINGS_PREFIX + "timeshift");
editor.remove(SETTINGS_PREFIX + "percentage");
for (int i = 0; i < 24; i++) {
editor.remove(SETTINGS_PREFIX + "basebasal");
editor.remove(SETTINGS_PREFIX + "baseisf" + i);
editor.remove(SETTINGS_PREFIX + "baseic" + i);
}
editor.commit();
}
private void createConvertedProfile() {
JSONObject json = new JSONObject();
JSONObject store = new JSONObject();
JSONObject profile = new JSONObject();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(DecimalFormatter.to2Decimal(sum(basebasal)));
stringBuilder.append("U@");
stringBuilder.append(percentage);
stringBuilder.append("%>");
stringBuilder.append(timeshift);
stringBuilder.append("h");
String profileName = stringBuilder.toString();
try {
json.put("defaultProfile", profileName);
json.put("store", store);
profile.put("dia", dia);
int offset = -(timeshift % 24) + 24;
JSONArray icArray = new JSONArray();
JSONArray isfArray = new JSONArray();
JSONArray basalArray = new JSONArray();
for (int i = 0; i < 24; i++) {
String time;
DecimalFormat df = new DecimalFormat("00");
time = df.format(i) + ":00";
icArray.put(new JSONObject().put("time", time).put("timeAsSeconds", i * 60 * 60).put("value", baseic[(offset + i) % 24] * 100d / percentage));
isfArray.put(new JSONObject().put("time", time).put("timeAsSeconds", i * 60 * 60).put("value", baseisf[(offset + i) % 24] * 100d / percentage));
basalArray.put(new JSONObject().put("time", time).put("timeAsSeconds", i * 60 * 60).put("value", basebasal[(offset + i) % 24] * percentage / 100d));
}
profile.put("carbratio", icArray);
profile.put("sens", isfArray);
profile.put("basal", basalArray);
profile.put("target_low", new JSONArray().put(new JSONObject().put("time", "00:00").put("timeAsSeconds", 0).put("value", targetLow)));
profile.put("target_high", new JSONArray().put(new JSONObject().put("time", "00:00").put("timeAsSeconds", 0).put("value", targetHigh)));
profile.put("units", mgdl ? Constants.MGDL : Constants.MMOL);
store.put(profileName, profile);
} catch (JSONException e) {
log.error("Unhandled exception", e);
}
convertedProfile = new ProfileStore(json);
convertedProfileName = profileName;
}
@Override
public ProfileStore getProfile() {
if (convertedProfile == null)
createConvertedProfile();
performLimitCheck();
return convertedProfile;
}
@Override
public String getUnits() {
return mgdl ? Constants.MGDL : Constants.MMOL;
}
@Override
public String getProfileName() {
if (convertedProfile == null)
createConvertedProfile();
performLimitCheck();
return convertedProfileName;
}
private void performLimitCheck() {
if (percentage < Constants.CPP_MIN_PERCENTAGE || percentage > Constants.CPP_MAX_PERCENTAGE) {
String msg = String.format(MainApp.sResources.getString(R.string.valueoutofrange), "Profile-Percentage");
log.error(msg);
NSUpload.uploadError(msg);
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), msg, R.raw.error);
percentage = Math.max(percentage, Constants.CPP_MIN_PERCENTAGE);
percentage = Math.min(percentage, Constants.CPP_MAX_PERCENTAGE);
}
}
String basalString() {
return profileString(basebasal, timeshift, percentage, true);
}
String icString() {
return profileString(baseic, timeshift, percentage, false);
}
String isfString() {
return profileString(baseisf, timeshift, percentage, false);
}
String baseIcString() {
return profileString(baseic, 0, 100, false);
}
String baseIsfString() {
return profileString(baseisf, 0, 100, false);
}
String baseBasalString() {
return profileString(basebasal, 0, 100, true);
}
public double baseBasalSum() {
return sum(basebasal);
}
public double percentageBasalSum() {
double result = 0;
for (int i = 0; i < basebasal.length; i++) {
result += SafeParse.stringToDouble(DecimalFormatter.to2Decimal(basebasal[i] * percentage / 100d));
}
return result;
}
public static double sum(double values[]) {
double result = 0;
for (int i = 0; i < values.length; i++) {
result += values[i];
}
return result;
}
private static String profileString(double[] values, int timeshift, int percentage, boolean inc) {
timeshift = -(timeshift % 24) + 24;
StringBuilder sb = new StringBuilder();
sb.append("<b>");
sb.append(0);
sb.append("h: ");
sb.append("</b>");
sb.append(DecimalFormatter.to2Decimal(values[(timeshift + 0) % 24] * (inc ? percentage / 100d : 100d / percentage)));
double prevVal = values[(timeshift + 0) % 24];
for (int i = 1; i < 24; i++) {
if (prevVal != values[(timeshift + i) % 24]) {
sb.append(", ");
sb.append("<b>");
sb.append(i);
sb.append("h: ");
sb.append("</b>");
sb.append(DecimalFormatter.to2Decimal(values[(timeshift + i) % 24] * (inc ? percentage / 100d : 100d / percentage)));
prevVal = values[(timeshift + i) % 24];
}
}
return sb.toString();
}
public int getPercentage() {
return percentage;
}
public int getTimeshift() {
return timeshift;
}
}

View file

@ -586,10 +586,10 @@ public class ActionStringHandler {
final Profile profile = MainApp.getConfigBuilder().getProfile();
if (profile == null || profile.getBasal() == null) {
msg += MainApp.sResources.getString(R.string.cpp_notloadedplugins) + "\n";
msg += MainApp.sResources.getString(R.string.notloadedplugins) + "\n";
}
if (!"".equals(msg)) {
msg += MainApp.sResources.getString(R.string.cpp_valuesnotstored);
msg += MainApp.sResources.getString(R.string.valuesnotstored);
String rTitle = "STATUS";
String rAction = "statusmessage";
WearPlugin.getPlugin().requestActionConfirmation(rTitle, msg, rAction);

View file

@ -1,61 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
android:orientation="vertical"
android:padding="10dp">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<LinearLayout
android:id="@+id/circadianpp_editbasal_listlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Insert elements programmatically -->
</LinearLayout>
</ScrollView>
<View
android:id="@+id/fill_preset_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:padding="10dp">
<Button
android:id="@+id/cancel_action"
style="?android:attr/buttonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:padding="10dp"
android:text="@string/cancel"
android:textSize="20sp" />
<Button
android:id="@+id/ok_button"
style="?android:attr/buttonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:padding="10dp"
android:text="@string/ok"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>

View file

@ -1,307 +0,0 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:validate="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/circadianpercentageprofile_framelayout"
android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants"
tools:context=".plugins.ProfileCircadianPercentage.CircadianPercentageProfileFragment">
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/circadianpercentageprofile_profileview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="6dp"
android:background="@color/cardColorBackground"
android:padding="6dp"
android:textAppearance="?android:attr/textAppearanceSmall" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal"
android:padding="5dp"
android:backgroundTint="@color/mdtp_transparent_black"
android:background="@drawable/pillborder"
android:backgroundTintMode="src_over">
<ImageView
android:id="@+id/circadianpercentageprofile_percentageicon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_percentage"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<com.andreabaccega.widget.FormEditText
validate:testType="numericRange"
validate:minNumber="50"
validate:maxNumber="200"
android:digits="0123456789.,"
android:id="@+id/circadianpercentageprofile_percentage"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:inputType="number"
android:selectAllOnFocus="true"
android:textAlignment="center" />
</LinearLayout>
<Space
android:layout_width="20dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal"
android:padding="5dp"
android:backgroundTint="@color/mdtp_transparent_black"
android:background="@drawable/pillborder"
android:backgroundTintMode="src_over">
<ImageView
android:id="@+id/circadianpercentageprofile_timeicon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_time"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<com.andreabaccega.widget.FormEditText
validate:testType="numericRange"
validate:minNumber="0"
validate:maxNumber="24"
android:digits="0123456789.,"
android:id="@+id/circadianpercentageprofile_timeshift"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:inputType="number"
android:selectAllOnFocus="true"
android:textAlignment="center" />
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/circadianpercentageprofile_profileswitch"
style="?android:attr/buttonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="3dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="3dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="@string/activate_profile"
android:textColor="@color/colorProfileSwitchButton" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="6dp"
android:background="@color/cardColorBackground"
android:orientation="vertical"
android:padding="6dp"
android:textAppearance="?android:attr/textAppearanceSmall">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground"
android:orientation="horizontal"
android:id="@+id/circadianpercentageprofile_baseprofilebasal_layout"
android:textAppearance="?android:attr/textAppearanceSmall">
<TextView
android:id="@+id/circadianpercentageprofile_baseprofilebasal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/cardColorBackground"
android:textAppearance="?android:attr/textAppearanceSmall"/>
<ImageView
android:id="@+id/circadianpercentageprofile_basaledit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0"
android:src="@mipmap/ic_edit"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground"
android:orientation="horizontal"
android:paddingTop="5dp"
android:textAppearance="?android:attr/textAppearanceSmall">
<TextView
android:id="@+id/circadianpercentageprofile_baseprofileic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/cardColorBackground"
android:textAppearance="?android:attr/textAppearanceSmall"/>
<ImageView
android:id="@+id/circadianpercentageprofile_icedit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0"
android:src="@mipmap/ic_edit"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground"
android:orientation="horizontal"
android:paddingTop="5dp"
android:textAppearance="?android:attr/textAppearanceSmall">
<TextView
android:id="@+id/circadianpercentageprofile_baseprofileisf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/cardColorBackground"
android:textAppearance="?android:attr/textAppearanceSmall"/>
<ImageView
android:id="@+id/circadianpercentageprofile_isfedit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0"
android:src="@mipmap/ic_edit"/>
</LinearLayout>
</LinearLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left|top"
android:layout_marginLeft="6dp">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/units"
android:textAppearance="?android:attr/textAppearanceMedium" />
<RadioButton
android:id="@+id/circadianpercentageprofile_mgdl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="2"
android:text="@string/mgdl" />
<RadioButton
android:id="@+id/circadianpercentageprofile_mmol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="3"
android:text="@string/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="@string/dia"
android:textAppearance="?android:attr/textAppearanceMedium" />
<com.andreabaccega.widget.FormEditText
validate:testType="floatNumericRange"
validate:floatminNumber="1.0"
validate:floatmaxNumber="10.0"
android:digits="0123456789.,"
android:selectAllOnFocus="true"
android:id="@+id/circadianpercentageprofile_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="@string/target_range"
android:textAppearance="?android:attr/textAppearanceMedium" />
<com.andreabaccega.widget.FormEditText
validate:testType="floatNumericRange"
validate:floatminNumber="4.0"
validate:floatmaxNumber="180.0"
android:digits="0123456789.,"
android:selectAllOnFocus="true"
android:id="@+id/circadianpercentageprofile_targetlow"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_column="2"
android:inputType="numberDecimal" />
<com.andreabaccega.widget.FormEditText
validate:testType="floatNumericRange"
validate:floatminNumber="4.0"
validate:floatmaxNumber="270.0"
android:digits="0123456789.,"
android:selectAllOnFocus="true"
android:id="@+id/circadianpercentageprofile_targethigh"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_column="2"
android:inputType="numberDecimal" />
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>
</FrameLayout>

View file

@ -1,31 +0,0 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:paddingTop="5dp"
android:textAppearance="?android:attr/textAppearanceSmall">
<TextView
android:id="@+id/basal_time_elem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/cardColorBackground"
android:textAppearance="?android:attr/textAppearanceSmall" />
<EditText
android:id="@+id/basal_edittext_elem"
android:layout_width="70dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:inputType="numberDecimal"/>
<ImageView
android:id="@+id/basal_copyprev_elem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="15dp"
android:src="@mipmap/ic_copyprev"/>
</LinearLayout>

View file

@ -357,7 +357,6 @@
<string name="edit_base_isf">Редактирай Инс. чувствителност</string>
<string name="edit_base_ic">Редактирай Инс./ВХ</string>
<string name="base_profile_label">Базов профил:</string>
<string name="circadian_percentage_profile">Процентен профил</string>
<string name="prefs_range_title">Диапазон за визуализация</string>
<string name="prefs_range_summary">Стойност на линиите за ниска и висока КЗ (mmol/l) за телефона и часовника</string>
<string name="low_mark">Ниска КЗ под</string>
@ -420,7 +419,6 @@
<string name="temptargetrange_shortname">Вцел</string>
<string name="localprofile_shortname">ЛПр</string>
<string name="danarpump_shortname">DANA</string>
<string name="circadian_percentage_profile_shortname">ППр</string>
<string name="tempbasals_shortname">ВБ</string>
<string name="overview_shortname">ОСН</string>
<string name="virtualpump_shortname">ВП</string>
@ -612,9 +610,8 @@
<string name="sensitivityweightedaverage">чрез Среднопретеглената стойност</string>
<string name="mdtp_ok">OK</string>
<string name="mdtp_cancel">Откажи</string>
<string name="cpp_sync_setting_missing">трябва да е активно за да изпрати стойностите към помпата!</string>
<string name="cpp_notloadedplugins">Не всички профили са заредени!</string>
<string name="cpp_valuesnotstored">Стойностите не са запазени!</string>
<string name="notloadedplugins">Не всички профили са заредени!</string>
<string name="valuesnotstored">Стойностите не са запазени!</string>
<string name="clearlog">Изчисти лога</string>
<string name="nosuccess">неуспешно - моля проверете телефона</string>
<string name="notavailable">Недостъпно</string>

View file

@ -313,7 +313,6 @@
<string name="button1">Tlačítko 1</string>
<string name="button2">Tlačítko 2</string>
<string name="button3">Tlačítko 3</string>
<string name="circadian_percentage_profile">Cirkadiánní procentuální profil</string>
<string name="dia">DIA:</string>
<string name="disabledloop">Smyčka zakázána</string>
<string name="edit_base_basal">Editovat základní bazál:</string>
@ -395,7 +394,6 @@
<string name="localprofile_shortname">MPRF</string>
<string name="danarpump_shortname">DANA</string>
<string name="configbuilder_shortname">KONF</string>
<string name="circadian_percentage_profile_shortname">CPP</string>
<string name="careportal_shortname">PÉČE</string>
<string name="advancedsettings_title">Rozšířené nastavení</string>
<string name="always_use_shortavg">Vždy používat krátkodobý průměrný rozdíl glykémií místo rozdílu posledních 2 hodnot</string>
@ -550,9 +548,8 @@
<string name="careportal_sensorage_label_short">SEN</string>
<string name="cob">COB</string>
<string name="configbuilder_sensitivity">Detekce citlivosti</string>
<string name="cpp_notloadedplugins">Všechny profily nenačteny</string>
<string name="cpp_sync_setting_missing">musí být aktivované, aby šly poslat hodnoty do pumpy!</string>
<string name="cpp_valuesnotstored">Hodnoty nejsou uloženy!</string>
<string name="notloadedplugins">Všechny profily nenačteny</string>
<string name="valuesnotstored">Hodnoty nejsou uloženy!</string>
<string name="danarv2pump">DanaRv2</string>
<string name="dev">ODCH</string>
<string name="device">Zařízení</string>

View file

@ -311,7 +311,6 @@
<string name="localprofile_shortname">LP</string>
<string name="danarpump_shortname">DANA</string>
<string name="configbuilder_shortname">CONF</string>
<string name="circadian_percentage_profile_shortname">CPP</string>
<string name="careportal_shortname">CP</string>
<string name="error_only_numeric_digits_allowed">Bitte verwende nur Ziffern.</string>
<string name="error_field_must_not_be_empty">Pflichtfeld</string>
@ -394,9 +393,8 @@
<string name="careportal_pumpbatterychange">Pumpenbatterie-Wechsel</string>
<string name="careportal_sensorage_label_short">SAGE</string>
<string name="configbuilder_insulin">Insulin</string>
<string name="cpp_notloadedplugins">Es sind nicht alle Profile geladen!</string>
<string name="cpp_sync_setting_missing">muss aktiviert werden, um Werte an die Pumpe zu senden!</string>
<string name="cpp_valuesnotstored">Werte nicht gespeichert!</string>
<string name="notloadedplugins">Es sind nicht alle Profile geladen!</string>
<string name="valuesnotstored">Werte nicht gespeichert!</string>
<string name="danar_enableextendedbolus">Aktiviere verlängerten Bolus in der Pumpe</string>
<string name="danar_stats">DanaR Stats</string>
<string name="danar_stats_amount_days"># Tage</string>
@ -620,7 +618,6 @@
<string name="careportal_newnstreatment_percentage_label">Prozentsatz</string>
<string name="careportal_newnstreatment_timeshift_label">Zeitverschiebung</string>
<string name="careportal_pbage_label_short">BAT</string>
<string name="circadian_percentage_profile">CircadianPercentage-Profil</string>
<string name="connectiontimedout">Zeitüberschreitung der Verbindung</string>
<string name="danar_history_prime">Füllen</string>
<string name="danar_debolus">DE-Bolus</string>

View file

@ -354,7 +354,6 @@
<string name="edit_base_isf">Ρύθμιση Βασικού-ISF:</string>
<string name="edit_base_ic">Ρύθμιση Βασικού-IC:</string>
<string name="base_profile_label">Βασικό Προφίλ:</string>
<string name="circadian_percentage_profile">Ποσοστό προφίλ κυκλώματος</string>
<string name="prefs_range_title">Εύρος εμφάνισης</string>
<string name="prefs_range_summary">Υψηλό και Χαμηλό σημείο για την γραφική στην Επισκόπηση και Smartwatch</string>
<string name="low_mark">ΧΑΜΗΛΟ σημείο</string>
@ -417,7 +416,6 @@
<string name="temptargetrange_shortname">TT</string>
<string name="localprofile_shortname">LP</string>
<string name="danarpump_shortname">DANA</string>
<string name="circadian_percentage_profile_shortname">CPP</string>
<string name="tempbasals_shortname">TB</string>
<string name="overview_shortname">HOME</string>
<string name="virtualpump_shortname">VPUMP</string>
@ -611,9 +609,8 @@
<string name="sensitivityweightedaverage">Σταθμισμένος μέσος όρος ευαισθησίας</string>
<string name="mdtp_ok">OK</string>
<string name="mdtp_cancel">Ακύρωση</string>
<string name="cpp_sync_setting_missing">Χρειάζεται να ενεργοποιηθεί για να στείλει τιμές στην αντλία!</string>
<string name="cpp_notloadedplugins">Δεν έχουν φορτωθεί όλα τα προφίλ</string>
<string name="cpp_valuesnotstored">Οι τιμές δεν αποθηκεύτηκαν!</string>
<string name="notloadedplugins">Δεν έχουν φορτωθεί όλα τα προφίλ</string>
<string name="valuesnotstored">Οι τιμές δεν αποθηκεύτηκαν!</string>
<string name="wear_overviewnotifications">Επισκόπηση ειδοποιήσεων</string>
<string name="wear_overviewnotifications_summary">Αποστολή ειδοποιήσεων ως ειδήσεων για τα ρολόγια</string>
<string name="ns_localbroadcasts">Ενεργοποιήστε την αποστολή σε άλλες εφαρμογές (όπως xDrip)</string>

View file

@ -333,7 +333,6 @@
<string name="localprofile_shortname">"PerfLoc"</string>
<string name="danarpump_shortname">"Dana"</string>
<string name="configbuilder_shortname">"Conf"</string>
<string name="circadian_percentage_profile_shortname">"CPP"</string>
<string name="careportal_shortname">"CP"</string>
<string name="activity">Actividad</string>
<string name="alert_dialog_storage_permission_text">Por favor reinicia el teléfono o AndroidAPS desde ajustes de sistema, sino AndroidAPS no guardará registros (importantes para trazar y verificar que el algoritmo funcione correctamente)</string>
@ -404,7 +403,6 @@
<string name="edit_base_basal">Editar Base-Basal:</string>
<string name="edit_base_isf">Edidat Base-ISF:</string>
<string name="edit_base_ic">Editar Base-IC:</string>
<string name="circadian_percentage_profile">CircadianPercentageProfile</string>
<string name="wear">Reloj</string>
<string name="open_settings_on_wear">Abrir ajustes en reloj</string>
<string name="batterydischarged">Batería de la bomba descargada</string>
@ -625,9 +623,8 @@
<string name="sensitivityweightedaverage">Sensitivity WeightedAverage</string>
<string name="mdtp_ok">OK</string>
<string name="mdtp_cancel">Cancelar</string>
<string name="cpp_sync_setting_missing">necesita ser activado para mandar valores a la bomba!</string>
<string name="cpp_notloadedplugins">Faltan perfiles!</string>
<string name="cpp_valuesnotstored">Valores no guardados!</string>
<string name="notloadedplugins">Faltan perfiles!</string>
<string name="valuesnotstored">Valores no guardados!</string>
<string name="wear_overviewnotifications">Resumen avisos</string>
<string name="wear_overviewnotifications_summary">Mandar resumen de avisos como avisos de confirmacion por reloj.</string>
<string name="combopump" translatable="false">Accu-Chek Combo</string>

View file

@ -353,7 +353,6 @@
<string name="edit_base_isf">"Éditer Facteur SI de Base: "</string>
<string name="edit_base_ic">"Éditer I:G de Base: "</string>
<string name="base_profile_label">Profil de Base:</string>
<string name="circadian_percentage_profile">Profil en Pourcentage Circadien</string>
<string name="prefs_range_title">Écart de visualisation</string>
<string name="prefs_range_summary">Les repères hauts et bas sur les graphiques pour lapercu et la montre</string>
<string name="low_mark">Repère BAS</string>
@ -416,7 +415,6 @@
<string name="temptargetrange_shortname">TT</string>
<string name="localprofile_shortname">LP</string>
<string name="danarpump_shortname">DANA</string>
<string name="circadian_percentage_profile_shortname">CPP</string>
<string name="tempbasals_shortname">TB</string>
<string name="overview_shortname">HOME</string>
<string name="virtualpump_shortname">POMPEV</string>
@ -608,9 +606,8 @@
<string name="sensitivityweightedaverage">Sensibilité avec moyenne pondérée</string>
<string name="mdtp_ok">OK</string>
<string name="mdtp_cancel">Annuler</string>
<string name="cpp_sync_setting_missing">Besoin dêtre activé(e) pour que les valeurs soient envoyées à la pompe!</string>
<string name="cpp_notloadedplugins">Pas tous les profils sont téléchargés!</string>
<string name="cpp_valuesnotstored">Valeurs non enregistrées!</string>
<string name="notloadedplugins">Pas tous les profils sont téléchargés!</string>
<string name="valuesnotstored">Valeurs non enregistrées!</string>
<string name="wear_overviewnotifications">Notifications d\'aperçu</string>
<string name="wear_overviewnotifications_summary">Transférez les notifications daperçu comme des messages de confirmation sur la montre.</string>
<string name="ns_localbroadcasts">Activer les transmissions de données sur d\'autres app. (ex. Xdrip)</string>

View file

@ -66,8 +66,6 @@
<string name="careportal_temporarytargetcancel">Cancellare Target Temporanea</string>
<string name="changeyourinput">Cambia il tuo imput</string>
<string name="child">Ragazzi</string>
<string name="circadian_percentage_profile">Percentuale del profilo circadiano</string>
<string name="circadian_percentage_profile_shortname">CPP</string>
<string name="closedloop">Chiusura Loop</string>
<string name="comment">Commenti</string>
<string name="configbuilder">Configurazione Strutturale</string>

View file

@ -359,7 +359,6 @@
<string name="edit_base_isf">Edit Base-ISF:</string>
<string name="edit_base_ic">Edit Base-IC:</string>
<string name="base_profile_label">Base Profile:</string>
<string name="circadian_percentage_profile">CircadianPercentageProfile</string>
<string name="prefs_range_title">차트 표시 범위</string>
<string name="prefs_range_summary">개요/스마트워치 차트 표시용 고/저혈당 선</string>
<string name="low_mark">저혈당 선</string>
@ -422,7 +421,6 @@
<string name="temptargetrange_shortname">TT</string>
<string name="localprofile_shortname">LP</string>
<string name="danarpump_shortname">DANA</string>
<string name="circadian_percentage_profile_shortname">CPP</string>
<string name="tempbasals_shortname">TB</string>
<string name="overview_shortname">HOME</string>
<string name="virtualpump_shortname">VPUMP</string>
@ -623,9 +621,8 @@
<string name="sensitivityweightedaverage">민감도 가중평균</string>
<string name="mdtp_ok">OK</string>
<string name="mdtp_cancel">Cancel</string>
<string name="cpp_sync_setting_missing">needs to be activated to send values to the pump!</string>
<string name="cpp_notloadedplugins">Not all profiles loaded!</string>
<string name="cpp_valuesnotstored">Values not stored!</string>
<string name="notloadedplugins">Not all profiles loaded!</string>
<string name="valuesnotstored">Values not stored!</string>
<string name="wear_overviewnotifications">개요 알림</string>
<string name="wear_overviewnotifications_summary">개요 알림을 웨어확인메세지로 전달합니다.</string>
<string name="ns_localbroadcasts">(xDrip 같은) 다른 앱으로의 브로드캐스트를 활성화합니다.</string>

View file

@ -159,9 +159,8 @@
<string name="copied_to_clipboard">Gekopieerd naar klembord</string>
<string name="copy_to_clipboard">Kopieren naar klembord</string>
<string name="correctionbous">Correctie</string>
<string name="cpp_notloadedplugins">Niet alle profielen zijn geladen!</string>
<string name="cpp_sync_setting_missing">Moet geactiveerd worden om waardes naat de pomp te verzenden!</string>
<string name="cpp_valuesnotstored">Waarden niet opgeslagen!</string>
<string name="notloadedplugins">Niet alle profielen zijn geladen!</string>
<string name="valuesnotstored">Waarden niet opgeslagen!</string>
<string name="cs_lang">Čeština</string>
<string name="danar_alarm">Alarm</string>
<string name="danar_basalhour">Basaal uur</string>
@ -308,7 +307,6 @@
<string name="danar_invalidinput">Verkeerde ingave</string>
<string name="danar_iob_label">Pomp IOB</string>
<string name="basal_rate">Basaal:</string>
<string name="circadian_percentage_profile_shortname">CPP</string>
<string name="danar_history_dailyinsulin">Dagtotaal insuline</string>
<string name="danar_stats_date">Datum</string>
<string name="danar_stats_tbb">Totaal basaal</string>
@ -521,7 +519,6 @@
<string name="basal_step">Basaal stap</string>
<string name="bolusconstraintapplied">Bolus limiet ingesteld</string>
<string name="carbsconstraintapplied">KH limiet ingesteld</string>
<string name="circadian_percentage_profile">CircadianPercentageProfiel</string>
<string name="danar_sbolus">S Bolus</string>
<string name="danar_stats">DanaR Statistiek</string>
<string name="danar_stats_cumulative_tdd">Cumulative TDD</string>

View file

@ -379,7 +379,6 @@
<string name="edit_base_isf">Editează ISF normal:</string>
<string name="edit_base_ic">Editează IC normal:</string>
<string name="base_profile_label">Profilul de bază:</string>
<string name="circadian_percentage_profile">ProfilulProcentuluiCircadian</string>
<string name="androidaps_tempbasalendnote">Sfârșit bazală temporară</string>
<string name="androidaps_tempbasalstartnote">Început bazală temporară</string>
<string name="prefs_range_title">Intervalul pentru vizualizare</string>
@ -446,7 +445,6 @@
<string name="temptargetrange_shortname">TT</string>
<string name="localprofile_shortname">LP</string>
<string name="danarpump_shortname">DANA</string>
<string name="circadian_percentage_profile_shortname">CPP</string>
<string name="tempbasals_shortname">TB</string>
<string name="overview_shortname">ACASĂ</string>
<string name="virtualpump_shortname">POMPĂV</string>

View file

@ -79,8 +79,6 @@
<string name="careportal_temporarytargetcancel">отмена времнной цели</string>
<string name="changeyourinput">измените введенные данные</string>
<string name="child">ребенок</string>
<string name="circadian_percentage_profile">суточный процентный профиль</string>
<string name="circadian_percentage_profile_shortname">СПП</string>
<string name="clear_queue">очистка очереди</string>
<string name="clearlog">очистка лога</string>
<string name="closedloop">замкнутый цикл</string>
@ -581,9 +579,8 @@
<string name="careportal_sensorage_label">сенсор пропаботал</string>
<string name="careportal_sensorage_label_short">ВОЗРСенс</string>
<string name="configbuilder_sensitivity">определение чувствительности</string>
<string name="cpp_notloadedplugins">не все профили загружены!</string>
<string name="cpp_sync_setting_missing">требует активации для отправки данных на помпу!</string>
<string name="cpp_valuesnotstored">Данные не сохранены!</string>
<string name="notloadedplugins">не все профили загружены!</string>
<string name="valuesnotstored">Данные не сохранены!</string>
<string name="danar_visualizeextendedaspercentage_title">Просмотреть расширенный болюс %</string>
<string name="danarv2pump">DanaRv2</string>
<string name="date">дата</string>

View file

@ -80,8 +80,6 @@
<string name="careportal_temporarytargetcancel">Temp Mål BG Slut</string>
<string name="changeyourinput">Ändra inmatning</string>
<string name="child">Barn</string>
<string name="circadian_percentage_profile">Cirkadisk Profil Procent</string>
<string name="circadian_percentage_profile_shortname">CPP</string>
<string name="clear_queue">Ta bort kö</string>
<string name="clearlog">Rensa inmatningar</string>
<string name="closedloop">Closed Loop</string>
@ -546,8 +544,7 @@
<string name="careportal_pumpbatterychange">Batteribyte Pump</string>
<string name="careportal_sensorage_label">Sensor ålder</string>
<string name="careportal_sensorage_label_short">SAGE</string>
<string name="cpp_sync_setting_missing">Måste vara aktiverad för att kunna skicka värden till pumpen</string>
<string name="cpp_valuesnotstored">Värden sparas inte</string>
<string name="valuesnotstored">Värden sparas inte</string>
<string name="danar_stats_warning_Message">Möjligen felvärde om man använder bolus för att priming/fyllning!</string>
<string name="edit_base_ic">Ändra Base-IC:</string>
<string name="edit_base_isf">Ändra Base-ISF:</string>

View file

@ -371,7 +371,6 @@
<string name="edit_base_isf">Edit Base-ISF:</string>
<string name="edit_base_ic">Edit Base-IC:</string>
<string name="base_profile_label">Base Profile:</string>
<string name="circadian_percentage_profile">CircadianPercentageProfile</string>
<string name="prefs_range_title">Range for Visualization</string>
<string name="prefs_range_summary">High and low mark for the charts in Overview and Smartwatch</string>
<string name="low_mark">LOW mark</string>
@ -434,7 +433,6 @@
<string name="temptargetrange_shortname">TT</string>
<string name="localprofile_shortname">LP</string>
<string name="danarpump_shortname">DANA</string>
<string name="circadian_percentage_profile_shortname">CPP</string>
<string name="tempbasals_shortname">TB</string>
<string name="overview_shortname">HOME</string>
<string name="virtualpump_shortname">VPUMP</string>
@ -679,9 +677,8 @@
<string name="sensitivityweightedaverage">Sensitivity WeightedAverage</string>
<string name="mdtp_ok">OK</string>
<string name="mdtp_cancel">Cancel</string>
<string name="cpp_sync_setting_missing">needs to be activated to send values to the pump!</string>
<string name="cpp_notloadedplugins">Not all profiles loaded!</string>
<string name="cpp_valuesnotstored">Values not stored!</string>
<string name="notloadedplugins">Not all profiles loaded!</string>
<string name="valuesnotstored">Values not stored!</string>
<string name="wear_overviewnotifications">Overview Notifications</string>
<string name="wear_overviewnotifications_summary">Pass the Overview Notifications through as wear confirmation messages.</string>
<string name="combopump" translatable="false">Accu-Chek Combo</string>