in artist-traits-rx/src/main/kotlin/com/uber/artist/traits/rx/JavaCheckableTrait.kt [32:84]
override fun generateFor(
type: TypeSpec.Builder,
initMethod: MethodSpec.Builder,
rClass: ClassName,
baseType: String) {
val isTextView = baseType.endsWith("TextView")
if (isTextView) {
type.addField(
ParameterizedTypeName.get(JavaRxTypeNames.Rx.BehaviorRelay, TypeName.BOOLEAN.box()), "checkedChanges",
Modifier.PRIVATE)
type.addMethod(MethodSpec.methodBuilder("ensureCheckedChanges")
.addModifiers(Modifier.PRIVATE)
.beginControlFlow("if (checkedChanges == null)")
.addStatement("checkedChanges = \$T.create()", JavaRxTypeNames.Rx.BehaviorRelay)
.endControlFlow()
.build())
type.addMethod(MethodSpec.methodBuilder("checkedChanges")
.addJavadoc("""@return an observable of booleans representing the checked state of this view.
""")
.addModifiers(Modifier.PUBLIC)
.returns(ParameterizedTypeName.get(JavaRxTypeNames.Rx.Observable, TypeName.BOOLEAN.box()))
.addStatement("ensureCheckedChanges()")
.addStatement("return checkedChanges.hide()")
.build())
type.addMethod(MethodSpec.methodBuilder("setChecked")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override::class.java)
.addParameter(TypeName.BOOLEAN, "val")
.addStatement("super.setChecked(val)")
.addStatement("ensureCheckedChanges()")
.addStatement("checkedChanges.accept(val)")
.build())
} else {
addRxBindingApiForSettable(type, JavaSettableApi(
JavaRxBindingInfo(JavaRxTypeNames.Rx.RxCompoundButton,
"checkedChanges",
"""@return an observable of booleans representing the checked state of this view.
"""),
ClassName.bestGuess("OnCheckedChangeListener"),
"setOnCheckedChangeListener",
TypeName.BOOLEAN.box(),
MethodSpec.methodBuilder("accept")
.addModifiers(Modifier.PUBLIC)
.addParameter(TypeName.BOOLEAN.box(), "isChecked")
.addStatement("l.onCheckedChanged($baseType.this, isChecked)"),
true,
CodeBlock.of("\$T.createDefault(isChecked())", JavaRxTypeNames.Rx.BehaviorRelay),
setListenerMethodAnnotations = listOf(TypeNames.Annotations.Nullable)
))
}
}