package com.github.pockethub.android.rx; import android.content.Context; import android.support.annotation.CallSuper; import android.support.annotation.StringRes; import com.afollestad.materialdialogs.MaterialDialog; import io.reactivex.Observer; import io.reactivex.SingleObserver; import io.reactivex.disposables.Disposable; public class ProgressObserverAdapter<T> implements Observer<T>, SingleObserver<T> { private MaterialDialog progressDialog; private Context context; private String message; public ProgressObserverAdapter(Context context) { this(context, null); } public ProgressObserverAdapter(Context context, @StringRes int resid) { this(context, context.getString(resid)); } public ProgressObserverAdapter(Context context, String message) { this.context = context; this.message = message; } public void setContent(@StringRes int resid){ message = context.getString(resid); } public void setContent(String message){ this.message = message; } @CallSuper @Override public void onSuccess(T t) { onComplete(); } @CallSuper @Override public void onComplete() { dismissProgress(); } @CallSuper @Override public void onSubscribe(final Disposable d) { showProgressIndeterminate(message); } @Override public void onNext(final T t) { } @CallSuper @Override public void onError(Throwable e) { dismissProgress(); } /** * Dismiss and clear progress dialog field */ protected void dismissProgress() { if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } } /** * Show indeterminate progress dialog with given message * * @param message */ protected void showProgressIndeterminate(final CharSequence message) { dismissProgress(); progressDialog = new MaterialDialog.Builder(context) .content(message) .progress(true, 0) .build(); progressDialog.show(); } /** * Show indeterminate progress dialog with given message * * @param resId */ protected void showProgressIndeterminate(@StringRes final int resId) { showProgressIndeterminate(context.getString(resId)); } }