Skip to content

Commit 1f6b2e9

Browse files
committed
fix icon text text watchers being set several times resulting in multiple calls
1 parent 46e325a commit 1f6b2e9

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

core/src/main/java/com/example/util/simpletimetracker/core/delegates/iconSelection/viewDelegate/IconSelectionViewDelegate.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.example.util.simpletimetracker.core.delegates.iconSelection.viewDele
33
import android.content.Context
44
import android.content.res.ColorStateList
55
import android.content.res.Resources
6+
import android.text.TextWatcher
67
import androidx.core.view.isVisible
78
import androidx.core.view.updatePadding
89
import androidx.core.widget.doAfterTextChanged
@@ -90,11 +91,20 @@ object IconSelectionViewDelegate {
9091
)
9192
}
9293

94+
fun onDestroyView(
95+
textWatcher: TextWatcher?,
96+
layout: IconSelectionLayoutBinding,
97+
) = with(layout) {
98+
// Remove textWatcher because it will be set again on init ViewModel,
99+
// to avoid several watcher being set on screen navigation forward and backward.
100+
textWatcher?.let(etIconSelectionText::removeTextChangedListener)
101+
}
102+
93103
fun updateUi(
94104
icon: RecordTypeIcon?,
95105
viewModel: IconSelectionViewModelDelegate,
96106
layout: IconSelectionLayoutBinding,
97-
) = with(layout) {
107+
): TextWatcher = with(layout) {
98108
(icon as? RecordTypeIcon.Text)?.text?.let {
99109
etIconSelectionText.setText(it)
100110
}

features/feature_change_record_tag/src/main/java/com/example/util/simpletimetracker/feature_change_record_tag/view/ChangeRecordTagFragment.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.example.util.simpletimetracker.feature_change_record_tag.view
22

33
import android.animation.ValueAnimator
44
import android.os.Bundle
5+
import android.text.TextWatcher
56
import android.view.LayoutInflater
67
import android.view.View
78
import android.view.ViewGroup
@@ -122,8 +123,9 @@ class ChangeRecordTagFragment :
122123
createHintBigAdapterDelegate(),
123124
)
124125
}
125-
private var typeColorAnimator: ValueAnimator? = null
126126
private var iconsLayoutManager: GridLayoutManager? = null
127+
private var typeColorAnimator: ValueAnimator? = null
128+
private var iconTextWatcher: TextWatcher? = null
127129

128130
private val params: ChangeTagData by fragmentArgumentDelegate(
129131
key = ARGS_PARAMS, default = ChangeTagData.New(),
@@ -220,6 +222,14 @@ class ChangeRecordTagFragment :
220222
}
221223
}
222224

225+
override fun onDestroyView() {
226+
IconSelectionViewDelegate.onDestroyView(
227+
textWatcher = iconTextWatcher,
228+
layout = binding.containerChangeRecordTypeIcon,
229+
)
230+
super.onDestroyView()
231+
}
232+
223233
override fun onDestroy() {
224234
typeColorAnimator?.cancel()
225235
super.onDestroy()
@@ -240,7 +250,7 @@ class ChangeRecordTagFragment :
240250
private fun updateUi(item: CategoryViewData.Record) = with(binding) {
241251
etChangeRecordTagName.setText(item.name)
242252
etChangeRecordTagName.setSelection(item.name.length)
243-
IconSelectionViewDelegate.updateUi(
253+
iconTextWatcher = IconSelectionViewDelegate.updateUi(
244254
icon = item.icon,
245255
viewModel = viewModel,
246256
layout = containerChangeRecordTypeIcon,

features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.example.util.simpletimetracker.feature_change_record_type.view
22

33
import android.animation.ValueAnimator
44
import android.os.Bundle
5+
import android.text.TextWatcher
56
import android.view.LayoutInflater
67
import android.view.View
78
import android.view.ViewGroup
@@ -128,6 +129,7 @@ class ChangeRecordTypeFragment :
128129
}
129130
private var iconsLayoutManager: GridLayoutManager? = null
130131
private var typeColorAnimator: ValueAnimator? = null
132+
private var iconTextWatcher: TextWatcher? = null
131133

132134
private val params: ChangeRecordTypeParams by fragmentArgumentDelegate(
133135
key = ARGS_PARAMS,
@@ -243,6 +245,14 @@ class ChangeRecordTypeFragment :
243245
GoalsViewDelegate.onResume(binding.layoutChangeRecordTypeGoals)
244246
}
245247

248+
override fun onDestroyView() {
249+
IconSelectionViewDelegate.onDestroyView(
250+
textWatcher = iconTextWatcher,
251+
layout = binding.containerChangeRecordTypeIcon,
252+
)
253+
super.onDestroyView()
254+
}
255+
246256
override fun onDestroy() {
247257
typeColorAnimator?.cancel()
248258
super.onDestroy()
@@ -271,7 +281,7 @@ class ChangeRecordTypeFragment :
271281
private fun updateUi(item: RecordTypeViewData) = with(binding) {
272282
etChangeRecordTypeName.setText(item.name)
273283
etChangeRecordTypeName.setSelection(item.name.length)
274-
IconSelectionViewDelegate.updateUi(
284+
iconTextWatcher = IconSelectionViewDelegate.updateUi(
275285
icon = item.iconId,
276286
viewModel = viewModel,
277287
layout = containerChangeRecordTypeIcon,

0 commit comments

Comments
 (0)