in buildSrc/artist-traits-rx/src/main/kotlin/com/uber/artist/traits/rx/KotlinCheckableTrait.kt [32:85]
override fun generateFor(
type: TypeSpec.Builder,
initMethod: FunSpec.Builder,
rClass: ClassName,
baseType: String) {
val isTextView = baseType.endsWith("TextView")
if (isTextView) {
type.addProperty(PropertySpec.builder(
"checkedChanges",
KotlinRxTypeNames.Rx.BehaviorRelay.parameterizedBy(BOOLEAN).copy(nullable = true),
KModifier.PRIVATE)
.mutable()
.initializer("null")
.build())
type.addFunction(FunSpec.builder("ensureCheckedChanges")
.addModifiers(KModifier.PRIVATE)
.beginControlFlow("if (checkedChanges == null)")
.addStatement("checkedChanges = %T.create()", KotlinRxTypeNames.Rx.BehaviorRelay)
.endControlFlow()
.build())
type.addFunction(FunSpec.builder("checkedChanges")
.addKdoc("""@return an observable of booleans representing the checked state of this view.
""")
.addModifiers(KModifier.OPEN)
.returns(KotlinRxTypeNames.Rx.Observable.parameterizedBy(BOOLEAN))
.addStatement("ensureCheckedChanges()")
.addStatement("return checkedChanges!!.hide()")
.build())
type.addFunction(FunSpec.builder("setChecked")
.addModifiers(KModifier.OPEN, KModifier.OVERRIDE)
.addParameter("value", BOOLEAN)
.addStatement("super.setChecked(value)")
.addStatement("ensureCheckedChanges()")
.addStatement("checkedChanges!!.accept(value)")
.build())
} else {
addRxBindingApiForSettable(type, KotlinSettableApi(
KotlinRxBindingInfo(KotlinRxTypeNames.Rx.RxCompoundButton,
"checkedChanges",
"""@return an observable of booleans representing the checked state of this view.
"""),
ClassName.bestGuess("android.widget.CompoundButton.OnCheckedChangeListener"),
"setOnCheckedChangeListener",
BOOLEAN,
FunSpec.builder("accept")
.addParameter("isChecked", BOOLEAN)
.addStatement("l.onCheckedChanged(this@$baseType, isChecked)"),
true,
CodeBlock.of("%T.createDefault(isChecked())\n", KotlinRxTypeNames.Rx.BehaviorRelay)
))
}
}