package com.kickstarter.libs;
import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout;
import com.jakewharton.rxbinding.support.v4.widget.RxSwipeRefreshLayout;
import com.kickstarter.R;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action0;
import rx.functions.Func0;
public final class SwipeRefresher {
/**
*
* @param activity Activity to bind lifecycle events for.
* @param layout Layout to subscribe to for refresh events, send signals when no longer refreshing.
* @param refreshAction Action to call when a refresh event is emitted, likely a viewModel input.
* @param isRefreshing Observable that emits events when the refreshing status changes.
*/
public SwipeRefresher(final @NonNull BaseActivity<? extends ActivityViewModel> activity,
final @NonNull SwipeRefreshLayout layout,
final @NonNull Action0 refreshAction,
final @NonNull Func0<Observable<Boolean>> isRefreshing) {
// Iterate through colors in loading spinner while waiting for refresh
layout.setColorSchemeResources(R.color.green, R.color.green_darken_10, R.color.green_darken_20, R.color.green_darken_10);
// Emits when user has signaled to refresh layout
RxSwipeRefreshLayout.refreshes(layout)
.compose(activity.bindToLifecycle())
.subscribe(__ -> refreshAction.call());
// Emits when the refreshing status changes. Hides loading spinner when feed is no longer refreshing.
isRefreshing.call()
.filter(refreshing -> !refreshing)
.compose(activity.bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(layout::setRefreshing);
}
}