Merge pull request #455 from AdrianLxM/wear-flavours
profile work and wear flavours
This commit is contained in:
commit
729023b010
|
@ -62,7 +62,7 @@ android {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
productFlavors {
|
productFlavors {
|
||||||
flavorDimensions "standard", "wear"
|
flavorDimensions "standard"
|
||||||
full {
|
full {
|
||||||
dimension "standard"
|
dimension "standard"
|
||||||
resValue "string", "app_name", "AndroidAPS"
|
resValue "string", "app_name", "AndroidAPS"
|
||||||
|
@ -111,22 +111,6 @@ android {
|
||||||
buildConfigField "boolean", "NSCLIENTOLNY", "true"
|
buildConfigField "boolean", "NSCLIENTOLNY", "true"
|
||||||
buildConfigField "boolean", "CLOSEDLOOP", "false"
|
buildConfigField "boolean", "CLOSEDLOOP", "false"
|
||||||
}
|
}
|
||||||
wear {
|
|
||||||
dimension "wear"
|
|
||||||
buildConfigField "boolean", "WEAR", "true"
|
|
||||||
buildConfigField "boolean", "WEAR_CONTROL", "false"
|
|
||||||
|
|
||||||
}
|
|
||||||
wearcontrol {
|
|
||||||
dimension "wear"
|
|
||||||
buildConfigField "boolean", "WEAR", "true"
|
|
||||||
buildConfigField "boolean", "WEAR_CONTROL", "true"
|
|
||||||
}
|
|
||||||
nowear {
|
|
||||||
dimension "wear"
|
|
||||||
buildConfigField "boolean", "WEAR", "false"
|
|
||||||
buildConfigField "boolean", "WEAR_CONTROL", "false"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,8 +124,7 @@ allprojects {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
wearWearApp project(path: ':wear', configuration: 'restrictedRelease')
|
wearApp project(':wear')
|
||||||
wearcontrolWearApp project(path: ':wear', configuration: 'fullRelease')
|
|
||||||
|
|
||||||
compile fileTree(include: ['*.jar'], dir: 'libs')
|
compile fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
compile('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') {
|
compile('com.crashlytics.sdk.android:crashlytics:2.6.7@aar') {
|
||||||
|
|
|
@ -11,7 +11,6 @@ public class Config {
|
||||||
// PLUGINS
|
// PLUGINS
|
||||||
public static final boolean OPENAPSENABLED = APS;
|
public static final boolean OPENAPSENABLED = APS;
|
||||||
public static final boolean LOOPENABLED = APS;
|
public static final boolean LOOPENABLED = APS;
|
||||||
public static final boolean WEAR = BuildConfig.WEAR;
|
|
||||||
|
|
||||||
public static final boolean NSCLIENT = BuildConfig.NSCLIENTOLNY;
|
public static final boolean NSCLIENT = BuildConfig.NSCLIENTOLNY;
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class Constants {
|
||||||
public static final int CPP_MIN_PERCENTAGE = 50;
|
public static final int CPP_MIN_PERCENTAGE = 50;
|
||||||
public static final int CPP_MAX_PERCENTAGE = 200;
|
public static final int CPP_MAX_PERCENTAGE = 200;
|
||||||
public static final int CPP_MIN_TIMESHIFT = -6;
|
public static final int CPP_MIN_TIMESHIFT = -6;
|
||||||
public static final int CPP_MAX_TIMESHIFT = 6;
|
public static final int CPP_MAX_TIMESHIFT = 23;
|
||||||
|
|
||||||
// Very Hard Limits Ranges
|
// Very Hard Limits Ranges
|
||||||
// First value is the Lowest and second value is the Highest a Limit can define
|
// First value is the Lowest and second value is the Highest a Limit can define
|
||||||
|
|
|
@ -150,7 +150,7 @@ public class MainApp extends Application {
|
||||||
pluginsList.add(SourceGlimpPlugin.getPlugin());
|
pluginsList.add(SourceGlimpPlugin.getPlugin());
|
||||||
if (Config.SMSCOMMUNICATORENABLED) pluginsList.add(SmsCommunicatorPlugin.getPlugin());
|
if (Config.SMSCOMMUNICATORENABLED) pluginsList.add(SmsCommunicatorPlugin.getPlugin());
|
||||||
|
|
||||||
if (Config.WEAR) pluginsList.add(WearFragment.getPlugin(this));
|
pluginsList.add(WearFragment.getPlugin(this));
|
||||||
pluginsList.add(StatuslinePlugin.getPlugin(this));
|
pluginsList.add(StatuslinePlugin.getPlugin(this));
|
||||||
pluginsList.add(new PersistentNotificationPlugin(this));
|
pluginsList.add(new PersistentNotificationPlugin(this));
|
||||||
pluginsList.add(NSClientInternalPlugin.getPlugin());
|
pluginsList.add(NSClientInternalPlugin.getPlugin());
|
||||||
|
|
|
@ -170,11 +170,9 @@ public class PreferencesActivity extends PreferenceActivity implements SharedPre
|
||||||
}
|
}
|
||||||
addPreferencesFromResource(R.xml.pref_advanced);
|
addPreferencesFromResource(R.xml.pref_advanced);
|
||||||
|
|
||||||
if (Config.WEAR) {
|
WearPlugin wearPlugin = MainApp.getSpecificPlugin(WearPlugin.class);
|
||||||
WearPlugin wearPlugin = MainApp.getSpecificPlugin(WearPlugin.class);
|
if (wearPlugin != null && wearPlugin.isEnabled(PluginBase.GENERAL)) {
|
||||||
if (wearPlugin != null && wearPlugin.isEnabled(PluginBase.GENERAL)) {
|
addPreferencesFromResource(R.xml.pref_wear);
|
||||||
addPreferencesFromResource(R.xml.pref_wear);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
StatuslinePlugin statuslinePlugin = MainApp.getSpecificPlugin(StatuslinePlugin.class);
|
StatuslinePlugin statuslinePlugin = MainApp.getSpecificPlugin(StatuslinePlugin.class);
|
||||||
|
|
|
@ -18,6 +18,8 @@ import info.nightscout.androidaps.interfaces.Interval;
|
||||||
import info.nightscout.androidaps.plugins.Overview.graphExtensions.DataPointWithLabelInterface;
|
import info.nightscout.androidaps.plugins.Overview.graphExtensions.DataPointWithLabelInterface;
|
||||||
import info.nightscout.androidaps.plugins.Overview.graphExtensions.PointsWithLabelGraphSeries;
|
import info.nightscout.androidaps.plugins.Overview.graphExtensions.PointsWithLabelGraphSeries;
|
||||||
import info.nightscout.utils.DateUtil;
|
import info.nightscout.utils.DateUtil;
|
||||||
|
import info.nightscout.utils.DecimalFormatter;
|
||||||
|
import info.nightscout.utils.SafeParse;
|
||||||
|
|
||||||
@DatabaseTable(tableName = DatabaseHelper.DATABASE_PROFILESWITCHES)
|
@DatabaseTable(tableName = DatabaseHelper.DATABASE_PROFILESWITCHES)
|
||||||
public class ProfileSwitch implements Interval, DataPointWithLabelInterface {
|
public class ProfileSwitch implements Interval, DataPointWithLabelInterface {
|
||||||
|
@ -66,7 +68,7 @@ public class ProfileSwitch implements Interval, DataPointWithLabelInterface {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCustomizedName() {
|
public String getCustomizedName() {
|
||||||
String name = profileName;
|
String name = DecimalFormatter.to2Decimal(getProfileObject().percentageBasalSum()) + "U ";
|
||||||
if (isCPP) {
|
if (isCPP) {
|
||||||
name += "(" + percentage + "%," + timeshift + "h)";
|
name += "(" + percentage + "%," + timeshift + "h)";
|
||||||
}
|
}
|
||||||
|
@ -187,7 +189,7 @@ public class ProfileSwitch implements Interval, DataPointWithLabelInterface {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getLabel() {
|
public String getLabel() {
|
||||||
return profileName;
|
return getCustomizedName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -16,6 +16,7 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.Button;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
@ -75,6 +76,8 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
TextView eventTypeText;
|
TextView eventTypeText;
|
||||||
LinearLayout layoutPercent;
|
LinearLayout layoutPercent;
|
||||||
LinearLayout layoutAbsolute;
|
LinearLayout layoutAbsolute;
|
||||||
|
LinearLayout layoutReuse;
|
||||||
|
|
||||||
|
|
||||||
TextView dateButton;
|
TextView dateButton;
|
||||||
TextView timeButton;
|
TextView timeButton;
|
||||||
|
@ -86,6 +89,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
EditText notesEdit;
|
EditText notesEdit;
|
||||||
Spinner profileSpinner;
|
Spinner profileSpinner;
|
||||||
Spinner reasonSpinner;
|
Spinner reasonSpinner;
|
||||||
|
Button reuseButton;
|
||||||
|
|
||||||
NumberPicker editBg;
|
NumberPicker editBg;
|
||||||
NumberPicker editCarbs;
|
NumberPicker editCarbs;
|
||||||
|
@ -141,6 +145,8 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
layoutPercent = (LinearLayout) view.findViewById(R.id.careportal_newnstreatment_percent_layout);
|
layoutPercent = (LinearLayout) view.findViewById(R.id.careportal_newnstreatment_percent_layout);
|
||||||
layoutAbsolute = (LinearLayout) view.findViewById(R.id.careportal_newnstreatment_absolute_layout);
|
layoutAbsolute = (LinearLayout) view.findViewById(R.id.careportal_newnstreatment_absolute_layout);
|
||||||
|
|
||||||
|
layoutReuse = (LinearLayout) view.findViewById(R.id.careportal_newnstreatment_reuse_layout);
|
||||||
|
|
||||||
eventTypeText = (TextView) view.findViewById(R.id.careportal_newnstreatment_eventtype);
|
eventTypeText = (TextView) view.findViewById(R.id.careportal_newnstreatment_eventtype);
|
||||||
eventTypeText.setText(event);
|
eventTypeText.setText(event);
|
||||||
bgUnitsView = (TextView) view.findViewById(R.id.careportal_newnstreatment_bgunits);
|
bgUnitsView = (TextView) view.findViewById(R.id.careportal_newnstreatment_bgunits);
|
||||||
|
@ -149,6 +155,8 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
otherRadioButton = (RadioButton) view.findViewById(R.id.careportal_newnstreatment_other);
|
otherRadioButton = (RadioButton) view.findViewById(R.id.careportal_newnstreatment_other);
|
||||||
profileSpinner = (Spinner) view.findViewById(R.id.careportal_newnstreatment_profile);
|
profileSpinner = (Spinner) view.findViewById(R.id.careportal_newnstreatment_profile);
|
||||||
|
|
||||||
|
reuseButton = (Button) view.findViewById(R.id.careportal_newnstreatment_reusebutton);
|
||||||
|
|
||||||
notesEdit = (EditText) view.findViewById(R.id.careportal_newnstreatment_notes);
|
notesEdit = (EditText) view.findViewById(R.id.careportal_newnstreatment_notes);
|
||||||
|
|
||||||
reasonSpinner = (Spinner) view.findViewById(R.id.careportal_newnstreatment_temptarget_reason);
|
reasonSpinner = (Spinner) view.findViewById(R.id.careportal_newnstreatment_temptarget_reason);
|
||||||
|
@ -322,11 +330,25 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
editCarbTime.setParams(0d, -60d, 60d, 5d, new DecimalFormat("0"), false);
|
editCarbTime.setParams(0d, -60d, 60d, 5d, new DecimalFormat("0"), false);
|
||||||
|
|
||||||
editPercentage = (NumberPicker) view.findViewById(R.id.careportal_newnstreatment_percentage);
|
editPercentage = (NumberPicker) view.findViewById(R.id.careportal_newnstreatment_percentage);
|
||||||
editPercentage.setParams(100d, (double) Constants.CPP_MIN_PERCENTAGE, (double) Constants.CPP_MAX_PERCENTAGE, 5d, new DecimalFormat("0"), false);
|
editPercentage.setParams(100d, (double) Constants.CPP_MIN_PERCENTAGE, (double) Constants.CPP_MAX_PERCENTAGE, 1d, new DecimalFormat("0"), false);
|
||||||
|
|
||||||
editTimeshift = (NumberPicker) view.findViewById(R.id.careportal_newnstreatment_timeshift);
|
editTimeshift = (NumberPicker) view.findViewById(R.id.careportal_newnstreatment_timeshift);
|
||||||
editTimeshift.setParams(0d, (double) Constants.CPP_MIN_TIMESHIFT, (double) Constants.CPP_MAX_TIMESHIFT, 1d, new DecimalFormat("0"), false);
|
editTimeshift.setParams(0d, (double) Constants.CPP_MIN_TIMESHIFT, (double) Constants.CPP_MAX_TIMESHIFT, 1d, new DecimalFormat("0"), false);
|
||||||
|
|
||||||
|
ProfileSwitch ps = MainApp.getConfigBuilder().getProfileSwitchFromHistory(System.currentTimeMillis());
|
||||||
|
if(ps!=null && ps.isCPP){
|
||||||
|
final int percentage = ps.percentage;
|
||||||
|
final int timeshift = ps.timeshift;
|
||||||
|
reuseButton.setText(reuseButton.getText() + " " + percentage + "% " + timeshift +"h");
|
||||||
|
reuseButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
editPercentage.setValue((double)percentage);
|
||||||
|
editTimeshift.setValue((double)timeshift);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_eventtime_layout), options.date);
|
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_eventtime_layout), options.date);
|
||||||
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_bg_layout), options.bg);
|
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_bg_layout), options.bg);
|
||||||
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_bgsource_layout), options.bg);
|
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_bgsource_layout), options.bg);
|
||||||
|
@ -340,6 +362,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_profile_layout), options.profile);
|
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_profile_layout), options.profile);
|
||||||
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_percentage_layout), options.profile);
|
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_percentage_layout), options.profile);
|
||||||
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_timeshift_layout), options.profile);
|
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_timeshift_layout), options.profile);
|
||||||
|
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_reuse_layout), options.profile && ps!=null && ps.isCPP);
|
||||||
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_temptarget_layout), options.tempTarget);
|
showOrHide((ViewGroup) view.findViewById(R.id.careportal_newnstreatment_temptarget_layout), options.tempTarget);
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
|
@ -722,28 +745,30 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
ProfileSwitch profileSwitch = MainApp.getConfigBuilder().getProfileSwitchFromHistory(System.currentTimeMillis());
|
ProfileSwitch profileSwitch = MainApp.getConfigBuilder().getProfileSwitchFromHistory(System.currentTimeMillis());
|
||||||
if (profileSwitch == null) {
|
if (profileSwitch != null) {
|
||||||
profileSwitch = new ProfileSwitch();
|
profileSwitch = new ProfileSwitch();
|
||||||
profileSwitch.date = System.currentTimeMillis();
|
profileSwitch.date = System.currentTimeMillis();
|
||||||
profileSwitch.source = Source.USER;
|
profileSwitch.source = Source.USER;
|
||||||
profileSwitch.profileName = MainApp.getConfigBuilder().getProfileName();
|
profileSwitch.profileName = MainApp.getConfigBuilder().getProfileName(System.currentTimeMillis(), false);
|
||||||
profileSwitch.profileJson = MainApp.getConfigBuilder().getProfile().getData().toString();
|
profileSwitch.profileJson = MainApp.getConfigBuilder().getProfile().getData().toString();
|
||||||
profileSwitch.profilePlugin = ConfigBuilderPlugin.getActiveProfileInterface().getClass().getName();
|
profileSwitch.profilePlugin = ConfigBuilderPlugin.getActiveProfileInterface().getClass().getName();
|
||||||
profileSwitch.durationInMinutes = duration;
|
profileSwitch.durationInMinutes = duration;
|
||||||
profileSwitch.isCPP = percentage != 100 || timeshift != 0;
|
profileSwitch.isCPP = percentage != 100 || timeshift != 0;
|
||||||
profileSwitch.timeshift = timeshift;
|
profileSwitch.timeshift = timeshift;
|
||||||
profileSwitch.percentage = percentage;
|
profileSwitch.percentage = percentage;
|
||||||
}
|
MainApp.getConfigBuilder().addToHistoryProfileSwitch(profileSwitch);
|
||||||
MainApp.getConfigBuilder().addToHistoryProfileSwitch(profileSwitch);
|
|
||||||
|
|
||||||
PumpInterface pump = MainApp.getConfigBuilder();
|
PumpInterface pump = MainApp.getConfigBuilder();
|
||||||
if (pump != null) {
|
if (pump != null) {
|
||||||
pump.setNewBasalProfile(profileSwitch.getProfileObject());
|
pump.setNewBasalProfile(profileSwitch.getProfileObject());
|
||||||
MainApp.bus().post(new EventNewBasalProfile());
|
MainApp.bus().post(new EventNewBasalProfile());
|
||||||
|
} else {
|
||||||
|
log.error("No active pump selected");
|
||||||
|
}
|
||||||
|
Answers.getInstance().logCustom(new CustomEvent("ProfileSwitch"));
|
||||||
} else {
|
} else {
|
||||||
log.error("No active pump selected");
|
log.error("No profile switch existing");
|
||||||
}
|
}
|
||||||
Answers.getInstance().logCustom(new CustomEvent("ProfileSwitch"));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -934,10 +934,14 @@ public class ConfigBuilderPlugin implements PluginBase, PumpInterface, Constrain
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getProfileName(long time) {
|
public String getProfileName(long time) {
|
||||||
|
return getProfileName(time, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProfileName(long time, boolean customized) {
|
||||||
ProfileSwitch profileSwitch = getProfileSwitchFromHistory(time);
|
ProfileSwitch profileSwitch = getProfileSwitchFromHistory(time);
|
||||||
if (profileSwitch != null) {
|
if (profileSwitch != null) {
|
||||||
if (profileSwitch.profileJson != null) {
|
if (profileSwitch.profileJson != null) {
|
||||||
return profileSwitch.getCustomizedName();
|
return customized?profileSwitch.getCustomizedName():profileSwitch.profileName;
|
||||||
} else {
|
} else {
|
||||||
Profile profile = activeProfile.getProfile().getSpecificProfile(profileSwitch.profileName);
|
Profile profile = activeProfile.getProfile().getSpecificProfile(profileSwitch.profileName);
|
||||||
if (profile != null)
|
if (profile != null)
|
||||||
|
|
|
@ -2,7 +2,9 @@ package info.nightscout.androidaps.plugins.ProfileCircadianPercentage;
|
||||||
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
|
@ -123,6 +125,9 @@ public class CircadianPercentageProfileFragment extends SubscriberFragment {
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
showDeprecatedDialog();
|
||||||
|
|
||||||
View layout = inflater.inflate(R.layout.circadianpercentageprofile_fragment, container, false);
|
View layout = inflater.inflate(R.layout.circadianpercentageprofile_fragment, container, false);
|
||||||
fl = (FrameLayout) layout.findViewById(R.id.circadianpercentageprofile_framelayout);
|
fl = (FrameLayout) layout.findViewById(R.id.circadianpercentageprofile_framelayout);
|
||||||
fl.requestFocusFromTouch();
|
fl.requestFocusFromTouch();
|
||||||
|
@ -230,7 +235,7 @@ public class CircadianPercentageProfileFragment extends SubscriberFragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
timeshiftView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
/*timeshiftView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFocusChange(View view, boolean hasFocus) {
|
public void onFocusChange(View view, boolean hasFocus) {
|
||||||
|
@ -266,7 +271,7 @@ public class CircadianPercentageProfileFragment extends SubscriberFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});*/
|
||||||
|
|
||||||
diaView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
diaView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
||||||
|
|
||||||
|
@ -315,6 +320,25 @@ public class CircadianPercentageProfileFragment extends SubscriberFragment {
|
||||||
return layout;
|
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() {
|
public void updateGUI() {
|
||||||
updateProfileInfo();
|
updateProfileInfo();
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,8 @@ import info.nightscout.androidaps.interfaces.ProfileInterface;
|
||||||
import info.nightscout.androidaps.data.ProfileStore;
|
import info.nightscout.androidaps.data.ProfileStore;
|
||||||
import info.nightscout.androidaps.interfaces.PumpInterface;
|
import info.nightscout.androidaps.interfaces.PumpInterface;
|
||||||
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
|
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
|
||||||
|
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin;
|
||||||
|
import info.nightscout.androidaps.plugins.ProfileLocal.LocalProfilePlugin;
|
||||||
import info.nightscout.utils.DecimalFormatter;
|
import info.nightscout.utils.DecimalFormatter;
|
||||||
import info.nightscout.utils.NSUpload;
|
import info.nightscout.utils.NSUpload;
|
||||||
import info.nightscout.utils.SP;
|
import info.nightscout.utils.SP;
|
||||||
|
@ -211,6 +213,91 @@ public class CircadianPercentageProfilePlugin implements PluginBase, ProfileInte
|
||||||
return msg;
|
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", getLPisf());
|
||||||
|
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() {
|
private void createConvertedProfile() {
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
JSONObject store = new JSONObject();
|
JSONObject store = new JSONObject();
|
||||||
|
|
|
@ -3,6 +3,7 @@ package info.nightscout.androidaps.plugins.ProfileLocal;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
@ -27,6 +28,7 @@ import info.nightscout.androidaps.plugins.Careportal.CareportalFragment;
|
||||||
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
|
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
|
||||||
import info.nightscout.androidaps.plugins.Careportal.OptionsToShow;
|
import info.nightscout.androidaps.plugins.Careportal.OptionsToShow;
|
||||||
import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
|
import info.nightscout.androidaps.plugins.Common.SubscriberFragment;
|
||||||
|
import info.nightscout.utils.DecimalFormatter;
|
||||||
import info.nightscout.utils.NumberPicker;
|
import info.nightscout.utils.NumberPicker;
|
||||||
import info.nightscout.utils.SafeParse;
|
import info.nightscout.utils.SafeParse;
|
||||||
import info.nightscout.utils.TimeListEdit;
|
import info.nightscout.utils.TimeListEdit;
|
||||||
|
@ -57,6 +59,9 @@ public class LocalProfileFragment extends SubscriberFragment {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
localProfilePlugin.storeSettings();
|
localProfilePlugin.storeSettings();
|
||||||
|
if(basalView!=null){
|
||||||
|
basalView.updateLabel(MainApp.sResources.getString(R.string.nsprofileview_basal_label)+ ": "+ getSumLabel());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -84,10 +89,10 @@ public class LocalProfileFragment extends SubscriberFragment {
|
||||||
diaView.setParams(localProfilePlugin.dia, 2d, 48d, 0.1d, new DecimalFormat("0.0"), false, textWatch);
|
diaView.setParams(localProfilePlugin.dia, 2d, 48d, 0.1d, new DecimalFormat("0.0"), false, textWatch);
|
||||||
mgdlView = (RadioButton) layout.findViewById(R.id.localprofile_mgdl);
|
mgdlView = (RadioButton) layout.findViewById(R.id.localprofile_mgdl);
|
||||||
mmolView = (RadioButton) layout.findViewById(R.id.localprofile_mmol);
|
mmolView = (RadioButton) layout.findViewById(R.id.localprofile_mmol);
|
||||||
icView = new TimeListEdit(getContext(), layout, R.id.localprofile_ic, MainApp.sResources.getString(R.string.nsprofileview_ic_label), getPlugin().ic, null, 0.1d, new DecimalFormat("0.0"), save);
|
icView = new TimeListEdit(getContext(), layout, R.id.localprofile_ic, MainApp.sResources.getString(R.string.nsprofileview_ic_label) + ":", getPlugin().ic, null, 0.1d, new DecimalFormat("0.0"), save);
|
||||||
isfView = new TimeListEdit(getContext(), layout, R.id.localprofile_isf, MainApp.sResources.getString(R.string.nsprofileview_isf_label), getPlugin().isf, null, 0.1d, new DecimalFormat("0.0"), save);
|
isfView = new TimeListEdit(getContext(), layout, R.id.localprofile_isf, MainApp.sResources.getString(R.string.nsprofileview_isf_label) + ":", getPlugin().isf, null, 0.1d, new DecimalFormat("0.0"), save);
|
||||||
basalView = new TimeListEdit(getContext(), layout, R.id.localprofile_basal, MainApp.sResources.getString(R.string.nsprofileview_basal_label), getPlugin().basal, null, 0.01d, new DecimalFormat("0.00"), save);
|
basalView = new TimeListEdit(getContext(), layout, R.id.localprofile_basal, MainApp.sResources.getString(R.string.nsprofileview_basal_label)+ ": " + getSumLabel(), getPlugin().basal, null, 0.01d, new DecimalFormat("0.00"), save);
|
||||||
targetView = new TimeListEdit(getContext(), layout, R.id.localprofile_target, MainApp.sResources.getString(R.string.nsprofileview_target_label), getPlugin().targetLow, getPlugin().targetHigh, 0.1d, new DecimalFormat("0.0"), save);
|
targetView = new TimeListEdit(getContext(), layout, R.id.localprofile_target, MainApp.sResources.getString(R.string.nsprofileview_target_label)+ ":", getPlugin().targetLow, getPlugin().targetHigh, 0.1d, new DecimalFormat("0.0"), save);
|
||||||
profileswitchButton = (Button) layout.findViewById(R.id.localprofile_profileswitch);
|
profileswitchButton = (Button) layout.findViewById(R.id.localprofile_profileswitch);
|
||||||
|
|
||||||
PumpInterface pump = MainApp.getConfigBuilder();
|
PumpInterface pump = MainApp.getConfigBuilder();
|
||||||
|
@ -141,6 +146,11 @@ public class LocalProfileFragment extends SubscriberFragment {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public String getSumLabel() {
|
||||||
|
return " ∑" + DecimalFormatter.to2Decimal(localProfilePlugin.getProfile().getDefaultProfile().baseBasalSum()) +"U";
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onStatusEvent(final EventInitializationChanged e) {
|
public void onStatusEvent(final EventInitializationChanged e) {
|
||||||
updateGUI();
|
updateGUI();
|
||||||
|
|
|
@ -30,7 +30,7 @@ public class LocalProfilePlugin implements PluginBase, ProfileInterface {
|
||||||
private ProfileStore convertedProfile = null;
|
private ProfileStore convertedProfile = null;
|
||||||
private String convertedProfileName = null;
|
private String convertedProfileName = null;
|
||||||
|
|
||||||
final private String DEFAULTARRAY = "[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":0}]";
|
public static final String DEFAULTARRAY = "[{\"time\":\"00:00\",\"timeAsSeconds\":0,\"value\":0}]";
|
||||||
|
|
||||||
boolean mgdl;
|
boolean mgdl;
|
||||||
boolean mmol;
|
boolean mmol;
|
||||||
|
@ -124,7 +124,7 @@ public class LocalProfilePlugin implements PluginBase, ProfileInterface {
|
||||||
log.debug("Storing settings: " + getProfile().getData().toString());
|
log.debug("Storing settings: " + getProfile().getData().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadSettings() {
|
public void loadSettings() {
|
||||||
if (Config.logPrefsChange)
|
if (Config.logPrefsChange)
|
||||||
log.debug("Loading stored settings");
|
log.debug("Loading stored settings");
|
||||||
|
|
||||||
|
|
|
@ -23,18 +23,20 @@ import info.nightscout.androidaps.data.PumpEnactResult;
|
||||||
import info.nightscout.androidaps.db.BgReading;
|
import info.nightscout.androidaps.db.BgReading;
|
||||||
import info.nightscout.androidaps.db.DanaRHistoryRecord;
|
import info.nightscout.androidaps.db.DanaRHistoryRecord;
|
||||||
import info.nightscout.androidaps.db.DatabaseHelper;
|
import info.nightscout.androidaps.db.DatabaseHelper;
|
||||||
|
import info.nightscout.androidaps.db.ProfileSwitch;
|
||||||
import info.nightscout.androidaps.db.Source;
|
import info.nightscout.androidaps.db.Source;
|
||||||
import info.nightscout.androidaps.db.TempTarget;
|
import info.nightscout.androidaps.db.TempTarget;
|
||||||
import info.nightscout.androidaps.interfaces.APSInterface;
|
import info.nightscout.androidaps.interfaces.APSInterface;
|
||||||
import info.nightscout.androidaps.interfaces.DanaRInterface;
|
import info.nightscout.androidaps.interfaces.DanaRInterface;
|
||||||
import info.nightscout.androidaps.interfaces.PluginBase;
|
import info.nightscout.androidaps.interfaces.PluginBase;
|
||||||
|
import info.nightscout.androidaps.interfaces.ProfileInterface;
|
||||||
import info.nightscout.androidaps.interfaces.PumpInterface;
|
import info.nightscout.androidaps.interfaces.PumpInterface;
|
||||||
import info.nightscout.androidaps.plugins.Actions.dialogs.FillDialog;
|
import info.nightscout.androidaps.plugins.Actions.dialogs.FillDialog;
|
||||||
|
import info.nightscout.androidaps.plugins.Careportal.Dialogs.NewNSTreatmentDialog;
|
||||||
import info.nightscout.androidaps.plugins.Loop.APSResult;
|
import info.nightscout.androidaps.plugins.Loop.APSResult;
|
||||||
import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
|
import info.nightscout.androidaps.plugins.Loop.LoopPlugin;
|
||||||
import info.nightscout.androidaps.data.Profile;
|
import info.nightscout.androidaps.data.Profile;
|
||||||
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
|
import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification;
|
||||||
import info.nightscout.androidaps.plugins.ProfileCircadianPercentage.CircadianPercentageProfilePlugin;
|
|
||||||
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin;
|
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin;
|
||||||
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
|
import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump;
|
||||||
import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
|
import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
|
||||||
|
@ -67,8 +69,7 @@ public class ActionStringHandler {
|
||||||
|
|
||||||
public synchronized static void handleInitiate(String actionstring) {
|
public synchronized static void handleInitiate(String actionstring) {
|
||||||
|
|
||||||
if (!BuildConfig.WEAR_CONTROL) return;
|
if (!SP.getBoolean("wearcontrol", false)) return;
|
||||||
|
|
||||||
|
|
||||||
lastBolusWizard = null;
|
lastBolusWizard = null;
|
||||||
|
|
||||||
|
@ -242,25 +243,21 @@ public class ActionStringHandler {
|
||||||
lastBolusWizard = bolusWizard;
|
lastBolusWizard = bolusWizard;
|
||||||
|
|
||||||
} else if("opencpp".equals(act[0])){
|
} else if("opencpp".equals(act[0])){
|
||||||
Object activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface();
|
ProfileSwitch activeProfileSwitch = MainApp.getConfigBuilder().getProfileSwitchFromHistory(System.currentTimeMillis());
|
||||||
CircadianPercentageProfilePlugin cpp = MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class);
|
if(activeProfileSwitch==null){
|
||||||
|
sendError("No active profile switch!");
|
||||||
if(cpp == null || activeProfile==null || cpp != activeProfile){
|
|
||||||
sendError("CPP not activated!");
|
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
// read CPP values
|
// read CPP values
|
||||||
rTitle = "opencpp";
|
rTitle = "opencpp";
|
||||||
rMessage = "opencpp";
|
rMessage = "opencpp";
|
||||||
rAction = "opencpp" + " " + cpp.getPercentage() + " " + cpp.getTimeshift();
|
rAction = "opencpp" + " " + activeProfileSwitch.percentage + " " + activeProfileSwitch.timeshift;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if("cppset".equals(act[0])){
|
} else if("cppset".equals(act[0])){
|
||||||
Object activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface();
|
ProfileSwitch activeProfileSwitch = MainApp.getConfigBuilder().getProfileSwitchFromHistory(System.currentTimeMillis());
|
||||||
CircadianPercentageProfilePlugin cpp = MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class);
|
if(activeProfileSwitch==null){
|
||||||
|
sendError("No active profile switch!");
|
||||||
if(cpp == null || activeProfile==null || cpp != activeProfile){
|
|
||||||
sendError("CPP not activated!");
|
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
// read CPP values
|
// read CPP values
|
||||||
|
@ -334,13 +331,16 @@ public class ActionStringHandler {
|
||||||
|
|
||||||
private static String generateTDDMessage(List<DanaRHistoryRecord> historyList, List<DanaRHistoryRecord> dummies) {
|
private static String generateTDDMessage(List<DanaRHistoryRecord> historyList, List<DanaRHistoryRecord> dummies) {
|
||||||
|
|
||||||
|
ProfileInterface activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface();
|
||||||
|
|
||||||
|
if(activeProfile == null){
|
||||||
|
return "No profile loaded :(";
|
||||||
|
}
|
||||||
|
|
||||||
DateFormat df = new SimpleDateFormat("dd.MM.");
|
DateFormat df = new SimpleDateFormat("dd.MM.");
|
||||||
String message = "";
|
String message = "";
|
||||||
|
|
||||||
CircadianPercentageProfilePlugin cpp = MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class);
|
double refTDD = activeProfile.getProfile().getDefaultProfile().baseBasalSum()*2;
|
||||||
boolean isCPP = (cpp!= null && cpp.isEnabled(PluginBase.PROFILE));
|
|
||||||
double refTDD = 100;
|
|
||||||
if(isCPP) refTDD = cpp.baseBasalSum()*2;
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
double sum = 0d;
|
double sum = 0d;
|
||||||
|
@ -364,15 +364,15 @@ public class ActionStringHandler {
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
message += "weighted:\n";
|
message += "weighted:\n";
|
||||||
message += "0.3: " + DecimalFormatter.to2Decimal(weighted03) + "U " + (isCPP?(DecimalFormatter.to0Decimal(100*weighted03/refTDD) + "%"):"") + "\n";
|
message += "0.3: " + DecimalFormatter.to2Decimal(weighted03) + "U " + (DecimalFormatter.to0Decimal(100*weighted03/refTDD) + "%") + "\n";
|
||||||
message += "0.5: " + DecimalFormatter.to2Decimal(weighted05) + "U " + (isCPP?(DecimalFormatter.to0Decimal(100*weighted05/refTDD) + "%"):"") + "\n";
|
message += "0.5: " + DecimalFormatter.to2Decimal(weighted05) + "U " + (DecimalFormatter.to0Decimal(100*weighted05/refTDD) + "%") + "\n";
|
||||||
message += "0.7: " + DecimalFormatter.to2Decimal(weighted07) + "U " + (isCPP?(DecimalFormatter.to0Decimal(100*weighted07/refTDD) + "%"):"") + "\n";
|
message += "0.7: " + DecimalFormatter.to2Decimal(weighted07) + "U " + (DecimalFormatter.to0Decimal(100*weighted07/refTDD) + "%") + "\n";
|
||||||
message += "\n";
|
message += "\n";
|
||||||
|
|
||||||
PumpInterface pump = MainApp.getConfigBuilder().getActivePump();
|
PumpInterface pump = MainApp.getConfigBuilder().getActivePump();
|
||||||
if (pump != null && pump instanceof DanaRPlugin) {
|
if (pump != null && pump instanceof DanaRPlugin) {
|
||||||
double tdd = DanaRPump.getInstance().dailyTotalUnits;
|
double tdd = DanaRPump.getInstance().dailyTotalUnits;
|
||||||
message += "Today: " + DecimalFormatter.to2Decimal(tdd) + "U " + (isCPP?(DecimalFormatter.to0Decimal(100*tdd/refTDD) + "%"):"") + "\n";
|
message += "Today: " + DecimalFormatter.to2Decimal(tdd) + "U " + (DecimalFormatter.to0Decimal(100*tdd/refTDD) + "%") + "\n";
|
||||||
message += "\n";
|
message += "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,7 +380,7 @@ public class ActionStringHandler {
|
||||||
Collections.reverse(historyList);
|
Collections.reverse(historyList);
|
||||||
for (DanaRHistoryRecord record : historyList) {
|
for (DanaRHistoryRecord record : historyList) {
|
||||||
double tdd = record.recordDailyBolus + record.recordDailyBasal;
|
double tdd = record.recordDailyBolus + record.recordDailyBasal;
|
||||||
message += df.format(new Date(record.recordDate)) + " " + DecimalFormatter.to2Decimal(tdd) +"U " + (isCPP?(DecimalFormatter.to0Decimal(100*tdd/refTDD) + "%"):"") + (dummies.contains(record)?"x":"") +"\n";
|
message += df.format(new Date(record.recordDate)) + " " + DecimalFormatter.to2Decimal(tdd) +"U " + (DecimalFormatter.to0Decimal(100*tdd/refTDD) + "%") + (dummies.contains(record)?"x":"") +"\n";
|
||||||
}
|
}
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
@ -521,7 +521,7 @@ public class ActionStringHandler {
|
||||||
|
|
||||||
public synchronized static void handleConfirmation(String actionString) {
|
public synchronized static void handleConfirmation(String actionString) {
|
||||||
|
|
||||||
if (!BuildConfig.WEAR_CONTROL) return;
|
if (!SP.getBoolean("wearcontrol", false)) return;
|
||||||
|
|
||||||
|
|
||||||
//Guard from old or duplicate confirmations
|
//Guard from old or duplicate confirmations
|
||||||
|
@ -564,29 +564,47 @@ public class ActionStringHandler {
|
||||||
} else if ("cppset".equals(act[0])) {
|
} else if ("cppset".equals(act[0])) {
|
||||||
int timeshift = SafeParse.stringToInt(act[1]);
|
int timeshift = SafeParse.stringToInt(act[1]);
|
||||||
int percentage = SafeParse.stringToInt(act[2]);
|
int percentage = SafeParse.stringToInt(act[2]);
|
||||||
setCPP(percentage, timeshift);
|
setCPP(timeshift, percentage);
|
||||||
} else if ("dismissoverviewnotification".equals(act[0])){
|
} else if ("dismissoverviewnotification".equals(act[0])){
|
||||||
MainApp.bus().post(new EventDismissNotification(SafeParse.stringToInt(act[1])));
|
MainApp.bus().post(new EventDismissNotification(SafeParse.stringToInt(act[1])));
|
||||||
}
|
}
|
||||||
lastBolusWizard = null;
|
lastBolusWizard = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setCPP(int percentage, int timeshift) {
|
private static void setCPP(int timeshift, int percentage) {
|
||||||
Object activeProfile = MainApp.getConfigBuilder().getActiveProfileInterface();
|
|
||||||
CircadianPercentageProfilePlugin cpp = MainApp.getSpecificPlugin(CircadianPercentageProfilePlugin.class);
|
|
||||||
|
|
||||||
if(cpp == null || activeProfile==null || cpp != activeProfile){
|
String msg = "";
|
||||||
sendError("CPP not activated!");
|
|
||||||
return;
|
|
||||||
|
//check for validity
|
||||||
|
if (percentage < Constants.CPP_MIN_PERCENTAGE || percentage > Constants.CPP_MAX_PERCENTAGE) {
|
||||||
|
msg+= String.format(MainApp.sResources.getString(R.string.openapsma_valueoutofrange), "Profile-Percentage") + "\n";
|
||||||
}
|
}
|
||||||
String msg = cpp.externallySetParameters(timeshift, percentage);
|
if (timeshift < 0 || timeshift > 23) {
|
||||||
if(msg != null && !"".equals(msg)){
|
msg+= String.format(MainApp.sResources.getString(R.string.openapsma_valueoutofrange), "Profile-Timeshift") + "\n";
|
||||||
|
}
|
||||||
|
if(!SP.getBoolean("syncprofiletopump", false)){
|
||||||
|
msg+= MainApp.sResources.getString(R.string.syncprofiletopump_title) + " " + MainApp.sResources.getString(R.string.cpp_sync_setting_missing) + "\n";
|
||||||
|
}
|
||||||
|
final PumpInterface pump = MainApp.getConfigBuilder();
|
||||||
|
final Profile profile = MainApp.getConfigBuilder().getProfile();
|
||||||
|
|
||||||
|
if (pump == null || 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);
|
||||||
String rTitle = "STATUS";
|
String rTitle = "STATUS";
|
||||||
String rAction = "statusmessage";
|
String rAction = "statusmessage";
|
||||||
WearFragment.getPlugin(MainApp.instance()).requestActionConfirmation(rTitle, msg, rAction);
|
WearFragment.getPlugin(MainApp.instance()).requestActionConfirmation(rTitle, msg, rAction);
|
||||||
lastSentTimestamp = System.currentTimeMillis();
|
lastSentTimestamp = System.currentTimeMillis();
|
||||||
lastConfirmActionString = rAction;
|
lastConfirmActionString = rAction;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//send profile to pumpe
|
||||||
|
new NewNSTreatmentDialog(); //init
|
||||||
|
NewNSTreatmentDialog.doProfileSwitch(0, percentage, timeshift);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void generateTempTarget(int duration, double low, double high) {
|
private static void generateTempTarget(int duration, double low, double high) {
|
||||||
|
|
|
@ -29,7 +29,7 @@ import info.nightscout.utils.SP;
|
||||||
|
|
||||||
public class WearPlugin implements PluginBase {
|
public class WearPlugin implements PluginBase {
|
||||||
|
|
||||||
private static boolean fragmentEnabled = Config.WEAR;
|
private static boolean fragmentEnabled = true;
|
||||||
private boolean fragmentVisible = true;
|
private boolean fragmentVisible = true;
|
||||||
private static WatchUpdaterService watchUS;
|
private static WatchUpdaterService watchUS;
|
||||||
private final Context ctx;
|
private final Context ctx;
|
||||||
|
|
|
@ -42,6 +42,7 @@ import info.nightscout.androidaps.plugins.Overview.OverviewPlugin;
|
||||||
import info.nightscout.androidaps.plugins.Wear.ActionStringHandler;
|
import info.nightscout.androidaps.plugins.Wear.ActionStringHandler;
|
||||||
import info.nightscout.androidaps.plugins.Wear.WearPlugin;
|
import info.nightscout.androidaps.plugins.Wear.WearPlugin;
|
||||||
import info.nightscout.utils.DecimalFormatter;
|
import info.nightscout.utils.DecimalFormatter;
|
||||||
|
import info.nightscout.utils.SP;
|
||||||
import info.nightscout.utils.SafeParse;
|
import info.nightscout.utils.SafeParse;
|
||||||
import info.nightscout.utils.ToastUtils;
|
import info.nightscout.utils.ToastUtils;
|
||||||
|
|
||||||
|
@ -65,6 +66,7 @@ public class WatchUpdaterService extends WearableListenerService implements
|
||||||
|
|
||||||
private static final String OPEN_SETTINGS_PATH = "/openwearsettings";
|
private static final String OPEN_SETTINGS_PATH = "/openwearsettings";
|
||||||
private static final String NEW_STATUS_PATH = "/sendstatustowear";
|
private static final String NEW_STATUS_PATH = "/sendstatustowear";
|
||||||
|
private static final String NEW_PREFERENCES_PATH = "/sendpreferencestowear";
|
||||||
public static final String BASAL_DATA_PATH = "/nightscout_watch_basal";
|
public static final String BASAL_DATA_PATH = "/nightscout_watch_basal";
|
||||||
public static final String BOLUS_PROGRESS_PATH = "/nightscout_watch_bolusprogress";
|
public static final String BOLUS_PROGRESS_PATH = "/nightscout_watch_bolusprogress";
|
||||||
public static final String ACTION_CONFIRMATION_REQUEST_PATH = "/nightscout_watch_actionconfirmationrequest";
|
public static final String ACTION_CONFIRMATION_REQUEST_PATH = "/nightscout_watch_actionconfirmationrequest";
|
||||||
|
@ -326,6 +328,7 @@ public class WatchUpdaterService extends WearableListenerService implements
|
||||||
entries.putDataMapArrayList("entries", dataMaps);
|
entries.putDataMapArrayList("entries", dataMaps);
|
||||||
new SendToDataLayerThread(WEARABLE_DATA_PATH, googleApiClient).execute(entries);
|
new SendToDataLayerThread(WEARABLE_DATA_PATH, googleApiClient).execute(entries);
|
||||||
}
|
}
|
||||||
|
sendPreferences();
|
||||||
sendBasals();
|
sendBasals();
|
||||||
sendStatus();
|
sendStatus();
|
||||||
}
|
}
|
||||||
|
@ -527,6 +530,22 @@ public class WatchUpdaterService extends WearableListenerService implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendPreferences() {
|
||||||
|
if (googleApiClient.isConnected()) {
|
||||||
|
|
||||||
|
boolean wearcontrol = SP.getBoolean("wearcontrol",false);
|
||||||
|
|
||||||
|
PutDataMapRequest dataMapRequest = PutDataMapRequest.create(NEW_PREFERENCES_PATH);
|
||||||
|
//unique content
|
||||||
|
dataMapRequest.getDataMap().putDouble("timestamp", System.currentTimeMillis());
|
||||||
|
dataMapRequest.getDataMap().putBoolean("wearcontrol", wearcontrol);
|
||||||
|
PutDataRequest putDataRequest = dataMapRequest.asPutDataRequest();
|
||||||
|
Wearable.DataApi.putDataItem(googleApiClient, putDataRequest);
|
||||||
|
} else {
|
||||||
|
Log.e("SendStatus", "No connection to wearable available!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private String generateStatusString() {
|
private String generateStatusString() {
|
||||||
String status = "";
|
String status = "";
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package info.nightscout.utils;
|
package info.nightscout.utils;
|
||||||
|
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.AdapterView.OnItemSelectedListener;
|
import android.widget.AdapterView.OnItemSelectedListener;
|
||||||
|
@ -69,6 +70,7 @@ import android.widget.SpinnerAdapter;
|
||||||
*/
|
*/
|
||||||
public class SpinnerHelper implements OnItemSelectedListener {
|
public class SpinnerHelper implements OnItemSelectedListener {
|
||||||
private final Spinner spinner;
|
private final Spinner spinner;
|
||||||
|
private boolean userTouched;
|
||||||
|
|
||||||
private int lastPosition = -1;
|
private int lastPosition = -1;
|
||||||
private OnItemSelectedListener proxiedItemSelectedListener = null;
|
private OnItemSelectedListener proxiedItemSelectedListener = null;
|
||||||
|
@ -93,11 +95,22 @@ public class SpinnerHelper implements OnItemSelectedListener {
|
||||||
|
|
||||||
public void setOnItemSelectedListener(OnItemSelectedListener listener) {
|
public void setOnItemSelectedListener(OnItemSelectedListener listener) {
|
||||||
proxiedItemSelectedListener = listener;
|
proxiedItemSelectedListener = listener;
|
||||||
|
setTouchListener();
|
||||||
spinner.setOnItemSelectedListener(listener == null ? null : this);
|
spinner.setOnItemSelectedListener(listener == null ? null : this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTouchListener() {
|
||||||
|
spinner.setOnTouchListener(new View.OnTouchListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
|
userTouched = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||||
if (position != lastPosition) {
|
if (position != lastPosition && userTouched) {
|
||||||
lastPosition = position;
|
lastPosition = position;
|
||||||
if (proxiedItemSelectedListener != null) {
|
if (proxiedItemSelectedListener != null) {
|
||||||
proxiedItemSelectedListener.onItemSelected(
|
proxiedItemSelectedListener.onItemSelected(
|
||||||
|
|
|
@ -53,6 +53,10 @@ public class TimeListEdit {
|
||||||
private double step;
|
private double step;
|
||||||
private NumberFormat formatter;
|
private NumberFormat formatter;
|
||||||
private Runnable save;
|
private Runnable save;
|
||||||
|
private LinearLayout layout;
|
||||||
|
private TextView textlabel;
|
||||||
|
private int inflatedUntil = -1;
|
||||||
|
|
||||||
|
|
||||||
public TimeListEdit(Context context, View view, int resLayoutId, String label, JSONArray data1, JSONArray data2, double step, NumberFormat formatter, Runnable save) {
|
public TimeListEdit(Context context, View view, int resLayoutId, String label, JSONArray data1, JSONArray data2, double step, NumberFormat formatter, Runnable save) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
@ -68,9 +72,9 @@ public class TimeListEdit {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void buildView() {
|
private void buildView() {
|
||||||
LinearLayout layout = (LinearLayout) view.findViewById(resLayoutId);
|
layout = (LinearLayout) view.findViewById(resLayoutId);
|
||||||
|
|
||||||
TextView textlabel = new TextView(context);
|
textlabel = new TextView(context);
|
||||||
textlabel.setText(label);
|
textlabel.setText(label);
|
||||||
textlabel.setGravity(Gravity.START);
|
textlabel.setGravity(Gravity.START);
|
||||||
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||||
|
@ -80,102 +84,9 @@ public class TimeListEdit {
|
||||||
TextViewCompat.setTextAppearance(textlabel, android.R.style.TextAppearance_Medium);
|
TextViewCompat.setTextAppearance(textlabel, android.R.style.TextAppearance_Medium);
|
||||||
layout.addView(textlabel);
|
layout.addView(textlabel);
|
||||||
|
|
||||||
for (int i = 0; i < 24; i++) {
|
for (int i = 0; i < 24 && i < itemsCount(); i++) {
|
||||||
LayoutInflater inflater = LayoutInflater.from(context);
|
inflateRow(i);
|
||||||
View childview = intervals[i] = inflater.inflate(R.layout.timelistedit_element, layout, false);
|
inflatedUntil = i;
|
||||||
spinners[i] = new SpinnerHelper(childview.findViewById(R.id.timelistedit_time));
|
|
||||||
numberPickers1[i] = (NumberPicker) childview.findViewById(R.id.timelistedit_edit1);
|
|
||||||
numberPickers2[i] = (NumberPicker) childview.findViewById(R.id.timelistedit_edit2);
|
|
||||||
addButtons[i] = (ImageView) childview.findViewById(R.id.timelistedit_add);
|
|
||||||
removeButtons[i] = (ImageView) childview.findViewById(R.id.timelistedit_remove);
|
|
||||||
|
|
||||||
final int fixedPos = i;
|
|
||||||
addButtons[i].setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
int seconds = secondFromMidnight(fixedPos);
|
|
||||||
addItem(fixedPos, seconds, 0, 0);
|
|
||||||
// for here for the rest of values
|
|
||||||
for (int i = fixedPos + 1; i < itemsCount(); i++) {
|
|
||||||
if (secondFromMidnight(i - 1) >= secondFromMidnight(i)) {
|
|
||||||
editItem(i, secondFromMidnight(i - 1) + ONEHOURINSECONDS, value1(i), value2(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (itemsCount() > 24 || secondFromMidnight(itemsCount() - 1) > 23 * ONEHOURINSECONDS)
|
|
||||||
removeItem(itemsCount() - 1);
|
|
||||||
callSave();
|
|
||||||
log();
|
|
||||||
fillView();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
removeButtons[i].setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
removeItem(fixedPos);
|
|
||||||
callSave();
|
|
||||||
log();
|
|
||||||
fillView();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
spinners[i].setOnItemSelectedListener(
|
|
||||||
new AdapterView.OnItemSelectedListener() {
|
|
||||||
@Override
|
|
||||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
|
||||||
int seconds = DateUtil.toSeconds(spinners[fixedPos].getSelectedItem().toString());
|
|
||||||
editItem(fixedPos, seconds, value1(fixedPos), value2(fixedPos));
|
|
||||||
log();
|
|
||||||
callSave();
|
|
||||||
fillView();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNothingSelected(AdapterView<?> parent) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
numberPickers1[i].setTextWatcher(new TextWatcher() {
|
|
||||||
@Override
|
|
||||||
public void afterTextChanged(Editable s) {
|
|
||||||
editItem(fixedPos, secondFromMidnight(fixedPos), SafeParse.stringToDouble(numberPickers1[fixedPos].getText()), value2(fixedPos));
|
|
||||||
callSave();
|
|
||||||
log();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void beforeTextChanged(CharSequence s, int start,
|
|
||||||
int count, int after) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTextChanged(CharSequence s, int start,
|
|
||||||
int before, int count) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
numberPickers2[i].setTextWatcher(new TextWatcher() {
|
|
||||||
@Override
|
|
||||||
public void afterTextChanged(Editable s) {
|
|
||||||
editItem(fixedPos, secondFromMidnight(fixedPos), value1(fixedPos), SafeParse.stringToDouble(numberPickers2[fixedPos].getText()));
|
|
||||||
callSave();
|
|
||||||
log();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void beforeTextChanged(CharSequence s, int start,
|
|
||||||
int count, int after) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTextChanged(CharSequence s, int start,
|
|
||||||
int before, int count) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
layout.addView(childview);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// last "plus" to append new interval
|
// last "plus" to append new interval
|
||||||
|
@ -199,13 +110,113 @@ public class TimeListEdit {
|
||||||
fillView();
|
fillView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void inflateRow(int i) {
|
||||||
|
|
||||||
|
LayoutInflater inflater = LayoutInflater.from(context);
|
||||||
|
View childview = intervals[i] = inflater.inflate(R.layout.timelistedit_element, layout, false);
|
||||||
|
spinners[i] = new SpinnerHelper(childview.findViewById(R.id.timelistedit_time));
|
||||||
|
numberPickers1[i] = (NumberPicker) childview.findViewById(R.id.timelistedit_edit1);
|
||||||
|
numberPickers2[i] = (NumberPicker) childview.findViewById(R.id.timelistedit_edit2);
|
||||||
|
addButtons[i] = (ImageView) childview.findViewById(R.id.timelistedit_add);
|
||||||
|
removeButtons[i] = (ImageView) childview.findViewById(R.id.timelistedit_remove);
|
||||||
|
|
||||||
|
final int fixedPos = i;
|
||||||
|
addButtons[i].setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
int seconds = secondFromMidnight(fixedPos);
|
||||||
|
addItem(fixedPos, seconds, 0, 0);
|
||||||
|
// for here for the rest of values
|
||||||
|
for (int i = fixedPos + 1; i < itemsCount(); i++) {
|
||||||
|
if (secondFromMidnight(i - 1) >= secondFromMidnight(i)) {
|
||||||
|
editItem(i, secondFromMidnight(i - 1) + ONEHOURINSECONDS, value1(i), value2(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (itemsCount() > 24 || secondFromMidnight(itemsCount() - 1) > 23 * ONEHOURINSECONDS)
|
||||||
|
removeItem(itemsCount() - 1);
|
||||||
|
callSave();
|
||||||
|
log();
|
||||||
|
fillView();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
removeButtons[i].setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
removeItem(fixedPos);
|
||||||
|
callSave();
|
||||||
|
log();
|
||||||
|
fillView();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
spinners[i].setOnItemSelectedListener(
|
||||||
|
new AdapterView.OnItemSelectedListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
int seconds = DateUtil.toSeconds(spinners[fixedPos].getSelectedItem().toString());
|
||||||
|
editItem(fixedPos, seconds, value1(fixedPos), value2(fixedPos));
|
||||||
|
log();
|
||||||
|
callSave();
|
||||||
|
fillView();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNothingSelected(AdapterView<?> parent) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
numberPickers1[i].setTextWatcher(new TextWatcher() {
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
editItem(fixedPos, secondFromMidnight(fixedPos), SafeParse.stringToDouble(numberPickers1[fixedPos].getText()), value2(fixedPos));
|
||||||
|
callSave();
|
||||||
|
log();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence s, int start,
|
||||||
|
int count, int after) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence s, int start,
|
||||||
|
int before, int count) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
numberPickers2[i].setTextWatcher(new TextWatcher() {
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
editItem(fixedPos, secondFromMidnight(fixedPos), value1(fixedPos), SafeParse.stringToDouble(numberPickers2[fixedPos].getText()));
|
||||||
|
callSave();
|
||||||
|
log();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence s, int start,
|
||||||
|
int count, int after) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence s, int start,
|
||||||
|
int before, int count) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
layout.addView(childview);
|
||||||
|
}
|
||||||
|
|
||||||
private void fillView() {
|
private void fillView() {
|
||||||
for (int i = 0; i < 24; i++) {
|
for (int i = 0; i < 24; i++) {
|
||||||
if (i < itemsCount()) {
|
if (i < itemsCount()) {
|
||||||
intervals[i].setVisibility(View.VISIBLE);
|
intervals[i].setVisibility(View.VISIBLE);
|
||||||
buildInterval(i);
|
buildInterval(i);
|
||||||
} else
|
} else if (i <= inflatedUntil){
|
||||||
intervals[i].setVisibility(View.GONE);
|
intervals[i].setVisibility(View.GONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(itemsCount() > 0 && secondFromMidnight(itemsCount() - 1) == 23 * ONEHOURINSECONDS)) {
|
if (!(itemsCount() > 0 && secondFromMidnight(itemsCount() - 1) == 23 * ONEHOURINSECONDS)) {
|
||||||
|
@ -339,6 +350,11 @@ public class TimeListEdit {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addItem(int index, int timeAsSeconds, double value1, double value2) {
|
private void addItem(int index, int timeAsSeconds, double value1, double value2) {
|
||||||
|
if(itemsCount()>inflatedUntil) {
|
||||||
|
layout.removeView(finalAdd);
|
||||||
|
inflateRow(++inflatedUntil);
|
||||||
|
layout.addView(finalAdd);
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
// shift data
|
// shift data
|
||||||
for (int i = data1.length(); i > index; i--) {
|
for (int i = data1.length(); i > index; i--) {
|
||||||
|
@ -371,4 +387,10 @@ public class TimeListEdit {
|
||||||
private void callSave() {
|
private void callSave() {
|
||||||
if (save != null) save.run();
|
if (save != null) save.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateLabel(String txt){
|
||||||
|
this.label = txt;
|
||||||
|
if(textlabel!=null)
|
||||||
|
textlabel.setText(txt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -408,6 +408,41 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/careportal_newnstreatment_reuse_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:width="120dp"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:text=""
|
||||||
|
android:textAppearance="@android:style/TextAppearance.Material.Small"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/careportal_newnstreatment_reusebutton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/reuse"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:gravity="left"
|
||||||
|
android:minWidth="45dp"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:text=" "
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/careportal_newnstreatment_percentage_layout"
|
android:id="@+id/careportal_newnstreatment_percentage_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/linearBlockBackground"
|
android:background="@color/linearBlockBackground"
|
||||||
|
android:layout_marginLeft="10px"
|
||||||
android:text="@string/units"
|
android:text="@string/units"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
|
@ -44,15 +45,57 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/linearBlockBackground"
|
android:background="@color/linearBlockBackground"
|
||||||
|
android:layout_marginLeft="10px"
|
||||||
android:text="@string/dia"
|
android:text="@string/dia"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||||
|
|
||||||
<info.nightscout.utils.NumberPicker
|
|
||||||
android:id="@+id/localprofile_dia"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="130dp"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_height="40dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="10dp" />
|
android:gravity="center_horizontal"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="5dp"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall">
|
||||||
|
|
||||||
|
<!-- dummy to align with TimeListEdits added dynamically -->
|
||||||
|
<Spinner
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:minWidth="80dp"
|
||||||
|
android:visibility="invisible"/>
|
||||||
|
|
||||||
|
<info.nightscout.utils.NumberPicker
|
||||||
|
android:id="@+id/localprofile_dia"
|
||||||
|
android:layout_width="130dp"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:layout_marginRight="5dp"
|
||||||
|
android:layout_marginBottom="10dp"/>
|
||||||
|
|
||||||
|
<!-- dummy to align with TimeListEdits added dynamically -->
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/timelistedit_add"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginLeft="15dp"
|
||||||
|
android:src="@drawable/add"
|
||||||
|
android:visibility="invisible"/>
|
||||||
|
|
||||||
|
<!-- dummy to align with TimeListEdits added dynamically -->
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/timelistedit_remove"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginLeft="15dp"
|
||||||
|
android:src="@drawable/remove"
|
||||||
|
android:visibility="invisible"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/localprofile_ic"
|
android:id="@+id/localprofile_ic"
|
||||||
|
|
|
@ -742,5 +742,8 @@
|
||||||
<string name="gettingtempbasalstatus">Getting temporary basal status</string>
|
<string name="gettingtempbasalstatus">Getting temporary basal status</string>
|
||||||
<string name="gettingpumpsettings">Gettings pump settings</string>
|
<string name="gettingpumpsettings">Gettings pump settings</string>
|
||||||
<string name="gettingpumptime">Getting pump time</string>
|
<string name="gettingpumptime">Getting pump time</string>
|
||||||
|
<string name="reuse">reuse</string>
|
||||||
|
<string name="wearcontrol_title">Controls from Watch</string>
|
||||||
|
<string name="wearcontrol_summary">Set Temp-Targets and enter Treatments from the watch.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,12 @@
|
||||||
android:key="wearplugin"
|
android:key="wearplugin"
|
||||||
android:title="@string/wear_settings">
|
android:title="@string/wear_settings">
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="wearcontrol"
|
||||||
|
android:title="@string/wearcontrol_title"
|
||||||
|
android:summary="@string/wearcontrol_summary"/>
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="true"
|
android:defaultValue="true"
|
||||||
android:key="wear_detailediob"
|
android:key="wear_detailediob"
|
||||||
|
|
|
@ -42,33 +42,6 @@ android {
|
||||||
|
|
||||||
publishNonDefault true
|
publishNonDefault true
|
||||||
|
|
||||||
productFlavors {
|
|
||||||
full {
|
|
||||||
applicationId = "info.nightscout.androidaps"
|
|
||||||
resValue "string", "label_xdrip", "AAPS"
|
|
||||||
resValue "string", "label_xdrip_large", "AAPS(Large)"
|
|
||||||
resValue "string", "label_xdrip_big_chart", "AAPS(BigChart)"
|
|
||||||
resValue "string", "label_xdrip_no_chart", "AAPS(NoChart)"
|
|
||||||
resValue "string", "label_xdrip_circle", "AAPS(Circle)"
|
|
||||||
resValue "string", "label_xdrip_activity", "AAPS Prefs."
|
|
||||||
resValue "string", "app_settings", "AAPS Settings"
|
|
||||||
buildConfigField "boolean", "WEAR_CONTROL", "true"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
restricted {
|
|
||||||
applicationId = "info.nightscout.androidaps"
|
|
||||||
resValue "string", "label_xdrip", "AAPS"
|
|
||||||
resValue "string", "label_xdrip_large", "AAPS(Large)"
|
|
||||||
resValue "string", "label_xdrip_big_chart", "AAPS(BigChart)"
|
|
||||||
resValue "string", "label_xdrip_no_chart", "AAPS(NoChart)"
|
|
||||||
resValue "string", "label_xdrip_circle", "AAPS(Circle)"
|
|
||||||
resValue "string", "label_xdrip_activity", "AAPS Prefs."
|
|
||||||
resValue "string", "app_settings", "AAPS Settings"
|
|
||||||
buildConfigField "boolean", "WEAR_CONTROL", "false"
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package info.nightscout.androidaps.data;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
@ -43,6 +44,7 @@ public class ListenerService extends WearableListenerService implements GoogleAp
|
||||||
|
|
||||||
private static final String OPEN_SETTINGS = "/openwearsettings";
|
private static final String OPEN_SETTINGS = "/openwearsettings";
|
||||||
private static final String NEW_STATUS_PATH = "/sendstatustowear";
|
private static final String NEW_STATUS_PATH = "/sendstatustowear";
|
||||||
|
private static final String NEW_PREFERENCES_PATH = "/sendpreferencestowear";
|
||||||
public static final String BASAL_DATA_PATH = "/nightscout_watch_basal";
|
public static final String BASAL_DATA_PATH = "/nightscout_watch_basal";
|
||||||
public static final String BOLUS_PROGRESS_PATH = "/nightscout_watch_bolusprogress";
|
public static final String BOLUS_PROGRESS_PATH = "/nightscout_watch_bolusprogress";
|
||||||
public static final String ACTION_CONFIRMATION_REQUEST_PATH = "/nightscout_watch_actionconfirmationrequest";
|
public static final String ACTION_CONFIRMATION_REQUEST_PATH = "/nightscout_watch_actionconfirmationrequest";
|
||||||
|
@ -282,6 +284,15 @@ public class ListenerService extends WearableListenerService implements GoogleAp
|
||||||
messageIntent.setAction(Intent.ACTION_SEND);
|
messageIntent.setAction(Intent.ACTION_SEND);
|
||||||
messageIntent.putExtra("basals", dataMap.toBundle());
|
messageIntent.putExtra("basals", dataMap.toBundle());
|
||||||
LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent);
|
LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent);
|
||||||
|
} else if (path.equals(NEW_PREFERENCES_PATH)){
|
||||||
|
dataMap = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
|
||||||
|
if(dataMap.containsKey("wearcontrol")) {
|
||||||
|
boolean wearcontrol = dataMap.getBoolean("wearcontrol", false);
|
||||||
|
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
SharedPreferences.Editor editor = sharedPreferences.edit();
|
||||||
|
editor.putBoolean("wearcontrol", wearcontrol);
|
||||||
|
editor.commit();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
dataMap = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
|
dataMap = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
|
||||||
Intent messageIntent = new Intent();
|
Intent messageIntent = new Intent();
|
||||||
|
|
|
@ -32,8 +32,9 @@ public class MainMenuActivity extends MenuListActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String[] getElements() {
|
protected String[] getElements() {
|
||||||
|
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
|
||||||
if(!BuildConfig.WEAR_CONTROL){
|
if(!sharedPreferences.getBoolean("wearcontrol", false)){
|
||||||
return new String[] {
|
return new String[] {
|
||||||
"Settings",
|
"Settings",
|
||||||
"Re-Sync"};
|
"Re-Sync"};
|
||||||
|
|
|
@ -37,7 +37,13 @@
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
|
||||||
|
<string name="label_xdrip">AAPS</string>
|
||||||
|
<string name="label_xdrip_large">AAPS(Large)</string>
|
||||||
|
<string name="label_xdrip_big_chart">AAPS(BigChart)</string>
|
||||||
|
<string name="label_xdrip_no_chart">AAPS(NoChart)</string>
|
||||||
|
<string name="label_xdrip_circle">AAPS(Circle)</string>
|
||||||
|
<string name="label_xdrip_activity">AAPS</string>
|
||||||
|
<string name="app_settings">AAPS Settings</string>
|
||||||
|
|
||||||
<string name="title_activity_bolus">BolusActivity</string>
|
<string name="title_activity_bolus">BolusActivity</string>
|
||||||
<string name="hello_round">Hello Round World!</string>
|
<string name="hello_round">Hello Round World!</string>
|
||||||
|
|
Loading…
Reference in a new issue