package io.c0nnector.github.paradise.util; import android.graphics.Color; import android.support.design.widget.Snackbar; import android.view.View; import io.c0nnector.github.paradise.R; import io.c0nnector.github.paradise.ui.BaseActivity; import rx.Subscription; import rx.android.network.RxNetwork; import rx.functions.Action1; import timber.log.Timber; /** * Network state monitor with RxJava */ public class UtilConnection<A extends BaseActivity> { private Subscription subscription; A activity; /** * Constructor * @param activity */ public UtilConnection(A activity) { this.activity = activity; } /** * Monitors network changes inside and activity. Displays a message if there's no internet connection* */ public UtilConnection subscribe(){ if (Val.isNull(subscription)) { subscription = RxNetwork.stream(activity) .subscribe(subscriber); } return this; } /** * Unregister subscription onDestroy() to avoid leaks */ public void unsubscribe(){ if (Val.notNull(subscription)) { subscription.unsubscribe(); subscription = null; } } private Action1<RxNetwork.State> subscriber = new Action1<RxNetwork.State>() { @Override public void call(RxNetwork.State state) { Timber.e("network state: " + state.name()); //show snackbar when not connected if (state == RxNetwork.State.NOT_CONNECTED) { showMessage(activity, "No internet connection"); } } }; /** * Shows snackbar message * * @param baseActivity * @param message */ private static void showMessage(BaseActivity baseActivity, String message){ Snackbar snackbar = Snackbar.make(baseActivity.getContentView(), message, Snackbar.LENGTH_INDEFINITE) .setActionTextColor(Color.BLACK) .setAction("OK", new View.OnClickListener() { @Override public void onClick(View v) { } }); snackbar.getView().setBackgroundResource(R.color.amber_600); snackbar.show(); } }