package com.jakewharton.rxbinding2.support.v4.view;
import android.support.annotation.CheckResult;
import android.support.annotation.NonNull;
import android.view.MenuItem;
import com.jakewharton.rxbinding2.internal.Functions;
import com.jakewharton.rxbinding2.view.MenuItemActionViewEvent;
import io.reactivex.Observable;
import io.reactivex.functions.Predicate;
import static com.jakewharton.rxbinding2.internal.Preconditions.checkNotNull;
/**
* Static factory methods for creating {@linkplain Observable observables}
* for {@link android.support.v4.view.MenuItemCompat}.
*/
public final class RxMenuItemCompat {
/**
* Create an observable of action view events for {@code menuItem}.
* <p>
* <em>Warning:</em> The created observable keeps a strong reference to {@code menuItem}.
* Unsubscribe to free this reference.
* <p>
* <em>Warning:</em> The created observable uses {@link MenuItem#setOnActionExpandListener} to
* observe action view events. Only one observable can be used for a menu item at a time.
*/
@CheckResult @NonNull public static Observable<MenuItemActionViewEvent> actionViewEvents(
@NonNull MenuItem menuItem) {
checkNotNull(menuItem, "menuItem == null");
return new MenuItemActionViewEventObservable(menuItem, Functions.PREDICATE_ALWAYS_TRUE);
}
/**
* Create an observable of action view events for {@code menuItem}.
* <p>
* <em>Warning:</em> The created observable keeps a strong reference to {@code menuItem}.
* Unsubscribe to free this reference.
* <p>
* <em>Warning:</em> The created observable uses {@link MenuItem#setOnActionExpandListener} to
* observe action view events. Only one observable can be used for a menu item at a time.
*
* @param handled Function invoked with each value to determine the return value of the
* underlying {@link MenuItem.OnActionExpandListener}.
*/
@CheckResult @NonNull public static Observable<MenuItemActionViewEvent> actionViewEvents(
@NonNull MenuItem menuItem, @NonNull Predicate<? super MenuItemActionViewEvent> handled) {
checkNotNull(menuItem, "menuItem == null");
checkNotNull(handled, "handled == null");
return new MenuItemActionViewEventObservable(menuItem, handled);
}
private RxMenuItemCompat() {
throw new AssertionError("No instances.");
}
}