TempTargetDialog -> jetpack

This commit is contained in:
Milos Kozak 2021-01-21 20:41:29 +01:00
parent 19b82f2246
commit 4a2213d11e
2 changed files with 82 additions and 66 deletions

View file

@ -4,30 +4,29 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import com.google.common.base.Joiner import com.google.common.base.Joiner
import com.google.common.collect.Lists import com.google.common.collect.Lists
import info.nightscout.androidaps.Constants import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.R import info.nightscout.androidaps.R
import info.nightscout.androidaps.data.Profile import info.nightscout.androidaps.data.Profile
import info.nightscout.androidaps.databinding.DialogTemptargetBinding
import info.nightscout.androidaps.db.Source import info.nightscout.androidaps.db.Source
import info.nightscout.androidaps.db.TempTarget import info.nightscout.androidaps.db.TempTarget
import info.nightscout.androidaps.interfaces.ActivePluginProvider import info.nightscout.androidaps.interfaces.ActivePluginProvider
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.interfaces.ProfileFunction import info.nightscout.androidaps.interfaces.ProfileFunction
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.utils.DefaultValueHelper import info.nightscout.androidaps.utils.DefaultValueHelper
import info.nightscout.androidaps.utils.HtmlHelper import info.nightscout.androidaps.utils.HtmlHelper
import info.nightscout.androidaps.utils.alertDialogs.OKDialog import info.nightscout.androidaps.utils.alertDialogs.OKDialog
import info.nightscout.androidaps.utils.resources.ResourceHelper import info.nightscout.androidaps.utils.resources.ResourceHelper
import kotlinx.android.synthetic.main.dialog_temptarget.*
import kotlinx.android.synthetic.main.okcancel.*
import java.text.DecimalFormat import java.text.DecimalFormat
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
class TempTargetDialog : DialogFragmentWithDate() { class TempTargetDialog : DialogFragmentWithDate() {
@Inject lateinit var constraintChecker: ConstraintChecker @Inject lateinit var constraintChecker: ConstraintChecker
@Inject lateinit var resourceHelper: ResourceHelper @Inject lateinit var resourceHelper: ResourceHelper
@Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var profileFunction: ProfileFunction
@ -37,44 +36,51 @@ class TempTargetDialog : DialogFragmentWithDate() {
lateinit var reasonList: List<String> lateinit var reasonList: List<String>
private var _binding: DialogTemptargetBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onSaveInstanceState(savedInstanceState: Bundle) { override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState) super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putDouble("overview_temptarget_duration", overview_temptarget_duration.value) savedInstanceState.putDouble("duration", binding.duration.value)
savedInstanceState.putDouble("overview_temptarget_temptarget", overview_temptarget_temptarget.value) savedInstanceState.putDouble("temptarget", binding.temptarget.value)
} }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? { savedInstanceState: Bundle?): View {
onCreateViewGeneral() onCreateViewGeneral()
return inflater.inflate(R.layout.dialog_temptarget, container, false) _binding = DialogTemptargetBinding.inflate(inflater, container, false)
return binding.root
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
overview_temptarget_duration.setParams(savedInstanceState?.getDouble("overview_temptarget_duration") binding.duration.setParams(savedInstanceState?.getDouble("duration")
?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, ok) ?: 0.0, 0.0, Constants.MAX_PROFILE_SWITCH_DURATION, 10.0, DecimalFormat("0"), false, binding.okcancel.ok)
if (profileFunction.getUnits() == Constants.MMOL) if (profileFunction.getUnits() == Constants.MMOL)
overview_temptarget_temptarget.setParams( binding.temptarget.setParams(
savedInstanceState?.getDouble("overview_temptarget_temptarget") savedInstanceState?.getDouble("temptarget")
?: 8.0, ?: 8.0,
Constants.MIN_TT_MMOL, Constants.MAX_TT_MMOL, 0.1, DecimalFormat("0.0"), false, ok) Constants.MIN_TT_MMOL, Constants.MAX_TT_MMOL, 0.1, DecimalFormat("0.0"), false, binding.okcancel.ok)
else else
overview_temptarget_temptarget.setParams( binding.temptarget.setParams(
savedInstanceState?.getDouble("overview_temptarget_temptarget") savedInstanceState?.getDouble("temptarget")
?: 144.0, ?: 144.0,
Constants.MIN_TT_MGDL, Constants.MAX_TT_MGDL, 1.0, DecimalFormat("0"), false, ok) Constants.MIN_TT_MGDL, Constants.MAX_TT_MGDL, 1.0, DecimalFormat("0"), false, binding.okcancel.ok)
val units = profileFunction.getUnits() val units = profileFunction.getUnits()
overview_temptarget_units.text = if (units == Constants.MMOL) resourceHelper.gs(R.string.mmol) else resourceHelper.gs(R.string.mgdl) binding.units.text = if (units == Constants.MMOL) resourceHelper.gs(R.string.mmol) else resourceHelper.gs(R.string.mgdl)
// temp target // temp target
context?.let { context -> context?.let { context ->
if (activePlugin.activeTreatments.tempTargetFromHistory != null) if (activePlugin.activeTreatments.tempTargetFromHistory != null)
overview_temptarget_cancel?.visibility = View.VISIBLE binding.targetCancel.visibility = View.VISIBLE
else else
overview_temptarget_cancel?.visibility = View.GONE binding.targetCancel.visibility = View.GONE
reasonList = Lists.newArrayList( reasonList = Lists.newArrayList(
resourceHelper.gs(R.string.manual), resourceHelper.gs(R.string.manual),
@ -83,59 +89,67 @@ class TempTargetDialog : DialogFragmentWithDate() {
resourceHelper.gs(R.string.hypo) resourceHelper.gs(R.string.hypo)
) )
val adapterReason = ArrayAdapter(context, R.layout.spinner_centered, reasonList) val adapterReason = ArrayAdapter(context, R.layout.spinner_centered, reasonList)
overview_temptarget_reason.adapter = adapterReason binding.reason.adapter = adapterReason
overview_temptarget_cancel?.setOnClickListener { shortClick(it) } binding.targetCancel.setOnClickListener { shortClick(it) }
overview_temptarget_eating_soon?.setOnClickListener { shortClick(it) } binding.eatingSoon.setOnClickListener { shortClick(it) }
overview_temptarget_activity?.setOnClickListener { shortClick(it) } binding.activity.setOnClickListener { shortClick(it) }
overview_temptarget_hypo?.setOnClickListener { shortClick(it) } binding.hypo.setOnClickListener { shortClick(it) }
overview_temptarget_eating_soon?.setOnLongClickListener { binding.eatingSoon.setOnLongClickListener {
longClick(it) longClick(it)
return@setOnLongClickListener true return@setOnLongClickListener true
} }
overview_temptarget_activity?.setOnLongClickListener { binding.activity.setOnLongClickListener {
longClick(it) longClick(it)
return@setOnLongClickListener true return@setOnLongClickListener true
} }
overview_temptarget_hypo?.setOnLongClickListener { binding.hypo.setOnLongClickListener {
longClick(it) longClick(it)
return@setOnLongClickListener true return@setOnLongClickListener true
} }
} }
} }
private fun shortClick(v:View){ private fun shortClick(v: View) {
v.performLongClick() v.performLongClick()
if (submit()) dismiss() if (submit()) dismiss()
} }
private fun longClick(v:View) { private fun longClick(v: View) {
when (v.id) { when (v.id) {
R.id.overview_temptarget_eating_soon -> { R.id.eating_soon -> {
overview_temptarget_temptarget.value = defaultValueHelper.determineEatingSoonTT() binding.temptarget.value = defaultValueHelper.determineEatingSoonTT()
overview_temptarget_duration.value = defaultValueHelper.determineEatingSoonTTDuration().toDouble() binding.duration.value = defaultValueHelper.determineEatingSoonTTDuration().toDouble()
overview_temptarget_reason.setSelection(reasonList.indexOf( resourceHelper.gs(R.string.eatingsoon))) binding.reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.eatingsoon)))
} }
R.id.overview_temptarget_activity -> {
overview_temptarget_temptarget.value = defaultValueHelper.determineActivityTT() R.id.activity -> {
overview_temptarget_duration.value = defaultValueHelper.determineActivityTTDuration().toDouble() binding.temptarget.value = defaultValueHelper.determineActivityTT()
overview_temptarget_reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.activity))) binding.duration.value = defaultValueHelper.determineActivityTTDuration().toDouble()
binding.reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.activity)))
} }
R.id.overview_temptarget_hypo -> {
overview_temptarget_temptarget.value = defaultValueHelper.determineHypoTT() R.id.hypo -> {
overview_temptarget_duration.value = defaultValueHelper.determineHypoTTDuration().toDouble() binding.temptarget.value = defaultValueHelper.determineHypoTT()
overview_temptarget_reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.hypo))) binding.duration.value = defaultValueHelper.determineHypoTTDuration().toDouble()
binding.reason.setSelection(reasonList.indexOf(resourceHelper.gs(R.string.hypo)))
} }
} }
} }
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun submit(): Boolean { override fun submit(): Boolean {
if (_binding == null) return false
val actions: LinkedList<String> = LinkedList() val actions: LinkedList<String> = LinkedList()
val reason = overview_temptarget_reason?.selectedItem?.toString() ?: return false val reason = binding.reason.selectedItem?.toString() ?: return false
val unitResId = if (profileFunction.getUnits() == Constants.MGDL) R.string.mgdl else R.string.mmol val unitResId = if (profileFunction.getUnits() == Constants.MGDL) R.string.mgdl else R.string.mmol
val target = overview_temptarget_temptarget.value val target = binding.temptarget.value
val duration = overview_temptarget_duration.value.toInt() val duration = binding.duration.value.toInt()
if (target != 0.0 && duration != 0) { if (target != 0.0 && duration != 0) {
actions.add(resourceHelper.gs(R.string.reason) + ": " + reason) actions.add(resourceHelper.gs(R.string.reason) + ": " + reason)
actions.add(resourceHelper.gs(R.string.target_label) + ": " + Profile.toCurrentUnitsString(profileFunction, target) + " " + resourceHelper.gs(unitResId)) actions.add(resourceHelper.gs(R.string.target_label) + ": " + Profile.toCurrentUnitsString(profileFunction, target) + " " + resourceHelper.gs(unitResId))
@ -147,7 +161,7 @@ class TempTargetDialog : DialogFragmentWithDate() {
actions.add(resourceHelper.gs(R.string.time) + ": " + dateUtil.dateAndTimeString(eventTime)) actions.add(resourceHelper.gs(R.string.time) + ": " + dateUtil.dateAndTimeString(eventTime))
activity?.let { activity -> activity?.let { activity ->
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal_temporarytarget), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), Runnable { OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.careportal_temporarytarget), HtmlHelper.fromHtml(Joiner.on("<br/>").join(actions)), {
aapsLogger.debug("USER ENTRY: TEMP TARGET $target duration: $duration") aapsLogger.debug("USER ENTRY: TEMP TARGET $target duration: $duration")
if (target == 0.0 || duration == 0) { if (target == 0.0 || duration == 0) {
val tempTarget = TempTarget() val tempTarget = TempTarget()

View file

@ -64,13 +64,13 @@
android:textStyle="bold" /> android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.NumberPicker <info.nightscout.androidaps.utils.ui.NumberPicker
android:id="@+id/overview_temptarget_temptarget" android:id="@+id/temptarget"
android:layout_width="130dp" android:layout_width="130dp"
android:layout_height="40dp" android:layout_height="40dp"
android:layout_gravity="center_vertical" /> android:layout_gravity="center_vertical" />
<TextView <TextView
android:id="@+id/overview_temptarget_units" android:id="@+id/units"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
@ -99,7 +99,7 @@
android:textStyle="bold" /> android:textStyle="bold" />
<info.nightscout.androidaps.utils.ui.MinutesNumberPicker <info.nightscout.androidaps.utils.ui.MinutesNumberPicker
android:id="@+id/overview_temptarget_duration" android:id="@+id/duration"
android:layout_width="130dp" android:layout_width="130dp"
android:layout_height="40dp" /> android:layout_height="40dp" />
@ -132,12 +132,12 @@
android:textStyle="bold" /> android:textStyle="bold" />
<Spinner <Spinner
android:id="@+id/overview_temptarget_reason" android:id="@+id/reason"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingLeft="5dp" android:paddingLeft="5dp"
android:paddingRight="5dp" android:paddingRight="5dp" />
android:layout_gravity="center_vertical" />
</LinearLayout> </LinearLayout>
@ -149,67 +149,69 @@
android:orientation="horizontal"> android:orientation="horizontal">
<info.nightscout.androidaps.utils.ui.SingleClickButton <info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/overview_temptarget_cancel" android:id="@+id/target_cancel"
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:paddingRight="5dp"
android:drawableTop="@drawable/ic_target_cancel" android:drawableTop="@drawable/ic_target_cancel"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="@string/cancel" android:text="@string/cancel"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/tempTargetConfirmation" android:textColor="@color/tempTargetConfirmation"
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_temptarget_eating_soon" android:id="@+id/eating_soon"
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:paddingRight="5dp"
android:drawableTop="@drawable/ic_target_eatingsoon" android:drawableTop="@drawable/ic_target_eatingsoon"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="@string/eatingsoon" android:text="@string/eatingsoon"
android:textColor="@color/carbs"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/carbs"
android:textSize="11sp" /> android:textSize="11sp" />
<info.nightscout.androidaps.utils.ui.SingleClickButton <info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/overview_temptarget_activity" android:id="@+id/activity"
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:drawableTop="@drawable/ic_target_activity"
android:paddingLeft="5dp" android:paddingLeft="5dp"
android:paddingRight="5dp" android:paddingRight="5dp"
android:drawableTop="@drawable/ic_target_activity"
android:text="@string/activity" android:text="@string/activity"
android:textColor="@color/exercise"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/exercise"
android:textSize="11sp" /> android:textSize="11sp" />
<info.nightscout.androidaps.utils.ui.SingleClickButton <info.nightscout.androidaps.utils.ui.SingleClickButton
android:id="@+id/overview_temptarget_hypo" android:id="@+id/hypo"
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_weight="0.5" android:layout_weight="0.5"
android:drawableTop="@drawable/ic_target_hypo"
android:paddingLeft="5dp" android:paddingLeft="5dp"
android:paddingRight="5dp" android:paddingRight="5dp"
android:drawableTop="@drawable/ic_target_hypo"
android:text="@string/hypo" android:text="@string/hypo"
android:textColor="@color/low"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/low"
android:textSize="11sp" /> android:textSize="11sp" />
</LinearLayout> </LinearLayout>
<include layout="@layout/okcancel" /> <include
android:id="@+id/okcancel"
layout="@layout/okcancel" />
</LinearLayout> </LinearLayout>