Decouple viewer from the reader activity

This commit is contained in:
inorichi
2015-10-24 16:04:42 +02:00
parent ef7613f7ad
commit d3c83f0bf2
10 changed files with 233 additions and 82 deletions
@@ -0,0 +1,24 @@
package eu.kanade.mangafeed.ui.viewer;
import android.widget.FrameLayout;
import eu.kanade.mangafeed.ui.activity.ReaderActivity;
import eu.kanade.mangafeed.ui.viewer.base.ViewPagerViewer;
public class LeftToRightViewer extends ViewPagerViewer {
public LeftToRightViewer(ReaderActivity activity, FrameLayout container) {
super(activity, container);
}
@Override
public void onFirstPageOut() {
}
@Override
public void onLastPageOut() {
}
}
@@ -0,0 +1,47 @@
package eu.kanade.mangafeed.ui.viewer;
import android.widget.FrameLayout;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import eu.kanade.mangafeed.data.models.Page;
import eu.kanade.mangafeed.ui.activity.ReaderActivity;
import eu.kanade.mangafeed.ui.viewer.base.ViewPagerViewer;
public class RightToLeftViewer extends ViewPagerViewer {
public RightToLeftViewer(ReaderActivity activity, FrameLayout container) {
super(activity, container);
}
@Override
public void onPageListReady(List<Page> pages) {
ArrayList<Page> inversedPages = new ArrayList<>(pages);
Collections.reverse(inversedPages);
adapter.setPages(inversedPages);
viewPager.setCurrentItem(adapter.getCount()-1);
}
@Override
public int getCurrentPageFromPos(int position) {
return getTotalPages() - position;
}
@Override
public int getPosFromPage(Page page) {
return getTotalPages() - (page.getPageNumber() + 1);
}
@Override
public void onFirstPageOut() {
}
@Override
public void onLastPageOut() {
}
}
@@ -0,0 +1,38 @@
package eu.kanade.mangafeed.ui.viewer.base;
import android.view.MotionEvent;
import android.widget.FrameLayout;
import java.util.List;
import eu.kanade.mangafeed.data.models.Page;
import eu.kanade.mangafeed.ui.activity.ReaderActivity;
public abstract class BaseViewer {
protected ReaderActivity activity;
protected FrameLayout container;
protected int currentPosition;
public BaseViewer(ReaderActivity activity, FrameLayout container) {
this.activity = activity;
this.container = container;
}
public void updatePageNumber() {
activity.onPageChanged(getCurrentPageFromPos(currentPosition), getTotalPages());
}
public int getCurrentPageFromPos(int position) {
return position + 1;
}
public int getPosFromPage(Page page) {
return page.getPageNumber();
}
public abstract int getTotalPages();
public abstract void onImageReady(Page page);
public abstract void onPageListReady(List<Page> pages);
public abstract boolean onImageTouch(MotionEvent motionEvent);
}
@@ -0,0 +1,81 @@
package eu.kanade.mangafeed.ui.viewer.base;
import android.view.MotionEvent;
import android.widget.FrameLayout;
import java.util.List;
import eu.kanade.mangafeed.R;
import eu.kanade.mangafeed.data.models.Page;
import eu.kanade.mangafeed.ui.activity.ReaderActivity;
import eu.kanade.mangafeed.ui.adapter.ReaderPageAdapter;
import eu.kanade.mangafeed.widget.ReaderViewPager;
public abstract class ViewPagerViewer extends BaseViewer {
protected ReaderViewPager viewPager;
protected ReaderPageAdapter adapter;
public ViewPagerViewer(ReaderActivity activity, FrameLayout container) {
super(activity, container);
activity.getLayoutInflater().inflate(R.layout.viewer_viewpager, container);
adapter = new ReaderPageAdapter(activity.getSupportFragmentManager());
viewPager = (ReaderViewPager) activity.findViewById(R.id.view_pager);
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(3);
viewPager.addOnPageChangeListener(new ReaderViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
currentPosition = position;
updatePageNumber();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
viewPager.setOnChapterBoundariesOutListener(new ReaderViewPager.OnChapterBoundariesOutListener() {
@Override
public void onFirstPageOutEvent() {
onFirstPageOut();
}
@Override
public void onLastPageOutEvent() {
onLastPageOut();
}
});
}
@Override
public int getTotalPages() {
return adapter.getCount();
}
@Override
public void onPageListReady(List<Page> pages) {
adapter.setPages(pages);
updatePageNumber();
}
@Override
public void onImageReady(Page page) {
adapter.replacePage(getPosFromPage(page), page);
}
@Override
public boolean onImageTouch(MotionEvent motionEvent) {
return viewPager.onImageTouch(motionEvent);
}
public abstract void onFirstPageOut();
public abstract void onLastPageOut();
}