From 5e2269df145b9d173e173ef56fb1991b49d3dd52 Mon Sep 17 00:00:00 2001 From: inorichi Date: Thu, 19 Nov 2015 18:56:46 +0100 Subject: [PATCH] Improve reader options menu. Allow to select default viewer per manga. Allow to lock screen rotation. Working on more options. --- .../data/preference/PreferencesHelper.java | 13 ++ .../mangafeed/ui/reader/ReaderActivity.java | 33 ++++- .../mangafeed/ui/reader/ReaderMenu.java | 115 ++++++++++++++++-- .../mangafeed/ui/reader/ReaderPresenter.java | 9 ++ .../ui/reader/viewer/base/BaseReader.java | 8 +- .../viewer/horizontal/HorizontalReader.java | 5 +- .../viewer/horizontal/LeftToRightReader.java | 6 +- .../viewer/horizontal/RightToLeftReader.java | 6 +- .../viewer/vertical/VerticalReader.java | 5 +- .../reader/viewer/webtoon/WebtoonReader.java | 5 +- .../ic_screen_lock_landscape.png | Bin 0 -> 370 bytes .../drawable-hdpi/ic_screen_lock_portrait.png | Bin 0 -> 374 bytes .../res/drawable-hdpi/ic_screen_rotation.png | Bin 0 -> 807 bytes .../res/drawable-hdpi/ic_view_carousel.png | Bin 0 -> 156 bytes .../ic_screen_lock_landscape.png | Bin 0 -> 327 bytes .../drawable-ldpi/ic_screen_lock_portrait.png | Bin 0 -> 322 bytes .../res/drawable-ldpi/ic_screen_rotation.png | Bin 0 -> 498 bytes .../res/drawable-ldpi/ic_view_carousel.png | Bin 0 -> 295 bytes .../ic_screen_lock_landscape.png | Bin 0 -> 269 bytes .../drawable-mdpi/ic_screen_lock_portrait.png | Bin 0 -> 277 bytes .../res/drawable-mdpi/ic_screen_rotation.png | Bin 0 -> 578 bytes .../res/drawable-mdpi/ic_view_carousel.png | Bin 0 -> 125 bytes .../res/drawable-tvdpi/ic_file_download.png | Bin 482 -> 0 bytes .../ic_screen_lock_landscape.png | Bin 0 -> 381 bytes .../ic_screen_lock_portrait.png | Bin 0 -> 388 bytes .../res/drawable-xhdpi/ic_screen_rotation.png | Bin 0 -> 1084 bytes .../res/drawable-xhdpi/ic_view_carousel.png | Bin 0 -> 142 bytes .../ic_screen_lock_landscape.png | Bin 0 -> 617 bytes .../ic_screen_lock_portrait.png | Bin 0 -> 643 bytes .../drawable-xxhdpi/ic_screen_rotation.png | Bin 0 -> 1599 bytes .../res/drawable-xxhdpi/ic_view_carousel.png | Bin 0 -> 210 bytes .../ic_screen_lock_landscape.png | Bin 0 -> 781 bytes .../ic_screen_lock_portrait.png | Bin 0 -> 807 bytes .../drawable-xxxhdpi/ic_screen_rotation.png | Bin 0 -> 2122 bytes .../res/drawable-xxxhdpi/ic_view_carousel.png | Bin 0 -> 280 bytes app/src/main/res/layout/reader_menu.xml | 95 +++++++++++---- app/src/main/res/values/arrays.xml | 9 +- app/src/main/res/values/keys.xml | 1 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/pref_reader.xml | 4 + 40 files changed, 255 insertions(+), 61 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_screen_lock_landscape.png create mode 100644 app/src/main/res/drawable-hdpi/ic_screen_lock_portrait.png create mode 100644 app/src/main/res/drawable-hdpi/ic_screen_rotation.png create mode 100644 app/src/main/res/drawable-hdpi/ic_view_carousel.png create mode 100644 app/src/main/res/drawable-ldpi/ic_screen_lock_landscape.png create mode 100644 app/src/main/res/drawable-ldpi/ic_screen_lock_portrait.png create mode 100644 app/src/main/res/drawable-ldpi/ic_screen_rotation.png create mode 100644 app/src/main/res/drawable-ldpi/ic_view_carousel.png create mode 100644 app/src/main/res/drawable-mdpi/ic_screen_lock_landscape.png create mode 100644 app/src/main/res/drawable-mdpi/ic_screen_lock_portrait.png create mode 100644 app/src/main/res/drawable-mdpi/ic_screen_rotation.png create mode 100644 app/src/main/res/drawable-mdpi/ic_view_carousel.png delete mode 100644 app/src/main/res/drawable-tvdpi/ic_file_download.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_screen_lock_landscape.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_screen_lock_portrait.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_screen_rotation.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_view_carousel.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_screen_lock_landscape.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_screen_lock_portrait.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_screen_rotation.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_view_carousel.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_screen_lock_landscape.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_screen_lock_portrait.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_screen_rotation.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_view_carousel.png diff --git a/app/src/main/java/eu/kanade/mangafeed/data/preference/PreferencesHelper.java b/app/src/main/java/eu/kanade/mangafeed/data/preference/PreferencesHelper.java index b1768bc84a..165c8f578b 100644 --- a/app/src/main/java/eu/kanade/mangafeed/data/preference/PreferencesHelper.java +++ b/app/src/main/java/eu/kanade/mangafeed/data/preference/PreferencesHelper.java @@ -40,6 +40,19 @@ public class PreferencesHelper { return prefs.getBoolean(getKey(R.string.pref_hide_status_bar_key), true); } + public boolean isOrientationLocked() { + return prefs.getBoolean(getKey(R.string.pref_lock_orientation_key), true); + } + + public void setOrientationLocked(boolean lock) { + prefs.edit().putBoolean(getKey(R.string.pref_lock_orientation_key), lock).apply(); + } + + public Observable isOrientationLockedObservable() { + return rxPrefs.getBoolean(getKey(R.string.pref_lock_orientation_key), true) + .asObservable(); + } + public int getDefaultViewer() { return Integer.parseInt(prefs.getString(getKey(R.string.pref_default_viewer_key), "1")); } diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderActivity.java b/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderActivity.java index 69d7e0ed1b..eecf610db4 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderActivity.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderActivity.java @@ -4,9 +4,11 @@ import android.content.Context; import android.content.Intent; 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.View; +import android.view.ViewGroup; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.TextView; @@ -30,6 +32,7 @@ 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.webtoon.WebtoonReader; import eu.kanade.mangafeed.util.ToastUtil; +import icepick.Icepick; import nucleus.factory.RequiresPresenter; @RequiresPresenter(ReaderPresenter.class) @@ -66,10 +69,20 @@ public class ReaderActivity extends BaseRxActivity { setupToolbar(toolbar); readerMenu = new ReaderMenu(this, prefs); + Icepick.restoreInstanceState(readerMenu, savedState); + if (savedState != null && readerMenu.showing) + readerMenu.show(false); + createUiHideFlags(); enableHardwareAcceleration(); } + @Override + protected void onDestroy() { + readerMenu.destroy(); + super.onDestroy(); + } + @Override protected void onResume() { super.onResume(); @@ -83,11 +96,17 @@ public class ReaderActivity extends BaseRxActivity { super.onPause(); } + @Override + protected void onSaveInstanceState(@NonNull Bundle outState) { + Icepick.saveInstanceState(readerMenu, outState); + super.onSaveInstanceState(outState); + } + private void createUiHideFlags() { uiFlags |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; if (prefs.isHideStatusBarSet()) uiFlags |= View.SYSTEM_UI_FLAG_FULLSCREEN; - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) uiFlags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; } @@ -131,18 +150,22 @@ public class ReaderActivity extends BaseRxActivity { readerMenu.toggle(); } + public ViewGroup getContainer() { + return container; + } + private BaseReader getViewer(Manga manga) { int mangaViewer = manga.viewer == 0 ? prefs.getDefaultViewer() : manga.viewer; switch (mangaViewer) { case LEFT_TO_RIGHT: default: - return new LeftToRightReader(this, container); + return new LeftToRightReader(this); case RIGHT_TO_LEFT: - return new RightToLeftReader(this, container); + return new RightToLeftReader(this); case VERTICAL: - return new VerticalReader(this, container); + return new VerticalReader(this); case WEBTOON: - return new WebtoonReader(this, container); + return new WebtoonReader(this); } } diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderMenu.java b/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderMenu.java index 937515756b..b1c01f198f 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderMenu.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderMenu.java @@ -1,9 +1,16 @@ 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.View; +import android.view.WindowManager; import android.view.animation.Animation; import android.view.animation.AnimationUtils; +import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.SeekBar; @@ -17,6 +24,8 @@ import eu.kanade.mangafeed.R; import eu.kanade.mangafeed.data.database.models.Chapter; import eu.kanade.mangafeed.data.database.models.Manga; import eu.kanade.mangafeed.data.preference.PreferencesHelper; +import icepick.State; +import rx.subscriptions.CompositeSubscription; public class ReaderMenu { @@ -26,41 +35,58 @@ public class ReaderMenu { @Bind(R.id.current_page) TextView currentPage; @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_selector) ImageButton readerSelector; + private ReaderActivity activity; private PreferencesHelper preferences; - private boolean showing; + @State boolean showing; private DecimalFormat decimalFormat; + private CompositeSubscription subscriptions; + public ReaderMenu(ReaderActivity activity, PreferencesHelper preferences) { this.activity = activity; this.preferences = preferences; ButterKnife.bind(this, activity); + // Intercept all image events in this layout + bottomMenu.setOnTouchListener((v, event) -> true); + seekBar.setOnSeekBarChangeListener(new PageSeekBarChangeListener()); decimalFormat = new DecimalFormat("#.##"); + + subscriptions = new CompositeSubscription(); + initializeOptions(); + } + + public void destroy() { + subscriptions.unsubscribe(); } public void toggle() { if (showing) hide(); else - show(); + show(true); } - private void show() { + public void show(boolean animate) { menu.setVisibility(View.VISIBLE); - Animation toolbarAnimation = AnimationUtils.loadAnimation(activity, R.anim.enter_from_top); - toolbar.startAnimation(toolbarAnimation); + if (animate) { + Animation toolbarAnimation = AnimationUtils.loadAnimation(activity, R.anim.enter_from_top); + toolbar.startAnimation(toolbarAnimation); - Animation bottomMenuAnimation = AnimationUtils.loadAnimation(activity, R.anim.enter_from_bottom); - bottomMenu.startAnimation(bottomMenuAnimation); + Animation bottomMenuAnimation = AnimationUtils.loadAnimation(activity, R.anim.enter_from_bottom); + bottomMenu.startAnimation(bottomMenuAnimation); + } showing = true; } - private void hide() { + public void hide() { Animation toolbarAnimation = AnimationUtils.loadAnimation(activity, R.anim.exit_to_top); toolbarAnimation.setAnimationListener(new HideMenuAnimationListener()); toolbar.startAnimation(toolbarAnimation); @@ -77,9 +103,9 @@ public class ReaderMenu { activity.setToolbarTitle(manga.title); activity.setToolbarSubtitle(chapter.chapter_number != -1 ? - activity.getString(R.string.chapter_subtitle, - decimalFormat.format(chapter.chapter_number)) : - chapter.name); + activity.getString(R.string.chapter_subtitle, + decimalFormat.format(chapter.chapter_number)) : + chapter.name); } @@ -88,6 +114,73 @@ public class ReaderMenu { seekBar.setProgress(pageIndex); } + private void initializeOptions() { + // Orientation changes + lockOrientation.setOnClickListener(v -> + preferences.setOrientationLocked(!preferences.isOrientationLocked())); + + subscriptions.add(preferences.isOrientationLockedObservable() + .subscribe(this::onOrientationOptionChanged)); + + // 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.getPresenter().updateMangaViewer(which); + activity.recreate(); + } + d.dismiss(); + }) + .create(); + + // 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()); + }); + } + + 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 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; + } + activity.setRequestedOrientation(orientation); + } + class PageSeekBarChangeListener implements SeekBar.OnSeekBarChangeListener { @Override diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderPresenter.java b/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderPresenter.java index eea229add4..37e605d91e 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderPresenter.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderPresenter.java @@ -232,4 +232,13 @@ public class ReaderPresenter extends BasePresenter { loadChapter(previousChapter); } } + + public Manga getManga() { + return manga; + } + + public void updateMangaViewer(int viewer) { + manga.viewer = viewer; + db.insertManga(manga).executeAsBlocking(); + } } diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/base/BaseReader.java b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/base/BaseReader.java index 3a518a4d3c..070ff3cab7 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/base/BaseReader.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/base/BaseReader.java @@ -1,7 +1,7 @@ package eu.kanade.mangafeed.ui.reader.viewer.base; import android.view.MotionEvent; -import android.widget.FrameLayout; +import android.view.ViewGroup; import java.util.List; @@ -11,12 +11,12 @@ import eu.kanade.mangafeed.ui.reader.ReaderActivity; public abstract class BaseReader { protected ReaderActivity activity; - protected FrameLayout container; + protected ViewGroup container; protected int currentPosition; - public BaseReader(ReaderActivity activity, FrameLayout container) { + public BaseReader(ReaderActivity activity) { this.activity = activity; - this.container = container; + this.container = activity.getContainer(); } public void updatePageNumber() { diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/HorizontalReader.java b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/HorizontalReader.java index 5d76d5bd38..c79f923015 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/HorizontalReader.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/HorizontalReader.java @@ -1,7 +1,6 @@ package eu.kanade.mangafeed.ui.reader.viewer.horizontal; import android.view.MotionEvent; -import android.widget.FrameLayout; import java.util.List; @@ -19,8 +18,8 @@ public abstract class HorizontalReader extends BaseReader { protected ViewPagerReaderAdapter adapter; - public HorizontalReader(ReaderActivity activity, FrameLayout container) { - super(activity, container); + public HorizontalReader(ReaderActivity activity) { + super(activity); activity.getLayoutInflater().inflate(R.layout.reader_horizontal, container); ButterKnife.bind(this, container); diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/LeftToRightReader.java b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/LeftToRightReader.java index 18db8fb49b..0e5eaf2e30 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/LeftToRightReader.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/LeftToRightReader.java @@ -1,13 +1,11 @@ package eu.kanade.mangafeed.ui.reader.viewer.horizontal; -import android.widget.FrameLayout; - import eu.kanade.mangafeed.ui.reader.ReaderActivity; public class LeftToRightReader extends HorizontalReader { - public LeftToRightReader(ReaderActivity activity, FrameLayout container) { - super(activity, container); + public LeftToRightReader(ReaderActivity activity) { + super(activity); } @Override diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/RightToLeftReader.java b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/RightToLeftReader.java index 4cf4d0c4fb..e63d983aa9 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/RightToLeftReader.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/horizontal/RightToLeftReader.java @@ -1,7 +1,5 @@ package eu.kanade.mangafeed.ui.reader.viewer.horizontal; -import android.widget.FrameLayout; - import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -11,8 +9,8 @@ import eu.kanade.mangafeed.ui.reader.ReaderActivity; public class RightToLeftReader extends HorizontalReader { - public RightToLeftReader(ReaderActivity activity, FrameLayout container) { - super(activity, container); + public RightToLeftReader(ReaderActivity activity) { + super(activity); } @Override diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/vertical/VerticalReader.java b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/vertical/VerticalReader.java index 216c8199b8..29ec85876b 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/vertical/VerticalReader.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/vertical/VerticalReader.java @@ -2,7 +2,6 @@ package eu.kanade.mangafeed.ui.reader.viewer.vertical; import android.support.v4.view.ViewPager; import android.view.MotionEvent; -import android.widget.FrameLayout; import java.util.List; @@ -20,8 +19,8 @@ public class VerticalReader extends BaseReader { private ViewPagerReaderAdapter adapter; - public VerticalReader(ReaderActivity activity, FrameLayout container) { - super(activity, container); + public VerticalReader(ReaderActivity activity) { + super(activity); activity.getLayoutInflater().inflate(R.layout.reader_vertical, container); ButterKnife.bind(this, container); diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/webtoon/WebtoonReader.java b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/webtoon/WebtoonReader.java index 9329b6e0f1..a5d63bfc50 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/webtoon/WebtoonReader.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/webtoon/WebtoonReader.java @@ -3,7 +3,6 @@ package eu.kanade.mangafeed.ui.reader.viewer.webtoon; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.MotionEvent; -import android.widget.FrameLayout; import java.util.List; @@ -22,8 +21,8 @@ public class WebtoonReader extends BaseReader { private List pages; private Subscription subscription; - public WebtoonReader(ReaderActivity activity, FrameLayout container) { - super(activity, container); + public WebtoonReader(ReaderActivity activity) { + super(activity); recycler = new RecyclerView(activity); layoutManager = new LinearLayoutManager(activity); diff --git a/app/src/main/res/drawable-hdpi/ic_screen_lock_landscape.png b/app/src/main/res/drawable-hdpi/ic_screen_lock_landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..812ae6d5f1d7bab6f32737d63d5560f9b34ae511 GIT binary patch literal 370 zcmV-&0ge8NP)JjE1KOfd&o4FP5_jw8Yl{xR0Y22x{#-XT^K zr1qSjU;(5@kYF>bxXkpXmezb>f*Gq=&-C5Zt@+FeU^kfKn-Sq!8tY=m>I$#CZqbp% z%J{?=Zh!9^T-^ssa@YeagE)I;b}xtZS-Fd|HnYAQHejV0XRSZ$bc_`-VdasveLOLn zpdf)=;r-u@=na?dv6s|+Z|WX1shCkrv7E6*Dz0o>Wb(Px(D{)mH1&WMVs9}P&Aqj^$%qmvE4Br$H@}{u{4pjZXC*AjWHHkgp z3mcS<&t+QO8Yy$wJ5{=I)}!pr9M+*qHO}gkbz{ya{Wc+rnd5>KzOeoS0&R65LIcCdLOHrJ006S0AQ?3s?s!!Kx0ElAq^gE;K| zFsm(-YjbZ0i);>E`ZmW&zQUkviwt)J*p%e9)K*ChH+}jXA#1o9(i@o@7~5)(A71iD U8UvG6mjD0&07*qoM6N<$g038#CIA2c literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_screen_rotation.png b/app/src/main/res/drawable-hdpi/ic_screen_rotation.png new file mode 100644 index 0000000000000000000000000000000000000000..6e86113fb50ab62b839e8072d6b686129a716c39 GIT binary patch literal 807 zcmV+?1K9kDP)ubE5JVx=gV4zr5f2vCyQg}J>Nyf3ld>y;?>z-# z|3M@qri5LHL@PBAv&*;N&Y7Lvv%53<+i}-f5O?M``#HNivvYCaWIndx3s&$0(-_4d zE@3xHyqXSdjvbgmIDI4ZNIJ;}n&BEaFHPVanpTgsV^aM7Y6wi?fRE^``%#&(PW(|9 zyOYWRuh3?Tg((xagemp^0?Ia6K;6Qkfm^~cG@yc61zwLoPA+wk&h~0KkE)%u;JM<4 zqV1DUIR@@%UA-PG%c%SHcbA3IbJ618UJtS9_TAXfOCiN^!y@-ZkWnOeo@SV%cn}UP_U>YztAe>`XqelVHx~~rkaO@@ zyu8X5UV5??cjw@)$ar1o!|e01UUB*x8w=!SeQc+^$~}1nIW2JIJYf*# zmbu@8x+-gr1x>&9*1jh$D~nO%uhY`H6nIvwuRF5Zglam}jOhD)IQ zFGz2A!j%J;Ncq@$OpC&=*qj5Wp@MJYSsCzDdx?PiY2+^Jr~q>@lJY2doPi2|^|#92 zzD$c9Th2(;4>4zC=sYduY`7FEI-cEB+@Z`|HI0f-3x;HsU(_AKCC6!*ZsHhJe55Yn zk=j}q#uk}-lHTNufn!n0(}Ej{o1;lsgP^>m;|6$?ZUJA$f&$;GT@4+_r1V=8Z8R@Q zN;-}~nRj@~_>ju=iQTHP$R3Z?7GM+2x+aXAcQkT`o%E0rjduf~-L@nyH_U%vyKsTV l^bu+>bJPnz={7J;$A7QuBu%j^*hc^W002ovPDHLkV1mHdj8Fgo literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_view_carousel.png b/app/src/main/res/drawable-hdpi/ic_view_carousel.png new file mode 100644 index 0000000000000000000000000000000000000000..7b96543e79fcce7ae2936b9e407858f99d42b007 GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL0wmRZ7KH(+WKS2zkcwMxuW#f%V8G!L==PCA zuJNLT?(BzK3Nw5fRln>Mdv~?NJC=oq=Z)2}IwP*Iu9dgNd=m@Lx7~byB`D$!GaD3K yW0ijY%3QhisI84y>5VVX6(-M@;^A4tx{aZ)pG*A930EGVbqt=aelF{r5}E*`7c_zZ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldpi/ic_screen_lock_landscape.png b/app/src/main/res/drawable-ldpi/ic_screen_lock_landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..b9ca52da7dd15cac764bd7a865e050154d4f62d1 GIT binary patch literal 327 zcmV-N0l5B&P)b;@5JicAw3d)lktUtHKtyF|VuX~VC1=S2Qlw2qMdb#O1K7a_aAD{D=tq$Zj<7_* zN>ASTGy7Mb-R<=*a)e=D7g*4|9)q2fd9x}SOb4kHl6h$NcyU%w>tW92p=F*%S zsn$k?JPwQ~4D`zs2gEPvQ+QzhEX{`#oMZ%7H1Q5?4ew?xO}Q>cede(nTAEy%a$Sw) z)_+GK?PMc060Vug(6;bpw$hYqYxc3@kA3t@NX*h#AZ|PU|1RXNLHmU~!xI^w|IuF5 Z_y%mIjua*<4TAsx002ovPDHLkV1iBDkkJ4D literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldpi/ic_screen_lock_portrait.png b/app/src/main/res/drawable-ldpi/ic_screen_lock_portrait.png new file mode 100644 index 0000000000000000000000000000000000000000..5e8404f33cd0d809c2378c6f86b45f528bbf919d GIT binary patch literal 322 zcmV-I0lof-P)Ns>O8f=L0)^^GF4EXxRjU=YXg8Qeis0CQ*7vL{cd6^7wTiXT6SSj(O~ zp(c`R6y3lP{yq=pSi@TOd=t82UD~#7BGyU4o|w!@O(~%T_6<-2T?ll2->+kBFsCJi zrWSta82(NeGo~%1lM&FUI(wbV^${1t1Q~NlOawxS9WaTUJw@b@sWLWtbsrs-z0omP= UcT&kP(*OVf07*qoM6N<$g2-lv(EtDd literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldpi/ic_screen_rotation.png b/app/src/main/res/drawable-ldpi/ic_screen_rotation.png new file mode 100644 index 0000000000000000000000000000000000000000..56ebc2d244846c18141e553cef9f3c6ecdd6d52c GIT binary patch literal 498 zcmV1+T$%1a%eBqR@qI1i^LfmD*U+##IaL0{Q`0 zUV-+!az>_dbOsJ*&YAN)^M2?1ah!l>G#ag73)nXHjlE-cSPF|c^PXffxzz1;&xXU{ zOTXW5=JWX^{($%m8}Q!4KT_kWb{6E6!Zrh{_s#t^Oz$VHtjXi?#F)l($!d9mk z5;j(brLY(vSBf$UEGcDmiZ??lYe6j8hPJ+%^&R`YqU;;_ofo)o2Yu@~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldpi/ic_view_carousel.png b/app/src/main/res/drawable-ldpi/ic_view_carousel.png new file mode 100644 index 0000000000000000000000000000000000000000..6d911d023334cbe795d667caa6de9a7531338434 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rhecb+beAr-gYPPXMbOjJ;D6Q)jtst9C|fptM8vN z+uio@Z1SwM)m_I_6D9as1s0bVgh#cxN|$t`M%J>FMNVUVutc!H-Tmj8XRbR^nG*G8 zDn4kG-jQAK>|&tZ=1M^}Z4N39V52` pY{9&Flx|{HHh)Q-~ZbG4P?MNpiV}ZL5%;`|EC132N?x2$nQU;z!zdrEt1dyqCIs0 zNmnhzpavwN2BL!(O&1}9*#A%d|Nj5S|C4|$iVT|c|K@*>|DONv09h0n^d4voi1z*e zfii>s|2F{BCO{V11~L6l0*cH4$I&bxD-n|PNH-`6BfTV$XHWx%K@Fn@p((AwFsPb5 zgVg>%Kr!ate--i*BuSaJj#|YCh)HAiw{_0$=z`Eq;Rd$`nrRp{2t^V5|H=Q~|Nr=Z5|BlaL6iR9{O|GK^Zy+niz0*G1C0UE zzW+Z^X3+ot24LC*$RgVyrvFJm_6%?$oCRbhLUTOH1|?x+iv;ovYQT}dMh!wJs=+X* znmmKl{y#u5=H7pm(PD)922ri>A58UH9kr@#;u{e@)M?hNCe*9}8Rbi$p;ZfX4I|+e b8<`LQk*3NQo*AkW00000NkvXXu0mjfn+0`V literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_screen_rotation.png b/app/src/main/res/drawable-mdpi/ic_screen_rotation.png new file mode 100644 index 0000000000000000000000000000000000000000..4512bb19e04c7be4db86f4a5d36f5f2a287a084d GIT binary patch literal 578 zcmV-I0=@l-P)l+l3E^8A}`xb$#9*98;BSCN<6fGnOAp#fG7wBmQ5kv(- z8w=W$vCv)KI}aa)@EXXp|Yy+b*S{9M_nK z+dkw)7Il;{$)SK}MD0Od9Jg-yMnpqZ&}7#g_^lwBNui{pUNDRh&RPEr0%njGCv4an zl?OD`Du&qAg#^7g@Q6MmsFM*mlyXj^N<9Vmc#xJcr)JQgo^3tk#i@=lrxMiOL|6^^ z3>Y)Yg$rtbK#u~MF=o^l3x-)4vSQ4rJhh(5(7q*OOii)xG$>KRfJ^8N{sB)+oVuzBLJf&C* zTA*s9{pajbDn^3bv`&drf$JZXhLHm@%9`W4;YO5>Q6hVnI_k7C*r7O#0{L-EomCqY zm+8#40Q*vPtcz1Q#IT5SC<8{FwEZZuVV4-E?MskNu678*{kgPy%m*WxZnyVu@yjJAC2?o7U<32XAFbFXwYi Qk^lez07*qoM6N<$f{obwH~;_u literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_view_carousel.png b/app/src/main/res/drawable-mdpi/ic_view_carousel.png new file mode 100644 index 0000000000000000000000000000000000000000..5c6f94afd4ea0ceeaf7e1651ac07ca0c5ead9151 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K;i>HfYNX4z>ALkupPZ(rfaFD+8 zL0¸p9sIf=(9)IRIN3dhB4y;3f=%~BH-4A~a0l6Oko#@u!J;=;ojzSda+QY;L4 X3l*OIeP{UyXdZ*7tDnm{r-UW|wt*#R literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-tvdpi/ic_file_download.png b/app/src/main/res/drawable-tvdpi/ic_file_download.png deleted file mode 100644 index dd0db5bd971c389172efe626e145fa10b33adc07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiE{P)u8T5{H6c03^{?jug&tb?2%?2%<;Oa)U@bXp_y5uaJ8`HX&YX}nthIhG zkN~Ub$?aHaOz_%D+TQG&k*x&r5CReKc|@G&BIa1NU1Q=30wV~mD<*in<~8Ox{Zpct zh@|BQS-E@hiV5D1S3=r;8S%<9@jy7c=QSpzOSmHM`^`n)SRAe8OJ$qe$Cg}1CYX%E z7d&7);M)>Aav2%GLv;<;&nR31ZGBaHADiz-QQ7C%t#Wm$vJ}mnT^T} z^Wo);9vwK{Y7RjJ5kwF{1QFCDkc$8b_K=JMON8*wfrj{jR-|V32FO+9l(8`a3lu;* z#x^KX2Q6&SULAC>L6_nlkM`BM2)aMW#{_GW;0mnph6ioXBX(B*UyL+C{*m)xvPg)} zYI}RS5J-dGt3EG{{Z~EEx;i_jN51M5rvWPJlz(i~I>l*#%6PJlJl{BqAaRg~82QCf zIimmf8!1rSx_U>lpu827$%1YPf(Rmrpk9GGm#L#x&`cKO8d7%U?98NBdw#j9gNm+| zW0vZmxeW@{L4ghOkg9UNn?=vEEWAzR z=O(E!!mAp-bkL+Qa}Mo-;zH2gF6iFsf*^tjBIw~kwfj?tg`lxrkZVZ$8>2I}z1p*K zC5Rw`2;yD`K?IcqO6s;vzEB6vWS~GD(iR6gMp7N-le z1XnRizT^iklmBH&z*jWOj4M@60bX!l@)AV~Bw!F*&4NVEbQww_wY!r3k!vty3Y5%| zBi+S>@ctP}O@KtsEoo8k)}RW^O?#u!K1qXTm0c$4g2W%$7TaFwbcca9#Z1aG+M zao=1;_4h7(q_7#3}b;4NS~uax=vd++k;Z$sFR9F>>Vp_k&_Hcouf|bplxfc zATu0Q(kgP<$4Z|F$}`4MCH2JHO_GI*16?!7Q6tsRcJ&N2cP5iC$5A28r^`r`ftGQ> zsk!7)mUNqjwpr{9jTt{f@}x%EW-Y7iGCYPo3BCmeUM7>XBudB=MZ5SSZfa4`^mooFP(^a3ek6 zx^&di4_iHRaT6p*P68C9cSe7aggV_M7Y%=y=1S7wcx`cp&?$_jheuSCTYNjWj3(r}=8(iA3AOd_@V1xkc-8*zvX=pJ$vy(7FyGAW!i0s0S0B_^T=dc{Wo0000~)y?Kz6!GMGLz?=PB z?k?ci`rz>yhMna;so_j4An=9%OObb8Kyny+`q8X(wTXHTgI#K5wKRZlNP?Tk>X81zAt!KQNwjX2* zd_K!c`nk{hox3gXJhZcjzgNAE-!9)wKCwm6O#+>`l<1f;p`GvWQ(trUnP%?RLOE== zD_WPVNalW+xItvq1PM`Rxce!>m=OOJiZHzRhC> z?|ThrADt?j=k2oOu-Juwc`td3Cnau|=)P-U(c% z%OWn@9^cBB8>qG><7?L~BTwzk`odwG-sy(ETR69R5@+_--)}UF+uz<pBh8#pETVM7i?E0OU-IuWXU3=yVYYiJt&lyq?2fs(G$=C6oxzy`H%7Lc% zdXs`43-Rlm%05PCHoGRx(|zq-&1AM*Ywp_a^s5iTMXmEY+jCc}-f?(EN7~+!>yy9K zbD199bgw!*=S_TN>cahDIX9Nc^3HzdtMPi`#*5)sObTX)GJJj}?Rdy+^_-s#-;0xF gkX;3j$9FmQ%il{o<{nYE0wy5_Pgg&ebxsLQ0MD%s<^TWy literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_screen_lock_portrait.png b/app/src/main/res/drawable-xxhdpi/ic_screen_lock_portrait.png new file mode 100644 index 0000000000000000000000000000000000000000..e034998159f45883763fa66585ba1fff1740837e GIT binary patch literal 643 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz0wh)Q=esd5FnM{pIEGZ*dV9y#`>=xq`v;4w zerCTkk3?<=VPCz-qI>oOagEp|$tPl5WMpMTz8e47X3^QPLgB?Cza;BlQSk!*mYGgj zRk&kw`E>68&$roJSF^A3JZZbrqF~ZZnL`|#Wv3mJ==$(LJ1g$P+r#&j$&C#eu||*3tx_ z*E^0`-z#V}^-*EI)_ypCzLmrJw;Kd)T<@9KCEZAii06LIqU~s%yYTBRuGblShm60N zZ%-=}%)7f?)a+(TY3=QIW|@!64qZEJ_jkWhb7I<6zZ<0$d9F{-N$>QwPJG`hr#*3J zuiHDIaJY`^vuTHQ5?ch-wr_Tva!Ag7qVSF5iQB$BH#RqH*?B`$%PdDZnLWpSN8hGQ zW*zlVC8-YkH7cyLyX}3}S-cQ-lK^Uk5Ht1~>{Q>o_s8M1r3uC#+js7m9&vBt#>A`y zDS4+g{6060yr&-iCeONm{>K*Gl*kx$n1_L0-ym^7X!n^e?SGJ9*vvldhWJ#KZ&!^L zyCoiem5|w4`Lpb(Y|yI&KCzyIr;^;YxL&&*<#_$?G|XO&$mKJvLIxBY77 z_F46789y$bvU_)_q5PaPReF-C7af1dN9-+ClK-=LMa|W8#T^Hhr}Uq9bdpYNIl82l Z$=F!h@#b&;iNM6g;OXk;vd$@?2>{xt9!vlL literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_screen_rotation.png b/app/src/main/res/drawable-xxhdpi/ic_screen_rotation.png new file mode 100644 index 0000000000000000000000000000000000000000..c3dd5c628b614acf73f6d9cfe990e427b2681664 GIT binary patch literal 1599 zcmV-F2Eh4=P)bd=A=K+j;Tq5RiPdeTuY06(wwj6MqHT;Sf#l3^^BZU z7v=}10q4+xnz&(&_(eLcw=h014LF6B$i@e|5r1n=>H}BW7MP?%B7Q6|J&Thzh;=B5 z8s^U8q(MBd%!m@^&9b2#K?_c5OZsq6R4|n_h{J(sN6;WjCZkn6Z0XWk6on7dv6^r( z_88DMYgog%0o$~+tseJD7MPypl-SbpS;KiAj%#Q;3qLZ4!Lp^PEGJjs9S!YkToew> zn`J}Ovxf5$(T|hUH<-u|E6g&dUFvzn>qYlePCLAQYvHj>X@znv_A9YEIbr@;+_Z9h zrNnCCf|;?nX{DkYO4AVTOp5fP zJuDcDn>HJ#Nu2Yz&JGrw#Z6lx#n~^%iH^lh+a$$VY6|0H@zTmi298G4NnBzA<7M&E z=1Ear@eku?@zUsM*J;%IgN4K5q+NzS661A0u<%%%v}Z|#epDBNh0EfjyPxX#ziNDpleY4fT48|zYrNzy_qCby{*GHkvQG(EK4q(z-vyfL-3S4sU_<>K)o zL^^2?klK%`71Bz(nbcjUtCCLIR8sRjeI*@jZ^CKCqLbP3e{OOMnns$>amAF=yb4oI z^Da&?tx!-sts?of!a-9?^Aj|cG=D);NOPXC#%^nCTvwK*j+ViPq*~2|@~LI8o>aQw zLis{wu#8k$Wc*wEKAE%(7LW?<7MGD^&^E}hD@bvd)fF-sw7K%-zL!i<7p0cAU53$x zSJztJ*W#!3i#{2FwUXlH*0=09Xmn7%io$LoguTo(T8ea0_r!7~G`XgP{JvzU1j(k_AC!D6Te#0z% zx8*ZB+-P)|sA)RZHE#W}`=rgExx~_z`C*O0vN%C1uQWVdR5YKg{2ui4r24Pk8!Td? z`DW$Arbz2-n~e_}HqC%V$2>Zu-K@2VqCI88qOb;>Aq_WK96l_XAxj>mS}!%eEg>{x zmJF+wR+9CgJOMNdmO8E|2YK7-R5)o*+OSku76+s-i`i)VENGT2-AM2pvM$N#m(Grj zX3f$Makopsj#<7JB`7TbOApJ6?xK7;xyWfx1Yx;NO3YB!neH-v#0o|W$a0@;xl6OD zx-2qUV3yZ3QmYcY8BFF14|Z9 za1g63yGE=qCr=mu@iT#G&NAhy z{7KgMVNR|`o3vrqh89BR2vUkg*x}=9*%>8`FH{X45xjw<(6|Fm#O>nC+3oU_5+NmdKI;Vst016>TX8-^I literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_screen_lock_landscape.png b/app/src/main/res/drawable-xxxhdpi/ic_screen_lock_landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..af031ea404bcd444471b7a994ca5da63ff8b5e69 GIT binary patch literal 781 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ)^zFkSI*qP%X5x3c^MfhJ$BV=IF_*4@RE1<%+XCy@h@klgxB|0G61^WVMky@S{3rA0@|W{> zZcme3eCM-m`t^HvJndhe+57#>nX?+szl4|?7??N|z=RNl0%yYQd9yWm zm`_RB?A*0jkk>bEfox=dtbD+^3n!k+UHp`{AXG5uByWhDdRMLa1w*UAIXfDqUbqxK zWs@?0cWRRH!S_%%Em&x|J~y;v*)@$&yKINzD%s6!UqXK7FzUWex}!B;b-|_FRW)S| z(|-S2{n}$|Bdh;GtqU>dPkwddp7rDBPg~nd*6~x%b6r@y?su>@^L@L}+o4Z4Gn(8t zEn0hITg9_gpKdbTdiUkiwVTgsYo?xO3s`#jbkpXukAG;*=UuS*+zHc%ImPkQ3q$Rs z9oF8jm8p!b?OqMk@=I8L?^?U1RXWg+^I|hu%qzRf^4rE)Ru^V1b7nvFGJDbPd8Vn( zY_mL1eD2QBidpbAFZ3a5x*%pm&(nOB){Yh&TYVxE-d%v_Emwa*#j7 z8s*LUqH>4BFR#(ZK2i+m%uXS+=aqNmq}+#^SyWFU2W@*|5f|bbFqrR5kqRfZO^7AM3c;q`V2skh>vVaH|CNKpeCPIaPY!#671^ct| YYEBC*{6nNC0+Ts|r>mdKI;Vst0BN5@1^@s6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_screen_lock_portrait.png b/app/src/main/res/drawable-xxxhdpi/ic_screen_lock_portrait.png new file mode 100644 index 0000000000000000000000000000000000000000..66a80b999284af03858d1b37b7be3dfd3ae5aa9b GIT binary patch literal 807 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 AHvj+t literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_view_carousel.png b/app/src/main/res/drawable-xxxhdpi/ic_view_carousel.png new file mode 100644 index 0000000000000000000000000000000000000000..ab4206ceb6ea57075f37df7674abdcb8280647f5 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q1xWh(YZ(Kn`<^b2Ar-gY-Z{w2puoZ6_$xn3 z`$E531K(|inM`_a8RAS14GfG-EF1y~5E97c6i@&QZqa!Sm4c{QVSV9bv1o(dLng3# zxJJquwJa%%xS_U!oZ`?>#b_&n$7w7cAXiVh#j;11$DHrYIVYf389ZJ6T-G@yGywn) C^fbNz literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/reader_menu.xml b/app/src/main/res/layout/reader_menu.xml index 5af00e95ec..e0165a401c 100644 --- a/app/src/main/res/layout/reader_menu.xml +++ b/app/src/main/res/layout/reader_menu.xml @@ -1,9 +1,11 @@ + android:visibility="gone" + tools:visibility="visible"> @@ -12,32 +14,79 @@ android:layout_height="wrap_content" android:id="@+id/reader_menu_bottom" android:background="@color/reader_menu_background" + android:orientation="vertical" android:layout_alignParentBottom="true"> - - - + + + + + + + - + + + + + android:gravity="center_horizontal" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp"> + + + + + + + diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 81aa3dc977..0f2d6ae76c 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -14,10 +14,17 @@ 4 + + @string/default_viewer + @string/left_to_right_viewer + @string/right_to_left_viewer + @string/vertical_viewer + @string/webtoon_viewer + + 1 2 3 - \ No newline at end of file diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 85c3f0bd72..d8b8d0899b 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -4,6 +4,7 @@ pref_category_accounts_key pref_category_downloads_key pref_hide_status_bar_key + pref_lock_orientation_key pref_default_viewer_key pref_download_directory_key pref_download_threads_key diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 705a439857..971322f2f7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -29,6 +29,7 @@ Hide status bar Default viewer + Default Left to right Right to left Vertical @@ -82,5 +83,6 @@ Update completed No new chapters found Found new chapters for: + Lock orientation diff --git a/app/src/main/res/xml/pref_reader.xml b/app/src/main/res/xml/pref_reader.xml index b8029dc892..cf3ae6c087 100644 --- a/app/src/main/res/xml/pref_reader.xml +++ b/app/src/main/res/xml/pref_reader.xml @@ -5,6 +5,10 @@ android:key="@string/pref_hide_status_bar_key" android:defaultValue="true" /> + +