Add vertical viewer. Allow to select a viewer

This commit is contained in:
inorichi 2015-10-24 22:47:34 +02:00
parent 0a9b84ea11
commit c7e9016ad7
9 changed files with 146 additions and 2 deletions

View file

@ -11,6 +11,7 @@ public class PreferencesHelper {
private static SharedPreferences mPref; private static SharedPreferences mPref;
private static final String PREF_HIDE_STATUS_BAR = "hide_status_bar"; private static final String PREF_HIDE_STATUS_BAR = "hide_status_bar";
private static final String PREF_DEFAULT_VIEWER = "default_viewer";
public PreferencesHelper(Context context) { public PreferencesHelper(Context context) {
PreferenceManager.setDefaultValues(context, R.xml.preferences, false); PreferenceManager.setDefaultValues(context, R.xml.preferences, false);
@ -26,4 +27,8 @@ public class PreferencesHelper {
return mPref.getBoolean(PREF_HIDE_STATUS_BAR, false); return mPref.getBoolean(PREF_HIDE_STATUS_BAR, false);
} }
public int getDefaultViewer() {
return Integer.parseInt(mPref.getString(PREF_DEFAULT_VIEWER, "1"));
}
} }

View file

@ -14,6 +14,7 @@ import eu.kanade.mangafeed.presenter.MangaDetailPresenter;
import eu.kanade.mangafeed.presenter.MangaInfoPresenter; import eu.kanade.mangafeed.presenter.MangaInfoPresenter;
import eu.kanade.mangafeed.presenter.ReaderPresenter; import eu.kanade.mangafeed.presenter.ReaderPresenter;
import eu.kanade.mangafeed.presenter.SourcePresenter; import eu.kanade.mangafeed.presenter.SourcePresenter;
import eu.kanade.mangafeed.ui.activity.ReaderActivity;
@Singleton @Singleton
@Component( @Component(
@ -32,6 +33,8 @@ public interface AppComponent {
void inject(MangaChaptersPresenter mangaChaptersPresenter); void inject(MangaChaptersPresenter mangaChaptersPresenter);
void inject(ReaderPresenter readerPresenter); void inject(ReaderPresenter readerPresenter);
void inject(ReaderActivity readerActivity);
Application application(); Application application();
} }

View file

@ -252,7 +252,7 @@ public class Batoto extends Source {
private Chapter constructChapterFromHtmlBlock(Element chapterElement) { private Chapter constructChapterFromHtmlBlock(Element chapterElement) {
Chapter newChapter = Chapter.newChapter(); Chapter newChapter = Chapter.newChapter();
Element urlElement = chapterElement.select("a[href^=http://bato.to/read/").first(); Element urlElement = chapterElement.select("a[href^=http://bato.to/reader").first();
Element nameElement = urlElement; Element nameElement = urlElement;
Element dateElement = chapterElement.select("td").get(4); Element dateElement = chapterElement.select("td").get(4);

View file

@ -11,13 +11,20 @@ import android.widget.TextView;
import java.util.List; import java.util.List;
import javax.inject.Inject;
import butterknife.Bind; import butterknife.Bind;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import eu.kanade.mangafeed.App;
import eu.kanade.mangafeed.R; import eu.kanade.mangafeed.R;
import eu.kanade.mangafeed.data.helpers.PreferencesHelper;
import eu.kanade.mangafeed.data.models.Page; import eu.kanade.mangafeed.data.models.Page;
import eu.kanade.mangafeed.presenter.ReaderPresenter; import eu.kanade.mangafeed.presenter.ReaderPresenter;
import eu.kanade.mangafeed.ui.activity.base.BaseRxActivity; import eu.kanade.mangafeed.ui.activity.base.BaseRxActivity;
import eu.kanade.mangafeed.ui.viewer.LeftToRightViewer; import eu.kanade.mangafeed.ui.viewer.LeftToRightViewer;
import eu.kanade.mangafeed.ui.viewer.RightToLeftViewer;
import eu.kanade.mangafeed.ui.viewer.VerticalViewer;
import eu.kanade.mangafeed.ui.viewer.WebtoonViewer;
import eu.kanade.mangafeed.ui.viewer.base.BaseViewer; import eu.kanade.mangafeed.ui.viewer.base.BaseViewer;
import nucleus.factory.RequiresPresenter; import nucleus.factory.RequiresPresenter;
@ -27,9 +34,17 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
@Bind(R.id.page_number) TextView pageNumber; @Bind(R.id.page_number) TextView pageNumber;
@Bind(R.id.viewer) FrameLayout container; @Bind(R.id.viewer) FrameLayout container;
@Inject PreferencesHelper prefs;
private int currentPage; private int currentPage;
private BaseViewer viewer; private BaseViewer viewer;
private static final int LEFT_TO_RIGHT = 1;
private static final int RIGHT_TO_LEFT = 2;
private static final int VERTICAL = 3;
private static final int WEBTOON = 4;
public static Intent newInstance(Context context) { public static Intent newInstance(Context context) {
return new Intent(context, ReaderActivity.class); return new Intent(context, ReaderActivity.class);
} }
@ -37,10 +52,11 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
@Override @Override
public void onCreate(Bundle savedState) { public void onCreate(Bundle savedState) {
super.onCreate(savedState); super.onCreate(savedState);
App.get(this).getComponent().inject(this);
setContentView(R.layout.activity_reader); setContentView(R.layout.activity_reader);
ButterKnife.bind(this); ButterKnife.bind(this);
viewer = new LeftToRightViewer(this, container); viewer = getViewer();
enableHardwareAcceleration(); enableHardwareAcceleration();
} }
@ -83,4 +99,20 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
public boolean onImageTouch(MotionEvent motionEvent) { public boolean onImageTouch(MotionEvent motionEvent) {
return viewer.onImageTouch(motionEvent); return viewer.onImageTouch(motionEvent);
} }
private BaseViewer getViewer() {
int prefsViewer = prefs.getDefaultViewer();
switch (prefsViewer) {
case LEFT_TO_RIGHT:
return new LeftToRightViewer(this, container);
case RIGHT_TO_LEFT:
return new RightToLeftViewer(this, container);
case VERTICAL:
return new VerticalViewer(this, container);
case WEBTOON:
return new WebtoonViewer(this, container);
}
return null;
}
} }

View file

@ -0,0 +1,68 @@
package eu.kanade.mangafeed.ui.viewer;
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.ui.viewer.base.BaseViewer;
import eu.kanade.mangafeed.widget.ReaderViewPager;
import fr.castorflex.android.verticalviewpager.VerticalViewPager;
public class VerticalViewer extends BaseViewer {
private VerticalViewPager viewPager;
private ReaderPageAdapter adapter;
public VerticalViewer(ReaderActivity activity, FrameLayout container) {
super(activity, container);
activity.getLayoutInflater().inflate(R.layout.viewer_verticalviewpager, container);
adapter = new ReaderPageAdapter(activity.getSupportFragmentManager());
viewPager = (VerticalViewPager) activity.findViewById(R.id.view_pager);
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(3);
viewPager.setOnPageChangeListener(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) {
}
});
}
@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 false;
}
}

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<fr.castorflex.android.verticalviewpager.VerticalViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</fr.castorflex.android.verticalviewpager.VerticalViewPager>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="viewers">
<item>@string/left_to_right_viewer</item>
<item>@string/right_to_left_viewer</item>
<item>@string/vertical_viewer</item>
<item>@string/webtoon_viewer</item>
</string-array>
<string-array name="viewers_values">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
</string-array>
</resources>

View file

@ -49,5 +49,10 @@
<string name="title_activity_settings">Settings</string> <string name="title_activity_settings">Settings</string>
<string name="pref_hide_status_bar">Hide status bar</string> <string name="pref_hide_status_bar">Hide status bar</string>
<string name="pref_hide_status_bar_summary">This option will hide the status bar while reading</string> <string name="pref_hide_status_bar_summary">This option will hide the status bar while reading</string>
<string name="pref_viewer_type">Default viewer</string>
<string name="left_to_right_viewer">Left to right</string>
<string name="right_to_left_viewer">Right to left</string>
<string name="vertical_viewer">Vertical</string>
<string name="webtoon_viewer">Webtoon (experimental)</string>
</resources> </resources>

View file

@ -6,4 +6,10 @@
android:summary="@string/pref_hide_status_bar_summary" android:summary="@string/pref_hide_status_bar_summary"
android:key="hide_status_bar" /> android:key="hide_status_bar" />
<ListPreference android:title="@string/pref_viewer_type"
android:key="default_viewer"
android:entries="@array/viewers"
android:entryValues="@array/viewers_values"
android:defaultValue="1"/>
</PreferenceScreen> </PreferenceScreen>