mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	Implement zoom start position. Closes #92. Rapid decoder properly throws an error when it fails to decode.
This commit is contained in:
		| @@ -116,6 +116,10 @@ public class PreferencesHelper { | ||||
|         return rxPrefs.getInteger(getKey(R.string.pref_image_decoder_key), 0); | ||||
|     } | ||||
|  | ||||
|     public Preference<Integer> zoomStart() { | ||||
|         return rxPrefs.getInteger(getKey(R.string.pref_zoom_start_key), 1); | ||||
|     } | ||||
|  | ||||
|     public Preference<Integer> readerTheme() { | ||||
|         return rxPrefs.getInteger(getKey(R.string.pref_reader_theme_key), 0); | ||||
|     } | ||||
|   | ||||
| @@ -43,9 +43,10 @@ public class ReaderMenu { | ||||
|     @Bind(R.id.page_seeker) SeekBar seekBar; | ||||
|     @Bind(R.id.total_pages) TextView totalPages; | ||||
|     @Bind(R.id.lock_orientation) ImageButton lockOrientation; | ||||
|     @Bind(R.id.reader_zoom_selector) ImageButton zoomSelector; | ||||
|     @Bind(R.id.reader_scale_type_selector) ImageButton scaleTypeSelector; | ||||
|     @Bind(R.id.reader_selector) ImageButton readerSelector; | ||||
|     @Bind(R.id.reader_extra_settings) ImageButton extraSettings; | ||||
|     @Bind(R.id.reader_scale_type_selector) ImageButton scaleTypeSelector; | ||||
|  | ||||
|     private MenuItem nextChapterBtn; | ||||
|     private MenuItem prevChapterBtn; | ||||
| @@ -189,9 +190,23 @@ public class ReaderMenu { | ||||
|         lockOrientation.setOnClickListener(v -> | ||||
|                 preferences.lockOrientation().set(!preferences.lockOrientation().get())); | ||||
|  | ||||
|         // Zoom selector | ||||
|         zoomSelector.setOnClickListener(v -> { | ||||
|             showImmersiveDialog(new MaterialDialog.Builder(activity) | ||||
|                     .title(R.string.pref_zoom_start) | ||||
|                     .items(R.array.zoom_start) | ||||
|                     .itemsCallbackSingleChoice(preferences.zoomStart().get() - 1, | ||||
|                             (d, itemView, which, text) -> { | ||||
|                                 preferences.zoomStart().set(which + 1); | ||||
|                                 return true; | ||||
|                             }) | ||||
|                     .build()); | ||||
|         }); | ||||
|  | ||||
|         // Scale type selector | ||||
|         scaleTypeSelector.setOnClickListener(v -> { | ||||
|             showImmersiveDialog(new MaterialDialog.Builder(activity) | ||||
|                     .title(R.string.pref_image_scale_type) | ||||
|                     .items(R.array.image_scale_type) | ||||
|                     .itemsCallbackSingleChoice(preferences.imageScaleType().get() - 1, | ||||
|                             (d, itemView, which, text) -> { | ||||
| @@ -205,6 +220,7 @@ public class ReaderMenu { | ||||
|         readerSelector.setOnClickListener(v -> { | ||||
|             final Manga manga = activity.getPresenter().getManga(); | ||||
|             showImmersiveDialog(new MaterialDialog.Builder(activity) | ||||
|                     .title(R.string.pref_viewer_type) | ||||
|                     .items(R.array.viewers_selector) | ||||
|                     .itemsCallbackSingleChoice(manga.viewer, | ||||
|                             (d, itemView, which, text) -> { | ||||
|   | ||||
| @@ -6,10 +6,13 @@ import android.view.ViewGroup; | ||||
| import java.util.List; | ||||
|  | ||||
| import eu.kanade.tachiyomi.R; | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper; | ||||
| import eu.kanade.tachiyomi.data.source.model.Page; | ||||
| import eu.kanade.tachiyomi.ui.reader.viewer.base.BaseReader; | ||||
| import eu.kanade.tachiyomi.ui.reader.viewer.base.OnChapterBoundariesOutListener; | ||||
| import eu.kanade.tachiyomi.ui.reader.viewer.base.OnChapterSingleTapListener; | ||||
| import eu.kanade.tachiyomi.ui.reader.viewer.pager.horizontal.LeftToRightReader; | ||||
| import eu.kanade.tachiyomi.ui.reader.viewer.pager.horizontal.RightToLeftReader; | ||||
| import rx.subscriptions.CompositeSubscription; | ||||
|  | ||||
| import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; | ||||
| @@ -24,6 +27,12 @@ public abstract class PagerReader extends BaseReader { | ||||
|     protected CompositeSubscription subscriptions; | ||||
|  | ||||
|     protected int scaleType = 1; | ||||
|     protected int zoomStart = 1; | ||||
|  | ||||
|     public static final int ALIGN_AUTO = 1; | ||||
|     public static final int ALIGN_LEFT = 2; | ||||
|     public static final int ALIGN_RIGHT = 3; | ||||
|     public static final int ALIGN_CENTER = 4; | ||||
|  | ||||
|     protected void initializePager(Pager pager) { | ||||
|         this.pager = pager; | ||||
| @@ -61,22 +70,30 @@ public abstract class PagerReader extends BaseReader { | ||||
|         adapter = new PagerReaderAdapter(getChildFragmentManager()); | ||||
|         pager.setAdapter(adapter); | ||||
|  | ||||
|         PreferencesHelper preferences = getReaderActivity().getPreferences(); | ||||
|         subscriptions = new CompositeSubscription(); | ||||
|         subscriptions.add(getReaderActivity().getPreferences().imageDecoder() | ||||
|         subscriptions.add(preferences.imageDecoder() | ||||
|                 .asObservable() | ||||
|                 .doOnNext(this::setDecoderClass) | ||||
|                 .skip(1) | ||||
|                 .distinctUntilChanged() | ||||
|                 .subscribe(v -> adapter.notifyDataSetChanged())); | ||||
|  | ||||
|         subscriptions.add(getReaderActivity().getPreferences().imageScaleType() | ||||
|         subscriptions.add(preferences.imageScaleType() | ||||
|                 .asObservable() | ||||
|                 .doOnNext(this::setImageScaleType) | ||||
|                 .skip(1) | ||||
|                 .distinctUntilChanged() | ||||
|                 .subscribe(v -> adapter.notifyDataSetChanged())); | ||||
|  | ||||
|         subscriptions.add(getReaderActivity().getPreferences().enableTransitions() | ||||
|         subscriptions.add(preferences.zoomStart() | ||||
|                 .asObservable() | ||||
|                 .doOnNext(this::setZoomStart) | ||||
|                 .skip(1) | ||||
|                 .distinctUntilChanged() | ||||
|                 .subscribe(v -> adapter.notifyDataSetChanged())); | ||||
|  | ||||
|         subscriptions.add(preferences.enableTransitions() | ||||
|                 .asObservable() | ||||
|                 .subscribe(value -> transitions = value)); | ||||
|  | ||||
| @@ -125,6 +142,19 @@ public abstract class PagerReader extends BaseReader { | ||||
|         this.scaleType = scaleType; | ||||
|     } | ||||
|  | ||||
|     private void setZoomStart(int zoomStart) { | ||||
|         if (zoomStart == ALIGN_AUTO) { | ||||
|             if (this instanceof LeftToRightReader) | ||||
|                 setZoomStart(ALIGN_LEFT); | ||||
|             else if (this instanceof RightToLeftReader) | ||||
|                 setZoomStart(ALIGN_RIGHT); | ||||
|             else | ||||
|                 setZoomStart(ALIGN_CENTER); | ||||
|         } else { | ||||
|             this.zoomStart = zoomStart; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public abstract void onFirstPageOut(); | ||||
|     public abstract void onLastPageOut(); | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package eu.kanade.tachiyomi.ui.reader.viewer.pager; | ||||
|  | ||||
| import android.graphics.PointF; | ||||
| import android.os.Bundle; | ||||
| import android.support.annotation.Nullable; | ||||
| import android.support.v4.content.ContextCompat; | ||||
| @@ -70,6 +71,23 @@ public class PagerReaderFragment extends BaseFragment { | ||||
|         imageView.setVerticalScrollingParent(parentFragment instanceof VerticalReader); | ||||
|         imageView.setOnTouchListener((v, motionEvent) -> parentFragment.onImageTouch(motionEvent)); | ||||
|         imageView.setOnImageEventListener(new SubsamplingScaleImageView.DefaultOnImageEventListener() { | ||||
|             @Override | ||||
|             public void onReady() { | ||||
|                 switch (parentFragment.zoomStart) { | ||||
|                     case PagerReader.ALIGN_LEFT: | ||||
|                         imageView.setScaleAndCenter(imageView.getScale(), new PointF(0, 0)); | ||||
|                         break; | ||||
|                     case PagerReader.ALIGN_RIGHT: | ||||
|                         imageView.setScaleAndCenter(imageView.getScale(), new PointF(99999f, 0)); | ||||
|                         break; | ||||
|                     case PagerReader.ALIGN_CENTER: | ||||
|                         PointF center = imageView.getCenter(); | ||||
|                         center.y = 0; | ||||
|                         imageView.setScaleAndCenter(imageView.getScale(), center); | ||||
|                         break; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             public void onImageLoadError(Exception e) { | ||||
|                 showImageLoadError(); | ||||
| @@ -93,6 +111,7 @@ public class PagerReaderFragment extends BaseFragment { | ||||
|     public void onDestroyView() { | ||||
|         unsubscribeProgress(); | ||||
|         unsubscribeStatus(); | ||||
|         imageView.setOnImageEventListener(null); | ||||
|         ButterKnife.unbind(this); | ||||
|         super.onDestroyView(); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user