Skip to content

Commit 43a720b

Browse files
authored
Fix blood sugar saving twice when blood sugar measurement unit is changed (simpledotorg#4716)
* Override view effect handler in `BloodSugarUnitSelectionViewEffectHandler` * Handle button action in `onResume` This is done to prevent dialog automatically closing when an action button is clicked. Instead we will close it after the unit selection is updated in preferences * Update CHANGELOG * Remove unused code from `BloodSugarUnitSelectionDialog`
1 parent 497f799 commit 43a720b

File tree

2 files changed

+23
-51
lines changed

2 files changed

+23
-51
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
- Remove firebase remote config `questionnaires_enabled` logic for loading questionnaire's api.
1010
- Remove DPH/TamilNadu build variant
1111

12+
### Fixes
13+
14+
- Fix blood sugar saving twice when blood sugar measurement unit is changed
15+
1216
## 2023-06-08-8751
1317

1418
### Internal

app/src/main/java/org/simple/clinic/bloodsugar/unitselection/BloodSugarUnitSelectionDialog.kt

Lines changed: 19 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package org.simple.clinic.bloodsugar.unitselection
22

33
import android.app.Dialog
4+
import android.app.Dialog.BUTTON_POSITIVE
45
import android.content.Context
56
import android.os.Bundle
67
import android.view.LayoutInflater
78
import android.view.View
89
import android.view.ViewGroup
910
import androidx.appcompat.app.AlertDialog
10-
import androidx.fragment.app.FragmentManager
1111
import com.google.android.material.dialog.MaterialAlertDialogBuilder
12-
import com.jakewharton.rxbinding3.widget.checkedChanges
1312
import com.spotify.mobius.functions.Consumer
1413
import io.reactivex.Observable
1514
import io.reactivex.rxkotlin.cast
@@ -43,34 +42,6 @@ class BloodSugarUnitSelectionDialog : BaseDialog<
4342
@Inject
4443
lateinit var router: Router
4544

46-
companion object {
47-
48-
private const val FRAGMENT_TAG = "blood_sugar_unit_selection_tag"
49-
private const val KEY_UNIT_PREF = "bloodSugarUnitSelection"
50-
51-
fun show(fragmentManager: FragmentManager, bloodSugarUnitPreference: BloodSugarUnitPreference) {
52-
val existingFragment = fragmentManager.findFragmentByTag(FRAGMENT_TAG)
53-
54-
if (existingFragment != null) {
55-
fragmentManager
56-
.beginTransaction()
57-
.remove(existingFragment)
58-
.commitNowAllowingStateLoss()
59-
}
60-
61-
val arguments = Bundle()
62-
arguments.putSerializable(KEY_UNIT_PREF, bloodSugarUnitPreference)
63-
64-
val fragment = BloodSugarUnitSelectionDialog()
65-
fragment.arguments = arguments
66-
67-
fragmentManager
68-
.beginTransaction()
69-
.add(fragment, FRAGMENT_TAG)
70-
.commitNowAllowingStateLoss()
71-
}
72-
}
73-
7445
override fun bindView(
7546
layoutInflater: LayoutInflater,
7647
container: ViewGroup?
@@ -86,6 +57,8 @@ class BloodSugarUnitSelectionDialog : BaseDialog<
8657
viewEffectsConsumer = viewEffectsConsumer
8758
).build()
8859

60+
override fun viewEffectHandler() = BloodSugarUnitSelectionViewEffectHandler(this)
61+
8962
override fun events(): Observable<BloodSugarUnitSelectionEvent> = hotEvents.cast()
9063

9164
override fun onAttach(context: Context) {
@@ -94,38 +67,33 @@ class BloodSugarUnitSelectionDialog : BaseDialog<
9467
}
9568

9669
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
97-
val radioIdToBloodSugarUnits = mapOf(
98-
R.id.bloodSugarUnitMg to BloodSugarUnitPreference.Mg,
99-
R.id.bloodSugarUnitMmol to BloodSugarUnitPreference.Mmol
100-
)
101-
10270
return MaterialAlertDialogBuilder(requireContext())
10371
.setTitle(R.string.blood_sugar_unit_selection_choose)
104-
.setPositiveButton(R.string.blood_sugar_unit_selection_done) { _, _ ->
105-
val bloodSugarUnitSelectionValue = radioIdToBloodSugarUnits.getValue(bloodSugarUnitGroup.checkedRadioButtonId)
106-
hotEvents.onNext(DoneClicked(bloodSugarUnitSelectionValue))
107-
}
72+
.setPositiveButton(R.string.blood_sugar_unit_selection_done, null)
10873
.create()
10974
}
11075

76+
override fun onResume() {
77+
super.onResume()
78+
if (dialog != null) {
79+
val radioIdToBloodSugarUnits = mapOf(
80+
R.id.bloodSugarUnitMg to BloodSugarUnitPreference.Mg,
81+
R.id.bloodSugarUnitMmol to BloodSugarUnitPreference.Mmol
82+
)
83+
val alertDialog = (dialog as AlertDialog)
84+
alertDialog.getButton(BUTTON_POSITIVE).setOnClickListener {
85+
val bloodSugarUnitSelectionValue = radioIdToBloodSugarUnits.getValue(bloodSugarUnitGroup.checkedRadioButtonId)
86+
hotEvents.onNext(DoneClicked(bloodSugarUnitSelectionValue))
87+
}
88+
}
89+
}
90+
11191
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
11292
val view = super.onCreateView(inflater, container, savedInstanceState)
11393
(dialog as? AlertDialog)?.setView(view)
11494
return view
11595
}
11696

117-
private fun radioButtonClicks(): Observable<BloodSugarUnitSelectionEvent> {
118-
return bloodSugarUnitGroup
119-
.checkedChanges()
120-
.map { checkedId ->
121-
when (checkedId) {
122-
R.id.bloodSugarUnitMg -> SaveBloodSugarUnitPreference(BloodSugarUnitPreference.Mg)
123-
R.id.bloodSugarUnitMmol -> SaveBloodSugarUnitPreference(BloodSugarUnitPreference.Mmol)
124-
else -> SaveBloodSugarUnitPreference(BloodSugarUnitPreference.Mg)
125-
}
126-
}
127-
}
128-
12997
override fun closeDialog() {
13098
router.pop()
13199
}

0 commit comments

Comments
 (0)