From 803aace3263784e5b025f6655134d8cd21eb820b Mon Sep 17 00:00:00 2001 From: Kittinun Vantasin Date: Mon, 27 Nov 2017 20:49:17 +0900 Subject: [PATCH 1/2] Initial for menuItem --- .../reactive/view/MenuItemTest.kt | 21 ++ .../{ => reactive}/view/TestMenuItem.kt | 2 +- .../view/ImageViewPropertyTest.kt | 193 ------------------ .../reactiveandroid/view/MenuItemEventTest.kt | 1 + .../view/MenuItemPropertyTest.kt | 1 + .../reactive/view/MenuItemRx.kt | 45 ++++ .../reactiveandroid/reactive/view/ViewRx.kt | 4 +- .../reactive/widget/TextViewRx.kt | 4 +- .../reactiveandroid/view/ImageViewProperty.kt | 112 ---------- 9 files changed, 73 insertions(+), 310 deletions(-) create mode 100644 reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemTest.kt rename reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/{ => reactive}/view/TestMenuItem.kt (99%) delete mode 100644 reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/ImageViewPropertyTest.kt create mode 100644 reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemRx.kt delete mode 100644 reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/view/ImageViewProperty.kt diff --git a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemTest.kt b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemTest.kt new file mode 100644 index 0000000..6b3e1c3 --- /dev/null +++ b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemTest.kt @@ -0,0 +1,21 @@ +package com.github.kittinunf.reactiveandroid.reactive.view + +import android.support.test.InstrumentationRegistry +import android.support.test.runner.AndroidJUnit4 +import android.view.MenuItem +import org.junit.Before +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class MenuItemTest { + + val context = InstrumentationRegistry.getContext() + + lateinit var view: MenuItem + + @Before + fun before() { + view = TestMenuItem(context) + } + +} \ No newline at end of file diff --git a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/TestMenuItem.kt b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/TestMenuItem.kt similarity index 99% rename from reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/TestMenuItem.kt rename to reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/TestMenuItem.kt index d909d8d..251c223 100644 --- a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/TestMenuItem.kt +++ b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/TestMenuItem.kt @@ -1,4 +1,4 @@ -package com.github.kittinunf.reactiveandroid.view +package com.github.kittinunf.reactiveandroid.reactive.view import android.content.Context import android.content.Intent diff --git a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/ImageViewPropertyTest.kt b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/ImageViewPropertyTest.kt deleted file mode 100644 index dbc6580..0000000 --- a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/ImageViewPropertyTest.kt +++ /dev/null @@ -1,193 +0,0 @@ -package com.github.kittinunf.reactiveandroid.view - -import android.annotation.TargetApi -import android.content.res.ColorStateList -import android.graphics.Color -import android.graphics.PorterDuff -import android.os.Build -import android.support.test.InstrumentationRegistry -import android.support.test.annotation.UiThreadTest -import android.support.test.filters.SdkSuppress -import android.support.test.rule.UiThreadTestRule -import android.support.test.runner.AndroidJUnit4 -import android.support.v4.content.ContextCompat -import android.widget.ImageView -import com.github.kittinunf.reactiveandroid.reactive.bindTo -import com.github.kittinunf.reactiveandroid.scheduler.AndroidThreadScheduler -import com.github.kittinunf.reactiveandroid.ui.test.R -import io.reactivex.Observable -import io.reactivex.schedulers.Schedulers -import org.hamcrest.CoreMatchers.equalTo -import org.junit.Assert.assertThat -import org.junit.BeforeClass -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class ImageViewPropertyTest { - - @Rule - @JvmField - val uiThreadTestRule = UiThreadTestRule() - - private val context = InstrumentationRegistry.getContext() - - private val view = ImageView(context) - - companion object { - @BeforeClass - @JvmStatic - fun setUp() { - AndroidThreadScheduler.main = Schedulers.trampoline() - } - } - - @Test - @UiThreadTest - fun testBaseline() { - val baseline = view.rx_baseline - - Observable.just(1).bindTo(baseline) - assertThat(view.baseline, equalTo(1)) - - baseline.bindTo(Observable.just(2)) - assertThat(view.baseline, equalTo(2)) - } - - @Test - @UiThreadTest - fun testDrawable() { - val drawable = view.rx_drawable - - val image = ContextCompat.getDrawable(context, R.drawable.ic_accessibility_black_18dp) - Observable.just(image).bindTo(drawable) - assertThat(view.drawable, equalTo(image)) - - val anotherImage = ContextCompat.getDrawable(context, R.drawable.ic_account_balance_wallet_black_18dp) - drawable.bindTo(Observable.just(anotherImage)) - assertThat(view.drawable, equalTo(anotherImage)) - } - - @Test - @UiThreadTest - fun testImageAlpha() { - val imageAlpha = view.rx_imageAlpha - - Observable.just(50).bindTo(imageAlpha) - assertThat(view.imageAlpha, equalTo(50)) - - imageAlpha.bindTo(Observable.just(100)) - assertThat(view.imageAlpha, equalTo(100)) - } - - @Test - @UiThreadTest - fun testImageLevel() { - view.setImageResource(R.drawable.ic_accessibility_black_18dp) - val imageLevel = view.rx_imageLevel - - Observable.just(1).bindTo(imageLevel) - assertThat(view.drawable.level, equalTo(1)) - - imageLevel.bindTo(Observable.just(9999)) - assertThat(view.drawable.level, equalTo(9999)) - } - - @Test - @UiThreadTest - fun testImageMatrix() { - } - - @Test - @UiThreadTest - fun testAdjustViewBounds() { - val adjustViewBounds = view.rx_adjustViewBounds - - Observable.just(true).bindTo(adjustViewBounds) - assertThat(view.adjustViewBounds, equalTo(true)) - - adjustViewBounds.bindTo(Observable.just(false)) - assertThat(view.adjustViewBounds, equalTo(false)) - } - - @Test - @UiThreadTest - fun testCropToPadding() { - val cropToPadding = view.rx_cropToPadding - - Observable.just(true).bindTo(cropToPadding) - assertThat(view.cropToPadding, equalTo(true)) - - cropToPadding.bindTo(Observable.just(false)) - assertThat(view.cropToPadding, equalTo(false)) - } - - @Test - @UiThreadTest - fun testMaxWidth() { - val maxWidth = view.rx_maxWidth - - Observable.just(100).bindTo(maxWidth) - assertThat(view.maxWidth, equalTo(100)) - - maxWidth.bindTo(Observable.just(200)) - assertThat(view.maxWidth, equalTo(200)) - } - - @Test - @UiThreadTest - fun testMaxHeight() { - val maxWidth = view.rx_maxHeight - - Observable.just(100).bindTo(maxWidth) - assertThat(view.maxHeight, equalTo(100)) - - maxWidth.bindTo(Observable.just(200)) - assertThat(view.maxHeight, equalTo(200)) - } - - @Test - @UiThreadTest - fun testScaleType() { - val scaleType = view.rx_scaleType - - Observable.just(ImageView.ScaleType.CENTER).bindTo(scaleType) - assertThat(view.scaleType, equalTo(ImageView.ScaleType.CENTER)) - - scaleType.bindTo(Observable.just(ImageView.ScaleType.FIT_XY)) - assertThat(view.scaleType, equalTo(ImageView.ScaleType.FIT_XY)) - } - - @TargetApi(Build.VERSION_CODES.M) - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.M) - @Test - @UiThreadTest - fun testImageTintMode() { - val tintMode = view.rx_imageTintMode - - Observable.just(PorterDuff.Mode.LIGHTEN).bindTo(tintMode) - assertThat(view.imageTintMode, equalTo(PorterDuff.Mode.LIGHTEN)) - - tintMode.bindTo(Observable.just(PorterDuff.Mode.DARKEN)) - assertThat(view.imageTintMode, equalTo(PorterDuff.Mode.DARKEN)) - } - - @TargetApi(Build.VERSION_CODES.M) - @SdkSuppress(minSdkVersion = Build.VERSION_CODES.M) - @Test - @UiThreadTest - fun testImageTintList() { - val imageTintList = view.rx_imageTintList - - val colorStateList = ColorStateList.valueOf(Color.RED) - - Observable.just(colorStateList).bindTo(imageTintList) - assertThat(view.imageTintList, equalTo(colorStateList)) - - val anotherColorStateList = ColorStateList.valueOf(Color.BLACK) - imageTintList.bindTo(Observable.just(anotherColorStateList)) - assertThat(view.imageTintList, equalTo(anotherColorStateList)) - } - -} diff --git a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/MenuItemEventTest.kt b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/MenuItemEventTest.kt index 7ee88c6..3b77a8c 100644 --- a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/MenuItemEventTest.kt +++ b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/MenuItemEventTest.kt @@ -5,6 +5,7 @@ import android.support.test.annotation.UiThreadTest import android.support.test.rule.UiThreadTestRule import android.support.test.runner.AndroidJUnit4 import android.view.MenuItem +import com.github.kittinunf.reactiveandroid.reactive.view.TestMenuItem import io.reactivex.observers.TestObserver import org.hamcrest.CoreMatchers.equalTo import org.junit.Assert.assertThat diff --git a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/MenuItemPropertyTest.kt b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/MenuItemPropertyTest.kt index 667067f..6f0619e 100644 --- a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/MenuItemPropertyTest.kt +++ b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/view/MenuItemPropertyTest.kt @@ -9,6 +9,7 @@ import android.view.View import android.widget.ImageView import android.widget.TextView import com.github.kittinunf.reactiveandroid.reactive.bindTo +import com.github.kittinunf.reactiveandroid.reactive.view.TestMenuItem import com.github.kittinunf.reactiveandroid.scheduler.AndroidThreadScheduler import com.github.kittinunf.reactiveandroid.ui.test.R import io.reactivex.Observable diff --git a/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemRx.kt b/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemRx.kt new file mode 100644 index 0000000..d3d0d91 --- /dev/null +++ b/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemRx.kt @@ -0,0 +1,45 @@ +package com.github.kittinunf.reactiveandroid.reactive.view + +import android.graphics.drawable.Drawable +import android.view.MenuItem +import android.view.View +import com.github.kittinunf.reactiveandroid.FieldDelegate +import com.github.kittinunf.reactiveandroid.reactive.AndroidBindingConsumer +import com.github.kittinunf.reactiveandroid.reactive.Reactive +import io.reactivex.functions.Consumer + +val MenuItem.rx: Reactive by FieldDelegate({ Reactive(it) }) + +// Properties + +val Reactive.actionView: Consumer + get() = AndroidBindingConsumer(item) { item, value -> + item.actionView = value + } + +val Reactive.actionViewResourceId: Consumer + get() = AndroidBindingConsumer(item) { item, value -> + item.setActionView(value) + } + +val Reactive.icon: Consumer + get() = AndroidBindingConsumer(item) { item, value -> + item.icon = value + } + +val Reactive.enabled: Consumer + get() = AndroidBindingConsumer(item) { item, value -> + item.isEnabled = value + } + +val Reactive.visible: Consumer + get() = AndroidBindingConsumer(item) { item, value -> + item.isVisible = value + } + +val Reactive.title: Consumer + get() = AndroidBindingConsumer(item) { item, value -> + item.title = value + } + + diff --git a/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/ViewRx.kt b/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/ViewRx.kt index b23d3af..b7b148c 100644 --- a/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/ViewRx.kt +++ b/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/ViewRx.kt @@ -16,7 +16,7 @@ import io.reactivex.functions.Consumer val View.rx: Reactive by FieldDelegate({ Reactive(it) }) -//Properties +// Properties val Reactive.activated: Consumer get() = AndroidBindingConsumer(item) { item, value -> @@ -85,7 +85,7 @@ val Reactive.visibility: Consumer item.visibility = value } -//Events +// Events fun Reactive.click(): Observable = Observable.create { emitter -> diff --git a/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/widget/TextViewRx.kt b/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/widget/TextViewRx.kt index 6f4931d..85b6d52 100644 --- a/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/widget/TextViewRx.kt +++ b/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/widget/TextViewRx.kt @@ -16,7 +16,7 @@ import io.reactivex.functions.Consumer val TextView.rx: Reactive by FieldDelegate({ Reactive(it) }) -//Properties +// Properties val Reactive.text: Consumer get() = AndroidBindingConsumer(item) { item, text -> @@ -48,7 +48,7 @@ val Reactive.typeface: Consumer item.typeface = typeface } -//Events +// Events sealed class TextWatcherEvent { data class AfterTextChanged(val s: CharSequence?) : TextWatcherEvent() diff --git a/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/view/ImageViewProperty.kt b/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/view/ImageViewProperty.kt deleted file mode 100644 index beb597d..0000000 --- a/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/view/ImageViewProperty.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.github.kittinunf.reactiveandroid.view - -import android.content.res.ColorStateList -import android.graphics.Matrix -import android.graphics.PorterDuff -import android.graphics.drawable.Drawable -import android.widget.ImageView -import com.github.kittinunf.reactiveandroid.MutableProperty -import com.github.kittinunf.reactiveandroid.createMainThreadMutableProperty - -//================================================================================ -// Properties -//================================================================================ - -val ImageView.rx_baseline: MutableProperty - get() { - val getter = { baseline } - val setter: (Int) -> Unit = { baseline = it } - - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_drawable: MutableProperty - get() { - val getter = { drawable } - val setter: (Drawable) -> Unit = { setImageDrawable(it) } - - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_imageAlpha: MutableProperty - get() { - val getter = { imageAlpha } - val setter: (Int) -> Unit = { imageAlpha = it } - - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_imageLevel: MutableProperty - get() { - val getter = { drawable.level } - val setter: (Int) -> Unit = { setImageLevel(it) } - - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_imageMatrix: MutableProperty - get() { - val getter = { imageMatrix } - val setter: (Matrix) -> Unit = { - scaleType = ImageView.ScaleType.MATRIX - imageMatrix = it - invalidate() - } - - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_adjustViewBounds: MutableProperty - get() { - val getter = { adjustViewBounds } - val setter: (Boolean) -> Unit = { adjustViewBounds = it } - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_cropToPadding: MutableProperty - get() { - val getter = { cropToPadding } - val setter: (Boolean) -> Unit = { cropToPadding = it } - - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_maxWidth: MutableProperty - get() { - val getter = { maxWidth } - val setter: (Int) -> Unit = { maxWidth = it } - - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_maxHeight: MutableProperty - get() { - val getter = { maxHeight } - val setter: (Int) -> Unit = { maxHeight = it } - - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_scaleType: MutableProperty - get() { - val getter = { scaleType } - val setter: (ImageView.ScaleType) -> Unit = { scaleType = it } - - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_imageTintMode: MutableProperty - get() { - val getter = { imageTintMode } - val setter: (PorterDuff.Mode) -> Unit = { imageTintMode = it } - - return createMainThreadMutableProperty(getter, setter) - } - -val ImageView.rx_imageTintList: MutableProperty - get() { - val getter = { imageTintList } - val setter: (ColorStateList) -> Unit = { imageTintList = it } - - return createMainThreadMutableProperty(getter, setter) - } From 8106b83ba48bbc0dac1206f8db2a648b446b23d6 Mon Sep 17 00:00:00 2001 From: Kittinun Vantasin Date: Tue, 28 Nov 2017 23:36:25 +0900 Subject: [PATCH 2/2] Add more test for MenuItem --- .../reactive/view/MenuItemTest.kt | 105 ++++++++++++++++++ .../reactiveandroid/reactive/view/ViewTest.kt | 2 +- .../reactive/view/MenuItemRx.kt | 5 + 3 files changed, 111 insertions(+), 1 deletion(-) diff --git a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemTest.kt b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemTest.kt index 6b3e1c3..7cc2b0c 100644 --- a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemTest.kt +++ b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemTest.kt @@ -1,9 +1,20 @@ package com.github.kittinunf.reactiveandroid.reactive.view +import android.graphics.drawable.Drawable import android.support.test.InstrumentationRegistry +import android.support.test.annotation.UiThreadTest import android.support.test.runner.AndroidJUnit4 +import android.support.v4.content.ContextCompat import android.view.MenuItem +import android.view.View +import android.widget.TextView +import com.github.kittinunf.reactiveandroid.ui.test.R +import io.reactivex.subjects.BehaviorSubject +import org.awaitility.Awaitility.await +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.MatcherAssert.assertThat import org.junit.Before +import org.junit.Test import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) @@ -18,4 +29,98 @@ class MenuItemTest { view = TestMenuItem(context) } + @Test + @UiThreadTest + fun actionView() { + val subject = BehaviorSubject.create() + subject.subscribe(view.rx.actionView) + + var fakeView = View(context) + subject.onNext(fakeView) + await().untilAsserted { assertThat(view.actionView, equalTo(fakeView)) } + + fakeView = TextView(context) + subject.onNext(fakeView) + await().untilAsserted { assertThat(view.actionView, equalTo(fakeView)) } + } + + @Test + @UiThreadTest + fun actionViewResourceId() { + } + + @Test + @UiThreadTest + fun icon() { + val subject = BehaviorSubject.create() + subject.subscribe(view.rx.icon) + + var drawable = ContextCompat.getDrawable(context, R.drawable.ic_accessibility_black_18dp) + subject.onNext(drawable) + await().untilAsserted { assertThat(view.icon, equalTo(drawable)) } + + drawable = ContextCompat.getDrawable(context, R.drawable.ic_account_balance_wallet_black_18dp) + subject.onNext(drawable) + await().untilAsserted { assertThat(view.icon, equalTo(drawable)) } + } + + @Test + @UiThreadTest + fun iconResourceId() { + val subject = BehaviorSubject.create() + subject.subscribe(view.rx.iconResourceId) + + var resId = R.drawable.ic_accessibility_black_18dp + subject.onNext(resId) + await().untilAsserted { assertThat(view.icon, withDrawable(context, resId)) } + + resId = R.drawable.ic_account_balance_wallet_black_18dp + subject.onNext(resId) + await().untilAsserted { assertThat(view.icon, withDrawable(context, resId)) } + } + + @Test + @UiThreadTest + fun enabled() { + val subject = BehaviorSubject.create() + subject.subscribe(view.rx.enabled) + + var enabled = false + subject.onNext(enabled) + await().untilAsserted { assertThat(view.isEnabled, equalTo(enabled)) } + + enabled = true + subject.onNext(enabled) + await().untilAsserted { assertThat(view.isEnabled, equalTo(enabled)) } + } + + @Test + @UiThreadTest + fun visible() { + val subject = BehaviorSubject.create() + subject.subscribe(view.rx.visible) + + var visible = false + subject.onNext(visible) + await().untilAsserted { assertThat(view.isVisible, equalTo(visible)) } + + visible = true + subject.onNext(visible) + await().untilAsserted { assertThat(view.isVisible, equalTo(visible)) } + } + + @Test + @UiThreadTest + fun title() { + val subject = BehaviorSubject.create() + subject.subscribe(view.rx.title) + + var title = "abc" as CharSequence + subject.onNext(title) + await().untilAsserted { assertThat(view.title, equalTo(title)) } + + title = "def" + subject.onNext(title) + await().untilAsserted { assertThat(view.title, equalTo(title)) } + } } \ No newline at end of file diff --git a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/ViewTest.kt b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/ViewTest.kt index d2f7599..cc7cd42 100644 --- a/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/ViewTest.kt +++ b/reactiveandroid-ui/src/androidTest/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/ViewTest.kt @@ -497,4 +497,4 @@ fun withDrawable(context: Context, resId: Int): Matcher = object : Typ description?.appendText("drawable with resource id: $resId") } -} +} \ No newline at end of file diff --git a/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemRx.kt b/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemRx.kt index d3d0d91..6d5b48a 100644 --- a/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemRx.kt +++ b/reactiveandroid-ui/src/main/kotlin/com/github/kittinunf/reactiveandroid/reactive/view/MenuItemRx.kt @@ -27,6 +27,11 @@ val Reactive.icon: Consumer item.icon = value } +val Reactive.iconResourceId: Consumer + get() = AndroidBindingConsumer(item) { item, value -> + item.setIcon(value) + } + val Reactive.enabled: Consumer get() = AndroidBindingConsumer(item) { item, value -> item.isEnabled = value