diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctions.java b/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctions.java index 63da02e2bd..40e4234b55 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctions.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/configBuilder/ProfileFunctions.java @@ -170,8 +170,8 @@ public class ProfileFunctions { return profileSwitch; } - public static void doProfileSwitch(final ProfileStore profileStore, final String profileName, final int duration, final int percentage, final int timeshift) { - ProfileSwitch profileSwitch = prepareProfileSwitch(profileStore, profileName, duration, percentage, timeshift, System.currentTimeMillis()); + public static void doProfileSwitch(final ProfileStore profileStore, final String profileName, final int duration, final int percentage, final int timeshift, final long date) { + ProfileSwitch profileSwitch = prepareProfileSwitch(profileStore, profileName, duration, percentage, timeshift, date); TreatmentsPlugin.getPlugin().addToHistoryProfileSwitch(profileSwitch); if (percentage == 90 && duration == 10) SP.putBoolean(R.string.key_objectiveuseprofileswitch, true); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt index dfc06e6156..7ee21eac33 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/actions/ActionsFragment.kt @@ -23,6 +23,7 @@ import info.nightscout.androidaps.plugins.general.actions.dialogs.NewExtendedBol import info.nightscout.androidaps.plugins.general.actions.dialogs.NewTempBasalDialog import info.nightscout.androidaps.plugins.general.careportal.CareportalFragment import info.nightscout.androidaps.plugins.general.careportal.Dialogs.NewNSTreatmentDialog +import info.nightscout.androidaps.plugins.general.overview.dialogs.ProfileSwitchDialog import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.utils.* @@ -47,11 +48,7 @@ class ActionsFragment : Fragment() { super.onViewCreated(view, savedInstanceState) actions_profileswitch.setOnClickListener { - val newDialog = NewNSTreatmentDialog() - val profileSwitch = CareportalFragment.PROFILESWITCH - profileSwitch.executeProfileSwitch = true - newDialog.setOptions(profileSwitch, R.string.careportal_profileswitch) - fragmentManager?.let { newDialog.show(it, "NewNSTreatmentDialog") } + fragmentManager?.let { ProfileSwitchDialog().show(it, "Actions") } } actions_temptarget.setOnClickListener { val newTTDialog = NewNSTreatmentDialog() diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitch.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitch.java index 8a4762bd08..7171368124 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitch.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionProfileSwitch.java @@ -21,6 +21,7 @@ import info.nightscout.androidaps.plugins.general.automation.elements.InputProfi import info.nightscout.androidaps.plugins.general.automation.elements.LabelWithElement; import info.nightscout.androidaps.plugins.general.automation.elements.LayoutBuilder; import info.nightscout.androidaps.queue.Callback; +import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.JsonHelper; public class ActionProfileSwitch extends Action { @@ -66,7 +67,7 @@ public class ActionProfileSwitch extends Action { return; } - ProfileFunctions.doProfileSwitch(profileStore, profileName, 0, 100, 0); + ProfileFunctions.doProfileSwitch(profileStore, profileName, 0, 100, 0, DateUtil.now()); if (callback != null) callback.result(new PumpEnactResult().success(true).comment(R.string.ok)).run(); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/CareportalFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/CareportalFragment.java index 42ae7fd6fc..ceb51e366b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/CareportalFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/CareportalFragment.java @@ -63,7 +63,6 @@ public class CareportalFragment extends Fragment implements View.OnClickListener public static final OptionsToShow TEMPBASALSTART = new OptionsToShow(R.id.careportal_tempbasalstart, R.string.careportal_tempbasalstart).date().bg().duration().percent().absolute(); public static final OptionsToShow TEMPBASALEND = new OptionsToShow(R.id.careportal_tempbasalend, R.string.careportal_tempbasalend).date().bg(); public static final OptionsToShow PROFILESWITCH = new OptionsToShow(R.id.careportal_profileswitch, R.string.careportal_profileswitch).date().duration().profile(); - public static final OptionsToShow PROFILESWITCHDIRECT = new OptionsToShow(R.id.careportal_profileswitch, R.string.careportal_profileswitch).duration().profile(); public static final OptionsToShow OPENAPSOFFLINE = new OptionsToShow(R.id.careportal_openapsoffline, R.string.careportal_openapsoffline).date().duration(); public static final OptionsToShow TEMPTARGET = new OptionsToShow(R.id.careportal_temporarytarget, R.string.careportal_temporarytarget).date().duration().tempTarget(); @@ -180,7 +179,6 @@ public class CareportalFragment extends Fragment implements View.OnClickListener newDialog.setOptions(NOTE, R.string.careportal_note); break; case R.id.careportal_profileswitch: - PROFILESWITCH.executeProfileSwitch = false; newDialog.setOptions(PROFILESWITCH, R.string.careportal_profileswitch); break; case R.id.careportal_pumpsitechange: diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/Dialogs/NewNSTreatmentDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/Dialogs/NewNSTreatmentDialog.java index 64b7b05987..23082e1f8e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/Dialogs/NewNSTreatmentDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/Dialogs/NewNSTreatmentDialog.java @@ -672,7 +672,7 @@ public class NewNSTreatmentDialog extends AppCompatDialogFragment implements Vie ret += "\n"; } if (data.has("created_at")) { - ret += MainApp.gs(R.string.careportal_newnstreatment_eventtime_label); + ret += MainApp.gs(R.string.event_time_label); ret += ": "; ret += eventTime.toLocaleString(); ret += "\n"; @@ -703,11 +703,7 @@ public class NewNSTreatmentDialog extends AppCompatDialogFragment implements Vie void createNSTreatment(JSONObject data) { - if (options.executeProfileSwitch) { - if (data.has("profile")) { - ProfileFunctions.doProfileSwitch(profileStore, JsonHelper.safeGetString(data, "profile"), JsonHelper.safeGetInt(data, "duration"), JsonHelper.safeGetInt(data, "percentage"), JsonHelper.safeGetInt(data, "timeshift")); - } - } else if (options.executeTempTarget) { + if (options.executeTempTarget) { final int duration = JsonHelper.safeGetInt(data, "duration"); final double targetBottom = JsonHelper.safeGetDouble(data, "targetBottom"); final double targetTop = JsonHelper.safeGetDouble(data, "targetTop"); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/OptionsToShow.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/OptionsToShow.java index 08f65a967f..46f3437fdf 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/OptionsToShow.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/OptionsToShow.java @@ -20,7 +20,6 @@ public class OptionsToShow { public boolean tempTarget; // perform direct actions - public boolean executeProfileSwitch = false; public boolean executeTempTarget = false; public OptionsToShow(int eventType, int eventName) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java index f3b718743e..daa68df5a0 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/OverviewFragment.java @@ -93,6 +93,7 @@ import info.nightscout.androidaps.plugins.general.overview.dialogs.CalibrationDi import info.nightscout.androidaps.plugins.general.overview.dialogs.NewCarbsDialog; import info.nightscout.androidaps.plugins.general.overview.dialogs.NewInsulinDialog; import info.nightscout.androidaps.plugins.general.overview.dialogs.NewTreatmentDialog; +import info.nightscout.androidaps.plugins.general.overview.dialogs.ProfileSwitchDialog; import info.nightscout.androidaps.plugins.general.overview.dialogs.WizardDialog; import info.nightscout.androidaps.plugins.general.overview.graphData.GraphData; import info.nightscout.androidaps.plugins.general.wear.ActionStringHandler; @@ -744,11 +745,9 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, updateGUI("suspendmenu"); return true; } else if (item.getTitle().equals(MainApp.gs(R.string.careportal_profileswitch))) { - NewNSTreatmentDialog newDialog = new NewNSTreatmentDialog(); - final OptionsToShow profileswitch = CareportalFragment.PROFILESWITCHDIRECT; - profileswitch.executeProfileSwitch = true; - newDialog.setOptions(profileswitch, R.string.careportal_profileswitch); - newDialog.show(getFragmentManager(), "NewNSTreatmentDialog"); + FragmentManager manager = getFragmentManager(); + if (manager != null) + new ProfileSwitchDialog().show(manager, "Overview"); } else if (item.getTitle().equals(MainApp.gs(R.string.danar_viewprofile))) { Bundle args = new Bundle(); args.putLong("time", DateUtil.now()); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/DialogFragmentWithDate.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/DialogFragmentWithDate.kt new file mode 100644 index 0000000000..eb36a6e3fd --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/DialogFragmentWithDate.kt @@ -0,0 +1,115 @@ +package info.nightscout.androidaps.plugins.general.overview.dialogs + +import android.app.DatePickerDialog +import android.app.TimePickerDialog +import android.os.Bundle +import android.text.format.DateFormat +import android.view.* +import androidx.fragment.app.DialogFragment +import info.nightscout.androidaps.utils.DateUtil +import kotlinx.android.synthetic.main.datetime.* +import kotlinx.android.synthetic.main.okcancel.* +import org.slf4j.LoggerFactory +import java.util.* + +abstract class DialogFragmentWithDate : DialogFragment() { + private val log = LoggerFactory.getLogger(DialogFragmentWithDate::class.java) + + var eventTime = DateUtil.now() + var eventTimeChanged = false + + //one shot guards + private var okClicked: Boolean = false + + companion object { + private var seconds: Int = (Math.random() * 59.0).toInt() + } + + override fun onStart() { + super.onStart() + dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + } + + override fun onSaveInstanceState(savedInstanceState: Bundle) { + super.onSaveInstanceState(savedInstanceState) + savedInstanceState.putLong("eventTime", eventTime) + savedInstanceState.putBoolean("eventTimeChanged", eventTimeChanged) + } + + fun onCreateView() { + dialog?.window?.requestFeature(Window.FEATURE_NO_TITLE) + dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) + isCancelable = true + dialog?.setCanceledOnTouchOutside(false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + eventTime = savedInstanceState?.getLong("eventTime") ?: DateUtil.now() + eventTimeChanged = savedInstanceState?.getBoolean("eventTimeChanged") ?: false + overview_eventdate.text = DateUtil.dateString(eventTime) + overview_eventtime.text = DateUtil.timeString(eventTime) + + // create an OnDateSetListener + val dateSetListener = DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth -> + val cal = Calendar.getInstance() + cal.timeInMillis = eventTime + cal.set(Calendar.YEAR, year) + cal.set(Calendar.MONTH, monthOfYear) + cal.set(Calendar.DAY_OF_MONTH, dayOfMonth) + eventTime = cal.timeInMillis + eventTimeChanged = true + overview_eventdate.text = DateUtil.dateString(eventTime) + } + + overview_eventdate.setOnClickListener { + context?.let { + val cal = Calendar.getInstance() + cal.timeInMillis = eventTime + DatePickerDialog(it, dateSetListener, + cal.get(Calendar.YEAR), + cal.get(Calendar.MONTH), + cal.get(Calendar.DAY_OF_MONTH) + ).show() + } + } + + // create an OnTimeSetListener + val timeSetListener = TimePickerDialog.OnTimeSetListener { _, hour, minute -> + val cal = Calendar.getInstance() + cal.timeInMillis = eventTime + cal.set(Calendar.HOUR_OF_DAY, hour) + cal.set(Calendar.MINUTE, minute) + cal.set(Calendar.SECOND, seconds++) // randomize seconds to prevent creating record of the same time, if user choose time manually + eventTime = cal.timeInMillis + eventTimeChanged = true + overview_eventtime.text = DateUtil.timeString(eventTime) + } + + overview_eventtime.setOnClickListener { + context?.let { + val cal = Calendar.getInstance() + cal.timeInMillis = eventTime + TimePickerDialog(it, timeSetListener, + cal.get(Calendar.HOUR_OF_DAY), + cal.get(Calendar.MINUTE), + DateFormat.is24HourFormat(context) + ).show() + } + } + + ok.setOnClickListener { + synchronized(okClicked) { + if (okClicked) { + log.debug("guarding: ok already clicked") + } else { + okClicked = true + submit() + } + dismiss() + } + } + cancel.setOnClickListener { dismiss() } + } + + abstract fun submit() +} \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/ProfileSwitchDialog.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/ProfileSwitchDialog.kt new file mode 100644 index 0000000000..2a399422c8 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/overview/dialogs/ProfileSwitchDialog.kt @@ -0,0 +1,87 @@ +package info.nightscout.androidaps.plugins.general.overview.dialogs + +import android.os.Bundle +import android.view.* +import android.widget.ArrayAdapter +import com.google.common.base.Joiner +import info.nightscout.androidaps.Constants +import info.nightscout.androidaps.MainApp +import info.nightscout.androidaps.R +import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin +import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions +import info.nightscout.androidaps.utils.DateUtil +import info.nightscout.androidaps.utils.HtmlHelper +import info.nightscout.androidaps.utils.OKDialog +import kotlinx.android.synthetic.main.okcancel.* +import kotlinx.android.synthetic.main.overview_profileswitch_dialog.* +import org.slf4j.LoggerFactory +import java.text.DecimalFormat +import java.util.* + +class ProfileSwitchDialog : DialogFragmentWithDate() { + + override fun onSaveInstanceState(savedInstanceState: Bundle) { + super.onSaveInstanceState(savedInstanceState) + savedInstanceState.putDouble("overview_profileswitch_duration", overview_profileswitch_duration.value) + savedInstanceState.putDouble("overview_profileswitch_percentage", overview_profileswitch_percentage.value) + savedInstanceState.putDouble("overview_profileswitch_timeshift", overview_profileswitch_timeshift.value) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + onCreateView() + return inflater.inflate(R.layout.overview_profileswitch_dialog, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + overview_profileswitch_duration.setParams(savedInstanceState?.getDouble("overview_profileswitch_duration") + ?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, ok) + overview_profileswitch_percentage.setParams(savedInstanceState?.getDouble("overview_profileswitch_percentage") + ?: 100.0, Constants.CPP_MIN_PERCENTAGE.toDouble(), Constants.CPP_MAX_PERCENTAGE.toDouble(), 1.0, DecimalFormat("0"), false, ok) + overview_profileswitch_timeshift.setParams(savedInstanceState?.getDouble("overview_profileswitch_timeshift") + ?: 0.0, Constants.CPP_MIN_TIMESHIFT.toDouble(), Constants.CPP_MAX_TIMESHIFT.toDouble(), 1.0, DecimalFormat("0"), false, ok) + + // profile + context?.let { context -> + val profileStore = ConfigBuilderPlugin.getPlugin().activeProfileInterface?.profile + ?: return + val profileList = profileStore.getProfileList() + val adapter = ArrayAdapter(context, R.layout.spinner_centered, profileList) + overview_profileswitch_profile.adapter = adapter + // set selected to actual profile + for (p in profileList.indices) + if (profileList[p] == ProfileFunctions.getInstance().getProfileName(false)) + overview_profileswitch_profile.setSelection(p) + } ?: return + } + + override fun submit() { + val profileStore = ConfigBuilderPlugin.getPlugin().activeProfileInterface?.profile ?: return + + val actions: LinkedList = LinkedList() + val duration = overview_profileswitch_duration.value + if (duration > 0) + actions.add(MainApp.gs(R.string.duration) + ": " + MainApp.gs(R.string.format_hours, duration)) + val profile = overview_profileswitch_profile.selectedItem.toString() + actions.add(MainApp.gs(R.string.profile).toString() + ": " + profile) + val percent = overview_profileswitch_percentage.value.toInt() + if (percent != 100) + actions.add(MainApp.gs(R.string.percent) + ": " + percent + "%") + val timeShift = overview_profileswitch_timeshift.value.toInt() + if (timeShift != 0) + actions.add(MainApp.gs(R.string.careportal_newnstreatment_timeshift_label) + ": " + MainApp.gs(R.string.format_hours, timeShift.toDouble())) + val notes = overview_profileswitch_notes.text.toString() + if (notes.isNotEmpty()) + actions.add(MainApp.gs(R.string.careportal_newnstreatment_notes_label) + ": " + notes) + if (eventTimeChanged) + actions.add(MainApp.gs(R.string.time) + ": " + DateUtil.dateAndTimeString(eventTime)) + + activity?.let { activity -> + OKDialog.showConfirmation(activity, HtmlHelper.fromHtml(Joiner.on("
").join(actions))) { + ProfileFunctions.doProfileSwitch(profileStore, profile, duration.toInt(), percent, timeShift, eventTime) + } + } + } +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt index 1d449f2ba1..87f7d832da 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/smsCommunicator/SmsCommunicatorPlugin.kt @@ -459,7 +459,7 @@ object SmsCommunicatorPlugin : PluginBase(PluginDescription() val finalPercentage = percentage messageToConfirm = AuthRequest(this, receivedSms, reply, passCode, object : SmsAction(list[pindex - 1] as String, finalPercentage) { override fun run() { - ProfileFunctions.doProfileSwitch(store, list[pindex - 1] as String, 0, finalPercentage, 0) + ProfileFunctions.doProfileSwitch(store, list[pindex - 1] as String, 0, finalPercentage, 0, DateUtil.now()) sendSMS(Sms(receivedSms.phoneNumber, R.string.profileswitchcreated)) } }) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt index 777afc7331..2ce470063e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/profile/local/LocalProfileFragment.kt @@ -16,8 +16,7 @@ import info.nightscout.androidaps.R import info.nightscout.androidaps.data.Profile import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin -import info.nightscout.androidaps.plugins.general.careportal.CareportalFragment -import info.nightscout.androidaps.plugins.general.careportal.Dialogs.NewNSTreatmentDialog +import info.nightscout.androidaps.plugins.general.overview.dialogs.ProfileSwitchDialog import info.nightscout.androidaps.plugins.insulin.InsulinOrefBasePlugin.MIN_DIA import info.nightscout.androidaps.plugins.profile.local.events.EventLocalProfileChanged import info.nightscout.androidaps.utils.* @@ -170,11 +169,7 @@ class LocalProfileFragment : Fragment() { localprofile_profileswitch.setOnClickListener { // TODO: select in dialog LocalProfilePlugin.currentProfileIndex - val newDialog = NewNSTreatmentDialog() - val profileSwitch = CareportalFragment.PROFILESWITCHDIRECT - profileSwitch.executeProfileSwitch = true - newDialog.setOptions(profileSwitch, R.string.careportal_profileswitch) - fragmentManager?.let { newDialog.show(it, "NewNSTreatmentDialog") } + fragmentManager?.let { ProfileSwitchDialog().show(it, "NewNSTreatmentDialog") } } localprofile_reset.setOnClickListener { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfileFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfileFragment.kt index 7b377c9078..ddf806cb2a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfileFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfileFragment.kt @@ -12,6 +12,7 @@ import info.nightscout.androidaps.R import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions import info.nightscout.androidaps.plugins.profile.ns.events.EventNSProfileUpdateGUI +import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.DecimalFormatter import info.nightscout.androidaps.utils.FabricPrivacy import info.nightscout.androidaps.utils.OKDialog @@ -42,7 +43,7 @@ class NSProfileFragment : Fragment() { OKDialog.showConfirmation(activity, MainApp.gs(R.string.activate_profile) + ": " + name + " ?" ) { - ProfileFunctions.doProfileSwitch(store, name, 0, 100, 0) + ProfileFunctions.doProfileSwitch(store, name, 0, 100, 0, DateUtil.now()) } } } diff --git a/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.java b/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.java index 45ab985fce..9277bf8718 100644 --- a/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.java +++ b/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.java @@ -30,6 +30,7 @@ import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefs; import info.nightscout.androidaps.plugins.general.nsclient.NSClientPlugin; import info.nightscout.androidaps.plugins.general.nsclient.events.EventNSClientStatus; import info.nightscout.androidaps.plugins.general.nsclient.services.NSClientService; +import info.nightscout.androidaps.plugins.general.overview.dialogs.ProfileSwitchDialog; import info.nightscout.androidaps.plugins.profile.local.LocalProfileFragment; import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin; import info.nightscout.androidaps.plugins.profile.ns.NSProfileFragment; @@ -304,11 +305,7 @@ public class SWDefinition { .add(new SWButton() .text(R.string.doprofileswitch) .action(() -> { - NewNSTreatmentDialog newDialog = new NewNSTreatmentDialog(); - final OptionsToShow profileSwitch = CareportalFragment.PROFILESWITCHDIRECT; - profileSwitch.executeProfileSwitch = true; - newDialog.setOptions(profileSwitch, R.string.careportal_profileswitch); - newDialog.show(getActivity().getSupportFragmentManager(), "NewNSTreatmentDialog"); + new ProfileSwitchDialog().show(getActivity().getSupportFragmentManager(), "SetupWizard"); })) .validator(() -> ProfileFunctions.getInstance().getProfile() != null) .visibility(() -> ProfileFunctions.getInstance().getProfile() == null); diff --git a/app/src/main/java/info/nightscout/androidaps/utils/OKDialog.java b/app/src/main/java/info/nightscout/androidaps/utils/OKDialog.java index cee3b7ea08..2cfbb9ee95 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/OKDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/utils/OKDialog.java @@ -5,9 +5,10 @@ import android.content.Context; import android.content.DialogInterface; import android.os.Handler; import android.os.SystemClock; +import android.text.Spanned; + import androidx.appcompat.app.AlertDialog; import androidx.appcompat.view.ContextThemeWrapper; -import android.text.Spanned; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,7 +49,7 @@ public class OKDialog { return mainHandler.post(theRunnable); } - public static void show(final Activity activity, String title, Spanned message, final Runnable runnable) { + public static void show(final Activity activity, String title, Spanned message, final Runnable runnable) { try { AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.AppTheme)); builder.setTitle(title); @@ -69,23 +70,18 @@ public class OKDialog { } } - public static void showConfirmation(final Activity activity, String message, final Runnable runnable) { - AlertDialog alertDialog = new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.AppTheme)) - .setMessage(message) - .setPositiveButton(android.R.string.ok, (dialog, which) -> { - dialog.dismiss(); - if (runnable != null) { - SystemClock.sleep(100); - activity.runOnUiThread(runnable); - } - }) - .setNegativeButton(android.R.string.cancel, null) - .show(); + public static void showConfirmation(final Activity activity, String message, final Runnable ok) { + showConfirmation(activity, message, ok, null); } - public static void showConfirmation(final Activity activity, String message, final Runnable ok, final Runnable cancel) { - AlertDialog alertDialog = new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.AppTheme)) + public static void showConfirmation(final Activity activity, Spanned message, final Runnable ok) { + showConfirmation(activity, message, ok, null); + } + + public static void showConfirmation(final Activity activity, Spanned message, final Runnable ok, final Runnable cancel) { + new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.AppTheme)) .setMessage(message) + .setTitle(MainApp.gs(R.string.confirmation)) .setPositiveButton(android.R.string.ok, (dialog, which) -> { dialog.dismiss(); if (ok != null) { @@ -93,7 +89,29 @@ public class OKDialog { activity.runOnUiThread(ok); } }) - .setNegativeButton(android.R.string.cancel, (dialog, which) -> { + .setNegativeButton(android.R.string.cancel, (dialog, which) -> { + dialog.dismiss(); + if (cancel != null) { + SystemClock.sleep(100); + activity.runOnUiThread(cancel); + } + }) + .setNegativeButton(android.R.string.cancel, null) + .show(); + } + + public static void showConfirmation(final Activity activity, String message, final Runnable ok, final Runnable cancel) { + new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.AppTheme)) + .setMessage(message) + .setTitle(MainApp.gs(R.string.confirmation)) + .setPositiveButton(android.R.string.ok, (dialog, which) -> { + dialog.dismiss(); + if (ok != null) { + SystemClock.sleep(100); + activity.runOnUiThread(ok); + } + }) + .setNegativeButton(android.R.string.cancel, (dialog, which) -> { dialog.dismiss(); if (cancel != null) { SystemClock.sleep(100); diff --git a/app/src/main/res/layout/careportal_newnstreatment_dialog.xml b/app/src/main/res/layout/careportal_newnstreatment_dialog.xml index fc0fa1ea49..4251efd3a2 100644 --- a/app/src/main/res/layout/careportal_newnstreatment_dialog.xml +++ b/app/src/main/res/layout/careportal_newnstreatment_dialog.xml @@ -544,7 +544,7 @@ android:layout_gravity="center_horizontal" android:width="120dp" android:padding="10dp" - android:text="@string/careportal_newnstreatment_eventtime_label" + android:text="@string/event_time_label" android:textAppearance="@android:style/TextAppearance.Material.Small" android:textStyle="bold" /> diff --git a/app/src/main/res/layout/datetime.xml b/app/src/main/res/layout/datetime.xml new file mode 100644 index 0000000000..043c7de761 --- /dev/null +++ b/app/src/main/res/layout/datetime.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/overview_profileswitch_dialog.xml b/app/src/main/res/layout/overview_profileswitch_dialog.xml new file mode 100644 index 0000000000..3d9cc76aed --- /dev/null +++ b/app/src/main/res/layout/overview_profileswitch_dialog.xml @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +