Replace Loop Menu by Loop Dialog
This commit is contained in:
parent
47fe4d83be
commit
cefdaa471d
|
@ -109,6 +109,7 @@ abstract class FragmentsModule {
|
||||||
@ContributesAndroidInjector abstract fun contributesChooseActionDialog(): ChooseActionDialog
|
@ContributesAndroidInjector abstract fun contributesChooseActionDialog(): ChooseActionDialog
|
||||||
@ContributesAndroidInjector abstract fun contributesChooseTriggerDialog(): ChooseTriggerDialog
|
@ContributesAndroidInjector abstract fun contributesChooseTriggerDialog(): ChooseTriggerDialog
|
||||||
@ContributesAndroidInjector abstract fun contributesInsulinDialog(): InsulinDialog
|
@ContributesAndroidInjector abstract fun contributesInsulinDialog(): InsulinDialog
|
||||||
|
@ContributesAndroidInjector abstract fun contributesLoopDialog(): LoopDialog
|
||||||
@ContributesAndroidInjector abstract fun contributesObjectivesExamDialog(): ObjectivesExamDialog
|
@ContributesAndroidInjector abstract fun contributesObjectivesExamDialog(): ObjectivesExamDialog
|
||||||
@ContributesAndroidInjector abstract fun contributesProfileSwitchDialog(): ProfileSwitchDialog
|
@ContributesAndroidInjector abstract fun contributesProfileSwitchDialog(): ProfileSwitchDialog
|
||||||
@ContributesAndroidInjector abstract fun contributesTempBasalDialog(): TempBasalDialog
|
@ContributesAndroidInjector abstract fun contributesTempBasalDialog(): TempBasalDialog
|
||||||
|
|
|
@ -1,79 +1,49 @@
|
||||||
package info.nightscout.androidaps.dialogs
|
package info.nightscout.androidaps.dialogs
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.Editable
|
import android.view.*
|
||||||
import android.text.TextWatcher
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.view.Window
|
|
||||||
import android.view.WindowManager
|
|
||||||
import android.widget.AdapterView
|
|
||||||
import android.widget.AdapterView.OnItemSelectedListener
|
|
||||||
import android.widget.ArrayAdapter
|
|
||||||
import android.widget.CompoundButton
|
|
||||||
import androidx.fragment.app.FragmentManager
|
import androidx.fragment.app.FragmentManager
|
||||||
import dagger.android.support.DaggerDialogFragment
|
import dagger.android.support.DaggerDialogFragment
|
||||||
import info.nightscout.androidaps.Constants
|
|
||||||
import info.nightscout.androidaps.MainApp
|
import info.nightscout.androidaps.MainApp
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.data.Profile
|
import info.nightscout.androidaps.activities.ErrorHelperActivity
|
||||||
import info.nightscout.androidaps.db.BgReading
|
import info.nightscout.androidaps.events.EventRefreshOverview
|
||||||
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
import info.nightscout.androidaps.interfaces.*
|
||||||
import info.nightscout.androidaps.interfaces.Constraint
|
|
||||||
import info.nightscout.androidaps.interfaces.ProfileFunction
|
|
||||||
import info.nightscout.androidaps.logging.AAPSLogger
|
import info.nightscout.androidaps.logging.AAPSLogger
|
||||||
import info.nightscout.androidaps.logging.LTag
|
import info.nightscout.androidaps.logging.LTag
|
||||||
|
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
|
||||||
|
import info.nightscout.androidaps.plugins.aps.loop.events.EventNewOpenLoopNotification
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||||
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.IobCobCalculatorPlugin
|
import info.nightscout.androidaps.queue.Callback
|
||||||
import info.nightscout.androidaps.plugins.iob.iobCobCalculator.events.EventAutosensCalculationFinished
|
import info.nightscout.androidaps.utils.*
|
||||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
||||||
import info.nightscout.androidaps.utils.DecimalFormatter
|
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
|
||||||
import info.nightscout.androidaps.utils.SafeParse
|
|
||||||
import info.nightscout.androidaps.utils.ToastUtils
|
|
||||||
import info.nightscout.androidaps.utils.extensions.toVisibility
|
|
||||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||||
import info.nightscout.androidaps.utils.wizard.BolusWizard
|
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.disposables.CompositeDisposable
|
import io.reactivex.disposables.CompositeDisposable
|
||||||
import kotlinx.android.synthetic.main.dialog_wizard.*
|
import kotlinx.android.synthetic.main.dialog_loop.*
|
||||||
import java.text.DecimalFormat
|
|
||||||
import java.util.*
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.math.abs
|
|
||||||
|
|
||||||
class LoopDialog : DaggerDialogFragment() {
|
class LoopDialog : DaggerDialogFragment() {
|
||||||
|
|
||||||
@Inject lateinit var aapsLogger: AAPSLogger
|
@Inject lateinit var aapsLogger: AAPSLogger
|
||||||
@Inject lateinit var constraintChecker: ConstraintChecker
|
|
||||||
@Inject lateinit var mainApp: MainApp
|
@Inject lateinit var mainApp: MainApp
|
||||||
@Inject lateinit var sp: SP
|
@Inject lateinit var sp: SP
|
||||||
@Inject lateinit var rxBus: RxBusWrapper
|
@Inject lateinit var rxBus: RxBusWrapper
|
||||||
@Inject lateinit var fabricPrivacy: FabricPrivacy
|
@Inject lateinit var fabricPrivacy: FabricPrivacy
|
||||||
@Inject lateinit var resourceHelper: ResourceHelper
|
@Inject lateinit var resourceHelper: ResourceHelper
|
||||||
@Inject lateinit var profileFunction: ProfileFunction
|
@Inject lateinit var profileFunction: ProfileFunction
|
||||||
@Inject lateinit var treatmentsPlugin: TreatmentsPlugin
|
@Inject lateinit var loopPlugin: LoopPlugin
|
||||||
@Inject lateinit var activePlugin: ActivePluginProvider
|
@Inject lateinit var activePlugin: ActivePluginProvider
|
||||||
@Inject lateinit var iobCobCalculatorPlugin: IobCobCalculatorPlugin
|
@Inject lateinit var commandQueue: CommandQueueProvider
|
||||||
|
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
|
||||||
private var wizard: BolusWizard? = null
|
|
||||||
|
|
||||||
//one shot guards
|
|
||||||
private var okClicked: Boolean = false
|
|
||||||
|
|
||||||
private val textWatcher = object : TextWatcher {
|
|
||||||
override fun afterTextChanged(s: Editable) {}
|
|
||||||
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
|
|
||||||
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
|
|
||||||
calculateInsulin()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private var disposable: CompositeDisposable = CompositeDisposable()
|
private var disposable: CompositeDisposable = CompositeDisposable()
|
||||||
|
|
||||||
|
private var showOkCancel: Boolean = true
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||||
|
@ -81,103 +51,51 @@ class LoopDialog : DaggerDialogFragment() {
|
||||||
|
|
||||||
override fun onSaveInstanceState(savedInstanceState: Bundle) {
|
override fun onSaveInstanceState(savedInstanceState: Bundle) {
|
||||||
super.onSaveInstanceState(savedInstanceState)
|
super.onSaveInstanceState(savedInstanceState)
|
||||||
savedInstanceState.putDouble("treatments_wizard_bg_input", treatments_wizard_bg_input.value)
|
savedInstanceState.putInt("showOkCancel", if (showOkCancel) 1 else 0)
|
||||||
savedInstanceState.putDouble("treatments_wizard_carbs_input", treatments_wizard_carbs_input.value)
|
|
||||||
savedInstanceState.putDouble("treatments_wizard_correction_input", treatments_wizard_correction_input.value)
|
|
||||||
savedInstanceState.putDouble("treatments_wizard_carb_time_input", treatments_wizard_carb_time_input.value)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?): View? {
|
savedInstanceState: Bundle?): View? {
|
||||||
|
// load data from bundle
|
||||||
|
(savedInstanceState ?: arguments)?.let { bundle ->
|
||||||
|
showOkCancel = bundle.getInt("showOkCancel", 1) == 1
|
||||||
|
}
|
||||||
dialog?.window?.requestFeature(Window.FEATURE_NO_TITLE)
|
dialog?.window?.requestFeature(Window.FEATURE_NO_TITLE)
|
||||||
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
|
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
|
||||||
isCancelable = true
|
isCancelable = true
|
||||||
dialog?.setCanceledOnTouchOutside(false)
|
dialog?.setCanceledOnTouchOutside(false)
|
||||||
|
|
||||||
return inflater.inflate(R.layout.dialog_wizard, container, false)
|
return inflater.inflate(R.layout.dialog_loop, container, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
loadCheckedStates()
|
updateGUI("LoopDialogOnViewCreated")
|
||||||
processCobCheckBox()
|
|
||||||
treatments_wizard_sbcheckbox.visibility = sp.getBoolean(R.string.key_usesuperbolus, false).toVisibility()
|
|
||||||
treatments_wizard_notes_layout.visibility = sp.getBoolean(R.string.key_show_notes_entry_dialogs, false).toVisibility()
|
|
||||||
|
|
||||||
val maxCarbs = constraintChecker.getMaxCarbsAllowed().value()
|
overview_disable?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
val maxCorrection = constraintChecker.getMaxBolusAllowed().value()
|
overview_enable?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_resume?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_reconnect?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_suspend_1h?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_suspend_2h?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_suspend_3h?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_suspend_10h?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_disconnect_15m?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_disconnect_30m?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_disconnect_1h?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_disconnect_2h?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
overview_disconnect_3h?.setOnClickListener { if(showOkCancel) onClick_OkCancelEnabled(it) else onClick(it); dismiss() }
|
||||||
|
|
||||||
if (profileFunction.getUnits() == Constants.MGDL)
|
|
||||||
treatments_wizard_bg_input.setParams(savedInstanceState?.getDouble("treatments_wizard_bg_input")
|
|
||||||
?: 0.0, 0.0, 500.0, 1.0, DecimalFormat("0"), false, ok, textWatcher)
|
|
||||||
else
|
|
||||||
treatments_wizard_bg_input.setParams(savedInstanceState?.getDouble("treatments_wizard_bg_input")
|
|
||||||
?: 0.0, 0.0, 30.0, 0.1, DecimalFormat("0.0"), false, ok, textWatcher)
|
|
||||||
treatments_wizard_carbs_input.setParams(savedInstanceState?.getDouble("treatments_wizard_carbs_input")
|
|
||||||
?: 0.0, 0.0, maxCarbs.toDouble(), 1.0, DecimalFormat("0"), false, ok, textWatcher)
|
|
||||||
val bolusStep = activePlugin.activePump.pumpDescription.bolusStep
|
|
||||||
treatments_wizard_correction_input.setParams(savedInstanceState?.getDouble("treatments_wizard_correction_input")
|
|
||||||
?: 0.0, -maxCorrection, maxCorrection, bolusStep, DecimalFormatter.pumpSupportedBolusFormat(activePlugin.activePump), false, ok, textWatcher)
|
|
||||||
treatments_wizard_carb_time_input.setParams(savedInstanceState?.getDouble("treatments_wizard_carb_time_input")
|
|
||||||
?: 0.0, -60.0, 60.0, 5.0, DecimalFormat("0"), false, ok, textWatcher)
|
|
||||||
initDialog()
|
|
||||||
|
|
||||||
treatments_wizard_percent_used.text = resourceHelper.gs(R.string.format_percent, sp.getInt(R.string.key_boluswizard_percentage, 100))
|
|
||||||
// ok button
|
|
||||||
ok.setOnClickListener {
|
|
||||||
if (okClicked) {
|
|
||||||
aapsLogger.debug(LTag.UI, "guarding: ok already clicked")
|
|
||||||
} else {
|
|
||||||
okClicked = true
|
|
||||||
calculateInsulin()
|
|
||||||
context?.let { context ->
|
|
||||||
wizard?.confirmAndExecute(context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dismiss()
|
|
||||||
}
|
|
||||||
// cancel button
|
// cancel button
|
||||||
cancel.setOnClickListener { dismiss() }
|
cancel?.setOnClickListener { dismiss() }
|
||||||
// checkboxes
|
|
||||||
treatments_wizard_bgcheckbox.setOnCheckedChangeListener(::onCheckedChanged)
|
|
||||||
treatments_wizard_ttcheckbox.setOnCheckedChangeListener(::onCheckedChanged)
|
|
||||||
treatments_wizard_cobcheckbox.setOnCheckedChangeListener(::onCheckedChanged)
|
|
||||||
treatments_wizard_basaliobcheckbox.setOnCheckedChangeListener(::onCheckedChanged)
|
|
||||||
treatments_wizard_bolusiobcheckbox.setOnCheckedChangeListener(::onCheckedChanged)
|
|
||||||
treatments_wizard_bgtrendcheckbox.setOnCheckedChangeListener(::onCheckedChanged)
|
|
||||||
treatments_wizard_sbcheckbox.setOnCheckedChangeListener(::onCheckedChanged)
|
|
||||||
|
|
||||||
val showCalc = sp.getBoolean(resourceHelper.gs(R.string.key_wizard_calculation_visible), false)
|
|
||||||
treatments_wizard_delimiter.visibility = showCalc.toVisibility()
|
|
||||||
treatments_wizard_resulttable.visibility = showCalc.toVisibility()
|
|
||||||
treatments_wizard_calculationcheckbox.isChecked = showCalc
|
|
||||||
treatments_wizard_calculationcheckbox.setOnCheckedChangeListener { _, isChecked ->
|
|
||||||
run {
|
|
||||||
sp.putBoolean(resourceHelper.gs(R.string.key_wizard_calculation_visible), isChecked)
|
|
||||||
treatments_wizard_delimiter.visibility = isChecked.toVisibility()
|
|
||||||
treatments_wizard_resulttable.visibility = isChecked.toVisibility()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// profile spinner
|
|
||||||
treatments_wizard_profile.onItemSelectedListener = object : OnItemSelectedListener {
|
|
||||||
override fun onNothingSelected(parent: AdapterView<*>?) {
|
|
||||||
ToastUtils.showToastInUiThread(mainApp, resourceHelper.gs(R.string.noprofileselected))
|
|
||||||
ok.visibility = View.GONE
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
|
||||||
calculateInsulin()
|
|
||||||
ok.visibility = View.VISIBLE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// bus
|
// bus
|
||||||
disposable.add(rxBus
|
disposable.add(rxBus
|
||||||
.toObservable(EventAutosensCalculationFinished::class.java)
|
.toObservable(EventNewOpenLoopNotification::class.java)
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe({
|
.subscribe({
|
||||||
activity?.runOnUiThread { calculateInsulin() }
|
activity?.runOnUiThread { updateGUI("EventNewOpenLoopNotification") }
|
||||||
}, { fabricPrivacy.logException(it) })
|
}, { fabricPrivacy.logException(it) })
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
@ -185,37 +103,44 @@ class LoopDialog : DaggerDialogFragment() {
|
||||||
disposable.clear()
|
disposable.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onCheckedChanged(buttonView: CompoundButton, @Suppress("UNUSED_PARAMETER") state: Boolean) {
|
fun updateGUI(from: String) {
|
||||||
saveCheckedStates()
|
aapsLogger.debug("UpdateGUI from $from")
|
||||||
treatments_wizard_ttcheckbox.isEnabled = treatments_wizard_bgcheckbox.isChecked && treatmentsPlugin.tempTargetFromHistory != null
|
val pumpDescription: PumpDescription = activePlugin.activePump.pumpDescription
|
||||||
if (buttonView.id == treatments_wizard_cobcheckbox.id)
|
if (profileFunction.isProfileValid("LoopDialogUpdateGUI")) {
|
||||||
processCobCheckBox()
|
if (loopPlugin.isEnabled(PluginType.LOOP)) {
|
||||||
calculateInsulin()
|
overview_enable?.visibility = View.GONE //sp.getBoolean(R.string.key_usesuperbolus, false).toVisibility()
|
||||||
}
|
overview_disable?.visibility = View.VISIBLE
|
||||||
|
if (!loopPlugin.isSuspended) {
|
||||||
private fun processCobCheckBox() {
|
overview_suspend_header?.text=resourceHelper.gs(R.string.suspendloop)
|
||||||
if (treatments_wizard_cobcheckbox.isChecked) {
|
overview_resume?.visibility = View.GONE
|
||||||
treatments_wizard_bolusiobcheckbox.isEnabled = false
|
overview_suspend_buttons?.visibility=View.VISIBLE
|
||||||
treatments_wizard_basaliobcheckbox.isEnabled = false
|
overview_suspend?.visibility=View.VISIBLE
|
||||||
treatments_wizard_bolusiobcheckbox.isChecked = true
|
} else {
|
||||||
treatments_wizard_basaliobcheckbox.isChecked = true
|
if (!loopPlugin.isDisconnected) {
|
||||||
} else {
|
overview_suspend_header?.text = resourceHelper.gs(R.string.resumeloop)
|
||||||
treatments_wizard_bolusiobcheckbox.isEnabled = true
|
overview_resume?.visibility = View.VISIBLE
|
||||||
treatments_wizard_basaliobcheckbox.isEnabled = true
|
overview_suspend_buttons?.visibility=View.GONE
|
||||||
|
overview_suspend?.visibility=View.VISIBLE
|
||||||
|
} else
|
||||||
|
overview_suspend?.visibility = View.GONE
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
overview_enable?.visibility = View.VISIBLE
|
||||||
|
overview_disable?.visibility = View.GONE
|
||||||
|
overview_suspend?.visibility = View.GONE
|
||||||
|
}
|
||||||
|
if (!loopPlugin.isDisconnected) {
|
||||||
|
overview_pump_header?.text = resourceHelper.gs(R.string.disconnectpump)
|
||||||
|
overview_disconnect_15m?.visibility = if (pumpDescription.tempDurationStep15mAllowed) View.VISIBLE else View.GONE
|
||||||
|
overview_disconnect_15m?.visibility = if (pumpDescription.tempDurationStep30mAllowed) View.VISIBLE else View.GONE
|
||||||
|
overview_disconnect_buttons?.visibility = View.VISIBLE
|
||||||
|
overview_reconnect?.visibility = View.GONE
|
||||||
|
} else {
|
||||||
|
overview_pump_header?.text = resourceHelper.gs(R.string.reconnect)
|
||||||
|
overview_disconnect_buttons?.visibility = View.GONE
|
||||||
|
overview_reconnect?.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun saveCheckedStates() {
|
|
||||||
sp.putBoolean(resourceHelper.gs(R.string.key_wizard_include_cob), treatments_wizard_cobcheckbox.isChecked)
|
|
||||||
sp.putBoolean(resourceHelper.gs(R.string.key_wizard_include_trend_bg), treatments_wizard_bgtrendcheckbox.isChecked)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadCheckedStates() {
|
|
||||||
treatments_wizard_bgtrendcheckbox.isChecked = sp.getBoolean(resourceHelper.gs(R.string.key_wizard_include_trend_bg), false)
|
|
||||||
treatments_wizard_cobcheckbox.isChecked = sp.getBoolean(resourceHelper.gs(R.string.key_wizard_include_cob), false)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun initDialog() {
|
|
||||||
val profile = profileFunction.getProfile()
|
val profile = profileFunction.getProfile()
|
||||||
val profileStore = activePlugin.activeProfileInterface.profile
|
val profileStore = activePlugin.activeProfileInterface.profile
|
||||||
|
|
||||||
|
@ -225,139 +150,149 @@ class LoopDialog : DaggerDialogFragment() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val profileList: ArrayList<CharSequence>
|
|
||||||
profileList = profileStore.getProfileList()
|
|
||||||
profileList.add(0, resourceHelper.gs(R.string.active))
|
|
||||||
context?.let { context ->
|
|
||||||
val adapter = ArrayAdapter(context, R.layout.spinner_centered, profileList)
|
|
||||||
treatments_wizard_profile.adapter = adapter
|
|
||||||
} ?: return
|
|
||||||
|
|
||||||
val units = profileFunction.getUnits()
|
|
||||||
treatments_wizard_bgunits.text = units
|
|
||||||
if (units == Constants.MGDL)
|
|
||||||
treatments_wizard_bg_input.setStep(1.0)
|
|
||||||
else
|
|
||||||
treatments_wizard_bg_input.setStep(0.1)
|
|
||||||
|
|
||||||
// Set BG if not old
|
|
||||||
val lastBg = iobCobCalculatorPlugin.actualBg()
|
|
||||||
|
|
||||||
if (lastBg != null) {
|
|
||||||
treatments_wizard_bg_input.value = lastBg.valueToUnits(units)
|
|
||||||
} else {
|
|
||||||
treatments_wizard_bg_input.value = 0.0
|
|
||||||
}
|
|
||||||
treatments_wizard_ttcheckbox.isEnabled = treatmentsPlugin.tempTargetFromHistory != null
|
|
||||||
|
|
||||||
// IOB calculation
|
|
||||||
treatmentsPlugin.updateTotalIOBTreatments()
|
|
||||||
val bolusIob = treatmentsPlugin.lastCalculationTreatments.round()
|
|
||||||
treatmentsPlugin.updateTotalIOBTempBasals()
|
|
||||||
val basalIob = treatmentsPlugin.lastCalculationTempBasals.round()
|
|
||||||
|
|
||||||
treatments_wizard_bolusiobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, -bolusIob.iob)
|
|
||||||
treatments_wizard_basaliobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, -basalIob.basaliob)
|
|
||||||
|
|
||||||
calculateInsulin()
|
|
||||||
|
|
||||||
treatments_wizard_percent_used.visibility = (sp.getInt(R.string.key_boluswizard_percentage, 100) != 100).toVisibility()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun calculateInsulin() {
|
fun onClick_OkCancelEnabled(v: View): Boolean {
|
||||||
val profileStore = activePlugin.activeProfileInterface.profile
|
var description = ""
|
||||||
if (treatments_wizard_profile?.selectedItem == null || profileStore == null)
|
when(v.id) {
|
||||||
return // not initialized yet
|
R.id.overview_disable -> description = resourceHelper.gs(R.string.disableloop)
|
||||||
var profileName = treatments_wizard_profile.selectedItem.toString()
|
R.id.overview_enable -> description = resourceHelper.gs(R.string.enableloop)
|
||||||
val specificProfile: Profile?
|
R.id.overview_resume -> description = resourceHelper.gs(R.string.resume)
|
||||||
if (profileName == resourceHelper.gs(R.string.active)) {
|
R.id.overview_reconnect -> description = resourceHelper.gs(R.string.reconnect)
|
||||||
specificProfile = profileFunction.getProfile()
|
R.id.overview_suspend_1h -> description = resourceHelper.gs(R.string.suspendloopfor1h)
|
||||||
profileName = profileFunction.getProfileName()
|
R.id.overview_suspend_2h -> description = resourceHelper.gs(R.string.suspendloopfor2h)
|
||||||
} else
|
R.id.overview_suspend_3h -> description = resourceHelper.gs(R.string.suspendloopfor3h)
|
||||||
specificProfile = profileStore.getSpecificProfile(profileName)
|
R.id.overview_suspend_10h -> description = resourceHelper.gs(R.string.suspendloopfor10h)
|
||||||
|
R.id.overview_disconnect_15m -> description = resourceHelper.gs(R.string.disconnectpumpfor15m)
|
||||||
if (specificProfile == null) return
|
R.id.overview_disconnect_30m -> description = resourceHelper.gs(R.string.disconnectpumpfor30m)
|
||||||
|
R.id.overview_disconnect_1h -> description = resourceHelper.gs(R.string.disconnectpumpfor1h)
|
||||||
// Entered values
|
R.id.overview_disconnect_2h -> description = resourceHelper.gs(R.string.disconnectpumpfor2h)
|
||||||
var bg = SafeParse.stringToDouble(treatments_wizard_bg_input.text)
|
R.id.overview_disconnect_3h -> description = resourceHelper.gs(R.string.disconnectpumpfor3h)
|
||||||
val carbs = SafeParse.stringToInt(treatments_wizard_carbs_input.text)
|
|
||||||
val correction = SafeParse.stringToDouble(treatments_wizard_correction_input.text)
|
|
||||||
val carbsAfterConstraint = constraintChecker.applyCarbsConstraints(Constraint(carbs)).value()
|
|
||||||
if (abs(carbs - carbsAfterConstraint) > 0.01) {
|
|
||||||
treatments_wizard_carbs_input.value = 0.0
|
|
||||||
ToastUtils.showToastInUiThread(mainApp, resourceHelper.gs(R.string.carbsconstraintapplied))
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
activity?.let { activity ->
|
||||||
bg = if (treatments_wizard_bgcheckbox.isChecked) bg else 0.0
|
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.confirm), description, Runnable {
|
||||||
val tempTarget = if (treatments_wizard_ttcheckbox.isChecked) treatmentsPlugin.tempTargetFromHistory else null
|
onClick(v)
|
||||||
|
})
|
||||||
// COB
|
|
||||||
var cob = 0.0
|
|
||||||
if (treatments_wizard_cobcheckbox.isChecked) {
|
|
||||||
val cobInfo = iobCobCalculatorPlugin.getCobInfo(false, "Wizard COB")
|
|
||||||
cobInfo.displayCob?.let { cob = it }
|
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
val carbTime = SafeParse.stringToInt(treatments_wizard_carb_time_input.text)
|
fun onClick(v: View): Boolean {
|
||||||
|
val profile = profileFunction.getProfile() ?: return true
|
||||||
wizard = BolusWizard(mainApp).doCalc(specificProfile, profileName, tempTarget, carbsAfterConstraint, cob, bg, correction,
|
when (v.id) {
|
||||||
sp.getInt(R.string.key_boluswizard_percentage, 100).toDouble(),
|
R.id.overview_disable -> {
|
||||||
treatments_wizard_bgcheckbox.isChecked,
|
aapsLogger.debug("USER ENTRY: LOOP DISABLED")
|
||||||
treatments_wizard_cobcheckbox.isChecked,
|
loopPlugin.setPluginEnabled(PluginType.LOOP, false)
|
||||||
treatments_wizard_bolusiobcheckbox.isChecked,
|
loopPlugin.setFragmentVisible(PluginType.LOOP, false)
|
||||||
treatments_wizard_basaliobcheckbox.isChecked,
|
configBuilderPlugin.storeSettings("DisablingLoop")
|
||||||
treatments_wizard_sbcheckbox.isChecked,
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
treatments_wizard_ttcheckbox.isChecked,
|
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||||
treatments_wizard_bgtrendcheckbox.isChecked,
|
override fun run() {
|
||||||
treatment_wizard_notes.text.toString(), carbTime)
|
if (!result.success) {
|
||||||
|
ToastUtils.showToastInUiThread(context, resourceHelper.gs(R.string.tempbasaldeliveryerror))
|
||||||
wizard?.let { wizard ->
|
}
|
||||||
treatments_wizard_bg.text = String.format(resourceHelper.gs(R.string.format_bg_isf), BgReading().value(Profile.toMgdl(bg, profileFunction.getUnits())).valueToUnitsToString(profileFunction.getUnits()), wizard.sens)
|
}
|
||||||
treatments_wizard_bginsulin.text = resourceHelper.gs(R.string.formatinsulinunits, wizard.insulinFromBG)
|
})
|
||||||
|
loopPlugin.createOfflineEvent(24 * 60) // upload 24h, we don't know real duration
|
||||||
treatments_wizard_carbs.text = String.format(resourceHelper.gs(R.string.format_carbs_ic), carbs.toDouble(), wizard.ic)
|
return true
|
||||||
treatments_wizard_carbsinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, wizard.insulinFromCarbs)
|
|
||||||
|
|
||||||
treatments_wizard_bolusiobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, wizard.insulinFromBolusIOB)
|
|
||||||
treatments_wizard_basaliobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, wizard.insulinFromBasalsIOB)
|
|
||||||
|
|
||||||
treatments_wizard_correctioninsulin.text = resourceHelper.gs(R.string.formatinsulinunits, wizard.insulinFromCorrection)
|
|
||||||
|
|
||||||
// Superbolus
|
|
||||||
treatments_wizard_sb.text = if (treatments_wizard_sbcheckbox.isChecked) resourceHelper.gs(R.string.twohours) else ""
|
|
||||||
treatments_wizard_sbinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, wizard.insulinFromSuperBolus)
|
|
||||||
|
|
||||||
// Trend
|
|
||||||
if (treatments_wizard_bgtrendcheckbox.isChecked && wizard.glucoseStatus != null) {
|
|
||||||
treatments_wizard_bgtrend.text = ((if (wizard.trend > 0) "+" else "")
|
|
||||||
+ Profile.toUnitsString(wizard.trend * 3, wizard.trend * 3 / Constants.MMOLL_TO_MGDL, profileFunction.getUnits())
|
|
||||||
+ " " + profileFunction.getUnits())
|
|
||||||
} else {
|
|
||||||
treatments_wizard_bgtrend.text = ""
|
|
||||||
}
|
|
||||||
treatments_wizard_bgtrendinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, wizard.insulinFromTrend)
|
|
||||||
|
|
||||||
// COB
|
|
||||||
if (treatments_wizard_cobcheckbox.isChecked) {
|
|
||||||
treatments_wizard_cob.text = String.format(resourceHelper.gs(R.string.format_cob_ic), cob, wizard.ic)
|
|
||||||
treatments_wizard_cobinsulin.text = resourceHelper.gs(R.string.formatinsulinunits, wizard.insulinFromCOB)
|
|
||||||
} else {
|
|
||||||
treatments_wizard_cob.text = ""
|
|
||||||
treatments_wizard_cobinsulin.text = ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wizard.calculatedTotalInsulin > 0.0 || carbsAfterConstraint > 0.0) {
|
R.id.overview_enable -> {
|
||||||
val insulinText = if (wizard.calculatedTotalInsulin > 0.0) resourceHelper.gs(R.string.formatinsulinunits, wizard.calculatedTotalInsulin) else ""
|
aapsLogger.debug("USER ENTRY: LOOP ENABLED")
|
||||||
val carbsText = if (carbsAfterConstraint > 0.0) resourceHelper.gs(R.string.format_carbs, carbsAfterConstraint) else ""
|
loopPlugin.setPluginEnabled(PluginType.LOOP, true)
|
||||||
treatments_wizard_total.text = resourceHelper.gs(R.string.result_insulin_carbs, insulinText, carbsText)
|
loopPlugin.setFragmentVisible(PluginType.LOOP, true)
|
||||||
ok.visibility = View.VISIBLE
|
configBuilderPlugin.storeSettings("EnablingLoop")
|
||||||
} else {
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
treatments_wizard_total.text = resourceHelper.gs(R.string.missing_carbs, wizard.carbsEquivalent.toInt())
|
loopPlugin.createOfflineEvent(0)
|
||||||
ok.visibility = View.INVISIBLE
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
R.id.overview_resume, R.id.overview_reconnect -> {
|
||||||
|
aapsLogger.debug("USER ENTRY: RESUME")
|
||||||
|
loopPlugin.suspendTo(0L)
|
||||||
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
|
commandQueue.cancelTempBasal(true, object : Callback() {
|
||||||
|
override fun run() {
|
||||||
|
if (!result.success) {
|
||||||
|
val i = Intent(context, ErrorHelperActivity::class.java)
|
||||||
|
i.putExtra("soundid", R.raw.boluserror)
|
||||||
|
i.putExtra("status", result.comment)
|
||||||
|
i.putExtra("title", resourceHelper.gs(R.string.tempbasaldeliveryerror))
|
||||||
|
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
context?.startActivity(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
sp.putBoolean(R.string.key_objectiveusereconnect, true)
|
||||||
|
loopPlugin.createOfflineEvent(0)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
R.id.overview_suspend_1h -> {
|
||||||
|
aapsLogger.debug("USER ENTRY: SUSPEND 1h")
|
||||||
|
loopPlugin.suspendLoop(60)
|
||||||
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
R.id.overview_suspend_2h -> {
|
||||||
|
aapsLogger.debug("USER ENTRY: SUSPEND 2h")
|
||||||
|
loopPlugin.suspendLoop(120)
|
||||||
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
R.id.overview_suspend_3h -> {
|
||||||
|
aapsLogger.debug("USER ENTRY: SUSPEND 3h")
|
||||||
|
loopPlugin.suspendLoop(180)
|
||||||
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
R.id.overview_suspend_10h -> {
|
||||||
|
aapsLogger.debug("USER ENTRY: SUSPEND 10h")
|
||||||
|
loopPlugin.suspendLoop(600)
|
||||||
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
R.id.overview_disconnect_15m -> {
|
||||||
|
aapsLogger.debug("USER ENTRY: DISCONNECT 15m")
|
||||||
|
loopPlugin.disconnectPump(15, profile)
|
||||||
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
R.id.overview_disconnect_30m -> {
|
||||||
|
aapsLogger.debug("USER ENTRY: DISCONNECT 30m")
|
||||||
|
loopPlugin.disconnectPump(30, profile)
|
||||||
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
R.id.overview_disconnect_1h -> {
|
||||||
|
aapsLogger.debug("USER ENTRY: DISCONNECT 1h")
|
||||||
|
loopPlugin.disconnectPump(60, profile)
|
||||||
|
sp.putBoolean(R.string.key_objectiveusedisconnect, true)
|
||||||
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
R.id.overview_disconnect_2h -> {
|
||||||
|
aapsLogger.debug("USER ENTRY: DISCONNECT 2h")
|
||||||
|
loopPlugin.disconnectPump(120, profile)
|
||||||
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
R.id.overview_disconnect_3h -> {
|
||||||
|
aapsLogger.debug("USER ENTRY: DISCONNECT 3h")
|
||||||
|
loopPlugin.disconnectPump(180, profile)
|
||||||
|
rxBus.send(EventRefreshOverview("suspendmenu"))
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun show(manager: FragmentManager, tag: String?) {
|
override fun show(manager: FragmentManager, tag: String?) {
|
||||||
|
|
|
@ -183,7 +183,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
overviewMenus.setupChartMenu(overview_chartMenuButton)
|
overviewMenus.setupChartMenu(overview_chartMenuButton)
|
||||||
prepareGraphs()
|
prepareGraphs()
|
||||||
|
|
||||||
overviewMenus.setupPopupMenu(overview_apsmode, requireContext(), childFragmentManager)
|
//overviewMenus.setupPopupMenu(overview_apsmode, requireContext(), childFragmentManager)
|
||||||
//overviewMenus.setupPopupMenu(overview_activeprofile, requireContext(), childFragmentManager)
|
//overviewMenus.setupPopupMenu(overview_activeprofile, requireContext(), childFragmentManager)
|
||||||
overview_activeprofile?.setOnClickListener(this)
|
overview_activeprofile?.setOnClickListener(this)
|
||||||
overview_activeprofile?.setOnLongClickListener(this)
|
overview_activeprofile?.setOnLongClickListener(this)
|
||||||
|
@ -198,6 +198,7 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
overview_carbsbutton?.setOnClickListener(this)
|
overview_carbsbutton?.setOnClickListener(this)
|
||||||
overview_quickwizardbutton?.setOnClickListener(this)
|
overview_quickwizardbutton?.setOnClickListener(this)
|
||||||
overview_quickwizardbutton?.setOnLongClickListener(this)
|
overview_quickwizardbutton?.setOnLongClickListener(this)
|
||||||
|
overview_apsmode?.setOnClickListener(this)
|
||||||
overview_apsmode?.setOnLongClickListener(this)
|
overview_apsmode?.setOnLongClickListener(this)
|
||||||
overview_activeprofile?.setOnLongClickListener(this)
|
overview_activeprofile?.setOnLongClickListener(this)
|
||||||
}
|
}
|
||||||
|
@ -344,6 +345,14 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
R.id.overview_apsmode -> {
|
||||||
|
val args = Bundle()
|
||||||
|
args.putInt("showOkCancel", 1) // 1-> true
|
||||||
|
val pvd = LoopDialog()
|
||||||
|
pvd.arguments = args
|
||||||
|
pvd.show(childFragmentManager, "Overview")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -368,10 +377,22 @@ class OverviewFragment : DaggerFragment(), View.OnClickListener, OnLongClickList
|
||||||
startActivity(Intent(v.context, QuickWizardListActivity::class.java))
|
startActivity(Intent(v.context, QuickWizardListActivity::class.java))
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
// R.id.overview_apsmode -> activity?.let { activity -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { LoopDialog().show(childFragmentManager, "Overview") })}
|
||||||
|
R.id.overview_apsmode -> {
|
||||||
|
val args = Bundle()
|
||||||
|
args.putInt("showOkCancel", 0) // 0-> false
|
||||||
|
val pvd = LoopDialog()
|
||||||
|
pvd.arguments = args
|
||||||
|
pvd.show(childFragmentManager, "Overview")
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
R.id.overview_apsmode -> {
|
R.id.overview_apsmode -> {
|
||||||
OverviewMenus.showOKCancel = false
|
OverviewMenus.showOKCancel = false
|
||||||
v.performClick()
|
v.performClick()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
R.id.overview_temptarget -> v.performClick()
|
R.id.overview_temptarget -> v.performClick()
|
||||||
R.id.overview_activeprofile -> activity?.let { activity -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { ProfileSwitchDialog().show(childFragmentManager, "Overview") })}
|
R.id.overview_activeprofile -> activity?.let { activity -> protectionCheck.queryProtection(activity, ProtectionCheck.Protection.BOLUS, UIRunnable { ProfileSwitchDialog().show(childFragmentManager, "Overview") })}
|
||||||
|
|
||||||
|
|
12
app/src/main/res/drawable/ic_loop_reconnect.xml
Normal file
12
app/src/main/res/drawable/ic_loop_reconnect.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="48dp"
|
||||||
|
android:height="48dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:pathData="M24,9.343l-5.781,-3.968l-1.328,6.688l2.102,-1.757c0.014,0.056 0.03,0.111 0.043,0.168c0.116,0.512 0.183,1.042 0.183,1.589c0,3.952 -3.204,7.156 -7.156,7.156c-3.952,0 -7.156,-3.204 -7.156,-7.156c0,-3.952 3.204,-7.156 7.156,-7.156c1.072,0 2.085,0.242 2.998,0.665c0.325,0.151 0.639,0.321 0.936,0.517l0.002,-0.002l-0.352,-1.784l1.876,-0.538c-1.567,-1.033 -3.442,-1.639 -5.46,-1.639c-5.488,0 -9.937,4.449 -9.937,9.938c0,5.488 4.449,9.937 9.937,9.937C17.551,22 22,17.551 22,12.063c0,-0.759 -0.093,-1.496 -0.254,-2.206c-0.04,-0.176 -0.085,-0.35 -0.134,-0.523L24,9.343L24,9.343z"
|
||||||
|
android:fillColor="#939393"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M14.868,22.154c0.794,0 1.49,-0.418 1.973,-1.054l-0.001,-3.926c-0.482,-0.634 -1.177,-1.052 -1.969,-1.052l-5.612,-0.001c-0.793,0 -1.487,0.416 -1.97,1.05l-0.004,3.926c0.482,0.636 1.178,1.055 1.972,1.055"
|
||||||
|
android:fillColor="#939393"/>
|
||||||
|
</vector>
|
12
app/src/main/res/drawable/ic_loop_resume.xml
Normal file
12
app/src/main/res/drawable/ic_loop_resume.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="48dp"
|
||||||
|
android:height="48dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:pathData="M24,9.343l-5.781,-3.968l-1.328,6.688l2.102,-1.757c0.014,0.056 0.03,0.111 0.043,0.168c0.116,0.512 0.183,1.042 0.183,1.589c0,3.952 -3.204,7.156 -7.156,7.156c-3.952,0 -7.156,-3.204 -7.156,-7.156c0,-3.952 3.204,-7.156 7.156,-7.156c1.072,0 2.085,0.242 2.998,0.665c0.325,0.151 0.639,0.321 0.936,0.517l0.002,-0.002l-0.352,-1.784l1.876,-0.538c-1.567,-1.033 -3.442,-1.639 -5.46,-1.639c-5.488,0 -9.937,4.449 -9.937,9.938c0,5.488 4.449,9.937 9.937,9.937C17.551,22 22,17.551 22,12.063c0,-0.759 -0.093,-1.496 -0.254,-2.206c-0.04,-0.176 -0.085,-0.35 -0.134,-0.523L24,9.343L24,9.343z"
|
||||||
|
android:fillColor="#00C03E"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M9.401,8.391l6.599,3.609l-6.599,3.609z"
|
||||||
|
android:fillColor="#00C03E"/>
|
||||||
|
</vector>
|
|
@ -23,6 +23,7 @@
|
||||||
android:padding="5dp">
|
android:padding="5dp">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:id="@+id/loop_icon"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:contentDescription="@string/boluswizard"
|
android:contentDescription="@string/boluswizard"
|
||||||
|
@ -50,7 +51,7 @@
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
@ -63,15 +64,32 @@
|
||||||
android:text="@string/loop"
|
android:text="@string/loop"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||||
|
|
||||||
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
|
android:id="@+id/overview_enable"
|
||||||
|
style="?android:attr/buttonStyle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginEnd="-4dp"
|
||||||
|
android:layout_weight="0.5"
|
||||||
|
android:paddingLeft="10dp"
|
||||||
|
android:paddingRight="10dp"
|
||||||
|
android:drawableTop="@drawable/ic_loop_resume"
|
||||||
|
android:text="@string/enableloop"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
|
android:textSize="11sp"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
android:id="@+id/overview_disable"
|
android:id="@+id/overview_disable"
|
||||||
style="?android:attr/buttonStyle"
|
style="?android:attr/buttonStyle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:layout_marginEnd="-4dp"
|
android:layout_marginEnd="-4dp"
|
||||||
android:layout_weight="0.5"
|
android:layout_weight="0.5"
|
||||||
android:paddingLeft="5dp"
|
android:paddingLeft="10dp"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="10dp"
|
||||||
android:drawableTop="@drawable/ic_loop_disabled"
|
android:drawableTop="@drawable/ic_loop_disabled"
|
||||||
android:text="@string/disableloop"
|
android:text="@string/disableloop"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
|
@ -82,146 +100,213 @@
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/overview_suspend"
|
android:id="@+id/overview_suspend"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
<TextView
|
||||||
android:id="@+id/overview_suspend_1h"
|
android:id="@+id/overview_suspend_header"
|
||||||
style="?android:attr/buttonStyle"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="0px"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="fill_parent"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginEnd="-4dp"
|
android:layout_marginLeft="10dp"
|
||||||
android:layout_weight="0.5"
|
android:layout_marginRight="10dp"
|
||||||
android:paddingLeft="5dp"
|
android:text="@string/suspendloop"
|
||||||
android:paddingRight="5dp"
|
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||||
android:drawableTop="@drawable/ic_loop_paused"
|
|
||||||
android:text="@string/suspendloopfor1h"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
|
||||||
android:textSize="11sp" />
|
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
|
||||||
android:id="@+id/overview_suspend_2h"
|
|
||||||
style="?android:attr/buttonStyle"
|
|
||||||
android:layout_width="0px"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:layout_marginEnd="-4dp"
|
|
||||||
android:layout_weight="0.5"
|
|
||||||
android:paddingLeft="5dp"
|
|
||||||
android:paddingRight="5dp"
|
|
||||||
android:drawableTop="@drawable/ic_loop_paused"
|
|
||||||
android:text="@string/suspendloopfor2h"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
|
||||||
android:textSize="11sp" />
|
|
||||||
|
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
android:id="@+id/overview_suspend_3h"
|
android:id="@+id/overview_resume"
|
||||||
style="?android:attr/buttonStyle"
|
style="?android:attr/buttonStyle"
|
||||||
android:layout_width="0px"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:layout_marginEnd="-4dp"
|
android:layout_marginEnd="-4dp"
|
||||||
android:layout_weight="0.5"
|
android:layout_weight="0.5"
|
||||||
android:paddingLeft="5dp"
|
android:drawableTop="@drawable/ic_loop_resume"
|
||||||
android:paddingRight="5dp"
|
android:paddingLeft="10dp"
|
||||||
android:drawableTop="@drawable/ic_loop_paused"
|
android:paddingRight="10dp"
|
||||||
android:text="@string/suspendloopfor3h"
|
android:text="@string/resumeloop"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
android:textSize="11sp" />
|
android:textSize="11sp"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/overview_suspend_buttons"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
|
android:id="@+id/overview_suspend_1h"
|
||||||
|
style="?android:attr/buttonStyle"
|
||||||
|
android:layout_width="0px"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_marginEnd="-4dp"
|
||||||
|
android:layout_weight="0.5"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:drawableTop="@drawable/ic_loop_paused"
|
||||||
|
android:text="@string/duration1h"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
|
android:textSize="11sp" />
|
||||||
|
|
||||||
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
|
android:id="@+id/overview_suspend_2h"
|
||||||
|
style="?android:attr/buttonStyle"
|
||||||
|
android:layout_width="0px"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_marginEnd="-4dp"
|
||||||
|
android:layout_weight="0.5"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:drawableTop="@drawable/ic_loop_paused"
|
||||||
|
android:text="@string/duration2h"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
|
android:textSize="11sp" />
|
||||||
|
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
android:id="@+id/overview_suspend_10h"
|
android:id="@+id/overview_suspend_3h"
|
||||||
style="?android:attr/buttonStyle"
|
style="?android:attr/buttonStyle"
|
||||||
android:layout_width="0px"
|
android:layout_width="0px"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:layout_marginEnd="-4dp"
|
android:layout_marginEnd="-4dp"
|
||||||
android:layout_weight="0.5"
|
android:layout_weight="0.5"
|
||||||
android:paddingLeft="5dp"
|
android:paddingLeft="5dp"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:drawableTop="@drawable/ic_loop_paused"
|
android:drawableTop="@drawable/ic_loop_paused"
|
||||||
android:text="@string/suspendloopfor10h"
|
android:text="@string/duration3h"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
android:textSize="11sp" />
|
android:textSize="11sp" />
|
||||||
|
|
||||||
|
|
||||||
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
|
android:id="@+id/overview_suspend_10h"
|
||||||
|
style="?android:attr/buttonStyle"
|
||||||
|
android:layout_width="0px"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_marginEnd="-4dp"
|
||||||
|
android:layout_weight="0.5"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:drawableTop="@drawable/ic_loop_paused"
|
||||||
|
android:text="@string/duration10h"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
|
android:textSize="11sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/overview_disconnect"
|
android:layout_width="fill_parent"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/overview_pump_header"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginLeft="10dp"
|
||||||
|
android:layout_marginRight="10dp"
|
||||||
|
android:text="@string/disconnectpump"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
android:id="@+id/overview_disconnect_15m"
|
android:id="@+id/overview_reconnect"
|
||||||
style="?android:attr/buttonStyle"
|
style="?android:attr/buttonStyle"
|
||||||
android:layout_width="0px"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:layout_marginEnd="-4dp"
|
android:layout_marginEnd="-4dp"
|
||||||
android:layout_weight="0.5"
|
android:layout_weight="0.5"
|
||||||
android:paddingLeft="5dp"
|
android:drawableTop="@drawable/ic_loop_reconnect"
|
||||||
android:paddingRight="5dp"
|
android:paddingLeft="10dp"
|
||||||
android:drawableTop="@drawable/ic_loop_disconnected"
|
android:paddingRight="10dp"
|
||||||
android:text="@string/disconnectpumpfor15m"
|
android:text="@string/reconnect"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
android:textSize="11sp" />
|
android:textSize="11sp"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
<LinearLayout
|
||||||
android:id="@+id/overview_disconnect_30m"
|
android:id="@+id/overview_disconnect_buttons"
|
||||||
style="?android:attr/buttonStyle"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="0px"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="fill_parent"
|
android:orientation="horizontal">
|
||||||
android:layout_marginEnd="-4dp"
|
|
||||||
android:layout_weight="0.5"
|
|
||||||
android:paddingLeft="5dp"
|
|
||||||
android:paddingRight="5dp"
|
|
||||||
android:drawableTop="@drawable/ic_loop_disconnected"
|
|
||||||
android:text="@string/disconnectpumpfor30m"
|
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
|
||||||
android:textSize="11sp" />
|
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
android:id="@+id/overview_disconnect_1h"
|
android:id="@+id/overview_disconnect_15m"
|
||||||
style="?android:attr/buttonStyle"
|
style="?android:attr/buttonStyle"
|
||||||
android:layout_width="0px"
|
android:layout_width="0px"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:layout_marginEnd="-4dp"
|
android:layout_marginEnd="-4dp"
|
||||||
android:layout_weight="0.5"
|
android:layout_weight="0.5"
|
||||||
android:paddingLeft="5dp"
|
android:paddingLeft="5dp"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:drawableTop="@drawable/ic_loop_disconnected"
|
android:drawableTop="@drawable/ic_loop_disconnected"
|
||||||
android:text="@string/disconnectpumpfor1h"
|
android:text="@string/duration15m"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
android:textSize="11sp" />
|
android:textSize="11sp" />
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
android:id="@+id/overview_disconnect_2h"
|
android:id="@+id/overview_disconnect_30m"
|
||||||
style="?android:attr/buttonStyle"
|
style="?android:attr/buttonStyle"
|
||||||
android:layout_width="0px"
|
android:layout_width="0px"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:layout_marginEnd="-4dp"
|
android:layout_marginEnd="-4dp"
|
||||||
android:layout_weight="0.5"
|
android:layout_weight="0.5"
|
||||||
android:paddingLeft="5dp"
|
android:paddingLeft="5dp"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:drawableTop="@drawable/ic_loop_disconnected"
|
android:drawableTop="@drawable/ic_loop_disconnected"
|
||||||
android:text="@string/disconnectpumpfor2h"
|
android:text="@string/duration30m"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
android:textSize="11sp" />
|
android:textSize="11sp" />
|
||||||
|
|
||||||
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
android:id="@+id/overview_disconnect_3h"
|
android:id="@+id/overview_disconnect_1h"
|
||||||
style="?android:attr/buttonStyle"
|
style="?android:attr/buttonStyle"
|
||||||
android:layout_width="0px"
|
android:layout_width="0px"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:layout_marginEnd="-4dp"
|
android:layout_marginEnd="-4dp"
|
||||||
android:layout_weight="0.5"
|
android:layout_weight="0.5"
|
||||||
android:paddingLeft="5dp"
|
android:paddingLeft="5dp"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:drawableTop="@drawable/ic_loop_disconnected"
|
android:drawableTop="@drawable/ic_loop_disconnected"
|
||||||
android:text="@string/disconnectpumpfor3h"
|
android:text="@string/duration1h"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
android:textSize="11sp" />
|
android:textSize="11sp" />
|
||||||
|
|
||||||
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
|
android:id="@+id/overview_disconnect_2h"
|
||||||
|
style="?android:attr/buttonStyle"
|
||||||
|
android:layout_width="0px"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_marginEnd="-4dp"
|
||||||
|
android:layout_weight="0.5"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:drawableTop="@drawable/ic_loop_disconnected"
|
||||||
|
android:text="@string/duration2h"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
|
android:textSize="11sp" />
|
||||||
|
|
||||||
|
<info.nightscout.androidaps.utils.ui.SingleClickButton
|
||||||
|
android:id="@+id/overview_disconnect_3h"
|
||||||
|
style="?android:attr/buttonStyle"
|
||||||
|
android:layout_width="0px"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_marginEnd="-4dp"
|
||||||
|
android:layout_weight="0.5"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:drawableTop="@drawable/ic_loop_disconnected"
|
||||||
|
android:text="@string/duration3h"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||||
|
android:textSize="11sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
@ -235,6 +320,16 @@
|
||||||
android:background="@color/listdelimiter" />
|
android:background="@color/listdelimiter" />
|
||||||
|
|
||||||
|
|
||||||
<include layout="@layout/okcancel" />
|
<Button
|
||||||
|
android:id="@+id/cancel"
|
||||||
|
style="@style/mdtp_ActionButton.Text"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/mdtp_cancel"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:textAlignment="textEnd" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
|
@ -472,11 +472,18 @@
|
||||||
<string name="suspendloopfor3h">Suspend loop for 3h</string>
|
<string name="suspendloopfor3h">Suspend loop for 3h</string>
|
||||||
<string name="suspendloopfor10h">Suspend loop for 10 h</string>
|
<string name="suspendloopfor10h">Suspend loop for 10 h</string>
|
||||||
<string name="suspendloopforXmin">Suspend loop for %1$d min</string>
|
<string name="suspendloopforXmin">Suspend loop for %1$d min</string>
|
||||||
|
<string name="disconnectpump">Disconnect pump</string>
|
||||||
<string name="disconnectpumpfor15m">Disconnect pump for 15 min</string>
|
<string name="disconnectpumpfor15m">Disconnect pump for 15 min</string>
|
||||||
<string name="disconnectpumpfor30m">Disconnect pump for 30 min</string>
|
<string name="disconnectpumpfor30m">Disconnect pump for 30 min</string>
|
||||||
<string name="disconnectpumpfor1h">Disconnect pump for 1 h</string>
|
<string name="disconnectpumpfor1h">Disconnect pump for 1 h</string>
|
||||||
<string name="disconnectpumpfor2h">Disconnect pump for 2 h</string>
|
<string name="disconnectpumpfor2h">Disconnect pump for 2 h</string>
|
||||||
<string name="disconnectpumpfor3h">Disconnect pump for 3 h</string>
|
<string name="disconnectpumpfor3h">Disconnect pump for 3 h</string>
|
||||||
|
<string name="duration15m">15 mins</string>
|
||||||
|
<string name="duration30m">30 mins</string>
|
||||||
|
<string name="duration1h">1 hour</string>
|
||||||
|
<string name="duration2h">2 hours</string>
|
||||||
|
<string name="duration3h">3 hours</string>
|
||||||
|
<string name="duration10h">10 hours</string>
|
||||||
<string name="resume">Resume</string>
|
<string name="resume">Resume</string>
|
||||||
<string name="reconnect">Reconnect Pump</string>
|
<string name="reconnect">Reconnect Pump</string>
|
||||||
<string name="smscommunicator_wrongduration">Wrong duration</string>
|
<string name="smscommunicator_wrongduration">Wrong duration</string>
|
||||||
|
|
13
icons/loop_reconnect.svg
Normal file
13
icons/loop_reconnect.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||||
|
height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||||
|
<g id="loop_reconnect">
|
||||||
|
<path fill="#939393" d="M24,9.343l-5.781-3.968l-1.328,6.688l2.102-1.757c0.014,0.056,0.03,0.111,0.043,0.168
|
||||||
|
c0.116,0.512,0.183,1.042,0.183,1.589c0,3.952-3.204,7.156-7.156,7.156c-3.952,0-7.156-3.204-7.156-7.156
|
||||||
|
c0-3.952,3.204-7.156,7.156-7.156c1.072,0,2.085,0.242,2.998,0.665c0.325,0.151,0.639,0.321,0.936,0.517l0.002-0.002l-0.352-1.784
|
||||||
|
l1.876-0.538c-1.567-1.033-3.442-1.639-5.46-1.639c-5.488,0-9.937,4.449-9.937,9.938c0,5.488,4.449,9.937,9.937,9.937
|
||||||
|
C17.551,22,22,17.551,22,12.063c0-0.759-0.093-1.496-0.254-2.206c-0.04-0.176-0.085-0.35-0.134-0.523L24,9.343L24,9.343z"/>
|
||||||
|
<path fill="#939393" d="M14.868,22.154c0.794,0,1.49-0.418,1.973-1.054l-0.001-3.926c-0.482-0.634-1.177-1.052-1.969-1.052
|
||||||
|
l-5.612-0.001c-0.793,0-1.487,0.416-1.97,1.05l-0.004,3.926c0.482,0.636,1.178,1.055,1.972,1.055"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
12
icons/loop_resume.svg
Normal file
12
icons/loop_resume.svg
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px"
|
||||||
|
height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||||
|
<g id="loop_resume">
|
||||||
|
<path fill="#00C03E" d="M24,9.343l-5.781-3.968l-1.328,6.688l2.102-1.757c0.014,0.056,0.03,0.111,0.043,0.168
|
||||||
|
c0.116,0.512,0.183,1.042,0.183,1.589c0,3.952-3.204,7.156-7.156,7.156c-3.952,0-7.156-3.204-7.156-7.156
|
||||||
|
c0-3.952,3.204-7.156,7.156-7.156c1.072,0,2.085,0.242,2.998,0.665c0.325,0.151,0.639,0.321,0.936,0.517l0.002-0.002l-0.352-1.784
|
||||||
|
l1.876-0.538c-1.567-1.033-3.442-1.639-5.46-1.639c-5.488,0-9.937,4.449-9.937,9.938c0,5.488,4.449,9.937,9.937,9.937
|
||||||
|
C17.551,22,22,17.551,22,12.063c0-0.759-0.093-1.496-0.254-2.206c-0.04-0.176-0.085-0.35-0.134-0.523L24,9.343L24,9.343z"/>
|
||||||
|
<polygon fill="#00C03E" points="9.401,8.391 16,12 9.401,15.609 "/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 937 B |
Loading…
Reference in a new issue