package oxim.digital.rxanimations.colorpicker; import android.support.annotation.Nullable; import java.lang.ref.WeakReference; import rx.Subscription; import rx.functions.Action1; import rx.subscriptions.CompositeSubscription; public abstract class BasePresenter<T extends BaseView> implements ScopedPresenter<T> { private CompositeSubscription compositeSubscription; private WeakReference<T> viewWeakReference; @Override public void bind(final T view) { this.viewWeakReference = new WeakReference<>(view); compositeSubscription = new CompositeSubscription(); } @Override public void unbind() { if (compositeSubscription != null && !compositeSubscription.isUnsubscribed()) { compositeSubscription.unsubscribe(); compositeSubscription = null; } } protected final void addSubscription(final Subscription subscription) { if(compositeSubscription != null && !compositeSubscription.isUnsubscribed()) { compositeSubscription.add(subscription); } } protected void doIfViewNotNull(final Action1<T> whenViewNotNull) { final T view = getNullableView(); if (view != null) { whenViewNotNull.call(view); } } protected @Nullable T getNullableView() { return viewWeakReference == null ? null : viewWeakReference.get(); } }