diff --git a/buildSrc/src/main/kotlin/com/jakewharton/rxbinding/project/KotlinGenTask.kt b/buildSrc/src/main/kotlin/com/jakewharton/rxbinding/project/KotlinGenTask.kt index e2c2b267..953c5ae0 100644 --- a/buildSrc/src/main/kotlin/com/jakewharton/rxbinding/project/KotlinGenTask.kt +++ b/buildSrc/src/main/kotlin/com/jakewharton/rxbinding/project/KotlinGenTask.kt @@ -6,7 +6,6 @@ import com.github.javaparser.ast.PackageDeclaration import com.github.javaparser.ast.TypeParameter import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration import com.github.javaparser.ast.body.MethodDeclaration -import com.github.javaparser.ast.body.ModifierSet import com.github.javaparser.ast.type.ClassOrInterfaceType import com.github.javaparser.ast.type.PrimitiveType import com.github.javaparser.ast.type.ReferenceType @@ -36,9 +35,9 @@ open class KotlinGenTask : SourceTask() { */ private val IGNORED_IMPORTS = listOf( "java.util.List", - "android.annotation.TargetApi", "android.support.annotation.CheckResult", - "android.support.annotation.NonNull" + "android.support.annotation.NonNull", + "android.support.annotation.RequiresApi" ) fun resolveKotlinTypeByName(input: String): String { @@ -187,7 +186,6 @@ open class KotlinGenTask : SourceTask() { class KMethod(val n: MethodDeclaration) { private val name = n.name private val comment = if (n.comment != null) cleanUpDoc(n.comment.toString()) else null - private val accessModifier = ModifierSet.getAccessSpecifier(n.modifiers).codeRepresenation private val extendedClass = n.parameters[0].type.toString() private val parameters = n.parameters.subList(1, n.parameters.size) private val returnType = n.type @@ -276,8 +274,8 @@ open class KotlinGenTask : SourceTask() { // doc builder.append("${comment ?: ""}\n") - // access modifier and other signature boilerplate - builder.append("$accessModifier inline fun ") + // signature boilerplate + builder.append("inline fun ") // type params builder.append(if (typeParameters != null) typeParameters + " " else "") diff --git a/dependencies.gradle b/dependencies.gradle index 60ce9943..ce87815b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,12 +9,13 @@ ext { kotlinPlugin = 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.3' kotlinStdlib = 'org.jetbrains.kotlin:kotlin-stdlib:1.0.3' - supportAnnotations = 'com.android.support:support-annotations:24.0.0' - supportV4 = 'com.android.support:support-v4:24.0.0' - supportRecyclerView = 'com.android.support:recyclerview-v7:24.0.0' - supportAppCompat = 'com.android.support:appcompat-v7:24.0.0' - supportDesign = 'com.android.support:design:24.0.0' - supportLeanback = 'com.android.support:leanback-v17:24.0.0' + supportVersion = '25.0.0' + supportAnnotations = "com.android.support:support-annotations:$supportVersion" + supportV4CoreUi = "com.android.support:support-core-ui:$supportVersion" + supportRecyclerView = "com.android.support:recyclerview-v7:$supportVersion" + supportAppCompat = "com.android.support:appcompat-v7:$supportVersion" + supportDesign = "com.android.support:design:$supportVersion" + supportLeanback = "com.android.support:leanback-v17:$supportVersion" supportTestRunner = 'com.android.support.test:runner:0.5' supportTestRules = 'com.android.support.test:rules:0.5' @@ -27,3 +28,15 @@ ext { javaParser = 'com.github.javaparser:javaparser-core:2.1.0' } + +subprojects { project -> + project.configurations.all { + resolutionStrategy { + eachDependency { details -> + if (details.requested.group == 'com.android.support') { + details.useVersion(rootProject.ext.supportVersion) + } + } + } + } +} diff --git a/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxActionMenuView.kt b/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxActionMenuView.kt index e9588d98..cd1acb5e 100644 --- a/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxActionMenuView.kt +++ b/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxActionMenuView.kt @@ -10,4 +10,4 @@ import rx.Observable * *Warning:* The created observable keeps a strong reference to `view`. * Unsubscribe to free this reference. */ -public inline fun ActionMenuView.itemClicks(): Observable = RxActionMenuView.itemClicks(this) +inline fun ActionMenuView.itemClicks(): Observable = RxActionMenuView.itemClicks(this) diff --git a/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxPopupMenu.kt b/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxPopupMenu.kt index bce19284..2533fae8 100644 --- a/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxPopupMenu.kt +++ b/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxPopupMenu.kt @@ -13,7 +13,7 @@ import rx.Observable * *Warning:* The created observable uses [PopupMenu.setOnMenuItemClickListener] * to observe dismiss change. Only one observable can be used for a view at a time. */ -public inline fun PopupMenu.itemClicks(): Observable = RxPopupMenu.itemClicks(this) +inline fun PopupMenu.itemClicks(): Observable = RxPopupMenu.itemClicks(this) /** * Create an observable which emits on `view` dismiss events. The emitted value is @@ -25,4 +25,4 @@ public inline fun PopupMenu.itemClicks(): Observable = RxPopupMenu.ite * *Warning:* The created observable uses [PopupMenu.setOnDismissListener] to * observe dismiss change. Only one observable can be used for a view at a time. */ -public inline fun PopupMenu.dismisses(): Observable = RxPopupMenu.dismisses(this).map { Unit } +inline fun PopupMenu.dismisses(): Observable = RxPopupMenu.dismisses(this).map { Unit } diff --git a/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxSearchView.kt b/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxSearchView.kt index b9c04a62..3a07463b 100644 --- a/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxSearchView.kt +++ b/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxSearchView.kt @@ -1,7 +1,6 @@ package com.jakewharton.rxbinding.support.v7.widget import android.support.v7.widget.SearchView -import com.jakewharton.rxbinding.internal.Functions import rx.Observable import rx.functions.Action1 import rx.functions.Func1 @@ -15,7 +14,7 @@ import rx.functions.Func1 * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun SearchView.queryTextChangeEvents(): Observable = RxSearchView.queryTextChangeEvents(this) +inline fun SearchView.queryTextChangeEvents(): Observable = RxSearchView.queryTextChangeEvents(this) /** * Create an observable of character sequences for query text changes on `view`. @@ -25,7 +24,7 @@ public inline fun SearchView.queryTextChangeEvents(): Observable = RxSearchView.queryTextChanges(this) +inline fun SearchView.queryTextChanges(): Observable = RxSearchView.queryTextChanges(this) /** * An action which sets the query property of `view` with character sequences. @@ -35,38 +34,38 @@ public inline fun SearchView.queryTextChanges(): Observable = RxSe * * @param submit weather to submit query right after updating query text */ -public inline fun SearchView.query(submit: Boolean): Action1 = RxSearchView.query(this, submit) +inline fun SearchView.query(submit: Boolean): Action1 = RxSearchView.query(this, submit) /** * Create an observable of booleans representing the focus of the query text field. - * + * * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. - * + * */ -public inline fun SearchView.queryTextFocusChange(): Observable = RxSearchView.queryTextFocusChange(this) +inline fun SearchView.queryTextFocusChange(): Observable = RxSearchView.queryTextFocusChange(this) /** * Create an observable of the absolute position of the clicked item in the list of suggestions - * + * * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. - * + * * *Warning:* The created observable uses [SearchView.setOnSuggestionListener] to * observe search view events. Only one observable can be used for a search view at a time. */ -public inline fun SearchView.suggestionClick(): Observable = RxSearchView.suggestionClick(this) +inline fun SearchView.suggestionClick(): Observable = RxSearchView.suggestionClick(this) /** * Create an observable of the absolute position of the clicked item in the list of suggestions - * + * * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. - * + * * *Warning:* The created observable uses [SearchView.setOnSuggestionListener] to * observe search view events. Only one observable can be used for a search view at a time. * * @param handled Function invoked with each value to determine the return value of the * underlying [SearchView.OnSuggestionListener]. */ -public inline fun SearchView.suggestionClick(handled: Func1): Observable = RxSearchView.suggestionClick(this, handled) +inline fun SearchView.suggestionClick(handled: Func1): Observable = RxSearchView.suggestionClick(this, handled) \ No newline at end of file diff --git a/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxToolbar.kt b/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxToolbar.kt index 2c0de841..ac272d1c 100644 --- a/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxToolbar.kt +++ b/rxbinding-appcompat-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxToolbar.kt @@ -10,7 +10,7 @@ import rx.Observable * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun Toolbar.itemClicks(): Observable = RxToolbar.itemClicks(this) +inline fun Toolbar.itemClicks(): Observable = RxToolbar.itemClicks(this) /** * Create an observable which emits on `view` navigation click events. The emitted value is @@ -22,4 +22,4 @@ public inline fun Toolbar.itemClicks(): Observable = RxToolbar.itemCli * *Warning:* The created observable uses [Toolbar.setNavigationOnClickListener] * to observe clicks. Only one observable can be used for a view at a time. */ -public inline fun Toolbar.navigationClicks(): Observable = RxToolbar.navigationClicks(this).map { Unit } +inline fun Toolbar.navigationClicks(): Observable = RxToolbar.navigationClicks(this).map { Unit } diff --git a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/ActionMenuViewItemClickOnSubscribe.java b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/ActionMenuViewItemClickOnSubscribe.java index 810c2117..a5af63e8 100644 --- a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/ActionMenuViewItemClickOnSubscribe.java +++ b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/ActionMenuViewItemClickOnSubscribe.java @@ -28,7 +28,6 @@ final class ActionMenuViewItemClickOnSubscribe implements Observable.OnSubscribe return true; } }; - view.setOnMenuItemClickListener(listener); subscriber.add(new MainThreadSubscription() { @Override @@ -36,5 +35,7 @@ protected void onUnsubscribe() { view.setOnMenuItemClickListener(null); } }); + + view.setOnMenuItemClickListener(listener); } } diff --git a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/PopupMenuDismissOnSubscribe.java b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/PopupMenuDismissOnSubscribe.java index 5cbf1cb4..36767ec9 100644 --- a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/PopupMenuDismissOnSubscribe.java +++ b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/PopupMenuDismissOnSubscribe.java @@ -26,12 +26,12 @@ public PopupMenuDismissOnSubscribe(PopupMenu view) { } }; - view.setOnDismissListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnDismissListener(null); } }); + + view.setOnDismissListener(listener); } } diff --git a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/PopupMenuItemClickOnSubscribe.java b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/PopupMenuItemClickOnSubscribe.java index c1eba1ba..2d89928f 100644 --- a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/PopupMenuItemClickOnSubscribe.java +++ b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/PopupMenuItemClickOnSubscribe.java @@ -28,12 +28,12 @@ public PopupMenuItemClickOnSubscribe(PopupMenu view) { } }; - view.setOnMenuItemClickListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnMenuItemClickListener(null); } }); + + view.setOnMenuItemClickListener(listener); } } diff --git a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/SearchViewQueryTextChangeEventsOnSubscribe.java b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/SearchViewQueryTextChangeEventsOnSubscribe.java index 869034f8..d855704d 100644 --- a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/SearchViewQueryTextChangeEventsOnSubscribe.java +++ b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/SearchViewQueryTextChangeEventsOnSubscribe.java @@ -36,14 +36,14 @@ final class SearchViewQueryTextChangeEventsOnSubscribe } }; - view.setOnQueryTextListener(watcher); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnQueryTextListener(null); } }); + view.setOnQueryTextListener(watcher); + // Emit initial value. subscriber.onNext(SearchViewQueryTextEvent.create(view, view.getQuery(), false)); } diff --git a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/SearchViewQueryTextChangesOnSubscribe.java b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/SearchViewQueryTextChangesOnSubscribe.java index d5c9e5eb..9396c4a0 100644 --- a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/SearchViewQueryTextChangesOnSubscribe.java +++ b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/SearchViewQueryTextChangesOnSubscribe.java @@ -31,14 +31,14 @@ final class SearchViewQueryTextChangesOnSubscribe implements Observable.OnSubscr } }; - view.setOnQueryTextListener(watcher); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnQueryTextListener(null); } }); + view.setOnQueryTextListener(watcher); + // Emit initial value. subscriber.onNext(view.getQuery()); } diff --git a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/ToolbarItemClickOnSubscribe.java b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/ToolbarItemClickOnSubscribe.java index 4508f4e7..6d5db542 100644 --- a/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/ToolbarItemClickOnSubscribe.java +++ b/rxbinding-appcompat-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/ToolbarItemClickOnSubscribe.java @@ -26,12 +26,13 @@ final class ToolbarItemClickOnSubscribe implements Observable.OnSubscribe = RxAppBarLayout.offsetChanges(this) +inline fun AppBarLayout.offsetChanges(): Observable = RxAppBarLayout.offsetChanges(this) diff --git a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxBottomNavigationView.kt b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxBottomNavigationView.kt new file mode 100644 index 00000000..23b3e471 --- /dev/null +++ b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxBottomNavigationView.kt @@ -0,0 +1,15 @@ +package com.jakewharton.rxbinding.support.design.widget + +import android.support.design.widget.BottomNavigationView +import android.view.MenuItem +import rx.Observable + +/** + * Create an observable which emits the selected item in `view`. + * + * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe + * to free this reference. + * + * *Note:* If an item is already selected, it will be emitted immediately on subscribe. + */ +inline fun BottomNavigationView.itemSelections(): Observable = RxBottomNavigationView.itemSelections(this) diff --git a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxNavigationView.kt b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxNavigationView.kt index 5da3019e..78d2547f 100644 --- a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxNavigationView.kt +++ b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxNavigationView.kt @@ -13,4 +13,4 @@ import rx.Observable * *Note:* If an item is already selected, it will be emitted immediately on subscribe. * This behavior assumes but does not enforce that the items are exclusively checkable. */ -public inline fun NavigationView.itemSelections(): Observable = RxNavigationView.itemSelections(this) +inline fun NavigationView.itemSelections(): Observable = RxNavigationView.itemSelections(this) diff --git a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxSnackbar.kt b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxSnackbar.kt index 68bb9370..c6d16eb9 100644 --- a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxSnackbar.kt +++ b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxSnackbar.kt @@ -9,4 +9,4 @@ import rx.Observable * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun Snackbar.dismisses(): Observable = RxSnackbar.dismisses(this) +inline fun Snackbar.dismisses(): Observable = RxSnackbar.dismisses(this) diff --git a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxSwipeDismissBehavior.kt b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxSwipeDismissBehavior.kt index 7634dfba..1acff6cf 100644 --- a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxSwipeDismissBehavior.kt +++ b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxSwipeDismissBehavior.kt @@ -11,4 +11,4 @@ import rx.Observable * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.dismisses(): Observable = RxSwipeDismissBehavior.dismisses(this) +inline fun View.dismisses(): Observable = RxSwipeDismissBehavior.dismisses(this) diff --git a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxTabLayout.kt b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxTabLayout.kt index 71468b7a..58a249b5 100644 --- a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxTabLayout.kt +++ b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxTabLayout.kt @@ -13,7 +13,7 @@ import rx.functions.Action1 * * *Note:* If a tab is already selected, it will be emitted immediately on subscribe. */ -public inline fun TabLayout.selections(): Observable = RxTabLayout.selections(this) +inline fun TabLayout.selections(): Observable = RxTabLayout.selections(this) /** * Create an observable which emits selection, reselection, and unselection events for the tabs @@ -24,7 +24,7 @@ public inline fun TabLayout.selections(): Observable = RxTabLayout.selectio * * *Note:* If a tab is already selected, an event will be emitted immediately on subscribe. */ -public inline fun TabLayout.selectionEvents(): Observable = RxTabLayout.selectionEvents(this) +inline fun TabLayout.selectionEvents(): Observable = RxTabLayout.selectionEvents(this) /** * An action which sets the selected tab of `view`. @@ -32,4 +32,4 @@ public inline fun TabLayout.selectionEvents(): Observable = RxTabLayout.select(this) +inline fun TabLayout.select(): Action1 = RxTabLayout.select(this) diff --git a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxTextInputLayout.kt b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxTextInputLayout.kt index 6dc3fcf3..78b6a38f 100644 --- a/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxTextInputLayout.kt +++ b/rxbinding-design-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/design/widget/RxTextInputLayout.kt @@ -9,7 +9,7 @@ import rx.functions.Action1 * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextInputLayout.counterEnabled(): Action1 = RxTextInputLayout.counterEnabled(this) +inline fun TextInputLayout.counterEnabled(): Action1 = RxTextInputLayout.counterEnabled(this) /** * An action which sets the counterMaxLength property of `view` with an integer value. @@ -17,7 +17,7 @@ public inline fun TextInputLayout.counterEnabled(): Action1 = RxText * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextInputLayout.counterMaxLength(): Action1 = RxTextInputLayout.counterMaxLength(this) +inline fun TextInputLayout.counterMaxLength(): Action1 = RxTextInputLayout.counterMaxLength(this) /** * An action which sets the error text of `view` with a character sequence. @@ -25,7 +25,7 @@ public inline fun TextInputLayout.counterMaxLength(): Action1 = RxTextIn * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextInputLayout.error(): Action1 = RxTextInputLayout.error(this) +inline fun TextInputLayout.error(): Action1 = RxTextInputLayout.error(this) /** * An action which sets the error text of `view` with a string resource. @@ -33,7 +33,7 @@ public inline fun TextInputLayout.error(): Action1 = RxTextInpu * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextInputLayout.errorRes(): Action1 = RxTextInputLayout.errorRes(this) +inline fun TextInputLayout.errorRes(): Action1 = RxTextInputLayout.errorRes(this) /** * An action which sets the hint property of `view` with character sequences. @@ -41,7 +41,7 @@ public inline fun TextInputLayout.errorRes(): Action1 = RxTextInputLayou * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextInputLayout.hint(): Action1 = RxTextInputLayout.hint(this) +inline fun TextInputLayout.hint(): Action1 = RxTextInputLayout.hint(this) /** * An action which sets the hint property of `view` string resource IDs. @@ -49,4 +49,4 @@ public inline fun TextInputLayout.hint(): Action1 = RxTextInput * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextInputLayout.hintRes(): Action1 = RxTextInputLayout.hintRes(this) +inline fun TextInputLayout.hintRes(): Action1 = RxTextInputLayout.hintRes(this) diff --git a/rxbinding-design/src/androidTest/java/com/jakewharton/rxbinding/support/design/widget/RxBottomNavigationViewTest.java b/rxbinding-design/src/androidTest/java/com/jakewharton/rxbinding/support/design/widget/RxBottomNavigationViewTest.java new file mode 100644 index 00000000..8c37cf94 --- /dev/null +++ b/rxbinding-design/src/androidTest/java/com/jakewharton/rxbinding/support/design/widget/RxBottomNavigationViewTest.java @@ -0,0 +1,57 @@ +package com.jakewharton.rxbinding.support.design.widget; + +import android.content.Context; +import android.support.design.widget.BottomNavigationView; +import android.support.test.InstrumentationRegistry; +import android.support.test.annotation.UiThreadTest; +import android.support.test.rule.UiThreadTestRule; +import android.support.test.runner.AndroidJUnit4; +import android.view.ContextThemeWrapper; +import android.view.Menu; +import android.view.MenuItem; +import com.jakewharton.rxbinding.RecordingObserver; +import com.jakewharton.rxbinding.support.design.test.R; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import rx.Subscription; + +import static com.google.common.truth.Truth.assertThat; + +@RunWith(AndroidJUnit4.class) public final class RxBottomNavigationViewTest { + @Rule public final UiThreadTestRule uiThreadTestRule = new UiThreadTestRule(); + + private final Context rawContext = InstrumentationRegistry.getContext(); + private final Context context = new ContextThemeWrapper(rawContext, R.style.Theme_AppCompat); + private final BottomNavigationView view = new BottomNavigationView(context); + private final Menu menu = view.getMenu(); + + @Before public void setUp() { + view.inflateMenu(R.menu.menu); + } + + @After public void teardown() { + menu.clear(); + } + + @Test @UiThreadTest public void itemSelections() { + RecordingObserver o = new RecordingObserver<>(); + Subscription subscription = RxBottomNavigationView.itemSelections(view).subscribe(o); + + // initial value + assertThat(o.takeNext().getItemId()).isEqualTo(R.id.menu_item_one); + + menu.performIdentifierAction(R.id.menu_item_two, 0); + assertThat(o.takeNext().getItemId()).isEqualTo(R.id.menu_item_two); + + menu.performIdentifierAction(R.id.menu_item_one, 0); + assertThat(o.takeNext().getItemId()).isEqualTo(R.id.menu_item_one); + + subscription.unsubscribe(); + + menu.performIdentifierAction(R.id.menu_item_two, 0); + o.assertNoMoreEvents(); + } +} diff --git a/rxbinding-design/src/androidTest/java/com/jakewharton/rxbinding/support/design/widget/RxSwipeDismissBehaviorTest.java b/rxbinding-design/src/androidTest/java/com/jakewharton/rxbinding/support/design/widget/RxSwipeDismissBehaviorTest.java index 0ea13338..37e601ff 100644 --- a/rxbinding-design/src/androidTest/java/com/jakewharton/rxbinding/support/design/widget/RxSwipeDismissBehaviorTest.java +++ b/rxbinding-design/src/androidTest/java/com/jakewharton/rxbinding/support/design/widget/RxSwipeDismissBehaviorTest.java @@ -12,7 +12,6 @@ import android.view.View; import com.jakewharton.rxbinding.RecordingObserver; import org.junit.Before; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -35,7 +34,6 @@ public final class RxSwipeDismissBehaviorTest { view = activity.view; } - @Ignore("https://github.com/JakeWharton/RxBinding/issues/263") @Test public void dismisses() { ((CoordinatorLayout.LayoutParams) view.getLayoutParams()).setBehavior( new SwipeDismissBehavior()); @@ -56,7 +54,7 @@ public final class RxSwipeDismissBehaviorTest { } private static ViewAction swipeRight() { - return new GeneralSwipeAction(Swipe.SLOW, GeneralLocation.CENTER_LEFT, + return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.CENTER_LEFT, GeneralLocation.CENTER_RIGHT, Press.FINGER); } } diff --git a/rxbinding-design/src/androidTest/res/menu/menu.xml b/rxbinding-design/src/androidTest/res/menu/menu.xml new file mode 100644 index 00000000..893ed34b --- /dev/null +++ b/rxbinding-design/src/androidTest/res/menu/menu.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/AppBarLayoutOffsetChangeOnSubscribe.java b/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/AppBarLayoutOffsetChangeOnSubscribe.java index 18b98746..cc73f7c2 100644 --- a/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/AppBarLayoutOffsetChangeOnSubscribe.java +++ b/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/AppBarLayoutOffsetChangeOnSubscribe.java @@ -25,12 +25,13 @@ final class AppBarLayoutOffsetChangeOnSubscribe implements Observable.OnSubscrib } } }; - view.addOnOffsetChangedListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.removeOnOffsetChangedListener(listener); } }); + + view.addOnOffsetChangedListener(listener); } } diff --git a/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/BottomNavigationViewItemSelectionsOnSubscribe.java b/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/BottomNavigationViewItemSelectionsOnSubscribe.java new file mode 100644 index 00000000..58ccb9bb --- /dev/null +++ b/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/BottomNavigationViewItemSelectionsOnSubscribe.java @@ -0,0 +1,52 @@ +package com.jakewharton.rxbinding.support.design.widget; + +import android.support.annotation.NonNull; +import android.support.design.widget.BottomNavigationView; +import android.view.Menu; +import android.view.MenuItem; +import rx.Observable; +import rx.Subscriber; +import rx.android.MainThreadSubscription; + +import static rx.android.MainThreadSubscription.verifyMainThread; + +final class BottomNavigationViewItemSelectionsOnSubscribe + implements Observable.OnSubscribe { + final BottomNavigationView view; + + BottomNavigationViewItemSelectionsOnSubscribe(BottomNavigationView view) { + this.view = view; + } + + @Override public void call(final Subscriber subscriber) { + verifyMainThread(); + + final BottomNavigationView.OnNavigationItemSelectedListener listener = + new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { + if (!subscriber.isUnsubscribed()) { + subscriber.onNext(item); + } + return true; + } + }; + + subscriber.add(new MainThreadSubscription() { + @Override protected void onUnsubscribe() { + view.setOnNavigationItemSelectedListener(null); + } + }); + + view.setOnNavigationItemSelectedListener(listener); + + // Emit initial item, if one can be found + Menu menu = view.getMenu(); + for (int i = 0, count = menu.size(); i < count; i++) { + MenuItem item = menu.getItem(i); + if (item.isChecked()) { + subscriber.onNext(item); + break; + } + } + } +} diff --git a/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/NavigationViewItemSelectionsOnSubscribe.java b/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/NavigationViewItemSelectionsOnSubscribe.java index fd45ba42..fd444235 100644 --- a/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/NavigationViewItemSelectionsOnSubscribe.java +++ b/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/NavigationViewItemSelectionsOnSubscribe.java @@ -28,7 +28,6 @@ final class NavigationViewItemSelectionsOnSubscribe implements Observable.OnSubs return true; } }; - view.setNavigationItemSelectedListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -36,6 +35,8 @@ final class NavigationViewItemSelectionsOnSubscribe implements Observable.OnSubs } }); + view.setNavigationItemSelectedListener(listener); + // Emit initial checked item, if one can be found. Menu menu = view.getMenu(); for (int i = 0, count = menu.size(); i < count; i++) { diff --git a/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/RxBottomNavigationView.java b/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/RxBottomNavigationView.java new file mode 100644 index 00000000..882337db --- /dev/null +++ b/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/RxBottomNavigationView.java @@ -0,0 +1,34 @@ +package com.jakewharton.rxbinding.support.design.widget; + +import android.support.annotation.CheckResult; +import android.support.annotation.NonNull; +import android.support.design.widget.BottomNavigationView; +import android.view.MenuItem; +import rx.Observable; + +import static com.jakewharton.rxbinding.internal.Preconditions.checkNotNull; + +/** + * Static factory methods for creating {@linkplain Observable observables} for + * {@link BottomNavigationView}. + */ +public final class RxBottomNavigationView { + + /** + * Create an observable which emits the selected item in {@code view}. + *

+ * Warning: The created observable keeps a strong reference to {@code view}. Unsubscribe + * to free this reference. + *

+ * Note: If an item is already selected, it will be emitted immediately on subscribe. + */ + @CheckResult @NonNull public static Observable itemSelections( + @NonNull BottomNavigationView view) { + checkNotNull(view, "view == null"); + return Observable.create(new BottomNavigationViewItemSelectionsOnSubscribe(view)); + } + + private RxBottomNavigationView() { + throw new AssertionError("No instances."); + } +} diff --git a/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/SnackbarDismissesOnSubscribe.java b/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/SnackbarDismissesOnSubscribe.java index 1f778c8e..56e56c54 100644 --- a/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/SnackbarDismissesOnSubscribe.java +++ b/rxbinding-design/src/main/java/com/jakewharton/rxbinding/support/design/widget/SnackbarDismissesOnSubscribe.java @@ -25,12 +25,12 @@ final class SnackbarDismissesOnSubscribe implements Observable.OnSubscribe = RxMenuItem.clicks(this).map { Unit } +inline fun MenuItem.clicks(): Observable = RxMenuItem.clicks(this).map { Unit } /** * Create an observable which emits on `menuItem` click events. The emitted value is @@ -32,7 +32,7 @@ public inline fun MenuItem.clicks(): Observable = RxMenuItem.clicks(this). * @param handled Function invoked with each value to determine the return value of the * underlying [MenuItem.OnMenuItemClickListener]. */ -public inline fun MenuItem.clicks(handled: Func1): Observable = RxMenuItem.clicks(this, handled).map { Unit } +inline fun MenuItem.clicks(handled: Func1): Observable = RxMenuItem.clicks(this, handled).map { Unit } /** * Create an observable of action view events for `menuItem`. @@ -43,7 +43,7 @@ public inline fun MenuItem.clicks(handled: Func1): Observa * *Warning:* The created observable uses [MenuItem.setOnActionExpandListener] to * observe action view events. Only one observable can be used for a menu item at a time. */ -public inline fun MenuItem.actionViewEvents(): Observable = RxMenuItem.actionViewEvents(this) +inline fun MenuItem.actionViewEvents(): Observable = RxMenuItem.actionViewEvents(this) /** * Create an observable of action view events for `menuItem`. @@ -57,7 +57,7 @@ public inline fun MenuItem.actionViewEvents(): Observable): Observable = RxMenuItem.actionViewEvents(this, handled) +inline fun MenuItem.actionViewEvents(handled: Func1): Observable = RxMenuItem.actionViewEvents(this, handled) /** * An action which sets the checked property of `menuItem`. @@ -65,7 +65,7 @@ public inline fun MenuItem.actionViewEvents(handled: Func1 = RxMenuItem.checked(this) +inline fun MenuItem.checked(): Action1 = RxMenuItem.checked(this) /** * An action which sets the enabled property of `menuItem`. @@ -73,7 +73,7 @@ public inline fun MenuItem.checked(): Action1 = RxMenuItem.checked(t * *Warning:* The created observable keeps a strong reference to `menuItem`. * Unsubscribe to free this reference. */ -public inline fun MenuItem.enabled(): Action1 = RxMenuItem.enabled(this) +inline fun MenuItem.enabled(): Action1 = RxMenuItem.enabled(this) /** * An action which sets the icon property of `menuItem`. @@ -81,7 +81,7 @@ public inline fun MenuItem.enabled(): Action1 = RxMenuItem.enabled(t * *Warning:* The created observable keeps a strong reference to `menuItem`. * Unsubscribe to free this reference. */ -public inline fun MenuItem.icon(): Action1 = RxMenuItem.icon(this) +inline fun MenuItem.icon(): Action1 = RxMenuItem.icon(this) /** * An action which sets the icon property of `menuItem`. @@ -89,7 +89,7 @@ public inline fun MenuItem.icon(): Action1 = RxMenuItem.icon(this) * *Warning:* The created observable keeps a strong reference to `menuItem`. * Unsubscribe to free this reference. */ -public inline fun MenuItem.iconRes(): Action1 = RxMenuItem.iconRes(this) +inline fun MenuItem.iconRes(): Action1 = RxMenuItem.iconRes(this) /** * An action which sets the title property of `menuItem`. @@ -97,7 +97,7 @@ public inline fun MenuItem.iconRes(): Action1 = RxMenuItem.iconRes(this) * *Warning:* The created observable keeps a strong reference to `menuItem`. * Unsubscribe to free this reference. */ -public inline fun MenuItem.title(): Action1 = RxMenuItem.title(this) +inline fun MenuItem.title(): Action1 = RxMenuItem.title(this) /** * An action which sets the title property of `menuItem`. @@ -105,7 +105,7 @@ public inline fun MenuItem.title(): Action1 = RxMenuItem.title( * *Warning:* The created observable keeps a strong reference to `menuItem`. * Unsubscribe to free this reference. */ -public inline fun MenuItem.titleRes(): Action1 = RxMenuItem.titleRes(this) +inline fun MenuItem.titleRes(): Action1 = RxMenuItem.titleRes(this) /** * An action which sets the visibility property of `menuItem`. @@ -113,4 +113,4 @@ public inline fun MenuItem.titleRes(): Action1 = RxMenuItem.titleRes(thi * *Warning:* The created observable keeps a strong reference to `menuItem`. * Unsubscribe to free this reference. */ -public inline fun MenuItem.visible(): Action1 = RxMenuItem.visible(this) +inline fun MenuItem.visible(): Action1 = RxMenuItem.visible(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/view/RxView.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/view/RxView.kt index cb648cec..73f247ba 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/view/RxView.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/view/RxView.kt @@ -1,6 +1,7 @@ package com.jakewharton.rxbinding.view import android.view.DragEvent +import android.view.KeyEvent import android.view.MotionEvent import android.view.View import android.view.ViewTreeObserver @@ -17,7 +18,7 @@ import rx.functions.Func1 * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.attaches(): Observable = RxView.attaches(this).map { Unit } +inline fun View.attaches(): Observable = RxView.attaches(this).map { Unit } /** * Create an observable of attach and detach events on `view`. @@ -25,7 +26,7 @@ public inline fun View.attaches(): Observable = RxView.attaches(this).map * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.attachEvents(): Observable = RxView.attachEvents(this) +inline fun View.attachEvents(): Observable = RxView.attachEvents(this) /** * Create an observable which emits on `view` detach events. The emitted value is @@ -34,7 +35,7 @@ public inline fun View.attachEvents(): Observable = RxView.atta * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.detaches(): Observable = RxView.detaches(this).map { Unit } +inline fun View.detaches(): Observable = RxView.detaches(this).map { Unit } /** * Create an observable which emits on `view` click events. The emitted value is @@ -46,7 +47,7 @@ public inline fun View.detaches(): Observable = RxView.detaches(this).map * *Warning:* The created observable uses [View.setOnClickListener] to observe * clicks. Only one observable can be used for a view at a time. */ -public inline fun View.clicks(): Observable = RxView.clicks(this).map { Unit } +inline fun View.clicks(): Observable = RxView.clicks(this).map { Unit } /** * Create an observable of [DragEvent] for drags on `view`. @@ -57,7 +58,7 @@ public inline fun View.clicks(): Observable = RxView.clicks(this).map { Un * *Warning:* The created observable uses [View.setOnDragListener] to observe * drags. Only one observable can be used for a view at a time. */ -public inline fun View.drags(): Observable = RxView.drags(this) +inline fun View.drags(): Observable = RxView.drags(this) /** * Create an observable of [DragEvent] for `view`. @@ -71,7 +72,7 @@ public inline fun View.drags(): Observable = RxView.drags(this) * @param handled Function invoked with each value to determine the return value of the * underlying [View.OnDragListener]. */ -public inline fun View.drags(handled: Func1): Observable = RxView.drags(this, handled) +inline fun View.drags(handled: Func1): Observable = RxView.drags(this, handled) /** * Create an observable for draws on `view`. @@ -82,7 +83,7 @@ public inline fun View.drags(handled: Func1): Observable< * *Warning:* The created observable uses [ViewTreeObserver.addOnDrawListener] to * observe draws. Multiple observables can be used for a view at a time. */ -public inline fun View.draws(): Observable = RxView.draws(this).map { Unit } +inline fun View.draws(): Observable = RxView.draws(this).map { Unit } /** * Create an observable of booleans representing the focus of `view`. @@ -95,7 +96,7 @@ public inline fun View.draws(): Observable = RxView.draws(this).map { Unit * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun View.focusChanges(): Observable = RxView.focusChanges(this) +inline fun View.focusChanges(): Observable = RxView.focusChanges(this) /** * Create an observable which emits on `view` globalLayout events. The emitted value is @@ -108,7 +109,7 @@ public inline fun View.focusChanges(): Observable = RxView.focusChanges * ViewTreeObserver#addOnGlobalLayoutListener} to observe global layouts. Multiple observables * can be used for a view at a time. */ -public inline fun View.globalLayouts(): Observable = RxView.globalLayouts(this).map { Unit } +inline fun View.globalLayouts(): Observable = RxView.globalLayouts(this).map { Unit } /** * Create an observable of hover events for `view`. @@ -125,7 +126,7 @@ public inline fun View.globalLayouts(): Observable = RxView.globalLayouts( * *Warning:* The created observable uses [View.setOnHoverListener] to observe * touches. Only one observable can be used for a view at a time. */ -public inline fun View.hovers(): Observable = RxView.hovers(this) +inline fun View.hovers(): Observable = RxView.hovers(this) /** * Create an observable of hover events for `view`. @@ -145,7 +146,7 @@ public inline fun View.hovers(): Observable = RxView.hovers(this) * @param handled Function invoked with each value to determine the return value of the * underlying [View.OnHoverListener]. */ -public inline fun View.hovers(handled: Func1): Observable = RxView.hovers(this, handled) +inline fun View.hovers(handled: Func1): Observable = RxView.hovers(this, handled) /** * Create an observable which emits on `view` layout changes. The emitted value is @@ -154,7 +155,7 @@ public inline fun View.hovers(handled: Func1): Observab * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.layoutChanges(): Observable = RxView.layoutChanges(this).map { Unit } +inline fun View.layoutChanges(): Observable = RxView.layoutChanges(this).map { Unit } /** * Create an observable of layout-change events for `view`. @@ -162,7 +163,7 @@ public inline fun View.layoutChanges(): Observable = RxView.layoutChanges( * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.layoutChangeEvents(): Observable = RxView.layoutChangeEvents(this) +inline fun View.layoutChangeEvents(): Observable = RxView.layoutChangeEvents(this) /** * Create an observable which emits on `view` long-click events. The emitted value is @@ -174,7 +175,7 @@ public inline fun View.layoutChangeEvents(): Observable = * *Warning:* The created observable uses [View.setOnLongClickListener] to observe * long clicks. Only one observable can be used for a view at a time. */ -public inline fun View.longClicks(): Observable = RxView.longClicks(this).map { Unit } +inline fun View.longClicks(): Observable = RxView.longClicks(this).map { Unit } /** * Create an observable which emits on `view` long-click events. The emitted value is @@ -189,7 +190,7 @@ public inline fun View.longClicks(): Observable = RxView.longClicks(this). * @param handled Function invoked each occurrence to determine the return value of the * underlying [View.OnLongClickListener]. */ -public inline fun View.longClicks(handled: Func0): Observable = RxView.longClicks(this, handled).map { Unit } +inline fun View.longClicks(handled: Func0): Observable = RxView.longClicks(this, handled).map { Unit } /** * Create an observable for pre-draws on `view`. @@ -200,7 +201,7 @@ public inline fun View.longClicks(handled: Func0): Observable = R * *Warning:* The created observable uses [ViewTreeObserver.addOnPreDrawListener] to * observe pre-draws. Multiple observables can be used for a view at a time. */ -public inline fun View.preDraws(proceedDrawingPass: Func0): Observable = RxView.preDraws(this, proceedDrawingPass).map { Unit } +inline fun View.preDraws(proceedDrawingPass: Func0): Observable = RxView.preDraws(this, proceedDrawingPass).map { Unit } /** * Create an observable of scroll-change events for `view`. @@ -208,7 +209,7 @@ public inline fun View.preDraws(proceedDrawingPass: Func0): Observable< * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.scrollChangeEvents(): Observable = RxView.scrollChangeEvents(this) +inline fun View.scrollChangeEvents(): Observable = RxView.scrollChangeEvents(this) /** * Create an observable of integers representing a new system UI visibility for `view`. @@ -220,7 +221,7 @@ public inline fun View.scrollChangeEvents(): Observable = * [View.setOnSystemUiVisibilityChangeListener] to observe system UI visibility changes. * Only one observable can be used for a view at a time. */ -public inline fun View.systemUiVisibilityChanges(): Observable = RxView.systemUiVisibilityChanges(this) +inline fun View.systemUiVisibilityChanges(): Observable = RxView.systemUiVisibilityChanges(this) /** * Create an observable of touch events for `view`. @@ -237,7 +238,7 @@ public inline fun View.systemUiVisibilityChanges(): Observable = RxView.sys * *Warning:* The created observable uses [View.setOnTouchListener] to observe * touches. Only one observable can be used for a view at a time. */ -public inline fun View.touches(): Observable = RxView.touches(this) +inline fun View.touches(): Observable = RxView.touches(this) /** * Create an observable of touch events for `view`. @@ -257,7 +258,30 @@ public inline fun View.touches(): Observable = RxView.touches(this) * @param handled Function invoked with each value to determine the return value of the * underlying [View.OnTouchListener]. */ -public inline fun View.touches(handled: Func1): Observable = RxView.touches(this, handled) +inline fun View.touches(handled: Func1): Observable = RxView.touches(this, handled) + +/** + * Create an observable of key events for `view`. + * + * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe + * to free this reference. + * *Warning:* The created observable uses [View.setOnKeyListener] to observe + * key events. Only one observable can be used for a view at a time. + */ +inline fun View.keys(): Observable = RxView.keys(this) + +/** + * Create an observable of key events for `view`. + * + * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe + * to free this reference. + * *Warning:* The created observable uses [View.setOnKeyListener] to observe + * key events. Only one observable can be used for a view at a time. + * + * @param handled Function invoked each occurrence to determine the return value of the + * underlying [View.OnKeyListener]. + */ +inline fun View.keys(handled: Func1): Observable = RxView.keys(this, handled) /** * An action which sets the activated property of `view`. @@ -265,7 +289,7 @@ public inline fun View.touches(handled: Func1): Observa * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.activated(): Action1 = RxView.activated(this) +inline fun View.activated(): Action1 = RxView.activated(this) /** * An action which sets the clickable property of `view`. @@ -273,7 +297,7 @@ public inline fun View.activated(): Action1 = RxView.activated(this) * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.clickable(): Action1 = RxView.clickable(this) +inline fun View.clickable(): Action1 = RxView.clickable(this) /** * An action which sets the enabled property of `view`. @@ -281,7 +305,7 @@ public inline fun View.clickable(): Action1 = RxView.clickable(this) * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.enabled(): Action1 = RxView.enabled(this) +inline fun View.enabled(): Action1 = RxView.enabled(this) /** * An action which sets the pressed property of `view`. @@ -289,7 +313,7 @@ public inline fun View.enabled(): Action1 = RxView.enabled(this) * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.pressed(): Action1 = RxView.pressed(this) +inline fun View.pressed(): Action1 = RxView.pressed(this) /** * An action which sets the selected property of `view`. @@ -297,7 +321,7 @@ public inline fun View.pressed(): Action1 = RxView.pressed(this) * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.selected(): Action1 = RxView.selected(this) +inline fun View.selected(): Action1 = RxView.selected(this) /** * An action which sets the visibility property of `view`. `false` values use @@ -306,7 +330,7 @@ public inline fun View.selected(): Action1 = RxView.selected(this) * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun View.visibility(): Action1 = RxView.visibility(this) +inline fun View.visibility(): Action1 = RxView.visibility(this) /** * An action which sets the visibility property of `view`. @@ -317,4 +341,4 @@ public inline fun View.visibility(): Action1 = RxView.visibility(thi * @param visibilityWhenFalse Visibility to set on a `false` value (`View.INVISIBLE` * or `View.GONE`). */ -public inline fun View.visibility(visibilityWhenFalse: Int): Action1 = RxView.visibility(this, visibilityWhenFalse) +inline fun View.visibility(visibilityWhenFalse: Int): Action1 = RxView.visibility(this, visibilityWhenFalse) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/view/RxViewGroup.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/view/RxViewGroup.kt index 9479a663..28349074 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/view/RxViewGroup.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/view/RxViewGroup.kt @@ -9,4 +9,4 @@ import rx.Observable * *Warning:* The created observable keeps a strong reference to `viewGroup`. * Unsubscribe to free this reference. */ -public inline fun ViewGroup.changeEvents(): Observable = RxViewGroup.changeEvents(this) +inline fun ViewGroup.changeEvents(): Observable = RxViewGroup.changeEvents(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAbsListView.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAbsListView.kt index b848b9a7..1d6fb594 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAbsListView.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAbsListView.kt @@ -13,4 +13,4 @@ import rx.Observable * {@link AbsListView#setOnScrollListener(AbsListView.OnScrollListener)} to observe scroll * changes. Only one observable can be used for a view at a time. */ -public inline fun AbsListView.scrollEvents(): Observable = RxAbsListView.scrollEvents(this) +inline fun AbsListView.scrollEvents(): Observable = RxAbsListView.scrollEvents(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAdapter.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAdapter.kt index 524b8e20..8d5f0e6d 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAdapter.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAdapter.kt @@ -8,4 +8,4 @@ import rx.Observable * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun T.dataChanges(): Observable = RxAdapter.dataChanges(this) +inline fun T.dataChanges(): Observable = RxAdapter.dataChanges(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAdapterView.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAdapterView.kt index 95322c51..115a07dc 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAdapterView.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAdapterView.kt @@ -17,7 +17,7 @@ import rx.functions.Func1 * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun AdapterView.itemSelections(): Observable = RxAdapterView.itemSelections(this) +inline fun AdapterView.itemSelections(): Observable = RxAdapterView.itemSelections(this) /** * Create an observable of selection events for `view`. @@ -27,7 +27,7 @@ public inline fun AdapterView.itemSelections(): Observable * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun AdapterView.selectionEvents(): Observable = RxAdapterView.selectionEvents(this) +inline fun AdapterView.selectionEvents(): Observable = RxAdapterView.selectionEvents(this) /** * Create an observable of the position of item clicks for `view`. @@ -35,7 +35,7 @@ public inline fun AdapterView.selectionEvents(): Observable AdapterView.itemClicks(): Observable = RxAdapterView.itemClicks(this) +inline fun AdapterView.itemClicks(): Observable = RxAdapterView.itemClicks(this) /** * Create an observable of the item click events for `view`. @@ -43,7 +43,7 @@ public inline fun AdapterView.itemClicks(): Observable = R * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun AdapterView.itemClickEvents(): Observable = RxAdapterView.itemClickEvents(this) +inline fun AdapterView.itemClickEvents(): Observable = RxAdapterView.itemClickEvents(this) /** * Create an observable of the position of item long-clicks for `view`. @@ -51,7 +51,7 @@ public inline fun AdapterView.itemClickEvents(): Observable AdapterView.itemLongClicks(): Observable = RxAdapterView.itemLongClicks(this) +inline fun AdapterView.itemLongClicks(): Observable = RxAdapterView.itemLongClicks(this) /** * Create an observable of the position of item long-clicks for `view`. @@ -62,7 +62,7 @@ public inline fun AdapterView.itemLongClicks(): Observable * @param handled Function invoked each occurrence to determine the return value of the * underlying [AdapterView.OnItemLongClickListener]. */ -public inline fun AdapterView.itemLongClicks(handled: Func0): Observable = RxAdapterView.itemLongClicks(this, handled) +inline fun AdapterView.itemLongClicks(handled: Func0): Observable = RxAdapterView.itemLongClicks(this, handled) /** * Create an observable of the item long-click events for `view`. @@ -70,7 +70,7 @@ public inline fun AdapterView.itemLongClicks(handled: Func0 AdapterView.itemLongClickEvents(): Observable = RxAdapterView.itemLongClickEvents(this) +inline fun AdapterView.itemLongClickEvents(): Observable = RxAdapterView.itemLongClickEvents(this) /** * Create an observable of the item long-click events for `view`. @@ -81,7 +81,7 @@ public inline fun AdapterView.itemLongClickEvents(): Observable * @param handled Function invoked with each value to determine the return value of the * underlying [AdapterView.OnItemLongClickListener]. */ -public inline fun AdapterView.itemLongClickEvents(handled: Func1): Observable = RxAdapterView.itemLongClickEvents(this, handled) +inline fun AdapterView.itemLongClickEvents(handled: Func1): Observable = RxAdapterView.itemLongClickEvents(this, handled) /** * An action which sets the selected position of `view`. @@ -89,4 +89,4 @@ public inline fun AdapterView.itemLongClickEvents(handled: Func * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun AdapterView.selection(): Action1 = RxAdapterView.selection(this) +inline fun AdapterView.selection(): Action1 = RxAdapterView.selection(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAutoCompleteTextView.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAutoCompleteTextView.kt index 11221d8d..f1732de7 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAutoCompleteTextView.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxAutoCompleteTextView.kt @@ -10,7 +10,7 @@ import rx.functions.Action1 * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun AutoCompleteTextView.itemClickEvents(): Observable = RxAutoCompleteTextView.itemClickEvents(this) +inline fun AutoCompleteTextView.itemClickEvents(): Observable = RxAutoCompleteTextView.itemClickEvents(this) /** * An action that sets the optional hint text that is displayed at the bottom of the the matching @@ -20,7 +20,7 @@ public inline fun AutoCompleteTextView.itemClickEvents(): Observable = RxAutoCompleteTextView.completionHint(this) +inline fun AutoCompleteTextView.completionHint(): Action1 = RxAutoCompleteTextView.completionHint(this) /** * An action that specifies the minimum number of characters the user has to type in the edit box @@ -30,4 +30,4 @@ public inline fun AutoCompleteTextView.completionHint(): Action1 = RxAutoCompleteTextView.threshold(this) +inline fun AutoCompleteTextView.threshold(): Action1 = RxAutoCompleteTextView.threshold(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxCheckedTextView.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxCheckedTextView.kt index a6ff2fd0..cd62dabe 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxCheckedTextView.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxCheckedTextView.kt @@ -9,4 +9,4 @@ import rx.functions.Action1 * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun CheckedTextView.check(): Action1 = RxCheckedTextView.check(this) +inline fun CheckedTextView.check(): Action1 = RxCheckedTextView.check(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxCompoundButton.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxCompoundButton.kt index 4dc26758..88eb098b 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxCompoundButton.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxCompoundButton.kt @@ -15,7 +15,7 @@ import rx.functions.Action1 * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun CompoundButton.checkedChanges(): Observable = RxCompoundButton.checkedChanges(this) +inline fun CompoundButton.checkedChanges(): Observable = RxCompoundButton.checkedChanges(this) /** * An action which sets the checked property of `view`. @@ -23,7 +23,7 @@ public inline fun CompoundButton.checkedChanges(): Observable = RxCompo * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun CompoundButton.checked(): Action1 = RxCompoundButton.checked(this) +inline fun CompoundButton.checked(): Action1 = RxCompoundButton.checked(this) /** * An action which sets the toggles property of `view` with each value. @@ -31,4 +31,4 @@ public inline fun CompoundButton.checked(): Action1 = RxCompoundButt * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun CompoundButton.toggle(): Action1 = RxCompoundButton.toggle(this) +inline fun CompoundButton.toggle(): Action1 = RxCompoundButton.toggle(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxPopupMenu.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxPopupMenu.kt index a6b46066..a15119b8 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxPopupMenu.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxPopupMenu.kt @@ -13,7 +13,7 @@ import rx.Observable * *Warning:* The created observable uses [PopupMenu.setOnMenuItemClickListener] * to observe dismiss change. Only one observable can be used for a view at a time. */ -public inline fun PopupMenu.itemClicks(): Observable = RxPopupMenu.itemClicks(this) +inline fun PopupMenu.itemClicks(): Observable = RxPopupMenu.itemClicks(this) /** * Create an observable which emits on `view` dismiss events. The emitted value is @@ -25,4 +25,4 @@ public inline fun PopupMenu.itemClicks(): Observable = RxPopupMenu.ite * *Warning:* The created observable uses [PopupMenu.setOnDismissListener] to * observe dismiss change. Only one observable can be used for a view at a time. */ -public inline fun PopupMenu.dismisses(): Observable = RxPopupMenu.dismisses(this).map { Unit } +inline fun PopupMenu.dismisses(): Observable = RxPopupMenu.dismisses(this).map { Unit } diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxProgressBar.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxProgressBar.kt index 196bde45..d507195e 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxProgressBar.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxProgressBar.kt @@ -9,7 +9,7 @@ import rx.functions.Action1 * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun ProgressBar.incrementProgressBy(): Action1 = RxProgressBar.incrementProgressBy(this) +inline fun ProgressBar.incrementProgressBy(): Action1 = RxProgressBar.incrementProgressBy(this) /** * An action which increments the secondary progress value of `view`. @@ -17,7 +17,7 @@ public inline fun ProgressBar.incrementProgressBy(): Action1 = RxProgres * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun ProgressBar.incrementSecondaryProgressBy(): Action1 = RxProgressBar.incrementSecondaryProgressBy(this) +inline fun ProgressBar.incrementSecondaryProgressBy(): Action1 = RxProgressBar.incrementSecondaryProgressBy(this) /** * An action which sets whether `view` is indeterminate. @@ -25,7 +25,7 @@ public inline fun ProgressBar.incrementSecondaryProgressBy(): Action1 = * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun ProgressBar.indeterminate(): Action1 = RxProgressBar.indeterminate(this) +inline fun ProgressBar.indeterminate(): Action1 = RxProgressBar.indeterminate(this) /** * An action which sets the max value of `view`. @@ -33,7 +33,7 @@ public inline fun ProgressBar.indeterminate(): Action1 = RxProgressB * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun ProgressBar.max(): Action1 = RxProgressBar.max(this) +inline fun ProgressBar.max(): Action1 = RxProgressBar.max(this) /** * An action which sets the progress value of `view`. @@ -41,7 +41,7 @@ public inline fun ProgressBar.max(): Action1 = RxProgressBar.max(this) * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun ProgressBar.progress(): Action1 = RxProgressBar.progress(this) +inline fun ProgressBar.progress(): Action1 = RxProgressBar.progress(this) /** * An action which sets the secondary progress value of `view`. @@ -49,4 +49,4 @@ public inline fun ProgressBar.progress(): Action1 = RxProgressBar.progre * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun ProgressBar.secondaryProgress(): Action1 = RxProgressBar.secondaryProgress(this) +inline fun ProgressBar.secondaryProgress(): Action1 = RxProgressBar.secondaryProgress(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxRadioGroup.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxRadioGroup.kt index e58355f5..9fe54cda 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxRadioGroup.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxRadioGroup.kt @@ -12,7 +12,7 @@ import rx.functions.Action1 * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun RadioGroup.checkedChanges(): Observable = RxRadioGroup.checkedChanges(this) +inline fun RadioGroup.checkedChanges(): Observable = RxRadioGroup.checkedChanges(this) /** * An action which sets the checked child of `view` with ID. Passing {@code -1} will clear @@ -21,4 +21,4 @@ public inline fun RadioGroup.checkedChanges(): Observable = RxRadioGroup.ch * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun RadioGroup.checked(): Action1 = RxRadioGroup.checked(this) +inline fun RadioGroup.checked(): Action1 = RxRadioGroup.checked(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxRatingBar.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxRatingBar.kt index 2997109f..56ce9242 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxRatingBar.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxRatingBar.kt @@ -12,7 +12,7 @@ import rx.functions.Action1 * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun RatingBar.ratingChanges(): Observable = RxRatingBar.ratingChanges(this) +inline fun RatingBar.ratingChanges(): Observable = RxRatingBar.ratingChanges(this) /** * Create an observable of the rating change events on `view`. @@ -22,7 +22,7 @@ public inline fun RatingBar.ratingChanges(): Observable = RxRatingBar.rat * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun RatingBar.ratingChangeEvents(): Observable = RxRatingBar.ratingChangeEvents(this) +inline fun RatingBar.ratingChangeEvents(): Observable = RxRatingBar.ratingChangeEvents(this) /** * An action which sets the rating of `view`. @@ -30,7 +30,7 @@ public inline fun RatingBar.ratingChangeEvents(): Observable = RxRatingBar.rating(this) +inline fun RatingBar.rating(): Action1 = RxRatingBar.rating(this) /** * An action which sets whether `view` is an indicator (thus non-changeable by the user). @@ -38,4 +38,4 @@ public inline fun RatingBar.rating(): Action1 = RxRatingBar.rating(thi * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun RatingBar.isIndicator(): Action1 = RxRatingBar.isIndicator(this) +inline fun RatingBar.isIndicator(): Action1 = RxRatingBar.isIndicator(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxSearchView.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxSearchView.kt index 785a94f1..c45ab5e4 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxSearchView.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxSearchView.kt @@ -15,7 +15,7 @@ import rx.functions.Func1 * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun SearchView.queryTextChangeEvents(): Observable = RxSearchView.queryTextChangeEvents(this) +inline fun SearchView.queryTextChangeEvents(): Observable = RxSearchView.queryTextChangeEvents(this) /** * Create an observable of character sequences for query text changes on `view`. @@ -25,9 +25,9 @@ public inline fun SearchView.queryTextChangeEvents(): Observable = RxSearchView.queryTextChanges(this) +inline fun SearchView.queryTextChanges(): Observable = RxSearchView.queryTextChanges(this) -/** +/**w * An action which sets the query property of `view` with character sequences. * * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe @@ -35,38 +35,38 @@ public inline fun SearchView.queryTextChanges(): Observable = RxSe * * @param submit weather to submit query right after updating query text */ -public inline fun SearchView.query(submit: Boolean): Action1 = RxSearchView.query(this, submit) +inline fun SearchView.query(submit: Boolean): Action1 = RxSearchView.query(this, submit) /** * Create an observable of booleans representing the focus of the query text field. - * + * * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. - * + * */ -public inline fun SearchView.queryTextFocusChange(): Observable = RxSearchView.queryTextFocusChange(this) +inline fun SearchView.queryTextFocusChange(): Observable = RxSearchView.queryTextFocusChange(this) /** * Create an observable of the absolute position of the clicked item in the list of suggestions - * + * * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. - * + * * *Warning:* The created observable uses [SearchView.setOnSuggestionListener] to * observe search view events. Only one observable can be used for a search view at a time. */ -public inline fun SearchView.suggestionClick(): Observable = RxSearchView.suggestionClick(this) +inline fun SearchView.suggestionClick(): Observable = RxSearchView.suggestionClick(this) /** * Create an observable of the absolute position of the clicked item in the list of suggestions - * + * * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. - * + * * *Warning:* The created observable uses [SearchView.setOnSuggestionListener] to * observe search view events. Only one observable can be used for a search view at a time. * * @param handled Function invoked with each value to determine the return value of the * underlying [SearchView.OnSuggestionListener]. */ -public inline fun SearchView.suggestionClick(handled: Func1): Observable = RxSearchView.suggestionClick(this, handled) +inline fun SearchView.suggestionClick(handled: Func1): Observable = RxSearchView.suggestionClick(this, handled) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxSeekBar.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxSeekBar.kt index 0f55fc37..e674028f 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxSeekBar.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxSeekBar.kt @@ -11,7 +11,7 @@ import rx.Observable * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun SeekBar.changes(): Observable = RxSeekBar.changes(this) +inline fun SeekBar.changes(): Observable = RxSeekBar.changes(this) /** * Create an observable of progress value changes on `view` that were made only from the @@ -22,7 +22,7 @@ public inline fun SeekBar.changes(): Observable = RxSeekBar.changes(this) * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun SeekBar.userChanges(): Observable = RxSeekBar.userChanges(this) +inline fun SeekBar.userChanges(): Observable = RxSeekBar.userChanges(this) /** * Create an observable of progress value changes on `view` that were made only from the @@ -33,7 +33,7 @@ public inline fun SeekBar.userChanges(): Observable = RxSeekBar.userChanges * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun SeekBar.systemChanges(): Observable = RxSeekBar.systemChanges(this) +inline fun SeekBar.systemChanges(): Observable = RxSeekBar.systemChanges(this) /** * Create an observable of progress change events for `view`. @@ -43,4 +43,4 @@ public inline fun SeekBar.systemChanges(): Observable = RxSeekBar.systemCha * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun SeekBar.changeEvents(): Observable = RxSeekBar.changeEvents(this) +inline fun SeekBar.changeEvents(): Observable = RxSeekBar.changeEvents(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxTextSwitcher.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxTextSwitcher.kt index ff6ed303..a516ab1c 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxTextSwitcher.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxTextSwitcher.kt @@ -10,7 +10,7 @@ import rx.functions.Action1 * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextSwitcher.text(): Action1 = RxTextSwitcher.text(this) +inline fun TextSwitcher.text(): Action1 = RxTextSwitcher.text(this) /** * An action which sets the current text property of `view`. @@ -18,4 +18,4 @@ public inline fun TextSwitcher.text(): Action1 = RxTextSwitcher * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextSwitcher.currentText(): Action1 = RxTextSwitcher.currentText(this) +inline fun TextSwitcher.currentText(): Action1 = RxTextSwitcher.currentText(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxTextView.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxTextView.kt index b6d20022..3e7c51c6 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxTextView.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxTextView.kt @@ -15,7 +15,7 @@ import rx.functions.Func1 * *Warning:* The created observable uses [TextView.OnEditorActionListener] to * observe actions. Only one observable can be used for a view at a time. */ -public inline fun TextView.editorActions(): Observable = RxTextView.editorActions(this) +inline fun TextView.editorActions(): Observable = RxTextView.editorActions(this) /** * Create an observable of editor actions on `view`. @@ -29,7 +29,7 @@ public inline fun TextView.editorActions(): Observable = RxTextView.editorA * @param handled Function invoked each occurrence to determine the return value of the * underlying [TextView.OnEditorActionListener]. */ -public inline fun TextView.editorActions(handled: Func1): Observable = RxTextView.editorActions(this, handled) +inline fun TextView.editorActions(handled: Func1): Observable = RxTextView.editorActions(this, handled) /** * Create an observable of editor action events on `view`. @@ -40,7 +40,7 @@ public inline fun TextView.editorActions(handled: Func1): Obser * *Warning:* The created observable uses [TextView.OnEditorActionListener] to * observe actions. Only one observable can be used for a view at a time. */ -public inline fun TextView.editorActionEvents(): Observable = RxTextView.editorActionEvents(this) +inline fun TextView.editorActionEvents(): Observable = RxTextView.editorActionEvents(this) /** * Create an observable of editor action events on `view`. @@ -54,7 +54,7 @@ public inline fun TextView.editorActionEvents(): Observable): Observable = RxTextView.editorActionEvents(this, handled) +inline fun TextView.editorActionEvents(handled: Func1): Observable = RxTextView.editorActionEvents(this, handled) /** * Create an observable of character sequences for text changes on `view`. @@ -70,7 +70,7 @@ public inline fun TextView.editorActionEvents(handled: Func1 = RxTextView.textChanges(this) +inline fun TextView.textChanges(): Observable = RxTextView.textChanges(this) /** * Create an observable of text change events for `view`. @@ -86,7 +86,7 @@ public inline fun TextView.textChanges(): Observable = RxTextView. * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun TextView.textChangeEvents(): Observable = RxTextView.textChangeEvents(this) +inline fun TextView.textChangeEvents(): Observable = RxTextView.textChangeEvents(this) /** * Create an observable of before text change events for `view`. @@ -96,7 +96,7 @@ public inline fun TextView.textChangeEvents(): Observable = RxTextView.beforeTextChangeEvents(this) +inline fun TextView.beforeTextChangeEvents(): Observable = RxTextView.beforeTextChangeEvents(this) /** * Create an observable of after text change events for `view`. @@ -106,7 +106,7 @@ public inline fun TextView.beforeTextChangeEvents(): Observable = RxTextView.afterTextChangeEvents(this) +inline fun TextView.afterTextChangeEvents(): Observable = RxTextView.afterTextChangeEvents(this) /** * An action which sets the text property of `view` with character sequences. @@ -114,7 +114,7 @@ public inline fun TextView.afterTextChangeEvents(): Observable = RxTextView.text(this) +inline fun TextView.text(): Action1 = RxTextView.text(this) /** * An action which sets the text property of `view` string resource IDs. @@ -122,7 +122,7 @@ public inline fun TextView.text(): Action1 = RxTextView.text(th * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextView.textRes(): Action1 = RxTextView.textRes(this) +inline fun TextView.textRes(): Action1 = RxTextView.textRes(this) /** * An action which sets the error property of `view` with character sequences. @@ -130,7 +130,7 @@ public inline fun TextView.textRes(): Action1 = RxTextView.textRes(this) * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextView.error(): Action1 = RxTextView.error(this) +inline fun TextView.error(): Action1 = RxTextView.error(this) /** * An action which sets the error property of `view` string resource IDs. @@ -138,7 +138,7 @@ public inline fun TextView.error(): Action1 = RxTextView.error( * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextView.errorRes(): Action1 = RxTextView.errorRes(this) +inline fun TextView.errorRes(): Action1 = RxTextView.errorRes(this) /** * An action which sets the hint property of `view` with character sequences. @@ -146,7 +146,7 @@ public inline fun TextView.errorRes(): Action1 = RxTextView.errorRes(thi * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextView.hint(): Action1 = RxTextView.hint(this) +inline fun TextView.hint(): Action1 = RxTextView.hint(this) /** * An action which sets the hint property of `view` string resource IDs. @@ -154,7 +154,7 @@ public inline fun TextView.hint(): Action1 = RxTextView.hint(th * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextView.hintRes(): Action1 = RxTextView.hintRes(this) +inline fun TextView.hintRes(): Action1 = RxTextView.hintRes(this) /** * An action which sets the color property of `view` with color integer. @@ -162,4 +162,4 @@ public inline fun TextView.hintRes(): Action1 = RxTextView.hintRes(this) * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun TextView.color(): Action1 = RxTextView.color(this) +inline fun TextView.color(): Action1 = RxTextView.color(this) diff --git a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxToolbar.kt b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxToolbar.kt index 15ec5b7c..088300eb 100644 --- a/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxToolbar.kt +++ b/rxbinding-kotlin/src/main/kotlin/com/jakewharton/rxbinding/widget/RxToolbar.kt @@ -10,7 +10,7 @@ import rx.Observable * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun Toolbar.itemClicks(): Observable = RxToolbar.itemClicks(this) +inline fun Toolbar.itemClicks(): Observable = RxToolbar.itemClicks(this) /** * Create an observable which emits on `view` navigation click events. The emitted value is @@ -22,4 +22,4 @@ public inline fun Toolbar.itemClicks(): Observable = RxToolbar.itemCli * *Warning:* The created observable uses [Toolbar.setNavigationOnClickListener] * to observe clicks. Only one observable can be used for a view at a time. */ -public inline fun Toolbar.navigationClicks(): Observable = RxToolbar.navigationClicks(this).map { Unit } +inline fun Toolbar.navigationClicks(): Observable = RxToolbar.navigationClicks(this).map { Unit } diff --git a/rxbinding-leanback-v17-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v17/leanback/widget/RxSearchBar.kt b/rxbinding-leanback-v17-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v17/leanback/widget/RxSearchBar.kt index c6e69e94..db662a9e 100644 --- a/rxbinding-leanback-v17-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v17/leanback/widget/RxSearchBar.kt +++ b/rxbinding-leanback-v17-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v17/leanback/widget/RxSearchBar.kt @@ -12,7 +12,7 @@ import rx.functions.Action1 * to free this reference. * */ -public inline fun SearchBar.searchQueryChangeEvents(): Observable = RxSearchBar.searchQueryChangeEvents(this) +inline fun SearchBar.searchQueryChangeEvents(): Observable = RxSearchBar.searchQueryChangeEvents(this) /** * Create an observable of String values for search query changes on `view`. @@ -21,7 +21,7 @@ public inline fun SearchBar.searchQueryChangeEvents(): Observable = RxSearchBar.searchQueryChanges(this) +inline fun SearchBar.searchQueryChanges(): Observable = RxSearchBar.searchQueryChanges(this) /** * An action which sets the searchQuery property of `view` with String values. @@ -29,4 +29,4 @@ public inline fun SearchBar.searchQueryChanges(): Observable = RxSearchB * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun SearchBar.searchQuery(): Action1 = RxSearchBar.searchQuery(this) +inline fun SearchBar.searchQuery(): Action1 = RxSearchBar.searchQuery(this) diff --git a/rxbinding-leanback-v17-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v17/leanback/widget/RxSearchEditText.kt b/rxbinding-leanback-v17-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v17/leanback/widget/RxSearchEditText.kt index 50b13f53..d52566d3 100644 --- a/rxbinding-leanback-v17-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v17/leanback/widget/RxSearchEditText.kt +++ b/rxbinding-leanback-v17-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v17/leanback/widget/RxSearchEditText.kt @@ -9,4 +9,4 @@ import rx.Observable * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun SearchEditText.keyboardDismisses(): Observable = RxSearchEditText.keyboardDismisses(this).map { Unit } +inline fun SearchEditText.keyboardDismisses(): Observable = RxSearchEditText.keyboardDismisses(this).map { Unit } diff --git a/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchBarSearchQueryChangeEventsOnSubscribe.java b/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchBarSearchQueryChangeEventsOnSubscribe.java index b64b38f2..5105f8fb 100644 --- a/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchBarSearchQueryChangeEventsOnSubscribe.java +++ b/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchBarSearchQueryChangeEventsOnSubscribe.java @@ -40,13 +40,13 @@ final class SearchBarSearchQueryChangeEventsOnSubscribe } }; - view.setSearchBarListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setSearchBarListener(null); } }); + + view.setSearchBarListener(listener); } } diff --git a/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchBarSearchQueryChangesOnSubscribe.java b/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchBarSearchQueryChangesOnSubscribe.java index 8ccb2ac8..dfc4c30a 100644 --- a/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchBarSearchQueryChangesOnSubscribe.java +++ b/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchBarSearchQueryChangesOnSubscribe.java @@ -32,12 +32,12 @@ final class SearchBarSearchQueryChangesOnSubscribe implements Observable.OnSubsc } }; - view.setSearchBarListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setSearchBarListener(null); } }); + + view.setSearchBarListener(listener); } } diff --git a/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchEditTextKeyboardDismissOnSubscribe.java b/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchEditTextKeyboardDismissOnSubscribe.java index c0dfefde..f3578402 100644 --- a/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchEditTextKeyboardDismissOnSubscribe.java +++ b/rxbinding-leanback-v17/src/main/java/com/jakewharton/rxbinding/support/v17/leanback/widget/SearchEditTextKeyboardDismissOnSubscribe.java @@ -27,8 +27,6 @@ public void onKeyboardDismiss() { } }; - view.setOnKeyboardDismissListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -40,5 +38,7 @@ public void onKeyboardDismiss() { }); } }); + + view.setOnKeyboardDismissListener(listener); } } diff --git a/rxbinding-recyclerview-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxRecyclerView.kt b/rxbinding-recyclerview-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxRecyclerView.kt index 73e7fbf8..4e68dfe4 100644 --- a/rxbinding-recyclerview-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxRecyclerView.kt +++ b/rxbinding-recyclerview-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxRecyclerView.kt @@ -9,7 +9,7 @@ import rx.Observable * *Warning:* The created observable keeps a strong reference to `recyclerView`. * Unsubscribe to free this reference. */ -public inline fun RecyclerView.childAttachStateChangeEvents(): Observable = RxRecyclerView.childAttachStateChangeEvents(this) +inline fun RecyclerView.childAttachStateChangeEvents(): Observable = RxRecyclerView.childAttachStateChangeEvents(this) /** * Create an observable of scroll events on `recyclerView`. @@ -17,7 +17,7 @@ public inline fun RecyclerView.childAttachStateChangeEvents(): Observable = RxRecyclerView.scrollEvents(this) +inline fun RecyclerView.scrollEvents(): Observable = RxRecyclerView.scrollEvents(this) /** * Create an observable of scroll state changes on `recyclerView`. @@ -25,4 +25,4 @@ public inline fun RecyclerView.scrollEvents(): Observable = RxRecyclerView.scrollStateChanges(this) +inline fun RecyclerView.scrollStateChanges(): Observable = RxRecyclerView.scrollStateChanges(this) diff --git a/rxbinding-recyclerview-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxRecyclerViewAdapter.kt b/rxbinding-recyclerview-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxRecyclerViewAdapter.kt index 05ead362..b517e23c 100644 --- a/rxbinding-recyclerview-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxRecyclerViewAdapter.kt +++ b/rxbinding-recyclerview-v7-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v7/widget/RxRecyclerViewAdapter.kt @@ -9,4 +9,4 @@ import rx.Observable * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun > T.dataChanges(): Observable = RxRecyclerViewAdapter.dataChanges(this) +inline fun > T.dataChanges(): Observable = RxRecyclerViewAdapter.dataChanges(this) diff --git a/rxbinding-recyclerview-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/RecyclerAdapterDataChangeOnSubscribe.java b/rxbinding-recyclerview-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/RecyclerAdapterDataChangeOnSubscribe.java index 4b0ea3d8..578c26c3 100644 --- a/rxbinding-recyclerview-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/RecyclerAdapterDataChangeOnSubscribe.java +++ b/rxbinding-recyclerview-v7/src/main/java/com/jakewharton/rxbinding/support/v7/widget/RecyclerAdapterDataChangeOnSubscribe.java @@ -28,14 +28,14 @@ final class RecyclerAdapterDataChangeOnSubscribe = RxMenuItemCompat.actionViewEvents(this) +inline fun MenuItem.actionViewEvents(): Observable = RxMenuItemCompat.actionViewEvents(this) /** * Create an observable of action view events for `menuItem`. @@ -29,4 +29,4 @@ public inline fun MenuItem.actionViewEvents(): Observable): Observable = RxMenuItemCompat.actionViewEvents(this, handled) +inline fun MenuItem.actionViewEvents(handled: Func1): Observable = RxMenuItemCompat.actionViewEvents(this, handled) diff --git a/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/view/RxViewPager.kt b/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/view/RxViewPager.kt index 0e2eb723..0884ec92 100644 --- a/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/view/RxViewPager.kt +++ b/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/view/RxViewPager.kt @@ -2,6 +2,16 @@ package com.jakewharton.rxbinding.support.v4.view import android.support.v4.view.ViewPager import rx.Observable +import rx.functions.Action1 + +/** + * Create an observable of scroll state change events on `view`. + * + * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe + * to free this reference. + * + */ +inline fun ViewPager.pageScrollStateChanges(): Observable = RxViewPager.pageScrollStateChanges(this) /** * Create an observable of page selected events on `view`. @@ -11,4 +21,12 @@ import rx.Observable * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun ViewPager.pageSelections(): Observable = RxViewPager.pageSelections(this) +inline fun ViewPager.pageSelections(): Observable = RxViewPager.pageSelections(this) + +/** + * An action which sets the current item of `view`. + * + * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe + * to free this reference. + */ +inline fun ViewPager.currentItem(): Action1 = RxViewPager.currentItem(this) diff --git a/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxDrawerLayout.kt b/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxDrawerLayout.kt index 63f540fa..3342f0aa 100644 --- a/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxDrawerLayout.kt +++ b/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxDrawerLayout.kt @@ -12,7 +12,7 @@ import rx.functions.Action1 * * *Note:* A value will be emitted immediately on subscribe. */ -public inline fun DrawerLayout.drawerOpen(gravity: Int): Observable = RxDrawerLayout.drawerOpen(this, gravity) +inline fun DrawerLayout.drawerOpen(gravity: Int): Observable = RxDrawerLayout.drawerOpen(this, gravity) /** * An action which sets whether the drawer with `gravity` of `view` is open. @@ -20,4 +20,4 @@ public inline fun DrawerLayout.drawerOpen(gravity: Int): Observable = R * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun DrawerLayout.open(gravity: Int): Action1 = RxDrawerLayout.open(this, gravity) +inline fun DrawerLayout.open(gravity: Int): Action1 = RxDrawerLayout.open(this, gravity) diff --git a/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxNestedScrollView.kt b/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxNestedScrollView.kt index d734df4d..2491f893 100644 --- a/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxNestedScrollView.kt +++ b/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxNestedScrollView.kt @@ -10,4 +10,4 @@ import rx.Observable * *Warning:* The created observable keeps a strong reference to `view`. * Unsubscribe to free this reference. */ -public inline fun NestedScrollView.scrollChangeEvents(): Observable = RxNestedScrollView.scrollChangeEvents(this) +inline fun NestedScrollView.scrollChangeEvents(): Observable = RxNestedScrollView.scrollChangeEvents(this) diff --git a/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxSlidingPaneLayout.kt b/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxSlidingPaneLayout.kt new file mode 100644 index 00000000..96468e5b --- /dev/null +++ b/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxSlidingPaneLayout.kt @@ -0,0 +1,37 @@ +package com.jakewharton.rxbinding.support.v4.widget + +import android.support.v4.widget.SlidingPaneLayout +import rx.Observable +import rx.functions.Action1 + +/** + * Create an observable of the open state of the pane of `view` + * + * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe + * to free this reference. + * + * *Warning:* The created observable uses [SlidingPaneLayout.setPanelSlideListener] + * to observe dismiss change. Only one observable can be used for a view at a time. + * + * *Note:* A value will be emitted immediately on subscribe. + */ +inline fun SlidingPaneLayout.panelOpens(): Observable = RxSlidingPaneLayout.panelOpens(this) + +/** + * Create an observable of the slide offset of the pane of `view` + * + * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe + * to free this reference. + * + * *Warning:* The created observable uses [SlidingPaneLayout.setPanelSlideListener] + * to observe dismiss change. Only one observable can be used for a view at a time. + */ +inline fun SlidingPaneLayout.panelSlides(): Observable = RxSlidingPaneLayout.panelSlides(this) + +/** + * An action which sets whether the pane of `view` is open. + * + * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe + * to free this reference. + */ +inline fun SlidingPaneLayout.open(): Action1 = RxSlidingPaneLayout.open(this) diff --git a/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxSwipeRefreshLayout.kt b/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxSwipeRefreshLayout.kt index a9401e2c..5d2b6fe9 100644 --- a/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxSwipeRefreshLayout.kt +++ b/rxbinding-support-v4-kotlin/src/main/kotlin/com/jakewharton/rxbinding/support/v4/widget/RxSwipeRefreshLayout.kt @@ -10,7 +10,7 @@ import rx.functions.Action1 * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun SwipeRefreshLayout.refreshes(): Observable = RxSwipeRefreshLayout.refreshes(this).map { Unit } +inline fun SwipeRefreshLayout.refreshes(): Observable = RxSwipeRefreshLayout.refreshes(this).map { Unit } /** * An action which sets whether the layout is showing the refreshing indicator. @@ -18,4 +18,4 @@ public inline fun SwipeRefreshLayout.refreshes(): Observable = RxSwipeRefr * *Warning:* The created observable keeps a strong reference to `view`. Unsubscribe * to free this reference. */ -public inline fun SwipeRefreshLayout.refreshing(): Action1 = RxSwipeRefreshLayout.refreshing(this) +inline fun SwipeRefreshLayout.refreshing(): Action1 = RxSwipeRefreshLayout.refreshing(this) diff --git a/rxbinding-support-v4/build.gradle b/rxbinding-support-v4/build.gradle index e5c349fe..07c1ba04 100644 --- a/rxbinding-support-v4/build.gradle +++ b/rxbinding-support-v4/build.gradle @@ -9,7 +9,7 @@ apply plugin: 'rxbinding-module' dependencies { compile project(':rxbinding') - compile rootProject.ext.supportV4 + compile rootProject.ext.supportV4CoreUi androidTestCompile project(':testing-utils') androidTestCompile rootProject.ext.supportTestRunner diff --git a/rxbinding-support-v4/src/androidTest/AndroidManifest.xml b/rxbinding-support-v4/src/androidTest/AndroidManifest.xml index ddde5358..85d72222 100644 --- a/rxbinding-support-v4/src/androidTest/AndroidManifest.xml +++ b/rxbinding-support-v4/src/androidTest/AndroidManifest.xml @@ -7,5 +7,6 @@ + diff --git a/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/view/RxViewPagerTest.java b/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/view/RxViewPagerTest.java index b296451d..abd0cda0 100644 --- a/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/view/RxViewPagerTest.java +++ b/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/view/RxViewPagerTest.java @@ -1,6 +1,11 @@ package com.jakewharton.rxbinding.support.v4.view; import android.support.test.annotation.UiThreadTest; +import android.support.test.espresso.ViewAction; +import android.support.test.espresso.action.GeneralLocation; +import android.support.test.espresso.action.GeneralSwipeAction; +import android.support.test.espresso.action.Press; +import android.support.test.espresso.action.Swipe; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import android.support.v4.view.ViewPager; @@ -10,7 +15,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Action1; +import static android.support.test.espresso.Espresso.onView; +import static android.support.test.espresso.matcher.ViewMatchers.withId; import static com.google.common.truth.Truth.assertThat; @RunWith(AndroidJUnit4.class) @@ -25,6 +34,26 @@ public final class RxViewPagerTest { view = activity.viewPager; } + @Test public void pageScrollStateChanges() { + view.setCurrentItem(0); + RecordingObserver o = new RecordingObserver<>(); + Subscription subscription = RxViewPager.pageScrollStateChanges(view) + .subscribeOn(AndroidSchedulers.mainThread()) + .subscribe(o); + o.assertNoMoreEvents(); // No initial value. + + onView(withId(1)).perform(swipeLeft()); + assertThat(o.takeNext()).isEqualTo(ViewPager.SCROLL_STATE_DRAGGING); + assertThat(o.takeNext()).isEqualTo(ViewPager.SCROLL_STATE_SETTLING); + assertThat(o.takeNext()).isEqualTo(ViewPager.SCROLL_STATE_IDLE); + o.assertNoMoreEvents(); + + subscription.unsubscribe(); + + onView(withId(1)).perform(swipeLeft()); + o.assertNoMoreEvents(); + } + @Test @UiThreadTest public void pageSelections() { view.setCurrentItem(0); RecordingObserver o = new RecordingObserver<>(); @@ -41,4 +70,17 @@ public final class RxViewPagerTest { view.setCurrentItem(0); o.assertNoMoreEvents(); } + + @Test @UiThreadTest public void currentItem() { + Action1 action = RxViewPager.currentItem(view); + action.call(3); + assertThat(view.getCurrentItem()).isEqualTo(3); + action.call(5); + assertThat(view.getCurrentItem()).isEqualTo(5); + } + + private static ViewAction swipeLeft() { + return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.CENTER_RIGHT, + GeneralLocation.CENTER_LEFT, Press.FINGER); + } } diff --git a/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/view/RxViewPagerTestActivity.java b/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/view/RxViewPagerTestActivity.java index 7b8227f7..5f28bf6f 100644 --- a/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/view/RxViewPagerTestActivity.java +++ b/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/view/RxViewPagerTestActivity.java @@ -11,10 +11,12 @@ public final class RxViewPagerTestActivity extends Activity { ViewPager viewPager; + @SuppressWarnings("ResourceType") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); viewPager = new ViewPager(this); + viewPager.setId(1); viewPager.setAdapter(new Adapter()); setContentView(viewPager); diff --git a/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/widget/RxSlidingPaneLayoutTest.java b/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/widget/RxSlidingPaneLayoutTest.java new file mode 100644 index 00000000..4d29828e --- /dev/null +++ b/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/widget/RxSlidingPaneLayoutTest.java @@ -0,0 +1,173 @@ +package com.jakewharton.rxbinding.support.v4.widget; + +import android.app.Instrumentation; +import android.support.test.InstrumentationRegistry; +import android.support.test.espresso.Espresso; +import android.support.test.espresso.contrib.CountingIdlingResource; +import android.support.test.espresso.matcher.BoundedMatcher; +import android.support.test.rule.ActivityTestRule; +import android.support.test.runner.AndroidJUnit4; +import android.support.v4.widget.SlidingPaneLayout; +import android.view.View; +import com.jakewharton.rxbinding.RecordingObserver; +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Action1; + +import static android.support.test.espresso.Espresso.onView; +import static android.support.test.espresso.assertion.ViewAssertions.matches; +import static android.support.test.espresso.matcher.ViewMatchers.withId; +import static com.google.common.truth.Truth.assertThat; + +@RunWith(AndroidJUnit4.class) public class RxSlidingPaneLayoutTest { + @Rule public final ActivityTestRule activityRule = + new ActivityTestRule<>(RxSlidingPaneLayoutTestActivity.class); + + private final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); + + private SlidingPaneLayout view; + + private CountingIdlingResource idler; + + @Before public void setUp() { + RxSlidingPaneLayoutTestActivity activity = activityRule.getActivity(); + view = activity.slidingPaneLayout; + + idler = new CountingIdlingResource("counting idler"); + Espresso.registerIdlingResources(idler); + } + + @After public void teardown() { + Espresso.unregisterIdlingResources(idler); + } + + @Test public void paneOpen() { + RecordingObserver o = new RecordingObserver<>(); + Subscription subscription = + RxSlidingPaneLayout.panelOpens(view).subscribeOn(AndroidSchedulers.mainThread()).subscribe(o); + assertThat(o.takeNext()).isFalse(); + + instrumentation.runOnMainSync(new Runnable() { + @Override public void run() { + view.openPane(); + } + }); + assertThat(o.takeNext()).isTrue(); + + instrumentation.runOnMainSync(new Runnable() { + @Override public void run() { + view.closePane(); + } + }); + assertThat(o.takeNext()).isFalse(); + + subscription.unsubscribe(); + + instrumentation.runOnMainSync(new Runnable() { + @Override public void run() { + view.openPane(); + } + }); + o.assertNoMoreEvents(); + } + + @Test public void slides() { + RecordingObserver o1 = new RecordingObserver<>(); + Subscription subscription1 = + RxSlidingPaneLayout.panelSlides(view).subscribeOn(AndroidSchedulers.mainThread()).subscribe(o1); + o1.assertNoMoreEvents(); + + instrumentation.runOnMainSync(new Runnable() { + @Override public void run() { + view.openPane(); + } + }); + instrumentation.waitForIdleSync(); + assertThat(o1.takeNext()).isGreaterThan(0f); + + subscription1.unsubscribe(); + o1.assertNoMoreEvents(); + + RecordingObserver o2 = new RecordingObserver<>(); + Subscription subscription2 = + RxSlidingPaneLayout.panelSlides(view).subscribeOn(AndroidSchedulers.mainThread()).subscribe(o2); + o2.assertNoMoreEvents(); + + instrumentation.runOnMainSync(new Runnable() { + @Override public void run() { + view.closePane(); + } + }); + instrumentation.waitForIdleSync(); + assertThat(o2.takeNext()).isLessThan(1.0f); + + subscription2.unsubscribe(); + o2.assertNoMoreEvents(); + } + + @Test public void open() { + final Action1 open = RxSlidingPaneLayout.open(view); + + view.setPanelSlideListener(new SlidingPaneLayout.SimplePanelSlideListener() { + @Override public void onPanelOpened(View panel) { + idler.decrement(); + } + + @Override public void onPanelClosed(View panel) { + idler.decrement(); + } + }); + + idler.increment(); + instrumentation.runOnMainSync(new Runnable() { + @Override public void run() { + open.call(true); + } + }); + instrumentation.waitForIdleSync(); + onView(withId(view.getId())).check(matches(isOpen())); + + + idler.increment(); + instrumentation.runOnMainSync(new Runnable() { + @Override public void run() { + open.call(false); + } + }); + instrumentation.waitForIdleSync(); + onView(withId(view.getId())).check(matches(isClosed())); + + view.setPanelSlideListener(null); + } + + private static Matcher isOpen() { + return new BoundedMatcher(SlidingPaneLayout.class) { + @Override public void describeTo(Description description) { + description.appendText("is pane open"); + } + + @Override public boolean matchesSafely(SlidingPaneLayout slidingPaneLayout) { + return slidingPaneLayout.isOpen(); + } + }; + } + + private static Matcher isClosed() { + return new BoundedMatcher(SlidingPaneLayout.class) { + @Override public void describeTo(Description description) { + description.appendText("is pane closed"); + } + + @Override public boolean matchesSafely(SlidingPaneLayout slidingPaneLayout) { + return !slidingPaneLayout.isOpen(); + } + }; + } +} diff --git a/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/widget/RxSlidingPaneLayoutTestActivity.java b/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/widget/RxSlidingPaneLayoutTestActivity.java new file mode 100644 index 00000000..d2428a8f --- /dev/null +++ b/rxbinding-support-v4/src/androidTest/java/com/jakewharton/rxbinding/support/v4/widget/RxSlidingPaneLayoutTestActivity.java @@ -0,0 +1,34 @@ +package com.jakewharton.rxbinding.support.v4.widget; + +import android.app.Activity; +import android.graphics.Color; +import android.os.Bundle; +import android.support.v4.widget.SlidingPaneLayout; +import android.support.v4.widget.SlidingPaneLayout.LayoutParams; +import android.widget.FrameLayout; + +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; + +public final class RxSlidingPaneLayoutTestActivity extends Activity { + SlidingPaneLayout slidingPaneLayout; + + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + slidingPaneLayout = new SlidingPaneLayout(this); + slidingPaneLayout.setId(android.R.id.primary); + + FrameLayout paneOne = new FrameLayout(this); + LayoutParams paneOneParams = new LayoutParams(300, MATCH_PARENT); + slidingPaneLayout.addView(paneOne, paneOneParams); + + FrameLayout paneTwo = new FrameLayout(this); + paneTwo.setBackgroundColor(Color.WHITE); + LayoutParams paneTwoParams = new LayoutParams(MATCH_PARENT, MATCH_PARENT); + paneTwoParams.leftMargin = 50; + slidingPaneLayout.addView(paneTwo, paneTwoParams); + + + setContentView(slidingPaneLayout); + } +} diff --git a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/MenuItemActionViewEventOnSubscribe.java b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/MenuItemActionViewEventOnSubscribe.java index 7a9c36ae..3237f4ab 100644 --- a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/MenuItemActionViewEventOnSubscribe.java +++ b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/MenuItemActionViewEventOnSubscribe.java @@ -49,12 +49,12 @@ private boolean onEvent(MenuItemActionViewEvent event) { } }; - MenuItemCompat.setOnActionExpandListener(menuItem, listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { MenuItemCompat.setOnActionExpandListener(menuItem, null); } }); + + MenuItemCompat.setOnActionExpandListener(menuItem, listener); } } diff --git a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/RxViewPager.java b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/RxViewPager.java index bcaa4120..cb23a484 100644 --- a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/RxViewPager.java +++ b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/RxViewPager.java @@ -3,11 +3,26 @@ import android.support.annotation.CheckResult; import android.support.annotation.NonNull; import android.support.v4.view.ViewPager; + import rx.Observable; +import rx.functions.Action1; import static com.jakewharton.rxbinding.internal.Preconditions.checkNotNull; public final class RxViewPager { + /** + * Create an observable of scroll state change events on {@code view}. + *

+ * Warning: The created observable keeps a strong reference to {@code view}. Unsubscribe + * to free this reference. + *

+ */ + @CheckResult @NonNull + public static Observable pageScrollStateChanges(@NonNull ViewPager view) { + checkNotNull(view, "view == null"); + return Observable.create(new ViewPagerPageScrollStateChangedOnSubscribe(view)); + } + /** * Create an observable of page selected events on {@code view}. *

@@ -22,6 +37,22 @@ public static Observable pageSelections(@NonNull ViewPager view) { return Observable.create(new ViewPagerPageSelectedOnSubscribe(view)); } + /** + * An action which sets the current item of {@code view}. + *

+ * Warning: The created observable keeps a strong reference to {@code view}. Unsubscribe + * to free this reference. + */ + @CheckResult @NonNull + public static Action1 currentItem(@NonNull final ViewPager view) { + checkNotNull(view, "view == null"); + return new Action1() { + @Override public void call(Integer value) { + view.setCurrentItem(value); + } + }; + } + private RxViewPager() { throw new AssertionError("No instances."); } diff --git a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/ViewPagerPageScrollStateChangedOnSubscribe.java b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/ViewPagerPageScrollStateChangedOnSubscribe.java new file mode 100644 index 00000000..ecd967e4 --- /dev/null +++ b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/ViewPagerPageScrollStateChangedOnSubscribe.java @@ -0,0 +1,43 @@ +package com.jakewharton.rxbinding.support.v4.view; + +import android.support.v4.view.ViewPager; +import rx.Observable; +import rx.Subscriber; +import rx.android.MainThreadSubscription; + +import static rx.android.MainThreadSubscription.verifyMainThread; + +final class ViewPagerPageScrollStateChangedOnSubscribe implements Observable.OnSubscribe { + final ViewPager view; + + ViewPagerPageScrollStateChangedOnSubscribe(ViewPager view) { + this.view = view; + } + + @Override public void call(final Subscriber subscriber) { + verifyMainThread(); + + final ViewPager.OnPageChangeListener listener = new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override public void onPageSelected(int position) { + } + + @Override public void onPageScrollStateChanged(int state) { + if (!subscriber.isUnsubscribed()) { + subscriber.onNext(state); + } + } + }; + + subscriber.add(new MainThreadSubscription() { + @Override protected void onUnsubscribe() { + view.removeOnPageChangeListener(listener); + } + }); + + view.addOnPageChangeListener(listener); + } +} diff --git a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/ViewPagerPageSelectedOnSubscribe.java b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/ViewPagerPageSelectedOnSubscribe.java index 745ac82d..2afd4faf 100644 --- a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/ViewPagerPageSelectedOnSubscribe.java +++ b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/view/ViewPagerPageSelectedOnSubscribe.java @@ -24,7 +24,6 @@ final class ViewPagerPageSelectedOnSubscribe implements Observable.OnSubscribe + * Warning: The created observable keeps a strong reference to {@code view}. Unsubscribe + * to free this reference. + *

+ * Warning: The created observable uses {@link SlidingPaneLayout#setPanelSlideListener} + * to observe dismiss change. Only one observable can be used for a view at a time. + *

+ * Note: A value will be emitted immediately on subscribe. + */ + @CheckResult @NonNull public static Observable panelOpens( + @NonNull SlidingPaneLayout view) { + checkNotNull(view, "view == null"); + return Observable.create(new SlidingPaneLayoutPaneOpenedOnSubscribe(view)); + } + + /** + * Create an observable of the slide offset of the pane of {@code view} + *

+ * Warning: The created observable keeps a strong reference to {@code view}. Unsubscribe + * to free this reference. + *

+ * Warning: The created observable uses {@link SlidingPaneLayout#setPanelSlideListener} + * to observe dismiss change. Only one observable can be used for a view at a time. + */ + @CheckResult @NonNull public static Observable panelSlides( + @NonNull SlidingPaneLayout view) { + checkNotNull(view, "view == null"); + return Observable.create(new SlidingPaneLayoutSlideOnSubscribe(view)); + } + + /** + * An action which sets whether the pane of {@code view} is open. + *

+ * Warning: The created observable keeps a strong reference to {@code view}. Unsubscribe + * to free this reference. + */ + @CheckResult @NonNull public static Action1 open( + @NonNull final SlidingPaneLayout view) { + checkNotNull(view, "view == null"); + return new Action1() { + @Override public void call(Boolean value) { + if (value) { + view.openPane(); + } else { + view.closePane(); + } + } + }; + } + + private RxSlidingPaneLayout() { + throw new AssertionError("No instances."); + } +} diff --git a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/widget/SlidingPaneLayoutPaneOpenedOnSubscribe.java b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/widget/SlidingPaneLayoutPaneOpenedOnSubscribe.java new file mode 100644 index 00000000..9c41480b --- /dev/null +++ b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/widget/SlidingPaneLayoutPaneOpenedOnSubscribe.java @@ -0,0 +1,46 @@ +package com.jakewharton.rxbinding.support.v4.widget; + +import android.support.v4.widget.SlidingPaneLayout; +import android.view.View; +import rx.Observable; +import rx.Subscriber; +import rx.android.MainThreadSubscription; + +import static rx.android.MainThreadSubscription.verifyMainThread; + +final class SlidingPaneLayoutPaneOpenedOnSubscribe implements Observable.OnSubscribe { + final SlidingPaneLayout view; + + SlidingPaneLayoutPaneOpenedOnSubscribe(SlidingPaneLayout view) { + this.view = view; + } + + @Override public void call(final Subscriber subscriber) { + verifyMainThread(); + + final SlidingPaneLayout.PanelSlideListener listener = + new SlidingPaneLayout.SimplePanelSlideListener() { + @Override public void onPanelOpened(View panel) { + if (!subscriber.isUnsubscribed()) { + subscriber.onNext(true); + } + } + + @Override public void onPanelClosed(View panel) { + if (!subscriber.isUnsubscribed()) { + subscriber.onNext(false); + } + } + }; + + subscriber.add(new MainThreadSubscription() { + @Override protected void onUnsubscribe() { + view.setPanelSlideListener(null); + } + }); + + view.setPanelSlideListener(listener); + + subscriber.onNext(view.isOpen()); + } +} diff --git a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/widget/SlidingPaneLayoutSlideOnSubscribe.java b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/widget/SlidingPaneLayoutSlideOnSubscribe.java new file mode 100644 index 00000000..1feda32b --- /dev/null +++ b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/widget/SlidingPaneLayoutSlideOnSubscribe.java @@ -0,0 +1,38 @@ +package com.jakewharton.rxbinding.support.v4.widget; + +import android.support.v4.widget.SlidingPaneLayout; +import android.view.View; +import rx.Observable; +import rx.Subscriber; +import rx.android.MainThreadSubscription; + +import static rx.android.MainThreadSubscription.verifyMainThread; + +final class SlidingPaneLayoutSlideOnSubscribe implements Observable.OnSubscribe { + final SlidingPaneLayout view; + + SlidingPaneLayoutSlideOnSubscribe(SlidingPaneLayout view) { + this.view = view; + } + + @Override public void call(final Subscriber subscriber) { + verifyMainThread(); + + final SlidingPaneLayout.PanelSlideListener listener = + new SlidingPaneLayout.SimplePanelSlideListener() { + @Override public void onPanelSlide(View panel, float slideOffset) { + if (!subscriber.isUnsubscribed()) { + subscriber.onNext(slideOffset); + } + } + }; + + subscriber.add(new MainThreadSubscription() { + @Override protected void onUnsubscribe() { + view.setPanelSlideListener(null); + } + }); + + view.setPanelSlideListener(listener); + } +} diff --git a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/widget/SwipeRefreshLayoutRefreshOnSubscribe.java b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/widget/SwipeRefreshLayoutRefreshOnSubscribe.java index beba7381..7d28ac90 100644 --- a/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/widget/SwipeRefreshLayoutRefreshOnSubscribe.java +++ b/rxbinding-support-v4/src/main/java/com/jakewharton/rxbinding/support/v4/widget/SwipeRefreshLayoutRefreshOnSubscribe.java @@ -24,12 +24,13 @@ final class SwipeRefreshLayoutRefreshOnSubscribe implements Observable.OnSubscri } } }; - view.setOnRefreshListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnRefreshListener(null); } }); + + view.setOnRefreshListener(listener); } } diff --git a/rxbinding/src/androidTest/java/com/jakewharton/rxbinding/view/RxViewTest.java b/rxbinding/src/androidTest/java/com/jakewharton/rxbinding/view/RxViewTest.java index fbf9c745..8011254f 100644 --- a/rxbinding/src/androidTest/java/com/jakewharton/rxbinding/view/RxViewTest.java +++ b/rxbinding/src/androidTest/java/com/jakewharton/rxbinding/view/RxViewTest.java @@ -7,6 +7,7 @@ import android.support.test.filters.SdkSuppress; import android.support.test.rule.UiThreadTestRule; import android.support.test.runner.AndroidJUnit4; +import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; @@ -269,6 +270,25 @@ public final class RxViewTest { o.assertNoMoreEvents(); } + @Test @UiThreadTest public void keys() { + RecordingObserver o = new RecordingObserver<>(); + Subscription subscription = RxView.keys(view).subscribe(o); + o.assertNoMoreEvents(); + + view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_R)); + KeyEvent event1 = o.takeNext(); + assertThat(event1.getAction()).isEqualTo(KeyEvent.ACTION_DOWN); + + view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_H)); + KeyEvent event2 = o.takeNext(); + assertThat(event2.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_H); + + subscription.unsubscribe(); + + view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_S)); + o.assertNoMoreEvents(); + } + @Test @UiThreadTest public void activated() { view.setActivated(true); Action1 action = RxView.activated(view); diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/MenuItemActionViewEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/MenuItemActionViewEventOnSubscribe.java index 50590d68..7c7a2409 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/MenuItemActionViewEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/MenuItemActionViewEventOnSubscribe.java @@ -45,12 +45,12 @@ private boolean onEvent(MenuItemActionViewEvent event) { } }; - menuItem.setOnActionExpandListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { menuItem.setOnActionExpandListener(null); } }); + + menuItem.setOnActionExpandListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/MenuItemClickOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/MenuItemClickOnSubscribe.java index 86246efe..75048f96 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/MenuItemClickOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/MenuItemClickOnSubscribe.java @@ -32,12 +32,12 @@ final class MenuItemClickOnSubscribe implements Observable.OnSubscribe { } }; - menuItem.setOnMenuItemClickListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { menuItem.setOnMenuItemClickListener(null); } }); + + menuItem.setOnMenuItemClickListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/RxView.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/RxView.java index 2c444663..d2b8b583 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/RxView.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/RxView.java @@ -1,15 +1,14 @@ package com.jakewharton.rxbinding.view; -import android.annotation.TargetApi; import android.support.annotation.CheckResult; import android.support.annotation.NonNull; +import android.support.annotation.RequiresApi; import android.view.DragEvent; +import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.ViewTreeObserver; - import com.jakewharton.rxbinding.internal.Functions; - import rx.Observable; import rx.functions.Action1; import rx.functions.Func0; @@ -293,7 +292,7 @@ public static Observable preDraws(@NonNull View view, * Warning: The created observable keeps a strong reference to {@code view}. Unsubscribe * to free this reference. */ - @TargetApi(M) + @RequiresApi(M) @CheckResult @NonNull public static Observable scrollChangeEvents(@NonNull View view) { checkNotNull(view, "view == null"); @@ -363,6 +362,39 @@ public static Observable touches(@NonNull View view, return Observable.create(new ViewTouchOnSubscribe(view, handled)); } + /** + * Create an observable of key events for {@code view}. + *

+ * Warning: The created observable keeps a strong reference to {@code view}. Unsubscribe + * to free this reference. + * Warning: The created observable uses {@link View#setOnKeyListener} to observe + * key events. Only one observable can be used for a view at a time. + */ + @CheckResult @NonNull + public static Observable keys(@NonNull View view) { + checkNotNull(view, "view == null"); + return keys(view, Functions.FUNC1_ALWAYS_TRUE); + } + + /** + * Create an observable of key events for {@code view}. + *

+ * Warning: The created observable keeps a strong reference to {@code view}. Unsubscribe + * to free this reference. + * Warning: The created observable uses {@link View#setOnKeyListener} to observe + * key events. Only one observable can be used for a view at a time. + * + * @param handled Function invoked each occurrence to determine the return value of the + * underlying {@link View.OnKeyListener}. + */ + @CheckResult @NonNull + public static Observable keys(@NonNull View view, + @NonNull Func1 handled) { + checkNotNull(view, "view == null"); + checkNotNull(handled, "handled == null"); + return Observable.create(new ViewKeyOnSubscribe(view, handled)); + } + /** * An action which sets the activated property of {@code view}. *

diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewAttachEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewAttachEventOnSubscribe.java index 497a15f2..ca75affa 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewAttachEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewAttachEventOnSubscribe.java @@ -33,12 +33,13 @@ final class ViewAttachEventOnSubscribe implements Observable.OnSubscribe { } } }; - view.addOnAttachStateChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.removeOnAttachStateChangeListener(listener); } }); + + view.addOnAttachStateChangeListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewClickOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewClickOnSubscribe.java index f96d5516..7d2ebabc 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewClickOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewClickOnSubscribe.java @@ -24,12 +24,13 @@ final class ViewClickOnSubscribe implements Observable.OnSubscribe { } } }; - view.setOnClickListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnClickListener(null); } }); + + view.setOnClickListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewDragOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewDragOnSubscribe.java index e9e7f8b7..fb2c740f 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewDragOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewDragOnSubscribe.java @@ -32,12 +32,13 @@ final class ViewDragOnSubscribe implements Observable.OnSubscribe { return false; } }; - view.setOnDragListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnDragListener(null); } }); + + view.setOnDragListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewEvent.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewEvent.java index 2bb37f47..df616acf 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewEvent.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewEvent.java @@ -3,6 +3,7 @@ import android.content.Context; import android.support.annotation.NonNull; import android.view.View; +import static com.jakewharton.rxbinding.internal.Preconditions.checkNotNull; /** * A target view on which an event occurred (e.g., click). @@ -14,11 +15,11 @@ public abstract class ViewEvent { private final T view; protected ViewEvent(@NonNull T view) { - this.view = view; + this.view = checkNotNull(view, "view == null"); } /** The view from which this event occurred. */ - public @NonNull T view() { + @NonNull public T view() { return view; } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewFocusChangeOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewFocusChangeOnSubscribe.java index ca72c6bc..c0c5210b 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewFocusChangeOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewFocusChangeOnSubscribe.java @@ -24,7 +24,6 @@ final class ViewFocusChangeOnSubscribe implements Observable.OnSubscribe return false; } }; - view.setOnHoverListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnHoverListener(null); } }); + + view.setOnHoverListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewKeyOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewKeyOnSubscribe.java new file mode 100644 index 00000000..24810903 --- /dev/null +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewKeyOnSubscribe.java @@ -0,0 +1,48 @@ +package com.jakewharton.rxbinding.view; + +import android.view.KeyEvent; +import android.view.View; + +import rx.Observable; +import rx.Subscriber; +import rx.android.MainThreadSubscription; +import rx.functions.Func1; + +import static rx.android.MainThreadSubscription.verifyMainThread; + +final class ViewKeyOnSubscribe implements Observable.OnSubscribe { + private final View view; + private final Func1 handled; + + ViewKeyOnSubscribe(View view, Func1 handled) { + this.view = view; + this.handled = handled; + } + + @Override public void call(final Subscriber subscriber) { + verifyMainThread(); + + View.OnKeyListener keyListener = new View.OnKeyListener() { + @Override public boolean onKey(View view, int keyCode, KeyEvent keyEvent) { + if (subscriber.isUnsubscribed()) { + return false; + } + + if (!handled.call(keyEvent)) { + return false; + } else { + subscriber.onNext(keyEvent); + return true; + } + } + }; + + subscriber.add(new MainThreadSubscription() { + @Override protected void onUnsubscribe() { + view.setOnKeyListener(null); + } + }); + + view.setOnKeyListener(keyListener); + } +} diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLayoutChangeEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLayoutChangeEventOnSubscribe.java index 317f2b06..077220b6 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLayoutChangeEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLayoutChangeEventOnSubscribe.java @@ -27,12 +27,13 @@ final class ViewLayoutChangeEventOnSubscribe } } }; - view.addOnLayoutChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.removeOnLayoutChangeListener(listener); } }); + + view.addOnLayoutChangeListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLayoutChangeOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLayoutChangeOnSubscribe.java index f5bb8446..abeeb243 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLayoutChangeOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLayoutChangeOnSubscribe.java @@ -25,12 +25,13 @@ final class ViewLayoutChangeOnSubscribe implements Observable.OnSubscribe } } }; - view.addOnLayoutChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.removeOnLayoutChangeListener(listener); } }); + + view.addOnLayoutChangeListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLongClickOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLongClickOnSubscribe.java index 1030ac77..8786ae58 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLongClickOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewLongClickOnSubscribe.java @@ -31,12 +31,13 @@ final class ViewLongClickOnSubscribe implements Observable.OnSubscribe { return false; } }; - view.setOnLongClickListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnLongClickListener(null); } }); + + view.setOnLongClickListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewScrollChangeEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewScrollChangeEventOnSubscribe.java index 5d1a7f6c..22bba1a3 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewScrollChangeEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewScrollChangeEventOnSubscribe.java @@ -30,12 +30,13 @@ public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int } } }; - view.setOnScrollChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnScrollChangeListener(null); } }); + + view.setOnScrollChangeListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewSystemUiVisibilityChangeOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewSystemUiVisibilityChangeOnSubscribe.java index adfc4192..d2670da4 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewSystemUiVisibilityChangeOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewSystemUiVisibilityChangeOnSubscribe.java @@ -25,12 +25,13 @@ final class ViewSystemUiVisibilityChangeOnSubscribe implements Observable.OnSubs } } }; - view.setOnSystemUiVisibilityChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnSystemUiVisibilityChangeListener(null); } }); + + view.setOnSystemUiVisibilityChangeListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTouchOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTouchOnSubscribe.java index 445af3df..c9ad98f8 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTouchOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTouchOnSubscribe.java @@ -33,12 +33,13 @@ final class ViewTouchOnSubscribe implements Observable.OnSubscribe return false; } }; - view.setOnTouchListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnTouchListener(null); } }); + + view.setOnTouchListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTreeObserverDrawOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTreeObserverDrawOnSubscribe.java index 57d43b3b..18cf9807 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTreeObserverDrawOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTreeObserverDrawOnSubscribe.java @@ -29,12 +29,12 @@ final class ViewTreeObserverDrawOnSubscribe implements Observable.OnSubscribe= Build.VERSION_CODES.JELLY_BEAN) { @@ -38,5 +36,7 @@ final class ViewTreeObserverGlobalLayoutOnSubscribe implements Observable.OnSubs } } }); + + view.getViewTreeObserver().addOnGlobalLayoutListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTreeObserverPreDrawOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTreeObserverPreDrawOnSubscribe.java index 9a6abe41..74e0d009 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTreeObserverPreDrawOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/view/ViewTreeObserverPreDrawOnSubscribe.java @@ -31,12 +31,12 @@ final class ViewTreeObserverPreDrawOnSubscribe implements Observable.OnSubscribe } }; - view.getViewTreeObserver().addOnPreDrawListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.getViewTreeObserver().removeOnPreDrawListener(listener); } }); + + view.getViewTreeObserver().addOnPreDrawListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AbsListViewScrollEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AbsListViewScrollEventOnSubscribe.java index dd6c2b67..966b832f 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AbsListViewScrollEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AbsListViewScrollEventOnSubscribe.java @@ -44,13 +44,13 @@ final class AbsListViewScrollEventOnSubscribe } }; - // Setting the listener automatically triggers the initial value. - view.setOnScrollListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnScrollListener(null); } }); + + // Setting the listener automatically triggers the initial value. + view.setOnScrollListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterDataChangeOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterDataChangeOnSubscribe.java index 3b220b13..dc125818 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterDataChangeOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterDataChangeOnSubscribe.java @@ -26,7 +26,6 @@ public AdapterDataChangeOnSubscribe(T adapter) { } } }; - adapter.registerDataSetObserver(observer); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -34,6 +33,8 @@ public AdapterDataChangeOnSubscribe(T adapter) { } }); + adapter.registerDataSetObserver(observer); + // Emit initial value. subscriber.onNext(adapter); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemClickEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemClickEventOnSubscribe.java index 949ce765..b8889efd 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemClickEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemClickEventOnSubscribe.java @@ -26,12 +26,13 @@ public AdapterViewItemClickEventOnSubscribe(AdapterView view) { } } }; - view.setOnItemClickListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnItemClickListener(null); } }); + + view.setOnItemClickListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemClickOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemClickOnSubscribe.java index 2849e812..b150e86f 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemClickOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemClickOnSubscribe.java @@ -25,12 +25,13 @@ public AdapterViewItemClickOnSubscribe(AdapterView view) { } } }; - view.setOnItemClickListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnItemClickListener(null); } }); + + view.setOnItemClickListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemLongClickEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemLongClickEventOnSubscribe.java index 839d3023..fde2cdd3 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemLongClickEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemLongClickEventOnSubscribe.java @@ -37,12 +37,13 @@ public boolean onItemLongClick(AdapterView parent, View view, int position, l return false; } }; - view.setOnItemLongClickListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnItemLongClickListener(null); } }); + + view.setOnItemLongClickListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemLongClickOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemLongClickOnSubscribe.java index 461b480d..2fc1b8b6 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemLongClickOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemLongClickOnSubscribe.java @@ -33,12 +33,13 @@ public boolean onItemLongClick(AdapterView parent, View view, int position, l return false; } }; - view.setOnItemLongClickListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnItemLongClickListener(null); } }); + + view.setOnItemLongClickListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemSelectionOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemSelectionOnSubscribe.java index 5eb227e2..d96f8d82 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemSelectionOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewItemSelectionOnSubscribe.java @@ -33,7 +33,6 @@ public void onItemSelected(AdapterView parent, View view, int position, long } } }; - view.setOnItemSelectedListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -41,6 +40,8 @@ public void onItemSelected(AdapterView parent, View view, int position, long } }); + view.setOnItemSelectedListener(listener); + // Emit initial value. subscriber.onNext(view.getSelectedItemPosition()); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewSelectionOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewSelectionOnSubscribe.java index 093576c9..4315f24f 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewSelectionOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AdapterViewSelectionOnSubscribe.java @@ -34,7 +34,6 @@ public void onItemSelected(AdapterView parent, View view, int position, long } } }; - view.setOnItemSelectedListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -42,6 +41,8 @@ public void onItemSelected(AdapterView parent, View view, int position, long } }); + view.setOnItemSelectedListener(listener); + // Emit initial value. int selectedPosition = view.getSelectedItemPosition(); if (selectedPosition == INVALID_POSITION) { diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AutoCompleteTextViewItemClickEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AutoCompleteTextViewItemClickEventOnSubscribe.java index 133fca59..5099a3bc 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AutoCompleteTextViewItemClickEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/AutoCompleteTextViewItemClickEventOnSubscribe.java @@ -27,12 +27,13 @@ public AutoCompleteTextViewItemClickEventOnSubscribe(AutoCompleteTextView view) } } }; - view.setOnItemClickListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnItemClickListener(null); } }); + + view.setOnItemClickListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/CompoundButtonCheckedChangeOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/CompoundButtonCheckedChangeOnSubscribe.java index 925a1b47..3d137cee 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/CompoundButtonCheckedChangeOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/CompoundButtonCheckedChangeOnSubscribe.java @@ -24,7 +24,6 @@ public CompoundButtonCheckedChangeOnSubscribe(CompoundButton view) { } } }; - view.setOnCheckedChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -32,6 +31,8 @@ public CompoundButtonCheckedChangeOnSubscribe(CompoundButton view) { } }); + view.setOnCheckedChangeListener(listener); + // Emit initial value. subscriber.onNext(view.isChecked()); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/PopupMenuDismissOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/PopupMenuDismissOnSubscribe.java index 26195c18..b5057d77 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/PopupMenuDismissOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/PopupMenuDismissOnSubscribe.java @@ -26,12 +26,12 @@ public PopupMenuDismissOnSubscribe(PopupMenu view) { } }; - view.setOnDismissListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnDismissListener(null); } }); + + view.setOnDismissListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/PopupMenuItemClickOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/PopupMenuItemClickOnSubscribe.java index bdcbd0ff..42312d14 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/PopupMenuItemClickOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/PopupMenuItemClickOnSubscribe.java @@ -28,12 +28,12 @@ public PopupMenuItemClickOnSubscribe(PopupMenu view) { } }; - view.setOnMenuItemClickListener(listener); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnMenuItemClickListener(null); } }); + + view.setOnMenuItemClickListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RadioGroupCheckedChangeOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RadioGroupCheckedChangeOnSubscribe.java index 64ab9398..8018783f 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RadioGroupCheckedChangeOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RadioGroupCheckedChangeOnSubscribe.java @@ -24,7 +24,6 @@ public RadioGroupCheckedChangeOnSubscribe(RadioGroup view) { } } }; - view.setOnCheckedChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -32,6 +31,8 @@ public RadioGroupCheckedChangeOnSubscribe(RadioGroup view) { } }); + view.setOnCheckedChangeListener(listener); + // Emit initial value. subscriber.onNext(view.getCheckedRadioButtonId()); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RatingBarRatingChangeEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RatingBarRatingChangeEventOnSubscribe.java index 89270627..4d5e06ec 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RatingBarRatingChangeEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RatingBarRatingChangeEventOnSubscribe.java @@ -25,7 +25,6 @@ public RatingBarRatingChangeEventOnSubscribe(RatingBar view) { } } }; - view.setOnRatingBarChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -33,6 +32,8 @@ public RatingBarRatingChangeEventOnSubscribe(RatingBar view) { } }); + view.setOnRatingBarChangeListener(listener); + // Emit initial value. subscriber.onNext(RatingBarChangeEvent.create(view, view.getRating(), false)); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RatingBarRatingChangeOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RatingBarRatingChangeOnSubscribe.java index 2276793a..7b8e75df 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RatingBarRatingChangeOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RatingBarRatingChangeOnSubscribe.java @@ -24,7 +24,6 @@ public RatingBarRatingChangeOnSubscribe(RatingBar view) { } } }; - view.setOnRatingBarChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -32,6 +31,8 @@ public RatingBarRatingChangeOnSubscribe(RatingBar view) { } }); + view.setOnRatingBarChangeListener(listener); + // Emit initial value. subscriber.onNext(view.getRating()); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RxToolbar.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RxToolbar.java index e4f1d6f6..e35623fd 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RxToolbar.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/RxToolbar.java @@ -1,11 +1,10 @@ package com.jakewharton.rxbinding.widget; -import android.annotation.TargetApi; import android.support.annotation.CheckResult; import android.support.annotation.NonNull; +import android.support.annotation.RequiresApi; import android.view.MenuItem; import android.widget.Toolbar; - import rx.Observable; import static android.os.Build.VERSION_CODES.LOLLIPOP; @@ -14,7 +13,7 @@ /** * Static factory methods for creating {@linkplain Observable observables} for {@link Toolbar}. */ -@TargetApi(LOLLIPOP) +@RequiresApi(LOLLIPOP) public final class RxToolbar { /** * Create an observable which emits the clicked item in {@code view}'s menu. diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SearchViewQueryTextChangeEventsOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SearchViewQueryTextChangeEventsOnSubscribe.java index 6c2fe444..855d8ec1 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SearchViewQueryTextChangeEventsOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SearchViewQueryTextChangeEventsOnSubscribe.java @@ -36,14 +36,14 @@ final class SearchViewQueryTextChangeEventsOnSubscribe } }; - view.setOnQueryTextListener(watcher); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnQueryTextListener(null); } }); + view.setOnQueryTextListener(watcher); + // Emit initial value. subscriber.onNext(SearchViewQueryTextEvent.create(view, view.getQuery(), false)); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SearchViewQueryTextChangesOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SearchViewQueryTextChangesOnSubscribe.java index 895896cb..c147b25d 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SearchViewQueryTextChangesOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SearchViewQueryTextChangesOnSubscribe.java @@ -31,14 +31,14 @@ final class SearchViewQueryTextChangesOnSubscribe implements Observable.OnSubscr } }; - view.setOnQueryTextListener(watcher); - subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnQueryTextListener(null); } }); + view.setOnQueryTextListener(watcher); + // Emit initial value. subscriber.onNext(view.getQuery()); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SeekBarChangeEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SeekBarChangeEventOnSubscribe.java index 61810a3d..c9985559 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SeekBarChangeEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SeekBarChangeEventOnSubscribe.java @@ -37,7 +37,6 @@ public SeekBarChangeEventOnSubscribe(SeekBar view) { } } }; - view.setOnSeekBarChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -45,6 +44,8 @@ public SeekBarChangeEventOnSubscribe(SeekBar view) { } }); + view.setOnSeekBarChangeListener(listener); + // Emit initial value. subscriber.onNext(SeekBarProgressChangeEvent.create(view, view.getProgress(), false)); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SeekBarChangeOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SeekBarChangeOnSubscribe.java index 755da122..ecfb27e3 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SeekBarChangeOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/SeekBarChangeOnSubscribe.java @@ -34,7 +34,6 @@ public SeekBarChangeOnSubscribe(SeekBar view, @Nullable Boolean shouldBeFromUser @Override public void onStopTrackingTouch(SeekBar seekBar) { } }; - view.setOnSeekBarChangeListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -42,6 +41,8 @@ public SeekBarChangeOnSubscribe(SeekBar view, @Nullable Boolean shouldBeFromUser } }); + view.setOnSeekBarChangeListener(listener); + // Emit initial value. subscriber.onNext(view.getProgress()); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewAfterTextChangeEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewAfterTextChangeEventOnSubscribe.java index 7fa0ccc9..dea27667 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewAfterTextChangeEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewAfterTextChangeEventOnSubscribe.java @@ -33,7 +33,6 @@ final class TextViewAfterTextChangeEventOnSubscribe } } }; - view.addTextChangedListener(watcher); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -41,6 +40,8 @@ final class TextViewAfterTextChangeEventOnSubscribe } }); + view.addTextChangedListener(watcher); + // Emit initial value. subscriber.onNext(TextViewAfterTextChangeEvent.create(view, view.getEditableText())); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewBeforeTextChangeEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewBeforeTextChangeEventOnSubscribe.java index f5d1745f..147e9f79 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewBeforeTextChangeEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewBeforeTextChangeEventOnSubscribe.java @@ -33,7 +33,6 @@ final class TextViewBeforeTextChangeEventOnSubscribe @Override public void afterTextChanged(Editable s) { } }; - view.addTextChangedListener(watcher); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { @@ -41,6 +40,8 @@ final class TextViewBeforeTextChangeEventOnSubscribe } }); + view.addTextChangedListener(watcher); + // Emit initial value. subscriber.onNext(TextViewBeforeTextChangeEvent.create(view, view.getText(), 0, 0, 0)); } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewEditorActionEventOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewEditorActionEventOnSubscribe.java index 2be5f18f..8fda30c7 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewEditorActionEventOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewEditorActionEventOnSubscribe.java @@ -35,12 +35,13 @@ final class TextViewEditorActionEventOnSubscribe return false; } }; - view.setOnEditorActionListener(listener); subscriber.add(new MainThreadSubscription() { @Override protected void onUnsubscribe() { view.setOnEditorActionListener(null); } }); + + view.setOnEditorActionListener(listener); } } diff --git a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewEditorActionOnSubscribe.java b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewEditorActionOnSubscribe.java index 8778ef74..ca16ad3b 100644 --- a/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewEditorActionOnSubscribe.java +++ b/rxbinding/src/main/java/com/jakewharton/rxbinding/widget/TextViewEditorActionOnSubscribe.java @@ -32,12 +32,13 @@ final class TextViewEditorActionOnSubscribe implements Observable.OnSubscribe