@@ -14,56 +14,60 @@ private typealias Callback<T> = (T) -> Unit
14
14
15
15
abstract class ViewRegister <in V : View , Output > {
16
16
17
- var callback: (((Output ? ) -> Unit ))? = null
17
+ private var callback: (((Output ? ) -> Unit ))? = null
18
18
19
19
fun register (view : V , callback : Callback <Output ?>) {
20
20
this .callback = callback
21
- register (view)
21
+ registerView (view)
22
22
}
23
23
24
- abstract fun register (view : V )
25
24
26
- abstract fun deregister (view : V )
25
+ fun deregister (view : V ) {
26
+ deregisterFromView(view)
27
+ this .callback = null
28
+ }
29
+
30
+ abstract fun registerView (view : V )
31
+
32
+ open fun deregisterFromView (view : V ) {}
27
33
28
34
abstract fun getValue (view : V ): Output
35
+
36
+ protected fun notifyChange (output : Output ? ) {
37
+ callback?.invoke(output)
38
+ }
29
39
}
30
40
31
41
class OnTextChangedRegister : ViewRegister <TextView , String >(), TextWatcher {
32
42
33
- override fun register (view : TextView ) {
43
+ override fun registerView (view : TextView ) {
34
44
view.addTextChangedListener(this )
35
45
}
36
46
37
- override fun deregister (view : TextView ) {
38
- this .callback = null
47
+ override fun deregisterFromView (view : TextView ) {
39
48
view.removeTextChangedListener(this )
40
49
}
41
50
42
51
override fun afterTextChanged (s : Editable ? ) = Unit
43
52
44
53
override fun beforeTextChanged (s : CharSequence? , start : Int , count : Int , after : Int ) = Unit
45
54
46
- override fun onTextChanged (s : CharSequence? , start : Int , before : Int , count : Int ) {
47
- @Suppress(" UNCHECKED_CAST" )
48
- callback?.invoke(s?.toString())
49
- }
55
+ override fun onTextChanged (s : CharSequence? , start : Int , before : Int , count : Int ) = notifyChange(s?.toString())
50
56
51
57
override fun getValue (view : TextView ) = view.text.toString()
52
58
}
53
59
54
60
class OnCheckedChangeRegister : ViewRegister <CompoundButton , Boolean >(), CompoundButton.OnCheckedChangeListener {
55
61
56
- override fun register (view : CompoundButton ) {
62
+ override fun registerView (view : CompoundButton ) {
57
63
view.setOnCheckedChangeListener(this )
58
64
}
59
65
60
- override fun deregister (view : CompoundButton ) {
66
+ override fun deregisterFromView (view : CompoundButton ) {
61
67
view.setOnCheckedChangeListener(null )
62
68
}
63
69
64
- override fun onCheckedChanged (buttonView : CompoundButton ? , isChecked : Boolean ) {
65
- callback?.invoke(isChecked)
66
- }
70
+ override fun onCheckedChanged (buttonView : CompoundButton ? , isChecked : Boolean ) = notifyChange(isChecked)
67
71
68
72
override fun getValue (view : CompoundButton ) = view.isChecked
69
73
}
@@ -82,14 +86,10 @@ class OnDateChangedRegister(private val initialValue: Calendar) : ViewRegister<D
82
86
83
87
private val listener = WeakOnDateChangedListener (this )
84
88
85
- override fun register (view : DatePicker ) {
89
+ override fun registerView (view : DatePicker ) {
86
90
view.init (initialValue[YEAR ], initialValue[MONTH ], initialValue[DAY_OF_MONTH ], listener)
87
91
}
88
92
89
- override fun deregister (view : DatePicker ) {
90
- this .callback = null
91
- }
92
-
93
93
override fun getValue (view : DatePicker ) = getInstance().apply {
94
94
set(MONTH , view.month)
95
95
set(DAY_OF_MONTH , view.dayOfMonth)
@@ -101,18 +101,18 @@ class OnDateChangedRegister(private val initialValue: Calendar) : ViewRegister<D
101
101
calendar[MONTH ] = monthOfYear
102
102
calendar[DAY_OF_MONTH ] = dayOfMonth
103
103
calendar[YEAR ] = year
104
- callback?.invoke (calendar)
104
+ notifyChange (calendar)
105
105
}
106
106
107
107
}
108
108
109
109
class OnTimeChangedRegister : ViewRegister <TimePicker , Calendar >(), TimePicker.OnTimeChangedListener {
110
110
111
- override fun register (view : TimePicker ) {
111
+ override fun registerView (view : TimePicker ) {
112
112
view.setOnTimeChangedListener(this )
113
113
}
114
114
115
- override fun deregister (view : TimePicker ) {
115
+ override fun deregisterFromView (view : TimePicker ) {
116
116
view.setOnTimeChangedListener(null )
117
117
}
118
118
@@ -126,48 +126,42 @@ class OnTimeChangedRegister : ViewRegister<TimePicker, Calendar>(), TimePicker.O
126
126
}
127
127
}!!
128
128
129
- override fun onTimeChanged (view : TimePicker , hourOfDay : Int , minute : Int ) {
130
- callback?.invoke(getInstance().apply {
131
- set(HOUR_OF_DAY , hourOfDay)
132
- set(MINUTE , minute)
133
- })
134
- }
129
+ override fun onTimeChanged (view : TimePicker , hourOfDay : Int , minute : Int ) = notifyChange(getInstance().apply {
130
+ set(HOUR_OF_DAY , hourOfDay)
131
+ set(MINUTE , minute)
132
+ })
135
133
136
134
}
137
135
138
136
class OnRatingBarChangedRegister : ViewRegister <RatingBar , Float >(), RatingBar.OnRatingBarChangeListener {
139
137
140
- override fun register (view : RatingBar ) {
138
+ override fun registerView (view : RatingBar ) {
141
139
view.onRatingBarChangeListener = this
142
140
}
143
141
144
- override fun deregister (view : RatingBar ) {
142
+ override fun deregisterFromView (view : RatingBar ) {
145
143
view.onRatingBarChangeListener = null
146
144
}
147
145
148
146
override fun getValue (view : RatingBar ) = view.rating
149
147
150
- override fun onRatingChanged (ratingBar : RatingBar ? , rating : Float , fromUser : Boolean ) {
151
- callback?.invoke(rating)
152
- }
148
+ override fun onRatingChanged (ratingBar : RatingBar ? , rating : Float , fromUser : Boolean ) = notifyChange(rating)
153
149
154
150
}
155
151
156
152
class OnSeekBarChangedRegister : ViewRegister <SeekBar , Int >(), SeekBar.OnSeekBarChangeListener {
157
153
158
- override fun register (view : SeekBar ) {
154
+ override fun registerView (view : SeekBar ) {
159
155
view.setOnSeekBarChangeListener(this )
160
156
}
161
157
162
- override fun deregister (view : SeekBar ) {
158
+ override fun deregisterFromView (view : SeekBar ) {
163
159
view.setOnSeekBarChangeListener(null )
164
160
}
165
161
166
162
override fun getValue (view : SeekBar ) = view.progress
167
163
168
- override fun onProgressChanged (seekBar : SeekBar ? , progress : Int , fromUser : Boolean ) {
169
- callback?.invoke(progress)
170
- }
164
+ override fun onProgressChanged (seekBar : SeekBar ? , progress : Int , fromUser : Boolean ) = notifyChange(progress)
171
165
172
166
override fun onStartTrackingTouch (seekBar : SeekBar ? ) {
173
167
}
0 commit comments