mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Add Rapid decoder for better image support. Reorganize readers.
This commit is contained in:
		| @@ -84,11 +84,8 @@ public class PreferencesHelper { | ||||
|         return rxPrefs.getFloat(getKey(R.string.pref_custom_brightness_value_key), 0F); | ||||
|     } | ||||
|  | ||||
|     public int getReaderTheme() { | ||||
|         return prefs.getInt(getKey(R.string.pref_reader_theme_key), 0); | ||||
|     } | ||||
|  | ||||
|     public int getDefaultViewer() { | ||||
|         // TODO use IntListPreference | ||||
|         return Integer.parseInt(prefs.getString(getKey(R.string.pref_default_viewer_key), "1")); | ||||
|     } | ||||
|  | ||||
| @@ -100,6 +97,14 @@ public class PreferencesHelper { | ||||
|         return rxPrefs.getInteger(getKey(R.string.pref_library_columns_landscape_key), 0); | ||||
|     } | ||||
|  | ||||
|     public Preference<Integer> imageDecoder() { | ||||
|         return rxPrefs.getInteger(getKey(R.string.pref_image_decoder_key), 0); | ||||
|     } | ||||
|  | ||||
|     public Preference<Integer> readerTheme() { | ||||
|         return rxPrefs.getInteger(getKey(R.string.pref_reader_theme_key), 0); | ||||
|     } | ||||
|  | ||||
|     public String getSourceUsername(Source source) { | ||||
|         return prefs.getString(SOURCE_ACCOUNT_USERNAME + source.getId(), ""); | ||||
|     } | ||||
|   | ||||
| @@ -30,9 +30,9 @@ import eu.kanade.mangafeed.data.preference.PreferencesHelper; | ||||
| import eu.kanade.mangafeed.data.source.model.Page; | ||||
| import eu.kanade.mangafeed.ui.base.activity.BaseRxActivity; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.base.BaseReader; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.horizontal.LeftToRightReader; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.horizontal.RightToLeftReader; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.vertical.VerticalReader; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.horizontal.LeftToRightReader; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.horizontal.RightToLeftReader; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.vertical.VerticalReader; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.webtoon.WebtoonReader; | ||||
| import eu.kanade.mangafeed.util.GLUtil; | ||||
| import eu.kanade.mangafeed.util.ToastUtil; | ||||
| @@ -85,9 +85,6 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> { | ||||
|         if (savedState != null && readerMenu.showing) | ||||
|             readerMenu.show(false); | ||||
|  | ||||
|         readerTheme = preferences.getReaderTheme(); | ||||
|         applyTheme(); | ||||
|  | ||||
|         initializeSettings(); | ||||
|  | ||||
|         maxBitmapSize = GLUtil.getMaxTextureSize(); | ||||
| @@ -211,6 +208,11 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> { | ||||
|         subscriptions.add(preferences.customBrightness() | ||||
|                 .asObservable() | ||||
|                 .subscribe(this::setCustomBrightness)); | ||||
|  | ||||
|         subscriptions.add(preferences.readerTheme() | ||||
|                 .asObservable() | ||||
|                 .distinctUntilChanged() | ||||
|                 .subscribe(this::applyTheme)); | ||||
|     } | ||||
|  | ||||
|     private void setOrientation(boolean locked) { | ||||
| @@ -291,14 +293,17 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> { | ||||
|         recreate(); | ||||
|     } | ||||
|  | ||||
|     private void applyTheme() { | ||||
|     private void applyTheme(int theme) { | ||||
|         readerTheme = theme; | ||||
|         View rootView = getWindow().getDecorView().getRootView(); | ||||
|         if (readerTheme == BLACK_THEME) { | ||||
|         if (theme == BLACK_THEME) { | ||||
|             rootView.setBackgroundColor(Color.BLACK); | ||||
|             pageNumber.setTextColor(ContextCompat.getColor(this, R.color.light_grey)); | ||||
|             pageNumber.setBackgroundColor(ContextCompat.getColor(this, R.color.page_number_background_black)); | ||||
|         } else { | ||||
|             rootView.setBackgroundColor(Color.WHITE); | ||||
|             pageNumber.setTextColor(ContextCompat.getColor(this, R.color.primary_text)); | ||||
|             pageNumber.setBackgroundColor(ContextCompat.getColor(this, R.color.page_number_background)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,6 @@ package eu.kanade.mangafeed.ui.reader; | ||||
|  | ||||
| import android.app.Dialog; | ||||
| import android.content.Context; | ||||
| import android.support.v7.app.AlertDialog; | ||||
| import android.support.v7.widget.Toolbar; | ||||
| import android.view.Gravity; | ||||
| import android.view.Menu; | ||||
| @@ -20,6 +19,8 @@ import android.widget.RelativeLayout; | ||||
| import android.widget.SeekBar; | ||||
| import android.widget.TextView; | ||||
|  | ||||
| import com.afollestad.materialdialogs.MaterialDialog; | ||||
|  | ||||
| import java.text.DecimalFormat; | ||||
|  | ||||
| import butterknife.Bind; | ||||
| @@ -191,15 +192,14 @@ public class ReaderMenu { | ||||
|         // Reader selector | ||||
|         readerSelector.setOnClickListener(v -> { | ||||
|             final Manga manga = activity.getPresenter().getManga(); | ||||
|             final Dialog dialog = new AlertDialog.Builder(activity) | ||||
|                     .setSingleChoiceItems(R.array.viewers_selector, manga.viewer, (d, which) -> { | ||||
|                         if (manga.viewer != which) { | ||||
|                             activity.setMangaDefaultViewer(which); | ||||
|                         } | ||||
|                         d.dismiss(); | ||||
|                     }) | ||||
|                     .create(); | ||||
|             showImmersiveDialog(dialog); | ||||
|             showImmersiveDialog(new MaterialDialog.Builder(activity) | ||||
|                     .items(R.array.viewers_selector) | ||||
|                     .itemsCallbackSingleChoice(manga.viewer, | ||||
|                             (d, itemView, which, text) -> { | ||||
|                                 activity.setMangaDefaultViewer(which); | ||||
|                                 return true; | ||||
|                             }) | ||||
|                     .build()); | ||||
|         }); | ||||
|  | ||||
|         // Extra settings menu | ||||
| @@ -245,6 +245,8 @@ public class ReaderMenu { | ||||
|         @Bind(R.id.show_page_number) CheckBox showPageNumber; | ||||
|         @Bind(R.id.hide_status_bar) CheckBox hideStatusBar; | ||||
|         @Bind(R.id.keep_screen_on) CheckBox keepScreenOn; | ||||
|         @Bind(R.id.image_decoder) TextView imageDecoder; | ||||
|         @Bind(R.id.reader_theme) TextView readerTheme; | ||||
|  | ||||
|         public SettingsPopupWindow(View view) { | ||||
|             super(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); | ||||
| @@ -272,6 +274,30 @@ public class ReaderMenu { | ||||
|  | ||||
|             keepScreenOn.setOnCheckedChangeListener((view, isChecked) -> | ||||
|                     preferences.keepScreenOn().set(isChecked)); | ||||
|  | ||||
|             imageDecoder.setOnClickListener(v -> { | ||||
|                 showImmersiveDialog(new MaterialDialog.Builder(activity) | ||||
|                         .title(R.string.pref_image_decoder) | ||||
|                         .items(R.array.image_decoders) | ||||
|                         .itemsCallbackSingleChoice(preferences.imageDecoder().get(), | ||||
|                                 (dialog, itemView, which, text) -> { | ||||
|                                     preferences.imageDecoder().set(which); | ||||
|                                     return true; | ||||
|                                 }) | ||||
|                         .build()); | ||||
|             }); | ||||
|  | ||||
|             readerTheme.setOnClickListener(v -> { | ||||
|                 showImmersiveDialog(new MaterialDialog.Builder(activity) | ||||
|                         .title(R.string.pref_reader_theme) | ||||
|                         .items(R.array.reader_themes) | ||||
|                         .itemsCallbackSingleChoice(preferences.readerTheme().get(), | ||||
|                                 (dialog, itemView, which, text) -> { | ||||
|                                     preferences.readerTheme().set(which); | ||||
|                                     return true; | ||||
|                                 }) | ||||
|                         .build()); | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|   | ||||
| @@ -0,0 +1,53 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.decoder; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.graphics.Bitmap; | ||||
| import android.graphics.Point; | ||||
| import android.graphics.Rect; | ||||
| import android.net.Uri; | ||||
|  | ||||
| import com.davemorrissey.labs.subscaleview.decoder.ImageRegionDecoder; | ||||
|  | ||||
| import rapid.decoder.BitmapDecoder; | ||||
|  | ||||
| /** | ||||
|  * A very simple implementation of {@link com.davemorrissey.labs.subscaleview.decoder.ImageRegionDecoder} | ||||
|  * using the RapidDecoder library (https://github.com/suckgamony/RapidDecoder). For PNGs, this can | ||||
|  * give more reliable decoding and better performance. For JPGs, it is slower and can run out of | ||||
|  * memory with large images, but has better support for grayscale and CMYK images. | ||||
|  * | ||||
|  * This is an incomplete and untested implementation provided as an example only. | ||||
|  */ | ||||
| public class RapidImageRegionDecoder implements ImageRegionDecoder { | ||||
|  | ||||
|     private BitmapDecoder decoder; | ||||
|  | ||||
|     @Override | ||||
|     public Point init(Context context, Uri uri) throws Exception { | ||||
|         decoder = BitmapDecoder.from(context, uri); | ||||
|         decoder.useBuiltInDecoder(true); | ||||
|         return new Point(decoder.sourceWidth(), decoder.sourceHeight()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public synchronized Bitmap decodeRegion(Rect sRect, int sampleSize) { | ||||
|         try { | ||||
|             return decoder.reset().region(sRect).scale(sRect.width()/sampleSize, sRect.height()/sampleSize).decode(); | ||||
|         } catch (Exception e) { | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean isReady() { | ||||
|         return decoder != null; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void recycle() { | ||||
|         BitmapDecoder.destroyMemoryCache(); | ||||
|         BitmapDecoder.destroyDiskCache(); | ||||
|         decoder.reset(); | ||||
|         decoder = null; | ||||
|     } | ||||
| } | ||||
| @@ -2,16 +2,24 @@ package eu.kanade.mangafeed.ui.reader.viewer.base; | ||||
|  | ||||
| import android.view.MotionEvent; | ||||
|  | ||||
| import com.davemorrissey.labs.subscaleview.decoder.ImageRegionDecoder; | ||||
| import com.davemorrissey.labs.subscaleview.decoder.SkiaImageRegionDecoder; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import eu.kanade.mangafeed.data.source.model.Page; | ||||
| import eu.kanade.mangafeed.ui.base.fragment.BaseFragment; | ||||
| import eu.kanade.mangafeed.ui.reader.ReaderActivity; | ||||
| import eu.kanade.mangafeed.ui.reader.decoder.RapidImageRegionDecoder; | ||||
|  | ||||
| public abstract class BaseReader extends BaseFragment { | ||||
|  | ||||
|     protected int currentPage; | ||||
|     protected List<Page> pages; | ||||
|     protected Class<? extends ImageRegionDecoder> regionDecoderClass; | ||||
|  | ||||
|     public static final int RAPID_DECODER = 0; | ||||
|     public static final int SKIA_DECODER = 1; | ||||
|  | ||||
|     public void updatePageNumber() { | ||||
|         getReaderActivity().onPageChanged(getCurrentPage(), getTotalPages()); | ||||
| @@ -42,6 +50,22 @@ public abstract class BaseReader extends BaseFragment { | ||||
|     public abstract void onPageListReady(List<Page> pages, int currentPage); | ||||
|     public abstract boolean onImageTouch(MotionEvent motionEvent); | ||||
|  | ||||
|     public void setRegionDecoderClass(int value) { | ||||
|         switch (value) { | ||||
|             case RAPID_DECODER: | ||||
|             default: | ||||
|                 regionDecoderClass = RapidImageRegionDecoder.class; | ||||
|                 break; | ||||
|             case SKIA_DECODER: | ||||
|                 regionDecoderClass = SkiaImageRegionDecoder.class; | ||||
|                 break; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public Class<? extends ImageRegionDecoder> getRegionDecoderClass() { | ||||
|         return regionDecoderClass; | ||||
|     } | ||||
|  | ||||
|     public ReaderActivity getReaderActivity() { | ||||
|         return (ReaderActivity) getActivity(); | ||||
|     } | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.common; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.base; | ||||
| 
 | ||||
| public interface OnChapterBoundariesOutListener { | ||||
|     void onFirstPageOutEvent(); | ||||
| @@ -1,4 +1,4 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.common; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.base; | ||||
| 
 | ||||
| public interface OnChapterSingleTapListener { | ||||
|     void onCenterTap(); | ||||
| @@ -1,9 +1,11 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.common; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager; | ||||
| 
 | ||||
| import android.support.v4.view.PagerAdapter; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.ViewGroup; | ||||
| 
 | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.base.OnChapterBoundariesOutListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.base.OnChapterSingleTapListener; | ||||
| import rx.functions.Action1; | ||||
| 
 | ||||
| public interface Pager { | ||||
| @@ -1,4 +1,4 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.common; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager; | ||||
| 
 | ||||
| import android.view.GestureDetector; | ||||
| import android.view.MotionEvent; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.common; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager; | ||||
| 
 | ||||
| import android.view.MotionEvent; | ||||
| import android.view.ViewGroup; | ||||
| @@ -8,7 +8,9 @@ import java.util.List; | ||||
| import eu.kanade.mangafeed.R; | ||||
| import eu.kanade.mangafeed.data.source.model.Page; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.base.BaseReader; | ||||
| import rx.Subscription; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.base.OnChapterBoundariesOutListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.base.OnChapterSingleTapListener; | ||||
| import rx.subscriptions.CompositeSubscription; | ||||
| 
 | ||||
| import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; | ||||
| 
 | ||||
| @@ -18,7 +20,7 @@ public abstract class PagerReader extends BaseReader { | ||||
|     protected Pager pager; | ||||
| 
 | ||||
|     protected boolean transitions; | ||||
|     protected Subscription transitionsSubscription; | ||||
|     protected CompositeSubscription subscriptions; | ||||
| 
 | ||||
|     protected void initializePager(Pager pager) { | ||||
|         this.pager = pager; | ||||
| @@ -55,16 +57,25 @@ public abstract class PagerReader extends BaseReader { | ||||
| 
 | ||||
|         adapter = new PagerReaderAdapter(getChildFragmentManager()); | ||||
|         pager.setAdapter(adapter); | ||||
|         setPages(); | ||||
| 
 | ||||
|         transitionsSubscription = getReaderActivity().getPreferences().enableTransitions() | ||||
|         subscriptions = new CompositeSubscription(); | ||||
|         subscriptions.add(getReaderActivity().getPreferences().imageDecoder() | ||||
|                 .asObservable() | ||||
|                 .subscribe(value -> transitions = value); | ||||
|                 .doOnNext(this::setRegionDecoderClass) | ||||
|                 .skip(1) | ||||
|                 .distinctUntilChanged() | ||||
|                 .subscribe(v -> adapter.notifyDataSetChanged())); | ||||
| 
 | ||||
|         subscriptions.add(getReaderActivity().getPreferences().enableTransitions() | ||||
|                 .asObservable() | ||||
|                 .subscribe(value -> transitions = value)); | ||||
| 
 | ||||
|         setPages(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onDestroyView() { | ||||
|         transitionsSubscription.unsubscribe(); | ||||
|         subscriptions.unsubscribe(); | ||||
|         super.onDestroyView(); | ||||
|     } | ||||
| 
 | ||||
| @@ -1,4 +1,4 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.common; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager; | ||||
| 
 | ||||
| import android.support.v4.app.Fragment; | ||||
| import android.support.v4.app.FragmentManager; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.common; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager; | ||||
| 
 | ||||
| import android.os.Bundle; | ||||
| import android.support.annotation.Nullable; | ||||
| @@ -54,6 +54,7 @@ public class PagerReaderFragment extends BaseFragment { | ||||
|         View view = inflater.inflate(R.layout.item_pager_reader, container, false); | ||||
|         ButterKnife.bind(this, view); | ||||
|         ReaderActivity activity = (ReaderActivity) getActivity(); | ||||
|         BaseReader parentFragment = (BaseReader) getParentFragment(); | ||||
| 
 | ||||
|         if (activity.getReaderTheme() == ReaderActivity.BLACK_THEME) { | ||||
|              progressText.setTextColor(ContextCompat.getColor(getContext(), R.color.light_grey)); | ||||
| @@ -64,8 +65,8 @@ public class PagerReaderFragment extends BaseFragment { | ||||
|         imageView.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_FIXED); | ||||
|         imageView.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE); | ||||
|         imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE); | ||||
|         imageView.setOnTouchListener((v, motionEvent) -> | ||||
|                 ((BaseReader) getParentFragment()).onImageTouch(motionEvent)); | ||||
|         imageView.setRegionDecoderClass(parentFragment.getRegionDecoderClass()); | ||||
|         imageView.setOnTouchListener((v, motionEvent) -> parentFragment.onImageTouch(motionEvent)); | ||||
| 
 | ||||
|         retryButton.setOnTouchListener((v, event) -> { | ||||
|             if (event.getAction() == MotionEvent.ACTION_UP) { | ||||
| @@ -76,25 +77,16 @@ public class PagerReaderFragment extends BaseFragment { | ||||
|             return true; | ||||
|         }); | ||||
| 
 | ||||
|         observeStatus(); | ||||
|         return view; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onDestroyView() { | ||||
|         ButterKnife.unbind(this); | ||||
|         super.onDestroyView(); | ||||
|     } | ||||
| 
 | ||||
|     public void onStart() { | ||||
|         super.onStart(); | ||||
|         observeStatus(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void onStop() { | ||||
|         unsubscribeProgress(); | ||||
|         unsubscribeStatus(); | ||||
|         super.onStop(); | ||||
|         ButterKnife.unbind(this); | ||||
|         super.onDestroyView(); | ||||
|     } | ||||
| 
 | ||||
|     public void setPage(Page page) { | ||||
| @@ -1,4 +1,4 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.horizontal; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager.horizontal; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.support.v4.view.ViewPager; | ||||
| @@ -6,10 +6,10 @@ import android.util.AttributeSet; | ||||
| import android.view.GestureDetector; | ||||
| import android.view.MotionEvent; | ||||
| 
 | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.common.OnChapterBoundariesOutListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.common.OnChapterSingleTapListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.common.PagerGestureListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.common.Pager; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.base.OnChapterBoundariesOutListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.base.OnChapterSingleTapListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.PagerGestureListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.Pager; | ||||
| import rx.functions.Action1; | ||||
| 
 | ||||
| public class HorizontalPager extends ViewPager implements Pager { | ||||
| @@ -1,11 +1,11 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.horizontal; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager.horizontal; | ||||
| 
 | ||||
| import android.os.Bundle; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| 
 | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.common.PagerReader; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.PagerReader; | ||||
| 
 | ||||
| public abstract class HorizontalReader extends PagerReader { | ||||
| 
 | ||||
| @@ -1,4 +1,4 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.horizontal; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager.horizontal; | ||||
| 
 | ||||
| public class LeftToRightReader extends HorizontalReader { | ||||
| 
 | ||||
| @@ -1,10 +1,11 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.horizontal; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager.horizontal; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| 
 | ||||
| import eu.kanade.mangafeed.data.source.model.Page; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.horizontal.HorizontalReader; | ||||
| 
 | ||||
| public class RightToLeftReader extends HorizontalReader { | ||||
| 
 | ||||
| @@ -1,14 +1,14 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.vertical; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager.vertical; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.GestureDetector; | ||||
| import android.view.MotionEvent; | ||||
| 
 | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.common.OnChapterBoundariesOutListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.common.OnChapterSingleTapListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.common.PagerGestureListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.common.Pager; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.base.OnChapterBoundariesOutListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.base.OnChapterSingleTapListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.PagerGestureListener; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.Pager; | ||||
| import rx.functions.Action1; | ||||
| 
 | ||||
| public class VerticalPager extends VerticalViewPagerImpl implements Pager { | ||||
| @@ -1,11 +1,12 @@ | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.vertical; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager.vertical; | ||||
| 
 | ||||
| import android.os.Bundle; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| 
 | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.common.PagerReader; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.PagerReader; | ||||
| import eu.kanade.mangafeed.ui.reader.viewer.pager.vertical.VerticalPager; | ||||
| 
 | ||||
| public class VerticalReader extends PagerReader { | ||||
| 
 | ||||
| @@ -14,7 +14,7 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.vertical; | ||||
| package eu.kanade.mangafeed.ui.reader.viewer.pager.vertical; | ||||
| 
 | ||||
| import android.content.Context; | ||||
| import android.content.res.Resources; | ||||
		Reference in New Issue
	
	Block a user