Procházet zdrojové kódy

Add more settings to the reader

inorichi před 9 roky
rodič
revize
e66ba4d834

+ 13 - 9
app/src/main/java/eu/kanade/mangafeed/data/preference/PreferencesHelper.java

@@ -4,6 +4,7 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.preference.PreferenceManager;
 
+import com.f2prateek.rx.preferences.Preference;
 import com.f2prateek.rx.preferences.RxSharedPreferences;
 
 import eu.kanade.mangafeed.R;
@@ -36,21 +37,24 @@ public class PreferencesHelper {
         prefs.edit().clear().apply();
     }
 
-    public boolean isHideStatusBarSet() {
-        return prefs.getBoolean(getKey(R.string.pref_hide_status_bar_key), true);
+    public Preference<Boolean> lockOrientation() {
+        return rxPrefs.getBoolean(getKey(R.string.pref_lock_orientation_key), true);
     }
 
-    public boolean isOrientationLocked() {
-        return prefs.getBoolean(getKey(R.string.pref_lock_orientation_key), true);
+    public Preference<Boolean> enableTransitions() {
+        return rxPrefs.getBoolean(getKey(R.string.pref_enable_transitions_key), true);
     }
 
-    public void setOrientationLocked(boolean lock) {
-        prefs.edit().putBoolean(getKey(R.string.pref_lock_orientation_key), lock).apply();
+    public Preference<Boolean> showPageNumber() {
+        return rxPrefs.getBoolean(getKey(R.string.pref_show_page_number_key), true);
     }
 
-    public Observable<Boolean> isOrientationLockedObservable() {
-        return rxPrefs.getBoolean(getKey(R.string.pref_lock_orientation_key), true)
-                .asObservable();
+    public Preference<Boolean> hideStatusBar() {
+        return rxPrefs.getBoolean(getKey(R.string.pref_hide_status_bar_key), true);
+    }
+
+    public Preference<Boolean> keepScreenOn() {
+        return rxPrefs.getBoolean(getKey(R.string.pref_keep_screen_on_key), true);
     }
 
     public int getDefaultViewer() {

+ 1 - 1
app/src/main/java/eu/kanade/mangafeed/ui/manga/chapter/ChaptersFragment.java

@@ -165,7 +165,7 @@ public class ChaptersFragment extends BaseRxFragment<ChaptersPresenter> implemen
             return true;
         } else {
             getPresenter().onChapterClicked(adapter.getItem(position));
-            Intent intent = ReaderActivity.newInstance(getActivity());
+            Intent intent = ReaderActivity.newIntent(getActivity());
             startActivity(intent);
             return false;
         }

+ 87 - 12
app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderActivity.java

@@ -2,11 +2,13 @@ package eu.kanade.mangafeed.ui.reader;
 
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.ActivityInfo;
 import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.v7.widget.Toolbar;
 import android.view.MotionEvent;
+import android.view.Surface;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowManager;
@@ -34,6 +36,7 @@ import eu.kanade.mangafeed.ui.reader.viewer.webtoon.WebtoonReader;
 import eu.kanade.mangafeed.util.ToastUtil;
 import icepick.Icepick;
 import nucleus.factory.RequiresPresenter;
+import rx.subscriptions.CompositeSubscription;
 
 @RequiresPresenter(ReaderPresenter.class)
 public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
@@ -42,20 +45,20 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
     @Bind(R.id.reader) FrameLayout container;
     @Bind(R.id.toolbar) Toolbar toolbar;
 
-    @Inject PreferencesHelper prefs;
+    @Inject PreferencesHelper preferences;
 
     private BaseReader viewer;
     private ReaderMenu readerMenu;
 
     private int uiFlags;
+    private CompositeSubscription subscriptions;
 
     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 newIntent(Context context) {
         return new Intent(context, ReaderActivity.class);
     }
 
@@ -67,14 +70,16 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
         ButterKnife.bind(this);
 
         setupToolbar(toolbar);
+        subscriptions = new CompositeSubscription();
 
-        readerMenu = new ReaderMenu(this, prefs);
+        readerMenu = new ReaderMenu(this);
         Icepick.restoreInstanceState(readerMenu, savedState);
         if (savedState != null && readerMenu.showing)
             readerMenu.show(false);
 
-        createUiHideFlags();
         enableHardwareAcceleration();
+
+        initializeSettings();
     }
 
     @Override
@@ -86,7 +91,7 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
     @Override
     protected void onResume() {
         super.onResume();
-        hideSystemUI();
+        setSystemUiVisibility();
     }
 
     @Override
@@ -102,16 +107,17 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
         super.onSaveInstanceState(outState);
     }
 
-    private void createUiHideFlags() {
+    private void createUiHideFlags(boolean statusBarHidden) {
+        uiFlags = 0;
         uiFlags |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
-        if (prefs.isHideStatusBarSet())
+        if (statusBarHidden)
             uiFlags |= View.SYSTEM_UI_FLAG_FULLSCREEN;
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
             uiFlags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
     }
 
     public void onChapterReady(List<Page> pages, Manga manga, Chapter chapter) {
-        viewer = getViewer(manga);
+        viewer = createViewer(manga);
         viewer.onPageListReady(pages);
         viewer.updatePageNumber();
         readerMenu.onChapterReady(pages.size(), manga, chapter);
@@ -132,7 +138,7 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
         viewer.setSelectedPage(pageIndex);
     }
 
-    public void hideSystemUI() {
+    public void setSystemUiVisibility() {
         getWindow().getDecorView().setSystemUiVisibility(uiFlags);
     }
 
@@ -154,8 +160,12 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
         return container;
     }
 
-    private BaseReader getViewer(Manga manga) {
-        int mangaViewer = manga.viewer == 0 ? prefs.getDefaultViewer() : manga.viewer;
+    public PreferencesHelper getPreferences() {
+        return preferences;
+    }
+
+    private BaseReader createViewer(Manga manga) {
+        int mangaViewer = manga.viewer == 0 ? preferences.getDefaultViewer() : manga.viewer;
 
         switch (mangaViewer) {
             case LEFT_TO_RIGHT: default:
@@ -169,4 +179,69 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
         }
     }
 
+    private void initializeSettings() {
+        subscriptions.add(preferences.showPageNumber()
+                .asObservable()
+                .subscribe(this::setPageNumberVisibility));
+
+        subscriptions.add(preferences.lockOrientation()
+                .asObservable()
+                .subscribe(this::setOrientation));
+
+        subscriptions.add(preferences.hideStatusBar()
+                .asObservable()
+                .subscribe(this::setStatusBarVisibility));
+
+        preferences.keepScreenOn()
+                .asObservable()
+                .subscribe(this::setKeepScreenOn);
+    }
+
+    private void setOrientation(boolean locked) {
+        if (locked) {
+            int orientation;
+            int rotation = ((WindowManager) getSystemService(
+                    Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
+            switch (rotation) {
+                case Surface.ROTATION_0:
+                    orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
+                    break;
+                case Surface.ROTATION_90:
+                    orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
+                    break;
+                case Surface.ROTATION_180:
+                    orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
+                    break;
+                default:
+                    orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
+                    break;
+            }
+            setRequestedOrientation(orientation);
+        } else {
+            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
+        }
+    }
+
+    private void setPageNumberVisibility(boolean visible) {
+        pageNumber.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
+    }
+
+    private void setStatusBarVisibility(boolean hidden) {
+        createUiHideFlags(hidden);
+        setSystemUiVisibility();
+    }
+
+    private void setKeepScreenOn(boolean enabled) {
+        if (enabled) {
+            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+        } else {
+            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+        }
+    }
+    
+    protected void setMangaDefaultViewer(int viewer) {
+        getPresenter().updateMangaViewer(viewer);
+        recreate();
+    }
+
 }

+ 91 - 49
app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderMenu.java

@@ -2,16 +2,18 @@ package eu.kanade.mangafeed.ui.reader;
 
 import android.app.Dialog;
 import android.content.Context;
-import android.content.pm.ActivityInfo;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.widget.Toolbar;
-import android.view.Surface;
+import android.view.Gravity;
 import android.view.View;
 import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
 import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
+import android.widget.CheckBox;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
+import android.widget.PopupWindow;
 import android.widget.RelativeLayout;
 import android.widget.SeekBar;
 import android.widget.TextView;
@@ -37,18 +39,21 @@ public class ReaderMenu {
     @Bind(R.id.total_pages) TextView totalPages;
     @Bind(R.id.lock_orientation) ImageButton lockOrientation;
     @Bind(R.id.reader_selector) ImageButton readerSelector;
-
+    @Bind(R.id.reader_extra_settings) ImageButton extraSettings;
 
     private ReaderActivity activity;
     private PreferencesHelper preferences;
+
     @State boolean showing;
+    private PopupWindow popupWindow;
+
     private DecimalFormat decimalFormat;
 
     private CompositeSubscription subscriptions;
 
-    public ReaderMenu(ReaderActivity activity, PreferencesHelper preferences) {
+    public ReaderMenu(ReaderActivity activity) {
         this.activity = activity;
-        this.preferences = preferences;
+        this.preferences = activity.getPreferences();
         ButterKnife.bind(this, activity);
 
         // Intercept all image events in this layout
@@ -94,6 +99,8 @@ public class ReaderMenu {
         Animation bottomMenuAnimation = AnimationUtils.loadAnimation(activity, R.anim.exit_to_bottom);
         bottomMenu.startAnimation(bottomMenuAnimation);
 
+        popupWindow.dismiss();
+
         showing = false;
     }
 
@@ -116,11 +123,18 @@ public class ReaderMenu {
 
     private void initializeOptions() {
         // Orientation changes
-        lockOrientation.setOnClickListener(v ->
-                preferences.setOrientationLocked(!preferences.isOrientationLocked()));
+        subscriptions.add(preferences.lockOrientation().asObservable()
+                .subscribe(locked -> {
+                    int resourceId = !locked ? R.drawable.ic_screen_rotation :
+                            activity.getResources().getConfiguration().orientation == 1 ?
+                                    R.drawable.ic_screen_lock_portrait :
+                                    R.drawable.ic_screen_lock_landscape;
+
+                    lockOrientation.setImageResource(resourceId);
+                }));
 
-        subscriptions.add(preferences.isOrientationLockedObservable()
-                .subscribe(this::onOrientationOptionChanged));
+        lockOrientation.setOnClickListener(v ->
+                preferences.lockOrientation().set(!preferences.lockOrientation().get()));
 
         // Reader selector
         readerSelector.setOnClickListener(v -> {
@@ -128,57 +142,84 @@ public class ReaderMenu {
             final Dialog dialog = new AlertDialog.Builder(activity)
                     .setSingleChoiceItems(R.array.viewers_selector, manga.viewer, (d, which) -> {
                         if (manga.viewer != which) {
-                            activity.getPresenter().updateMangaViewer(which);
-                            activity.recreate();
+                            activity.setMangaDefaultViewer(which);
                         }
                         d.dismiss();
                     })
                     .create();
+            showImmersiveDialog(dialog);
+        });
+
+        // Extra settings menu
+        final View popupView = activity.getLayoutInflater().inflate(R.layout.reader_popup, null);
+        popupWindow = new SettingsPopupWindow(popupView);
 
-            // Hack to not leave immersive mode
-            dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
-                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
-            dialog.getWindow().getDecorView().setSystemUiVisibility(
-                    activity.getWindow().getDecorView().getSystemUiVisibility());
-            dialog.show();
-            dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
-            WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
-            wm.updateViewLayout(activity.getWindow().getDecorView(), activity.getWindow().getAttributes());
+        extraSettings.setOnClickListener(v -> {
+            if (!popupWindow.isShowing())
+                popupWindow.showAtLocation(extraSettings,
+                        Gravity.BOTTOM | Gravity.RIGHT, 0, bottomMenu.getHeight());
+            else
+                popupWindow.dismiss();
         });
     }
 
-    private void onOrientationOptionChanged(boolean locked) {
-        if (locked)
-            lockOrientation();
-        else
-            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
-        int resourceId = !locked ? R.drawable.ic_screen_rotation :
-                activity.getResources().getConfiguration().orientation == 1 ?
-                        R.drawable.ic_screen_lock_portrait :
-                        R.drawable.ic_screen_lock_landscape;
-
-        lockOrientation.setImageResource(resourceId);
+    private void showImmersiveDialog(Dialog dialog) {
+        // Hack to not leave immersive mode
+        dialog.getWindow().setFlags(LayoutParams.FLAG_NOT_FOCUSABLE,
+                LayoutParams.FLAG_NOT_FOCUSABLE);
+        dialog.getWindow().getDecorView().setSystemUiVisibility(
+                activity.getWindow().getDecorView().getSystemUiVisibility());
+        dialog.show();
+        dialog.getWindow().clearFlags(LayoutParams.FLAG_NOT_FOCUSABLE);
+        WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
+        wm.updateViewLayout(activity.getWindow().getDecorView(), activity.getWindow().getAttributes());
     }
 
-    private void lockOrientation() {
-        int orientation;
-        int rotation = ((WindowManager) activity.getSystemService(
-                Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
-        switch (rotation) {
-            case Surface.ROTATION_0:
-                orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
-                break;
-            case Surface.ROTATION_90:
-                orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
-                break;
-            case Surface.ROTATION_180:
-                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
-                break;
-            default:
-                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
-                break;
+    class SettingsPopupWindow extends PopupWindow {
+
+        @Bind(R.id.enable_transitions) CheckBox enableTransitions;
+        @Bind(R.id.show_page_number) CheckBox showPageNumber;
+        @Bind(R.id.hide_status_bar) CheckBox hideStatusBar;
+        @Bind(R.id.keep_screen_on) CheckBox keepScreenOn;
+
+        public SettingsPopupWindow(View view) {
+            super(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+            setAnimationStyle(R.style.reader_settings_popup_animation);
+            ButterKnife.bind(this, view);
+            initializePopupMenu();
         }
-        activity.setRequestedOrientation(orientation);
+
+        private void initializePopupMenu() {
+            subscriptions.add(preferences.enableTransitions()
+                    .asObservable()
+                    .subscribe(enableTransitions::setChecked));
+
+            subscriptions.add(preferences.showPageNumber()
+                    .asObservable()
+                    .subscribe(showPageNumber::setChecked));
+
+            subscriptions.add(preferences.hideStatusBar()
+                    .asObservable()
+                    .subscribe(hideStatusBar::setChecked));
+
+            subscriptions.add(preferences.keepScreenOn()
+                    .asObservable()
+                    .subscribe(keepScreenOn::setChecked));
+
+            enableTransitions.setOnCheckedChangeListener((view, isChecked) ->
+                    preferences.enableTransitions().set(isChecked));
+
+            showPageNumber.setOnCheckedChangeListener((view, isChecked) ->
+                    preferences.showPageNumber().set(isChecked));
+
+            hideStatusBar.setOnCheckedChangeListener((view, isChecked) ->
+                    preferences.hideStatusBar().set(isChecked));
+
+            keepScreenOn.setOnCheckedChangeListener((view, isChecked) ->
+                    preferences.keepScreenOn().set(isChecked));
+
+        }
+
     }
 
     class PageSeekBarChangeListener implements SeekBar.OnSeekBarChangeListener {
@@ -214,4 +255,5 @@ public class ReaderMenu {
 
         }
     }
+
 }

+ 28 - 1
app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/HorizontalReader.java

@@ -11,6 +11,7 @@ import eu.kanade.mangafeed.data.source.model.Page;
 import eu.kanade.mangafeed.ui.reader.ReaderActivity;
 import eu.kanade.mangafeed.ui.reader.viewer.base.BaseReader;
 import eu.kanade.mangafeed.ui.reader.viewer.common.ViewPagerReaderAdapter;
+import rx.Subscription;
 
 public abstract class HorizontalReader extends BaseReader {
 
@@ -18,11 +19,17 @@ public abstract class HorizontalReader extends BaseReader {
 
     protected ViewPagerReaderAdapter adapter;
 
+    private boolean transitions;
+    private Subscription transitionsSubscription;
+
     public HorizontalReader(ReaderActivity activity) {
         super(activity);
         activity.getLayoutInflater().inflate(R.layout.reader_horizontal, container);
         ButterKnife.bind(this, container);
 
+        transitionsSubscription = activity.getPreferences().enableTransitions().asObservable()
+                .subscribe(value -> transitions = value);
+
         viewPager.setOffscreenPageLimit(3);
         viewPager.addOnPageChangeListener(new HorizontalViewPager.SimpleOnPageChangeListener() {
             @Override
@@ -42,7 +49,22 @@ public abstract class HorizontalReader extends BaseReader {
                 onLastPageOut();
             }
         });
-        viewPager.setOnChapterSingleTapListener(activity::onCenterSingleTap);
+        viewPager.setOnChapterSingleTapListener(new HorizontalViewPager.OnChapterSingleTapListener() {
+            @Override
+            public void onCenterTap() {
+                activity.onCenterSingleTap();
+            }
+
+            @Override
+            public void onLeftSideTap() {
+                viewPager.setCurrentItem(viewPager.getCurrentItem() - 1, transitions);
+            }
+
+            @Override
+            public void onRightSideTap() {
+                viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, transitions);
+            }
+        });
     }
     
     @Override
@@ -67,6 +89,11 @@ public abstract class HorizontalReader extends BaseReader {
         return viewPager.onImageTouch(motionEvent);
     }
 
+    @Override
+    public void destroySubscriptions() {
+        transitionsSubscription.unsubscribe();
+    }
+
     public abstract void onFirstPageOut();
     public abstract void onLastPageOut();
 

+ 10 - 4
app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/HorizontalViewPager.java

@@ -90,7 +90,9 @@ public class HorizontalViewPager extends ViewPager {
     }
 
     public interface OnChapterSingleTapListener {
-        void onSingleTap();
+        void onCenterTap();
+        void onLeftSideTap();
+        void onRightSideTap();
     }
 
     public void setOnChapterBoundariesOutListener(OnChapterBoundariesOutListener onChapterBoundariesOutListener) {
@@ -111,7 +113,9 @@ public class HorizontalViewPager extends ViewPager {
 
             if (positionX < getWidth() * LEFT_REGION) {
                 if (position != 0) {
-                    setCurrentItem(position - 1, true);
+                    if (mOnChapterSingleTapListener != null) {
+                        mOnChapterSingleTapListener.onLeftSideTap();
+                    }
                 } else {
                     if (mOnChapterBoundariesOutListener != null) {
                         mOnChapterBoundariesOutListener.onFirstPageOutEvent();
@@ -119,7 +123,9 @@ public class HorizontalViewPager extends ViewPager {
                 }
             } else if (positionX > getWidth() * RIGHT_REGION) {
                 if (position != getAdapter().getCount() - 1) {
-                    setCurrentItem(position + 1, true);
+                    if (mOnChapterSingleTapListener != null) {
+                        mOnChapterSingleTapListener.onRightSideTap();
+                    }
                 } else {
                     if (mOnChapterBoundariesOutListener != null) {
                         mOnChapterBoundariesOutListener.onLastPageOutEvent();
@@ -127,7 +133,7 @@ public class HorizontalViewPager extends ViewPager {
                 }
             } else {
                 if (mOnChapterSingleTapListener != null) {
-                    mOnChapterSingleTapListener.onSingleTap();
+                    mOnChapterSingleTapListener.onCenterTap();
                 }
             }
 

+ 1 - 1
app/src/main/res/anim/enter_from_left.xml

@@ -2,7 +2,7 @@
 <set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
     <translate
-        android:duration="400"
+        android:duration="200"
         android:fromXDelta="-100%"
         android:toXDelta="0%" />
 </set>

+ 1 - 1
app/src/main/res/anim/enter_from_right.xml

@@ -2,7 +2,7 @@
 <set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
     <translate
-        android:duration="400"
+        android:duration="200"
         android:fromXDelta="100%"
         android:toXDelta="0%" />
 </set>

+ 1 - 1
app/src/main/res/anim/exit_to_left.xml

@@ -2,7 +2,7 @@
 <set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
     <translate
-        android:duration="400"
+        android:duration="200"
         android:fromXDelta="0%"
         android:toXDelta="-100%" />
 </set>

+ 1 - 1
app/src/main/res/anim/exit_to_right.xml

@@ -2,7 +2,7 @@
 <set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
     <translate
-        android:duration="400"
+        android:duration="200"
         android:fromXDelta="0%"
         android:toXDelta="100%" />
 </set>

binární
app/src/main/res/drawable-hdpi/ic_more_vert.png


binární
app/src/main/res/drawable-ldpi/ic_more_vert.png


binární
app/src/main/res/drawable-mdpi/ic_more_vert.png


binární
app/src/main/res/drawable-xhdpi/ic_more_vert.png


binární
app/src/main/res/drawable-xxhdpi/ic_more_vert.png


binární
app/src/main/res/drawable-xxxhdpi/ic_more_vert.png


+ 4 - 2
app/src/main/res/layout/reader_menu.xml

@@ -77,13 +77,15 @@
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
+                android:id="@+id/reader_selector"
+                android:src="@drawable/ic_view_carousel"
                 android:background="?android:selectableItemBackground" />
             <ImageButton
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
-                android:id="@+id/reader_selector"
-                android:src="@drawable/ic_view_carousel"
+                android:id="@+id/reader_extra_settings"
+                android:src="@drawable/ic_more_vert"
                 android:background="?android:selectableItemBackground" />
 
         </LinearLayout>

+ 39 - 0
app/src/main/res/layout/reader_popup.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical" android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="#333333"
+    android:paddingRight="10dp"
+    android:paddingLeft="5dp"
+    android:paddingTop="5dp"
+    android:paddingBottom="5dp">
+
+    <CheckBox
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/enable_transitions"
+        style="@style/grey_text"
+        android:text="@string/pref_enable_transitions"/>
+
+    <CheckBox
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/show_page_number"
+        style="@style/grey_text"
+        android:text="@string/pref_show_page_number"/>
+
+    <CheckBox
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/hide_status_bar"
+        style="@style/grey_text"
+        android:text="@string/pref_hide_status_bar"/>
+
+    <CheckBox
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/keep_screen_on"
+        style="@style/grey_text"
+        android:text="Keep screen on"/>
+
+</LinearLayout>

+ 6 - 1
app/src/main/res/values/keys.xml

@@ -3,9 +3,14 @@
     <string name="pref_category_reader_key">pref_category_reader_key</string>
     <string name="pref_category_accounts_key">pref_category_accounts_key</string>
     <string name="pref_category_downloads_key">pref_category_downloads_key</string>
+
+    <string name="pref_default_viewer_key">pref_default_viewer_key</string>
     <string name="pref_hide_status_bar_key">pref_hide_status_bar_key</string>
     <string name="pref_lock_orientation_key">pref_lock_orientation_key</string>
-    <string name="pref_default_viewer_key">pref_default_viewer_key</string>
+    <string name="pref_enable_transitions_key">pref_enable_transitions_key</string>
+    <string name="pref_show_page_number_key">pref_show_page_number_key</string>
+    <string name="pref_keep_screen_on_key">pref_keep_screen_on_key</string>
+
     <string name="pref_download_directory_key">pref_download_directory_key</string>
     <string name="pref_download_threads_key">pref_download_threads_key</string>
 </resources>

+ 3 - 1
app/src/main/res/values/strings.xml

@@ -34,6 +34,9 @@
     <string name="right_to_left_viewer">Right to left</string>
     <string name="vertical_viewer">Vertical</string>
     <string name="webtoon_viewer">Webtoon (experimental)</string>
+    <string name="pref_lock_orientation">Lock orientation</string>
+    <string name="pref_enable_transitions">Enable transitions</string>
+    <string name="pref_show_page_number">Show page number</string>
 
       <!-- Downloads section -->
     <string name="pref_download_directory">Downloads directory</string>
@@ -83,6 +86,5 @@
     <string name="notification_completed">Update completed</string>
     <string name="notification_no_new_chapters">No new chapters found</string>
     <string name="notification_new_chapters">Found new chapters for:</string>
-    <string name="pref_lock_orientation">Lock orientation</string>
 
 </resources>

+ 7 - 0
app/src/main/res/values/styles.xml

@@ -99,4 +99,11 @@
         <item name="android:singleLine">true</item>
         <item name="android:textIsSelectable">false</item>
     </style>
+    <style name="reader_settings_popup_animation">
+        <item name="android:windowEnterAnimation">@anim/enter_from_right</item>
+        <item name="android:windowExitAnimation">@anim/exit_to_right</item>
+    </style>
+    <style name="grey_text">
+        <item name="android:textColor">#e0e0e0</item>
+    </style>
 </resources>

+ 8 - 0
app/src/main/res/xml/pref_reader.xml

@@ -9,6 +9,14 @@
         android:key="@string/pref_lock_orientation_key"
         android:defaultValue="true" />
 
+    <CheckBoxPreference android:title="@string/pref_enable_transitions"
+        android:key="@string/pref_enable_transitions_key"
+        android:defaultValue="true" />
+
+    <CheckBoxPreference android:title="@string/pref_show_page_number"
+        android:key="@string/pref_show_page_number_key"
+        android:defaultValue="true" />
+
     <ListPreference android:title="@string/pref_viewer_type"
         android:key="@string/pref_default_viewer_key"
         android:entries="@array/viewers"