package com.quran.labs.androidquran.presenter.bookmark; import com.quran.labs.androidquran.data.Constants; import com.quran.labs.androidquran.di.ActivityScope; import com.quran.labs.androidquran.model.bookmark.RecentPageModel; import com.quran.labs.androidquran.presenter.Presenter; import com.quran.labs.androidquran.ui.PagerActivity; import javax.inject.Inject; import io.reactivex.disposables.Disposable; import io.reactivex.observers.DisposableObserver; @ActivityScope public class RecentPagePresenter implements Presenter<PagerActivity> { private final RecentPageModel model; private int lastPage; private int minimumPage; private int maximumPage; private Disposable disposable; @Inject RecentPagePresenter(RecentPageModel model) { this.model = model; } private void onPageChanged(int page) { model.updateLatestPage(page); lastPage = page; if (minimumPage == Constants.NO_PAGE) { minimumPage = page; maximumPage = page; } else if (page < minimumPage) { minimumPage = page; } else if (page > maximumPage) { maximumPage = page; } } public void onJump() { saveAndReset(); } @Override public void bind(PagerActivity what) { minimumPage = Constants.NO_PAGE; maximumPage = Constants.NO_PAGE; lastPage = Constants.NO_PAGE; disposable = what.getViewPagerObservable() .subscribeWith(new DisposableObserver<Integer>() { @Override public void onNext(Integer value) { onPageChanged(value); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } @Override public void unbind(PagerActivity what) { disposable.dispose(); saveAndReset(); } private void saveAndReset() { if (minimumPage != Constants.NO_PAGE || maximumPage != Constants.NO_PAGE) { model.persistLatestPage(minimumPage, maximumPage, lastPage); minimumPage = Constants.NO_PAGE; maximumPage = Constants.NO_PAGE; } lastPage = Constants.NO_PAGE; } }