Skip to content

Commit 1650635

Browse files
author
Alex
committed
update api
1 parent a496783 commit 1650635

File tree

5 files changed

+84
-50
lines changed

5 files changed

+84
-50
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ buildscript {
55
min_sdk_version = 17
66
sdk_version = 29
77

8-
kotlin_version = '1.3.72'
8+
kotlin_version = '1.4.0'
99
rxjava_version = '3.0.5'
1010
rxandroid_version = '3.0.0'
1111
archx_version = '2.2.0'

reactiveviewmodel/src/main/java/com/alexdeww/reactiveviewmodel/widget/BaseVisualControl.kt

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,21 @@ import io.reactivex.rxjava3.core.Observable
1010
import io.reactivex.rxjava3.disposables.CompositeDisposable
1111
import io.reactivex.rxjava3.disposables.Disposable
1212

13-
typealias OnVisibleChangeAction = (isVisible: Boolean) -> Unit
14-
1513
abstract class BaseVisualControl<T>(
16-
initialValue: T
14+
initialValue: T,
15+
initialEnabled: Boolean,
16+
initialVisibility: Visibility
1717
) : BaseControl() {
1818

19+
enum class Visibility(val value: Int) {
20+
VISIBLE(View.VISIBLE),
21+
INVISIBLE(View.INVISIBLE),
22+
GONE(View.GONE)
23+
}
24+
1925
val value = state(initialValue)
20-
val isEnabled = state(true)
21-
val isVisible = state(true)
26+
val enabled = state(initialEnabled)
27+
val visibility = state(initialVisibility)
2228

2329
val actionChangeValue = action<T>()
2430

@@ -38,25 +44,24 @@ abstract class BaseVisualControl<T>(
3844

3945
fun defaultBindTo(
4046
view: View,
41-
invisibleState: Int = View.GONE,
42-
onVisibleChange: OnVisibleChangeAction? = null
47+
bindEnable: Boolean,
48+
bindVisible: Boolean
4349
): Disposable = CompositeDisposable().apply {
44-
add(
45-
isEnabled
46-
.toViewFlowable()
47-
.subscribe { view.isEnabled = it }
48-
)
50+
if (bindEnable) {
51+
add(
52+
enabled
53+
.toViewFlowable()
54+
.subscribe { view.isEnabled = it }
55+
)
56+
}
4957

50-
add(
51-
isVisible
52-
.toViewFlowable()
53-
.subscribe {
54-
when {
55-
onVisibleChange != null -> onVisibleChange.invoke(it)
56-
else -> view.visibility = if (it) View.VISIBLE else invisibleState
57-
}
58-
}
59-
)
58+
if (bindVisible) {
59+
add(
60+
visibility
61+
.toViewFlowable()
62+
.subscribe { view.visibility = it.value }
63+
)
64+
}
6065
}
6166

6267
protected open fun transformObservable(observable: Observable<T>): Observable<T> = observable

reactiveviewmodel/src/main/java/com/alexdeww/reactiveviewmodel/widget/CheckControl.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,29 @@ import io.reactivex.rxjava3.disposables.Disposable
99

1010
@SuppressLint("CheckResult")
1111
class CheckControl internal constructor(
12-
initialChecked: Boolean
13-
) : BaseVisualControl<Boolean>(initialChecked)
12+
initialChecked: Boolean,
13+
initialEnabled: Boolean,
14+
initialVisibility: Visibility
15+
) : BaseVisualControl<Boolean>(initialChecked, initialEnabled, initialVisibility)
1416

15-
fun checkControl(initialChecked: Boolean = false): CheckControl = CheckControl(initialChecked)
17+
fun checkControl(
18+
initialChecked: Boolean = false,
19+
initialEnabled: Boolean = true,
20+
initialVisibility: BaseVisualControl.Visibility = BaseVisualControl.Visibility.VISIBLE
21+
): CheckControl = CheckControl(
22+
initialChecked = initialChecked,
23+
initialEnabled = initialEnabled,
24+
initialVisibility = initialVisibility
25+
)
1626

1727
fun CheckControl.bindTo(
1828
compoundButton: CompoundButton,
19-
invisibleState: Int = View.GONE,
20-
onVisibleChange: OnVisibleChangeAction? = null
29+
bindEnable: Boolean = true,
30+
bindVisible: Boolean = true
2131
): Disposable {
2232
var editing = false
2333
return CompositeDisposable().apply {
24-
add(defaultBindTo(compoundButton, invisibleState, onVisibleChange))
34+
add(defaultBindTo(compoundButton, bindEnable, bindVisible))
2535
add(
2636
value
2737
.toViewFlowable()

reactiveviewmodel/src/main/java/com/alexdeww/reactiveviewmodel/widget/InputControl.kt

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ typealias FormatterAction = (text: String) -> String
1717
class InputControl internal constructor(
1818
initialText: String,
1919
private val hideErrorOnUserInput: Boolean,
20-
private val formatter: FormatterAction?
21-
) : BaseVisualControl<String>(initialText) {
20+
private val formatter: FormatterAction?,
21+
initialEnabled: Boolean,
22+
initialVisibility: Visibility
23+
) : BaseVisualControl<String>(initialText, initialEnabled, initialVisibility) {
2224

2325
val error = state<String>()
2426

@@ -37,18 +39,26 @@ class InputControl internal constructor(
3739
fun inputControl(
3840
initialText: String = "",
3941
hideErrorOnUserInput: Boolean = true,
40-
formatter: FormatterAction? = null
41-
): InputControl = InputControl(initialText, hideErrorOnUserInput, formatter)
42+
formatter: FormatterAction? = null,
43+
initialEnabled: Boolean = true,
44+
initialVisibility: BaseVisualControl.Visibility = BaseVisualControl.Visibility.VISIBLE
45+
): InputControl = InputControl(
46+
initialText = initialText,
47+
hideErrorOnUserInput = hideErrorOnUserInput,
48+
formatter = formatter,
49+
initialEnabled = initialEnabled,
50+
initialVisibility = initialVisibility
51+
)
4252

4353
fun InputControl.bindTo(
4454
editText: EditText,
45-
useError: Boolean = false,
46-
invisibleState: Int = View.GONE,
47-
onVisibleChange: OnVisibleChangeAction? = null
55+
bindError: Boolean = false,
56+
bindEnable: Boolean = true,
57+
bindVisible: Boolean = true
4858
): Disposable {
4959
var editing = false
5060
return CompositeDisposable().apply {
51-
add(defaultBindTo(editText, invisibleState, onVisibleChange))
61+
add(defaultBindTo(editText, bindEnable, bindVisible))
5262
add(
5363
value
5464
.toViewFlowable()
@@ -68,7 +78,7 @@ fun InputControl.bindTo(
6878
}
6979
)
7080

71-
if (useError) {
81+
if (bindError) {
7282
add(
7383
error
7484
.toViewFlowable()
@@ -88,12 +98,12 @@ fun InputControl.bindTo(
8898

8999
fun InputControl.bindTo(
90100
textInputLayout: TextInputLayout,
91-
useError: Boolean = false,
92-
invisibleState: Int = View.GONE,
93-
onVisibleChange: OnVisibleChangeAction? = null
101+
bindError: Boolean = false,
102+
bindEnable: Boolean = true,
103+
bindVisible: Boolean = true
94104
): Disposable = CompositeDisposable().apply {
95-
add(bindTo(textInputLayout.editText!!, false, invisibleState, onVisibleChange))
96-
if (useError) {
105+
add(bindTo(textInputLayout.editText!!, false, bindEnable, bindVisible))
106+
if (bindError) {
97107
add(
98108
error
99109
.observable

reactiveviewmodel/src/main/java/com/alexdeww/reactiveviewmodel/widget/RatingControl.kt

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,36 @@
11
package com.alexdeww.reactiveviewmodel.widget
22

33
import android.annotation.SuppressLint
4-
import android.view.View
54
import android.widget.RatingBar
65
import io.reactivex.rxjava3.core.Observable
76
import io.reactivex.rxjava3.disposables.CompositeDisposable
87
import io.reactivex.rxjava3.disposables.Disposable
98

109
@SuppressLint("CheckResult")
1110
class RatingControl internal constructor(
12-
initialValue: Float
13-
) : BaseVisualControl<Float>(initialValue)
11+
initialValue: Float,
12+
initialEnabled: Boolean,
13+
initialVisibility: Visibility
14+
) : BaseVisualControl<Float>(initialValue, initialEnabled, initialVisibility)
1415

15-
fun ratingControl(initialValue: Float = 0f): RatingControl = RatingControl(initialValue)
16+
fun ratingControl(
17+
initialValue: Float = 0f,
18+
initialEnabled: Boolean = true,
19+
initialVisibility: BaseVisualControl.Visibility = BaseVisualControl.Visibility.VISIBLE
20+
): RatingControl = RatingControl(
21+
initialValue = initialValue,
22+
initialEnabled = initialEnabled,
23+
initialVisibility = initialVisibility
24+
)
1625

1726
fun RatingControl.bindTo(
1827
ratingBar: RatingBar,
19-
invisibleState: Int = View.GONE,
20-
onVisibleChange: OnVisibleChangeAction? = null
28+
bindEnable: Boolean = true,
29+
bindVisible: Boolean = true
2130
): Disposable {
2231
var editing = false
2332
return CompositeDisposable().apply {
24-
add(defaultBindTo(ratingBar, invisibleState, onVisibleChange))
33+
add(defaultBindTo(ratingBar, bindEnable, bindVisible))
2534
add(
2635
value
2736
.toViewFlowable()

0 commit comments

Comments
 (0)