From cbfb8a6a0fa454feff368cbd326b623a47b7782e Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 21 Dec 2019 23:17:20 +0100 Subject: [PATCH] Automation dialogs refactor --- .../androidaps/dialogs/CalibrationDialog.kt | 3 +- .../androidaps/dialogs/CarbsDialog.kt | 3 +- .../androidaps/dialogs/CareDialog.kt | 3 +- .../dialogs/DialogFragmentWithDate.kt | 6 +- .../androidaps/dialogs/ExtendedBolusDialog.kt | 3 +- .../androidaps/dialogs/FillDialog.kt | 3 +- .../androidaps/dialogs/InsulinDialog.kt | 6 +- .../androidaps/dialogs/ProfileSwitchDialog.kt | 6 +- .../androidaps/dialogs/TempBasalDialog.kt | 5 +- .../androidaps/dialogs/TempTargetDialog.kt | 3 +- .../androidaps/dialogs/TreatmentDialog.kt | 6 +- .../actions/ActionStartTempTarget.java | 2 +- .../automation/dialogs/ActionListAdapter.kt | 3 +- .../automation/dialogs/ChooseActionDialog.kt | 36 ++-- .../automation/dialogs/ChooseTriggerDialog.kt | 33 +-- .../automation/dialogs/EditActionDialog.kt | 27 +-- .../automation/dialogs/EditEventDialog.kt | 79 +++---- .../automation/dialogs/EditTriggerDialog.kt | 28 +-- .../res/drawable/ic_action_orange_48dp.xml | 5 + .../res/drawable/ic_trigger_green_48dp.xml | 5 + .../res/layout/automation_action_item.xml | 11 +- .../res/layout/automation_dialog_action.xml | 43 +++- .../automation_dialog_choose_action.xml | 46 +++- .../automation_dialog_choose_trigger.xml | 39 +++- .../layout/automation_dialog_edit_trigger.xml | 42 +++- .../res/layout/automation_dialog_event.xml | 201 +++++++++++------- .../main/res/layout/dialog_calibration.xml | 2 +- app/src/main/res/values/strings.xml | 7 +- 28 files changed, 399 insertions(+), 257 deletions(-) create mode 100644 app/src/main/res/drawable/ic_action_orange_48dp.xml create mode 100644 app/src/main/res/drawable/ic_trigger_green_48dp.xml diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt index 7989370b6a..f3a5c636ae 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CalibrationDialog.kt @@ -47,7 +47,7 @@ class CalibrationDialog : DialogFragmentWithDate() { overview_calibration_units.text = if (units == Constants.MMOL) MainApp.gs(R.string.mmol) else MainApp.gs(R.string.mgdl) } - override fun submit() { + override fun submit() :Boolean { val units = ProfileFunctions.getSystemUnits() val unitLabel = if (units == Constants.MMOL) MainApp.gs(R.string.mmol) else MainApp.gs(R.string.mgdl) val actions: LinkedList = LinkedList() @@ -62,5 +62,6 @@ class CalibrationDialog : DialogFragmentWithDate() { } } else OKDialog.show(activity, "", MainApp.gs(R.string.no_action_selected), null) + return true } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt index 28e17ba47d..f4ba601498 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CarbsDialog.kt @@ -131,7 +131,7 @@ class CarbsDialog : DialogFragmentWithDate() { return if (value > 0) "+$value" else value.toString() } - override fun submit() { + override fun submit(): Boolean { val carbs = overview_carbs_carbs.value.toInt() val carbsAfterConstraints = MainApp.getConstraintChecker().applyCarbsConstraints(Constraint(carbs)).value() val units = ProfileFunctions.getSystemUnits() @@ -213,5 +213,6 @@ class CarbsDialog : DialogFragmentWithDate() { } } else OKDialog.show(activity, "", MainApp.gs(R.string.no_action_selected), null) + return true } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt index 0bf20d9bd0..db3249649a 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/CareDialog.kt @@ -100,7 +100,7 @@ class CareDialog : DialogFragmentWithDate() { ?: bg, 2.0, 500.0, 1.0, DecimalFormat("0"), false, ok, bgTextWatcher) } - override fun submit() { + override fun submit(): Boolean { val enteredBy = SP.getString("careportal_enteredby", "") val unitResId = if (ProfileFunctions.getSystemUnits() == Constants.MGDL) R.string.mgdl else R.string.mmol @@ -143,5 +143,6 @@ class CareDialog : DialogFragmentWithDate() { NSUpload.uploadCareportalEntryToNS(json) } } + return true } } diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/DialogFragmentWithDate.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/DialogFragmentWithDate.kt index 73d5be9c8e..da45e77990 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/DialogFragmentWithDate.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/DialogFragmentWithDate.kt @@ -112,13 +112,13 @@ abstract class DialogFragmentWithDate : DialogFragment() { log.debug("guarding: ok already clicked") } else { okClicked = true - submit() + if (submit()) dismiss() + else okClicked = false } - dismiss() } } cancel.setOnClickListener { dismiss() } } - abstract fun submit() + abstract fun submit(): Boolean } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt index 48e9bdcb35..2fe45d8cb7 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/ExtendedBolusDialog.kt @@ -51,7 +51,7 @@ class ExtendedBolusDialog : DialogFragmentWithDate() { ?: extendedDurationStep, extendedDurationStep, extendedMaxDuration, extendedDurationStep, DecimalFormat("0"), false, ok) } - override fun submit() { + override fun submit(): Boolean { val insulin = SafeParse.stringToDouble(actions_extendedbolus_insulin.text) val durationInMinutes = SafeParse.stringToInt(actions_extendedbolus_duration.text) val actions: LinkedList = LinkedList() @@ -78,5 +78,6 @@ class ExtendedBolusDialog : DialogFragmentWithDate() { }) } } + return true } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt index b914227ac5..6e83407989 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/FillDialog.kt @@ -70,7 +70,7 @@ class FillDialog : DialogFragmentWithDate() { } - override fun submit() { + override fun submit(): Boolean { val insulin = SafeParse.stringToDouble(fill_insulinamount.text) val actions: LinkedList = LinkedList() @@ -125,5 +125,6 @@ class FillDialog : DialogFragmentWithDate() { OKDialog.show(activity, "", MainApp.gs(R.string.no_action_selected), null) } dismiss() + return true } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt index 9bb32d6d00..a87f022311 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/InsulinDialog.kt @@ -111,8 +111,9 @@ class InsulinDialog : DialogFragmentWithDate() { return if (value > 0) "+$formatted" else formatted } - override fun submit() { - val pumpDescription = ConfigBuilderPlugin.getPlugin().activePump?.pumpDescription ?: return + override fun submit(): Boolean { + val pumpDescription = ConfigBuilderPlugin.getPlugin().activePump?.pumpDescription + ?: return false val insulin = SafeParse.stringToDouble(overview_insulin_amount.text) val insulinAfterConstraints = MainApp.getConstraintChecker().applyBolusConstraints(Constraint(insulin)).value() val actions: LinkedList = LinkedList() @@ -185,5 +186,6 @@ class InsulinDialog : DialogFragmentWithDate() { } } else OKDialog.show(activity, "", MainApp.gs(R.string.no_action_selected), null) + return true } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt index 35dd4e3f09..f5cb7e0d9c 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/ProfileSwitchDialog.kt @@ -73,8 +73,9 @@ class ProfileSwitchDialog : DialogFragmentWithDate() { } } - override fun submit() { - val profileStore = ConfigBuilderPlugin.getPlugin().activeProfileInterface?.profile ?: return + override fun submit(): Boolean { + val profileStore = ConfigBuilderPlugin.getPlugin().activeProfileInterface?.profile + ?: return false val actions: LinkedList = LinkedList() val duration = overview_profileswitch_duration.value @@ -99,5 +100,6 @@ class ProfileSwitchDialog : DialogFragmentWithDate() { ProfileFunctions.doProfileSwitch(profileStore, profile, duration.toInt(), percent, timeShift, eventTime) } } + return true } } diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt index 8916fbf6ad..6781c7dce2 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TempBasalDialog.kt @@ -69,11 +69,11 @@ class TempBasalDialog : DialogFragmentWithDate() { } } - override fun submit() { + override fun submit(): Boolean { var percent = 0 var absolute = 0.0 val durationInMinutes = SafeParse.stringToInt(actions_tempbasal_duration.text) - val profile = ProfileFunctions.getInstance().profile ?: return + val profile = ProfileFunctions.getInstance().profile ?: return false val actions: LinkedList = LinkedList() actions.add("" + MainApp.gs(R.string.setbasalquestion) + "") if (isPercentPump) { @@ -111,5 +111,6 @@ class TempBasalDialog : DialogFragmentWithDate() { } } } + return true } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt index 7c76fd1d54..53cc580dc7 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TempTargetDialog.kt @@ -109,7 +109,7 @@ class TempTargetDialog : DialogFragmentWithDate() { } } - override fun submit() { + override fun submit(): Boolean { val actions: LinkedList = LinkedList() val reason = overview_temptarget_reason.selectedItem.toString() val unitResId = if (ProfileFunctions.getSystemUnits() == Constants.MGDL) R.string.mgdl else R.string.mmol @@ -147,5 +147,6 @@ class TempTargetDialog : DialogFragmentWithDate() { if (duration == 10.0) SP.putBoolean(R.string.key_objectiveusetemptarget, true) } } + return true } } diff --git a/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt b/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt index f86943f99c..bc12b1804d 100644 --- a/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/dialogs/TreatmentDialog.kt @@ -74,8 +74,9 @@ class TreatmentDialog : DialogFragmentWithDate() { ?: 0.0, 0.0, maxInsulin, pumpDescription.bolusStep, DecimalFormatter.pumpSupportedBolusFormat(), false, ok, textWatcher) } - override fun submit() { - val pumpDescription = ConfigBuilderPlugin.getPlugin().activePump?.pumpDescription ?: return + override fun submit(): Boolean { + val pumpDescription = ConfigBuilderPlugin.getPlugin().activePump?.pumpDescription + ?: return false val insulin = SafeParse.stringToDouble(overview_treatment_insulin.text) val carbs = SafeParse.stringToInt(overview_treatment_carbs.text) val recordOnlyChecked = overview_treatment_record_only.isChecked @@ -125,5 +126,6 @@ class TreatmentDialog : DialogFragmentWithDate() { } } else OKDialog.show(activity, "", MainApp.gs(R.string.no_action_selected), null) + return true } } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTarget.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTarget.java index b0ef645069..1d7ab8db48 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTarget.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/actions/ActionStartTempTarget.java @@ -75,7 +75,7 @@ public class ActionStartTempTarget extends Action { int unitResId = value.getUnits().equals(Constants.MGDL) ? R.string.mgdl : R.string.mmol; new LayoutBuilder() - .add(new LabelWithElement(MainApp.gs(R.string.careportal_temporarytarget) + " [" + MainApp.gs(unitResId) + "]", "", value)) + .add(new LabelWithElement(MainApp.gs(R.string.careportal_temporarytarget) + "\n[" + MainApp.gs(unitResId) + "]", "", value)) .add(new LabelWithElement(MainApp.gs(R.string.careportal_newnstreatment_duration_min_label), "", duration)) .build(root); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ActionListAdapter.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ActionListAdapter.kt index 8c9efedd20..d3a8eb20c0 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ActionListAdapter.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ActionListAdapter.kt @@ -32,7 +32,7 @@ class ActionListAdapter(private val fragmentManager: FragmentManager, private va class ViewHolder(val view: View) : RecyclerView.ViewHolder(view) { - fun bind(action: Action, fragmentManager: FragmentManager, recyclerView: RecyclerView.Adapter, position : Int, actionList: MutableList) { + fun bind(action: Action, fragmentManager: FragmentManager, recyclerView: RecyclerView.Adapter, position: Int, actionList: MutableList) { view.findViewById(R.id.automation_layoutText).setOnClickListener { if (action.hasDialog()) { val args = Bundle() @@ -48,6 +48,7 @@ class ActionListAdapter(private val fragmentManager: FragmentManager, private va recyclerView.notifyDataSetChanged() RxBus.send(EventAutomationUpdateGui()) } + if (action.icon().isPresent) view.findViewById(R.id.automation_action_image).setImageResource(action.icon().get()) view.findViewById(R.id.automation_viewActionTitle).text = action.shortDescription() } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ChooseActionDialog.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ChooseActionDialog.kt index 2096d5a541..c6097a1e88 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ChooseActionDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ChooseActionDialog.kt @@ -5,19 +5,18 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.RadioButton -import androidx.fragment.app.DialogFragment import info.nightscout.androidaps.R +import info.nightscout.androidaps.dialogs.DialogFragmentWithDate import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.general.automation.AutomationPlugin import info.nightscout.androidaps.plugins.general.automation.actions.Action import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationAddAction import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationUpdateGui import kotlinx.android.synthetic.main.automation_dialog_choose_action.* -import kotlinx.android.synthetic.main.okcancel.* -class ChooseActionDialog : DialogFragment() { +class ChooseActionDialog : DialogFragmentWithDate() { - var checkedIndex = -1 + private var checkedIndex = -1 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { @@ -26,7 +25,7 @@ class ChooseActionDialog : DialogFragment() { checkedIndex = bundle.getInt("checkedIndex") } - dialog?.setCanceledOnTouchOutside(false) + onCreateViewGeneral() return inflater.inflate(R.layout.automation_dialog_choose_action, container, false) } @@ -42,27 +41,19 @@ class ChooseActionDialog : DialogFragment() { if (checkedIndex != -1) (automation_radioGroup.getChildAt(checkedIndex) as RadioButton).isChecked = true + } - // OK button - ok.setOnClickListener { - dismiss() - instantiateAction()?.let { - RxBus.send(EventAutomationAddAction(it)) - RxBus.send(EventAutomationUpdateGui()) - } + override fun submit(): Boolean { + instantiateAction()?.let { + RxBus.send(EventAutomationAddAction(it)) + RxBus.send(EventAutomationUpdateGui()) } - - // Cancel button - cancel.setOnClickListener { dismiss() } + return true } - override fun onStart() { - super.onStart() - dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - } - - override fun onSaveInstanceState(bundle: Bundle) { - bundle.putInt("checkedIndex", determineCheckedIndex()) + override fun onSaveInstanceState(savedInstanceState: Bundle) { + super.onSaveInstanceState(savedInstanceState) + savedInstanceState.putInt("checkedIndex", determineCheckedIndex()) } private fun instantiateAction(): Action? { @@ -86,5 +77,4 @@ class ChooseActionDialog : DialogFragment() { } return -1 } - } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ChooseTriggerDialog.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ChooseTriggerDialog.kt index b2317fc6a2..eef3a7057e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ChooseTriggerDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/ChooseTriggerDialog.kt @@ -5,17 +5,15 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.RadioButton -import androidx.fragment.app.DialogFragment import info.nightscout.androidaps.R +import info.nightscout.androidaps.dialogs.DialogFragmentWithDate import info.nightscout.androidaps.plugins.general.automation.AutomationPlugin import info.nightscout.androidaps.plugins.general.automation.triggers.Trigger import kotlinx.android.synthetic.main.automation_dialog_choose_trigger.* -import kotlinx.android.synthetic.main.okcancel.* -class ChooseTriggerDialog : DialogFragment() { +class ChooseTriggerDialog : DialogFragmentWithDate() { private var checkedIndex = -1 - private var clickListener: OnClickListener? = null interface OnClickListener { @@ -29,7 +27,7 @@ class ChooseTriggerDialog : DialogFragment() { checkedIndex = bundle.getInt("checkedIndex") } - dialog?.setCanceledOnTouchOutside(false) + onCreateViewGeneral() return inflater.inflate(R.layout.automation_dialog_choose_trigger, container, false) } @@ -45,30 +43,22 @@ class ChooseTriggerDialog : DialogFragment() { if (checkedIndex != -1) (automation_chooseTriggerRadioGroup.getChildAt(checkedIndex) as RadioButton).isChecked = true - - // OK button - ok.setOnClickListener { - dismiss() - instantiateTrigger()?.let { - clickListener?.onClick(it) - } - } - - // Cancel button - cancel.setOnClickListener { dismiss() } } - override fun onStart() { - super.onStart() - dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + override fun submit(): Boolean { + instantiateTrigger()?.let { + clickListener?.onClick(it) + } + return true } fun setOnClickListener(clickListener: OnClickListener) { this.clickListener = clickListener } - override fun onSaveInstanceState(bundle: Bundle) { - bundle.putInt("checkedIndex", determineCheckedIndex()) + override fun onSaveInstanceState(savedInstanceState: Bundle) { + super.onSaveInstanceState(savedInstanceState) + savedInstanceState.putInt("checkedIndex", determineCheckedIndex()) } private fun instantiateTrigger(): Trigger? { @@ -92,5 +82,4 @@ class ChooseTriggerDialog : DialogFragment() { } return -1 } - } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.kt index 2c49f81bba..e738b7f94c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditActionDialog.kt @@ -4,16 +4,15 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.fragment.app.DialogFragment import info.nightscout.androidaps.R +import info.nightscout.androidaps.dialogs.DialogFragmentWithDate import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.general.automation.actions.Action import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationUpdateAction import kotlinx.android.synthetic.main.automation_dialog_action.* -import kotlinx.android.synthetic.main.okcancel.* import org.json.JSONObject -class EditActionDialog : DialogFragment() { +class EditActionDialog : DialogFragmentWithDate() { private var action: Action? = null private var actionPosition: Int = -1 @@ -24,8 +23,7 @@ class EditActionDialog : DialogFragment() { actionPosition = bundle.getInt("actionPosition", -1) bundle.getString("action")?.let { action = Action.instantiate(JSONObject(it)) } } - - dialog?.setCanceledOnTouchOutside(false) + onCreateViewGeneral() return inflater.inflate(R.layout.automation_dialog_action, container, false) } @@ -37,22 +35,13 @@ class EditActionDialog : DialogFragment() { automation_editActionLayout.removeAllViews() it.generateDialog(automation_editActionLayout) } - - // OK button - ok.setOnClickListener { - dismiss() - action?.let { - RxBus.send(EventAutomationUpdateAction(it, actionPosition)) - } - } - - // Cancel button - cancel.setOnClickListener { dismiss() } } - override fun onStart() { - super.onStart() - dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + override fun submit(): Boolean { + action?.let { + RxBus.send(EventAutomationUpdateAction(it, actionPosition)) + } + return true } override fun onSaveInstanceState(bundle: Bundle) { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditEventDialog.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditEventDialog.kt index 85aab0f538..0bcb183e11 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditEventDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditEventDialog.kt @@ -4,9 +4,9 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.fragment.app.DialogFragment import androidx.recyclerview.widget.LinearLayoutManager import info.nightscout.androidaps.R +import info.nightscout.androidaps.dialogs.DialogFragmentWithDate import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.general.automation.AutomationEvent import info.nightscout.androidaps.plugins.general.automation.AutomationPlugin @@ -17,9 +17,8 @@ import info.nightscout.androidaps.utils.ToastUtils import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import kotlinx.android.synthetic.main.automation_dialog_event.* -import kotlinx.android.synthetic.main.okcancel.* -class EditEventDialog : DialogFragment() { +class EditEventDialog : DialogFragmentWithDate() { private var actionListAdapter: ActionListAdapter? = null private var event: AutomationEvent = AutomationEvent() @@ -35,7 +34,7 @@ class EditEventDialog : DialogFragment() { bundle.getString("event")?.let { event = AutomationEvent().fromJSON(it) } } - dialog?.setCanceledOnTouchOutside(false) + onCreateViewGeneral() return inflater.inflate(R.layout.automation_dialog_event, container, false) } @@ -60,39 +59,6 @@ class EditEventDialog : DialogFragment() { automation_addAction.setOnClickListener { fragmentManager?.let { ChooseActionDialog().show(it, "ChooseActionDialog") } } - // OK button - ok.setOnClickListener { - // check for title - val title = automation_inputEventTitle.text.toString() - if (title.isEmpty()) { - ToastUtils.showToastInUiThread(context, R.string.automation_missing_task_name) - return@setOnClickListener - } - event.title = title - // check for at least one trigger - val con = event.trigger as TriggerConnector - if (con.size() == 0) { - ToastUtils.showToastInUiThread(context, R.string.automation_missing_trigger) - return@setOnClickListener - } - // check for at least one action - if (event.actions.isEmpty()) { - ToastUtils.showToastInUiThread(context, R.string.automation_missing_action) - return@setOnClickListener - } - // store - if (position == -1) - AutomationPlugin.automationEvents.add(event) - else - AutomationPlugin.automationEvents[position] = event - - dismiss() - RxBus.send(EventAutomationDataChanged()) - } - - // Cancel button - cancel.setOnClickListener { dismiss() } - showPreconditions() disposable.add(RxBus @@ -137,9 +103,33 @@ class EditEventDialog : DialogFragment() { ) } - override fun onStart() { - super.onStart() - dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + override fun submit() : Boolean{ + // check for title + val title = automation_inputEventTitle.text.toString() + if (title.isEmpty()) { + ToastUtils.showToastInUiThread(context, R.string.automation_missing_task_name) + return false + } + event.title = title + // check for at least one trigger + val con = event.trigger as TriggerConnector + if (con.size() == 0) { + ToastUtils.showToastInUiThread(context, R.string.automation_missing_trigger) + return false + } + // check for at least one action + if (event.actions.isEmpty()) { + ToastUtils.showToastInUiThread(context, R.string.automation_missing_action) + return false + } + // store + if (position == -1) + AutomationPlugin.automationEvents.add(event) + else + AutomationPlugin.automationEvents[position] = event + + RxBus.send(EventAutomationDataChanged()) + return true } override fun onDestroyView() { @@ -147,10 +137,10 @@ class EditEventDialog : DialogFragment() { disposable.clear() } - override fun onSaveInstanceState(bundle: Bundle) { - super.onSaveInstanceState(bundle) - bundle.putString("event", event.toJSON()) - bundle.putInt("position", position) + override fun onSaveInstanceState(savedInstanceState: Bundle) { + super.onSaveInstanceState(savedInstanceState) + savedInstanceState.putString("event", event.toJSON()) + savedInstanceState.putInt("position", position) } private fun showPreconditions() { @@ -164,5 +154,4 @@ class EditEventDialog : DialogFragment() { automation_forcedTriggerDescriptionLabel.visibility = View.GONE } } - } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditTriggerDialog.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditTriggerDialog.kt index eda9c6177f..b30a724ec5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditTriggerDialog.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/dialogs/EditTriggerDialog.kt @@ -4,15 +4,14 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.fragment.app.DialogFragment import info.nightscout.androidaps.R +import info.nightscout.androidaps.dialogs.DialogFragmentWithDate import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.plugins.general.automation.events.EventAutomationUpdateTrigger import info.nightscout.androidaps.plugins.general.automation.triggers.Trigger import kotlinx.android.synthetic.main.automation_dialog_edit_trigger.* -import kotlinx.android.synthetic.main.okcancel.* -class EditTriggerDialog : DialogFragment() { +class EditTriggerDialog : DialogFragmentWithDate() { private var trigger: Trigger? = null @@ -23,7 +22,7 @@ class EditTriggerDialog : DialogFragment() { bundle.getString("trigger")?.let { trigger = Trigger.instantiate(it) } } - dialog?.setCanceledOnTouchOutside(false) + onCreateViewGeneral() return inflater.inflate(R.layout.automation_dialog_edit_trigger, container, false) } @@ -32,24 +31,15 @@ class EditTriggerDialog : DialogFragment() { // display root trigger trigger?.generateDialog(automation_layoutTrigger, fragmentManager) - - // OK button - ok.setOnClickListener { - dismiss() - trigger?.let { trigger -> RxBus.send(EventAutomationUpdateTrigger(trigger)) } - } - - // Cancel button - cancel.setOnClickListener { dismiss() } } - override fun onStart() { - super.onStart() - dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + override fun submit():Boolean { + trigger?.let { trigger -> RxBus.send(EventAutomationUpdateTrigger(trigger)) } + return true } - override fun onSaveInstanceState(bundle: Bundle) { - super.onSaveInstanceState(bundle) - trigger?.let { bundle.putString("trigger", it.toJSON()) } + override fun onSaveInstanceState(savedInstanceState: Bundle) { + super.onSaveInstanceState(savedInstanceState) + trigger?.let { savedInstanceState.putString("trigger", it.toJSON()) } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_action_orange_48dp.xml b/app/src/main/res/drawable/ic_action_orange_48dp.xml new file mode 100644 index 0000000000..07e8c306a8 --- /dev/null +++ b/app/src/main/res/drawable/ic_action_orange_48dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_trigger_green_48dp.xml b/app/src/main/res/drawable/ic_trigger_green_48dp.xml new file mode 100644 index 0000000000..1bfc8d3e0d --- /dev/null +++ b/app/src/main/res/drawable/ic_trigger_green_48dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/automation_action_item.xml b/app/src/main/res/layout/automation_action_item.xml index 2741f1d5ff..539ce1a400 100644 --- a/app/src/main/res/layout/automation_action_item.xml +++ b/app/src/main/res/layout/automation_action_item.xml @@ -25,11 +25,18 @@ android:id="@+id/automation_layoutText" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:orientation="vertical" + android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_toStartOf="@id/automation_iconTrash" - android:layout_alignParentStart="true"> + android:gravity="center_vertical" + android:orientation="horizontal"> + + + android:focusableInTouchMode="true" + android:minWidth="300dp" + android:orientation="vertical" + tools:context=".plugins.general.automation.dialogs.EditActionDialog"> - + android:layout_gravity="center" + android:background="@color/dialog_title_background" + android:orientation="horizontal" + android:padding="5dp"> + + + + + + + + diff --git a/app/src/main/res/layout/automation_dialog_choose_action.xml b/app/src/main/res/layout/automation_dialog_choose_action.xml index 8a2d714067..029ba36b07 100644 --- a/app/src/main/res/layout/automation_dialog_choose_action.xml +++ b/app/src/main/res/layout/automation_dialog_choose_action.xml @@ -3,26 +3,56 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog"> + android:focusableInTouchMode="true" + android:minWidth="300dp" + android:orientation="vertical" + tools:context=".plugins.general.automation.dialogs.EditEventDialog"> + android:orientation="vertical"> - + android:layout_gravity="center" + android:background="@color/dialog_title_background" + android:orientation="horizontal" + android:padding="5dp"> + + + + + + + + + android:padding="10dp"/> diff --git a/app/src/main/res/layout/automation_dialog_choose_trigger.xml b/app/src/main/res/layout/automation_dialog_choose_trigger.xml index 8589096af7..11b874b3eb 100644 --- a/app/src/main/res/layout/automation_dialog_choose_trigger.xml +++ b/app/src/main/res/layout/automation_dialog_choose_trigger.xml @@ -3,26 +3,49 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog"> + android:focusableInTouchMode="true" + android:minWidth="300dp" + android:orientation="vertical" + tools:context=".plugins.general.automation.dialogs.EditEventDialog"> + android:orientation="vertical"> - + android:layout_gravity="center" + android:background="@color/dialog_title_background" + android:orientation="horizontal" + android:padding="5dp"> + + + + + + + android:padding="10dp"/> diff --git a/app/src/main/res/layout/automation_dialog_edit_trigger.xml b/app/src/main/res/layout/automation_dialog_edit_trigger.xml index 594a78055e..a30a54ce4b 100644 --- a/app/src/main/res/layout/automation_dialog_edit_trigger.xml +++ b/app/src/main/res/layout/automation_dialog_edit_trigger.xml @@ -3,27 +3,49 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="info.nightscout.androidaps.plugins.general.automation.dialogs.EditEventDialog"> + android:focusableInTouchMode="true" + android:minWidth="300dp" + android:orientation="vertical" + tools:context=".plugins.general.automation.dialogs.EditEventDialog"> + android:orientation="vertical"> - + android:layout_gravity="center" + android:background="@color/dialog_title_background" + android:orientation="horizontal" + android:padding="5dp"> + + + + + + diff --git a/app/src/main/res/layout/automation_dialog_event.xml b/app/src/main/res/layout/automation_dialog_event.xml index d440b8cf27..03ff617168 100644 --- a/app/src/main/res/layout/automation_dialog_event.xml +++ b/app/src/main/res/layout/automation_dialog_event.xml @@ -1,112 +1,171 @@ + android:focusableInTouchMode="true" + android:minWidth="300dp" + android:orientation="vertical" + tools:context=".plugins.general.automation.dialogs.EditEventDialog"> - - - - + android:orientation="vertical"> + android:layout_height="wrap_content" + android:layout_gravity="center" + android:background="@color/dialog_title_background" + android:orientation="horizontal" + android:padding="5dp"> - + android:contentDescription="@string/automation" + android:src="@drawable/ic_action_orange_48dp" /> + android:layout_centerInParent="true" + android:layout_gravity="center" + android:layout_marginLeft="10dp" + android:layout_marginRight="10dp" + android:text="@string/automation_event" + android:textAlignment="center" + android:textAppearance="?android:attr/textAppearanceLarge" /> - - - + android:orientation="horizontal" + android:padding="5dp" /> - + android:padding="10dp" + android:orientation="vertical"> - + - + + + + + + + + + + + + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:orientation="vertical" /> - + - + - + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_calibration.xml b/app/src/main/res/layout/dialog_calibration.xml index ddab7cc285..1dbd83bd40 100644 --- a/app/src/main/res/layout/dialog_calibration.xml +++ b/app/src/main/res/layout/dialog_calibration.xml @@ -23,7 +23,6 @@ android:padding="5dp"> + COB %1$s %2$.0f Task name EDIT - Please choose an action type: - Please choose a trigger type: + Choose an action type + Choose a trigger type Triggers: REMOVE Preconditions: @@ -1604,7 +1604,7 @@ Last connection to pump [minutes ago] Last connection to pump %1$s %2$s min ago Send SMS: %1$s - Send SMS to all numbers in preferences + Send SMS to all numbers Send SMS with text @@ -1689,5 +1689,6 @@ Error 12h 24h + Automation event