From cd852f40033e4e0086f93d7b25e74b75739b0258 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 10 Aug 2015 16:16:53 +0800 Subject: [PATCH] Update --- .../java/com/hippo/ehviewer/Constants.java | 2 + .../com/hippo/ehviewer/gallery/ui/GLView.java | 1 - .../ehviewer/gallery/ui/GalleryLayout.java | 8 +- .../ehviewer/gallery/ui/GalleryPanel.java | 109 +++++++++++++----- .../ehviewer/gallery/ui/GalleryView.java | 44 ++++++- .../ehviewer/gallery/util/GalleryUtils.java | 1 - .../hippo/ehviewer/ui/GalleryActivity.java | 44 +++++-- .../ehviewer/ui/scene/MainSettingsScene.java | 11 +- ...sScene.java => AdvancedSettingsScene.java} | 2 +- .../ui/scene/preference/EHSettingsScene.java | 2 +- .../preference/ReadingSettingsScene.java | 88 ++++++++++++++ .../com/hippo/ehviewer/util/Settings.java | 23 ++++ .../hippo/scene/preference/Preference.java | 17 +++ .../scene/preference/SwitchPreference.java | 5 +- app/src/main/res/color/primary_text_dark.xml | 20 ++++ app/src/main/res/color/primary_text_light.xml | 20 ++++ .../main/res/color/secondary_text_dark.xml | 20 ++++ .../main/res/color/secondary_text_light.xml | 20 ++++ .../ic_book_open_theme_accent_x24.xml | 40 +++++++ app/src/main/res/values/arrays.xml | 14 ++- app/src/main/res/values/colors.xml | 12 +- app/src/main/res/values/pathdata.xml | 1 + app/src/main/res/values/strings.xml | 12 +- yorozuya | 2 +- 24 files changed, 456 insertions(+), 62 deletions(-) rename app/src/main/java/com/hippo/ehviewer/ui/scene/preference/{AdvanceSettingsScene.java => AdvancedSettingsScene.java} (98%) create mode 100644 app/src/main/java/com/hippo/ehviewer/ui/scene/preference/ReadingSettingsScene.java create mode 100644 app/src/main/res/color/primary_text_dark.xml create mode 100644 app/src/main/res/color/primary_text_light.xml create mode 100644 app/src/main/res/color/secondary_text_dark.xml create mode 100644 app/src/main/res/color/secondary_text_light.xml create mode 100644 app/src/main/res/drawable/ic_book_open_theme_accent_x24.xml diff --git a/app/src/main/java/com/hippo/ehviewer/Constants.java b/app/src/main/java/com/hippo/ehviewer/Constants.java index f71fcb45b..ab99b010d 100644 --- a/app/src/main/java/com/hippo/ehviewer/Constants.java +++ b/app/src/main/java/com/hippo/ehviewer/Constants.java @@ -20,6 +20,7 @@ import com.hippo.yorozuya.Messenger; public final class Constants { + public static final int MESSENGER_ID_READING_DIRECTION; public static final int MESSENGER_ID_EH_SOURCE; public static final int MESSENGER_ID_SHOW_APP_STATUS; public static final int MESSENGER_ID_SIGN_IN_OR_OUT; @@ -30,6 +31,7 @@ public final class Constants { static { Messenger messenger = Messenger.getInstance(); + MESSENGER_ID_READING_DIRECTION = messenger.newId(); MESSENGER_ID_EH_SOURCE = messenger.newId(); MESSENGER_ID_SHOW_APP_STATUS = messenger.newId(); MESSENGER_ID_SIGN_IN_OR_OUT = messenger.newId(); diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/ui/GLView.java b/app/src/main/java/com/hippo/ehviewer/gallery/ui/GLView.java index cccc4a266..f4442c280 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/ui/GLView.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/ui/GLView.java @@ -714,7 +714,6 @@ public class GLView implements TouchOwner { public void setMinimumWidth(int minWidth) { mMinWidth = minWidth; requestLayout(); - } protected void setMeasuredSize(int width, int height) { diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryLayout.java b/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryLayout.java index 09ef119c8..0da1b8bbd 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryLayout.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryLayout.java @@ -55,12 +55,11 @@ public class GalleryLayout extends FrameLayout implements GalleryView.ActionList @Override public void onTapCenter() { mGalleryPanel.setShown(true, true); - mActionListener.onShowGalleryPanel(); } @Override public void onSetMode(GalleryView.Mode mode) { - mGalleryPanel.setRange(1, mGalleryView.getPages()); + mGalleryPanel.setGalleryViewMode(mode, mGalleryView.getPages()); } @Override @@ -77,6 +76,11 @@ public class GalleryLayout extends FrameLayout implements GalleryView.ActionList } } + @Override + public void onShow() { + mActionListener.onShowGalleryPanel(); + } + @Override public void onHide() { mActionListener.onHideGalleryPanel(); diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryPanel.java b/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryPanel.java index 5313b9c39..5b83c6fab 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryPanel.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryPanel.java @@ -19,6 +19,7 @@ package com.hippo.ehviewer.gallery.ui; import android.content.Context; import android.os.Bundle; import android.os.Parcelable; +import android.util.Log; import android.view.MotionEvent; import com.hippo.ehviewer.R; @@ -30,7 +31,8 @@ import com.hippo.util.AnimationUtils; import com.hippo.widget.FitPaddingImpl; import com.hippo.yorozuya.LayoutUtils; -public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSetProgressListener { +public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSetProgressListener, + GLView.OnClickListener { private static final String KEY_SHOWN = "shown_key"; @@ -42,13 +44,14 @@ public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSet private XmlResourceView mShare; private LinearLayout mBottomView; - private TextView mProgressTextView; - private TextView mPagesTextView; + private TextView mLeftTextView; + private TextView mRightTextView; private Slider mSlider; private float mShowPercent = 0.0f; - private int mEnd = 0; + private GalleryView.Mode mGalleryViewMode = GalleryView.Mode.NONE; + private int mPages = 0; private ActionListener mListener; @@ -77,12 +80,15 @@ public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSet mScreenRotation = new XmlResourceView(); XmlResourceTexture screenRotationTexture = new XmlResourceTexture(context, R.drawable.ic_screen_rotation_dark_x48); mScreenRotation.setTexture(screenRotationTexture); + mScreenRotation.setOnClickListener(this); mRefresh = new XmlResourceView(); XmlResourceTexture refreshTexture = new XmlResourceTexture(context, R.drawable.ic_refresh_dark_x48); mRefresh.setTexture(refreshTexture); + mRefresh.setOnClickListener(this); mShare = new XmlResourceView(); XmlResourceTexture shareTexture = new XmlResourceTexture(context, R.drawable.ic_share_dark_x48); mShare.setTexture(shareTexture); + mShare.setOnClickListener(this); int actionSize = LayoutUtils.dp2pix(context, 48); lp = new LinearLayout.LayoutParams( @@ -100,10 +106,10 @@ public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSet mBottomView.setBackgroundColor(background); mBottomView.setPaddingLeft(LayoutUtils.dp2pix(context, 8)); mBottomView.setPaddingRight(LayoutUtils.dp2pix(context, 8)); - mProgressTextView = new TextView(sTextTexture); - mProgressTextView.setGravity(Gravity.CENTER); - mPagesTextView = new TextView(sTextTexture); - mPagesTextView.setGravity(Gravity.CENTER); + mLeftTextView = new TextView(sTextTexture); + mLeftTextView.setGravity(Gravity.CENTER); + mRightTextView = new TextView(sTextTexture); + mRightTextView.setGravity(Gravity.CENTER); mSlider = new Slider(context); mSlider.setPaddings(LayoutUtils.dp2pix(context, 8), LayoutUtils.dp2pix(context, 18), LayoutUtils.dp2pix(context, 8), LayoutUtils.dp2pix(context, 18)); @@ -113,7 +119,7 @@ public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSet lp = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.gravity = Gravity.CENTER_VERTICAL; - mBottomView.addComponent(mProgressTextView, lp); + mBottomView.addComponent(mLeftTextView, lp); lp = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); lp.gravity = Gravity.CENTER_VERTICAL; @@ -122,7 +128,7 @@ public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSet lp = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.gravity = Gravity.CENTER_VERTICAL; - mBottomView.addComponent(mPagesTextView, lp); + mBottomView.addComponent(mRightTextView, lp); addComponent(mRightView, new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); @@ -140,7 +146,15 @@ public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSet }; } + public boolean isShown() { + return mShown; + } + public void setShown(boolean shown, boolean animation) { + if (shown && mGalleryViewMode == GalleryView.Mode.NONE) { + return; + } + if (mShown != shown) { mShown = shown; @@ -150,7 +164,9 @@ public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSet mAnimation.forceReset(); invalidate(); - if (!shown) { + if (shown) { + mListener.onShow(); + } else { mListener.onHide(); } } @@ -174,32 +190,48 @@ public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSet @Override protected void onLayout( boolean changeSize, int left, int top, int right, int bottom) { - if (changeSize) { - int width = getWidth(); - int height = getHeight(); - int l = width - (int) (mRightView.getMeasuredWidth() * mShowPercent); - mRightView.layout(l, height / 2 - mRightView.getMeasuredHeight() / 2, - l + mRightView.getMeasuredWidth(), height / 2 + mRightView.getMeasuredHeight() / 2); + int width = getWidth(); + int height = getHeight(); - int t = height - (int) (mBottomView.getMeasuredHeight() * mShowPercent); - mBottomView.layout(0, t, width, t + mBottomView.getMeasuredHeight()); - } + int l = width - (int) (mRightView.getMeasuredWidth() * mShowPercent); + mRightView.layout(l, height / 2 - mRightView.getMeasuredHeight() / 2, + l + mRightView.getMeasuredWidth(), height / 2 + mRightView.getMeasuredHeight() / 2); + + int t = height - (int) (mBottomView.getMeasuredHeight() * mShowPercent); + mBottomView.layout(0, t, width, t + mBottomView.getMeasuredHeight()); } - public void setRange(int start, int end) { - mSlider.setRange(start, end); - mEnd = end; + public void setGalleryViewMode(GalleryView.Mode galleryViewMode, int pages) { + mGalleryViewMode = galleryViewMode; + mPages = pages; - String pages = Integer.toString(end); - mProgressTextView.setMinimumWidth((int) (sTextTexture.getMaxWidth() * pages.length())); - mPagesTextView.setMinimumWidth((int) (sTextTexture.getMaxWidth() * pages.length())); - mPagesTextView.setText(pages); + mSlider.setRange(1, pages); + + String pagesStr = Integer.toString(pages); + int maxWidth = (int) (sTextTexture.getMaxWidth() * pagesStr.length()); + mLeftTextView.setMinimumWidth(maxWidth); + mRightTextView.setMinimumWidth(maxWidth); + + if (galleryViewMode == GalleryView.Mode.RIGHT_TO_LEFT) { + mSlider.setReverse(true); + mLeftTextView.setText(pagesStr); + mRightTextView.setText(Integer.toString(mSlider.getProgress())); + } else { + mSlider.setReverse(false); + mRightTextView.setText(pagesStr); + mLeftTextView.setText(Integer.toString(mSlider.getProgress())); + } } public void setProgress(int progress) { mSlider.setProgress(progress); - mProgressTextView.setText(Integer.toString(progress)); + + if (mGalleryViewMode == GalleryView.Mode.RIGHT_TO_LEFT) { + mRightTextView.setText(Integer.toString(mSlider.getProgress())); + } else { + mLeftTextView.setText(Integer.toString(mSlider.getProgress())); + } } @Override @@ -212,7 +244,24 @@ public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSet @Override public void onSetProgress(int newProgress, int oldProgress, boolean byUser) { mListener.onSetProgress(newProgress, oldProgress, byUser); - mProgressTextView.setText(Integer.toString(newProgress)); + + if (mGalleryViewMode == GalleryView.Mode.RIGHT_TO_LEFT) { + mRightTextView.setText(Integer.toString(mSlider.getProgress())); + } else { + mLeftTextView.setText(Integer.toString(mSlider.getProgress())); + } + } + + @Override + public boolean onClick(GLView v) { + if (v == mScreenRotation) { + Log.d("TAG", "mScreenRotation"); + } else if (v == mRefresh) { + Log.d("TAG", "mRefresh"); + } else if (v == mShare) { + Log.d("TAG", "mShare"); + } + return true; } @Override @@ -240,6 +289,8 @@ public class GalleryPanel extends GLView implements FitPaddingImpl, Slider.OnSet public interface ActionListener { void onSetProgress(int newProgress, int oldProgress, boolean byUser); + void onShow(); + void onHide(); } } diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryView.java b/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryView.java index f4f23284d..8402d7bca 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryView.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/ui/GalleryView.java @@ -7,17 +7,19 @@ import android.view.MotionEvent; import android.view.animation.Interpolator; import android.view.animation.OvershootInterpolator; +import com.hippo.ehviewer.Constants; import com.hippo.ehviewer.gallery.anim.Animation; import com.hippo.ehviewer.gallery.glrenderer.GLCanvas; import com.hippo.ehviewer.gallery.util.GalleryUtils; import com.hippo.yorozuya.IntArray; import com.hippo.yorozuya.MathUtils; +import com.hippo.yorozuya.Messenger; import java.util.ArrayList; import java.util.List; import java.util.Stack; -public class GalleryView extends GLView implements GestureRecognizer.Listener { +public class GalleryView extends GLView implements GestureRecognizer.Listener, Messenger.Receiver { private static final String TAG = GalleryView.class.getSimpleName(); @@ -95,10 +97,29 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener { private ActionListener mListener; public enum Mode { - NONE, // Just a progress view - LEFT_TO_RIGHT, - RIGHT_TO_LEFT, - TOP_TO_BOTTOM + NONE (-1), // Just a progress view + LEFT_TO_RIGHT (0), + RIGHT_TO_LEFT (1), + TOP_TO_BOTTOM (2); + + Mode(int ni) { + nativeInt = ni; + } + final int nativeInt; + } + + public static Mode intToMode(int value) { + switch (value) { + case -1: + return Mode.NONE; + case 0: + return Mode.LEFT_TO_RIGHT; + default: + case 1: + return Mode.RIGHT_TO_LEFT; + case 2: + return Mode.TOP_TO_BOTTOM; + } } public enum Scale { @@ -127,6 +148,19 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener { mSmoothScaler = new SmoothScaler(); mSmoothScaler.setInterpolator(SMOOTH_SCALER_INTERPOLATOR); mRecycler = new Recycler(); + + Messenger.getInstance().register(Constants.MESSENGER_ID_READING_DIRECTION, this); + } + + public void onClose() { + Messenger.getInstance().unregister(Constants.MESSENGER_ID_READING_DIRECTION, this); + } + + @Override + public void onReceive(int id, Object obj) { + if (Constants.MESSENGER_ID_READING_DIRECTION == id) { + setMode(intToMode((Integer) obj)); + } } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/util/GalleryUtils.java b/app/src/main/java/com/hippo/ehviewer/gallery/util/GalleryUtils.java index 8bee1cef7..ceca93b85 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/util/GalleryUtils.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/util/GalleryUtils.java @@ -41,7 +41,6 @@ public class GalleryUtils { // works most of the time, but that's ok because it's for debugging only. private static volatile Thread sCurrentThread; - private static volatile boolean sWarned; public static void setRenderThread() { sCurrentThread = Thread.currentThread(); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 1697b072b..3bb559db0 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -48,6 +48,7 @@ import com.hippo.ehviewer.gallery.ui.GalleryLayout; import com.hippo.ehviewer.gallery.ui.GalleryPageView; import com.hippo.ehviewer.gallery.ui.GalleryPanel; import com.hippo.ehviewer.gallery.ui.GalleryView; +import com.hippo.ehviewer.util.Settings; import com.hippo.util.SystemUiHelper; import com.hippo.yorozuya.PriorityThreadFactory; import com.hippo.yorozuya.SimpleHandler; @@ -72,6 +73,7 @@ public class GalleryActivity extends StatsActivity implements TiledTexture.OnFre public static final SparseArray sCloseGalleryProviderTaskMap = new SparseArray<>(); private SystemUiHelper mSystemUiHelper; + private boolean mSystemUiShowing = false; private Resources mResources; @@ -151,12 +153,15 @@ public class GalleryActivity extends StatsActivity implements TiledTexture.OnFre return; } - mSystemUiHelper = new SystemUiHelper(this, SystemUiHelper.LEVEL_IMMERSIVE, + mSystemUiHelper = new SystemUiHelper(this, + Settings.getReadingHideNavBar() ? SystemUiHelper.LEVEL_IMMERSIVE : SystemUiHelper.LEVEL_HIDE_STATUS_BAR, SystemUiHelper.FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES | SystemUiHelper.FLAG_IMMERSIVE_STICKY); if (savedInstanceState == null || !savedInstanceState.getBoolean(KEY_SHOWING, false)) { mSystemUiHelper.hide(); + mSystemUiShowing = false; } else { mSystemUiHelper.show(); + mSystemUiShowing = true; } mResources = getResources(); @@ -202,7 +207,7 @@ public class GalleryActivity extends StatsActivity implements TiledTexture.OnFre if (mSize <= 0) { setMode(GalleryView.Mode.NONE); } else { - setMode(GalleryView.Mode.LEFT_TO_RIGHT); + setMode(GalleryView.intToMode(Settings.getReadingDirection())); } mGalleryProvider.addGalleryProviderListener(this); @@ -226,7 +231,7 @@ public class GalleryActivity extends StatsActivity implements TiledTexture.OnFre protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(KEY_HASH_CODE, hashCode()); - outState.putBoolean(KEY_SHOWING, mSystemUiHelper.isShowing()); + outState.putBoolean(KEY_SHOWING, mSystemUiShowing); } @Override @@ -261,17 +266,30 @@ public class GalleryActivity extends StatsActivity implements TiledTexture.OnFre clearTiledTextureInPage((GalleryPageView) view); } } + + mGalleryView.onClose(); } } @Override - protected void onResume() { - super.onResume(); + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); - if (mSystemUiHelper.isShowing()) { - mSystemUiHelper.show(); + if (hasFocus) { + if (mSystemUiShowing) { + mSystemUiHelper.show(); + } else { + mSystemUiHelper.hide(); + } + } + } + + @Override + public void onBackPressed() { + if (mGalleryPanel.isShown()) { + mGalleryPanel.setShown(false, true); } else { - mSystemUiHelper.hide(); + super.onBackPressed(); } } @@ -302,7 +320,7 @@ public class GalleryActivity extends StatsActivity implements TiledTexture.OnFre public void onGetSize(int size) { if (mSize != size) { mSize = size; - setMode(GalleryView.Mode.LEFT_TO_RIGHT); + setMode(GalleryView.intToMode(Settings.getReadingDirection())); } } @@ -449,11 +467,17 @@ public class GalleryActivity extends StatsActivity implements TiledTexture.OnFre @Override public void onShowGalleryPanel() { mSystemUiHelper.show(); + mSystemUiShowing = true; } @Override public void onHideGalleryPanel() { - mSystemUiHelper.hide(); + if (Settings.getReadingHideNavBar()) { + mSystemUiHelper.delayHide(3000); + } else { + mSystemUiHelper.hide(); + } + mSystemUiShowing = false; } class GalleryAdapter extends GalleryView.Adapter { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/MainSettingsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/MainSettingsScene.java index 03c27b6a5..319a9ed20 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/MainSettingsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/MainSettingsScene.java @@ -21,10 +21,11 @@ import android.support.v4.content.ContextCompat; import com.hippo.ehviewer.R; import com.hippo.ehviewer.ui.ContentActivity; -import com.hippo.ehviewer.ui.scene.preference.AdvanceSettingsScene; +import com.hippo.ehviewer.ui.scene.preference.AdvancedSettingsScene; import com.hippo.ehviewer.ui.scene.preference.DisplaySettingsScene; import com.hippo.ehviewer.ui.scene.preference.DownloadSettingsScene; import com.hippo.ehviewer.ui.scene.preference.EHSettingsScene; +import com.hippo.ehviewer.ui.scene.preference.ReadingSettingsScene; import com.hippo.scene.preference.PreferenceHeader; import com.hippo.scene.preference.PreferenceHeaderScene; @@ -48,6 +49,10 @@ public final class MainSettingsScene extends PreferenceHeaderScene { R.drawable.ic_cellphone_android_theme_accent, R.string.settings_display, DisplaySettingsScene.class), + newPreferenceHeader( + R.drawable.ic_book_open_theme_accent_x24, + R.string.settings_reading, + ReadingSettingsScene.class), newPreferenceHeader( R.drawable.ic_eh_theme_accent, R.string.settings_eh, @@ -58,8 +63,8 @@ public final class MainSettingsScene extends PreferenceHeaderScene { DownloadSettingsScene.class), newPreferenceHeader( R.drawable.ic_black_mesa_theme_accent, - R.string.settings_advance, - AdvanceSettingsScene.class) + R.string.settings_advanced, + AdvancedSettingsScene.class) }; } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/AdvanceSettingsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/AdvancedSettingsScene.java similarity index 98% rename from app/src/main/java/com/hippo/ehviewer/ui/scene/preference/AdvanceSettingsScene.java rename to app/src/main/java/com/hippo/ehviewer/ui/scene/preference/AdvancedSettingsScene.java index e3d32bc53..9d4fec28b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/AdvanceSettingsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/AdvancedSettingsScene.java @@ -30,7 +30,7 @@ import com.hippo.scene.preference.SwitchPreference; import com.hippo.yorozuya.FileUtils; import com.hippo.yorozuya.Messenger; -public class AdvanceSettingsScene extends PreferenceScene implements +public class AdvancedSettingsScene extends PreferenceScene implements Preference.OnValueChangeListener, Preference.OnClickListener { private static final String KEY_SHOW_APPLICATION_STATS = "show_application_stats"; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/EHSettingsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/EHSettingsScene.java index fd829e92b..e8c1babcf 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/EHSettingsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/EHSettingsScene.java @@ -56,7 +56,7 @@ public final class EHSettingsScene extends PreferenceScene implements Preference ListPreference sourcePreference = new ListPreference(this, Settings.KEY_EH_SOURCE, resources.getString(R.string.settings_eh_source_title), null); sourcePreference.setKeys(resources.getStringArray(R.array.settings_eh_source_entries)); - sourcePreference.setValues(resources.getIntArray(R.array.settings_eh_source_entry_values)); + sourcePreference.setValues(resources.getIntArray(R.array.settings_eh_source_values)); sourcePreference.setDefaultValue(Settings.DEFAULT_EH_SOURCE); sourcePreference.setOnValueChangeListener(this); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/ReadingSettingsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/ReadingSettingsScene.java new file mode 100644 index 000000000..0a5d2868b --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/preference/ReadingSettingsScene.java @@ -0,0 +1,88 @@ +/* + * Copyright 2015 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.ehviewer.ui.scene.preference; + +import android.content.res.Resources; +import android.os.Build; + +import com.hippo.ehviewer.Constants; +import com.hippo.ehviewer.R; +import com.hippo.ehviewer.util.Settings; +import com.hippo.scene.preference.ListPreference; +import com.hippo.scene.preference.Preference; +import com.hippo.scene.preference.PreferenceScene; +import com.hippo.scene.preference.PreferenceSet; +import com.hippo.scene.preference.SwitchPreference; +import com.hippo.yorozuya.Messenger; + +public class ReadingSettingsScene extends PreferenceScene implements ListPreference.OnValueChangeListener { + + @Override + protected void onCreate(boolean rebirth) { + super.onCreate(rebirth); + + setTitle(R.string.settings_reading); + setIcon(R.drawable.ic_arrow_left_dark); + + setPreferenceSet(getPreferenceSet()); + } + + private PreferenceSet[] getPreferenceSet() { + Resources resources = getStageActivity().getResources(); + + // Reading direction + ListPreference directionPreference = new ListPreference(this, Settings.KEY_READING_DIRECTION, + resources.getString(R.string.settings_reading_direction_title), null); + directionPreference.setKeys(resources.getStringArray(R.array.settings_reading_direction_entries)); + directionPreference.setValues(resources.getIntArray(R.array.settings_reading_direction_values)); + directionPreference.setDefaultValue(Settings.DEFAULT_READING_DIRECTION); + directionPreference.setOnValueChangeListener(this); + + // Hide nav bar + SwitchPreference hideNavbarPreference = new SwitchPreference(Settings.KEY_READING_HIDE_NAV_BAR, + resources.getString(R.string.settings_reading_hide_nav_bar_title), + resources.getString(R.string.settings_reading_hide_nav_bar_summary)); + hideNavbarPreference.setSummaryOn(resources.getString(R.string.settings_reading_hide_nav_bar_summary_on)); + hideNavbarPreference.setSummaryOff(resources.getString(R.string.settings_reading_hide_nav_bar_summary_off)); + hideNavbarPreference.setDefaultValue(Settings.getReadingHideNavBar()); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + hideNavbarPreference.setEnable(false); + } + + PreferenceSet preferenceSet = new PreferenceSet(); + preferenceSet.setPreferenceList(new Preference[] { + directionPreference, + hideNavbarPreference + }); + + return new PreferenceSet[] { + preferenceSet + }; + } + + @Override + public boolean OnValueChange(Preference preference, Object newValue) { + String key = preference.getKey(); + switch (key) { + case Settings.KEY_READING_DIRECTION: + Messenger.getInstance().notify(Constants.MESSENGER_ID_READING_DIRECTION, newValue); + return true; + default: + return true; + } + } +} diff --git a/app/src/main/java/com/hippo/ehviewer/util/Settings.java b/app/src/main/java/com/hippo/ehviewer/util/Settings.java index 6cf01e1b3..8fa1c2132 100644 --- a/app/src/main/java/com/hippo/ehviewer/util/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/util/Settings.java @@ -136,6 +136,29 @@ public final class Settings { } } + /****** Reading ******/ + public static final String KEY_READING_DIRECTION = "reading_direction"; + public static final int DEFAULT_READING_DIRECTION = 1; + public static final String KEY_READING_HIDE_NAV_BAR = "reading_hide_nav_bar"; + public static final boolean DEFAULT_READING_HIDE_NAV_BAR = true; + + public static void putReadingDirection(int value) { + putInt(KEY_READING_DIRECTION, value); + } + + public static int getReadingDirection() { + return getInt(KEY_READING_DIRECTION, DEFAULT_READING_DIRECTION); + } + + public static void putReadingHideNavBar(boolean value) { + putBoolean(KEY_READING_HIDE_NAV_BAR, value); + } + + public static boolean getReadingHideNavBar() { + return getBoolean(KEY_READING_HIDE_NAV_BAR, DEFAULT_READING_HIDE_NAV_BAR); + } + + /****** EH ******/ public static final String KEY_EH_SOURCE = "eh_source"; public static final int DEFAULT_EH_SOURCE = EhUrl.SOURCE_G; diff --git a/app/src/main/java/com/hippo/scene/preference/Preference.java b/app/src/main/java/com/hippo/scene/preference/Preference.java index 8e04bc278..970198243 100644 --- a/app/src/main/java/com/hippo/scene/preference/Preference.java +++ b/app/src/main/java/com/hippo/scene/preference/Preference.java @@ -25,6 +25,7 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import com.hippo.ehviewer.R; +import com.hippo.yorozuya.ViewUtils; // TODO Need a better way to update it public class Preference extends PreferenceBase { @@ -35,6 +36,8 @@ public class Preference extends PreferenceBase { private String mTitle; private String mSummary; + private boolean mEnable = true; + private OnClickListener mOnClickListener; private OnValueChangeListener mOnValueChangeListener; private ViewHolderGetter mViewHolderGetter; @@ -70,6 +73,18 @@ public class Preference extends PreferenceBase { mPosition = position; } + public boolean getEnable() { + return mEnable; + } + + public void setEnable(boolean enable) { + mEnable = enable; + RecyclerView.ViewHolder viewHolder = getViewHolder(); + if (viewHolder != null) { + ViewUtils.setEnabledRecursively(viewHolder.itemView, mEnable); + } + } + /** * @return the text display below title */ @@ -125,6 +140,8 @@ public class Preference extends PreferenceBase { } onUpdateView(viewHolder); + + ViewUtils.setEnabledRecursively(pvh.itemView, mEnable); } protected void onBind(Context context, FrameLayout widgetFrame) { diff --git a/app/src/main/java/com/hippo/scene/preference/SwitchPreference.java b/app/src/main/java/com/hippo/scene/preference/SwitchPreference.java index 127939699..e0ed4ded5 100644 --- a/app/src/main/java/com/hippo/scene/preference/SwitchPreference.java +++ b/app/src/main/java/com/hippo/scene/preference/SwitchPreference.java @@ -52,8 +52,9 @@ public class SwitchPreference extends Preference { @Override public String getDisplaySummary() { String displaySummary = getValue() ? mSummaryOn : mSummaryOff; - if (displaySummary == null) { - displaySummary = getSummary(); + String summary = getSummary(); + if (displaySummary == null || (!getEnable() && summary != null)) { + displaySummary = summary; } return displaySummary; } diff --git a/app/src/main/res/color/primary_text_dark.xml b/app/src/main/res/color/primary_text_dark.xml new file mode 100644 index 000000000..24b01289e --- /dev/null +++ b/app/src/main/res/color/primary_text_dark.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/color/primary_text_light.xml b/app/src/main/res/color/primary_text_light.xml new file mode 100644 index 000000000..afb633556 --- /dev/null +++ b/app/src/main/res/color/primary_text_light.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/color/secondary_text_dark.xml b/app/src/main/res/color/secondary_text_dark.xml new file mode 100644 index 000000000..96d0224d5 --- /dev/null +++ b/app/src/main/res/color/secondary_text_dark.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/color/secondary_text_light.xml b/app/src/main/res/color/secondary_text_light.xml new file mode 100644 index 000000000..643b9f19b --- /dev/null +++ b/app/src/main/res/color/secondary_text_light.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_book_open_theme_accent_x24.xml b/app/src/main/res/drawable/ic_book_open_theme_accent_x24.xml new file mode 100644 index 000000000..51782ba1b --- /dev/null +++ b/app/src/main/res/drawable/ic_book_open_theme_accent_x24.xml @@ -0,0 +1,40 @@ + + + + + + + diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 3675d61ea..ac058643c 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -22,13 +22,25 @@ @string/star_5 + + @string/settings_reading_direction_left_to_right + @string/settings_reading_direction_right_to_left + @string/settings_reading_direction_top_to_bottom + + + + 0 + 1 + 2 + + @string/settings_eh_source_g @string/settings_eh_source_ex @string/settings_eh_source_lofi - + 0 1 2 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 5fdb99f01..ffa072ec6 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -67,10 +67,14 @@ #ff303f9f - #de000000 - #8a000000 - #deffffff - #61ffffff + #de000000 + #4dffffff + #8a000000 + #36ffffff + #deffffff + #39000000 + #61ffffff + #24000000 #ff303030 diff --git a/app/src/main/res/values/pathdata.xml b/app/src/main/res/values/pathdata.xml index 0fcfb16df..3c842e94c 100644 --- a/app/src/main/res/values/pathdata.xml +++ b/app/src/main/res/values/pathdata.xml @@ -46,5 +46,6 @@ M8.3,20c-2.8-1.3-4.6-4-5-7.2H2C2.4,18,6.8,22,12,22h0.5l-3.3-3.1 M14.4,19.7L4.4,9.7l5.4-5.3l10,10.1 M10.5,3.5C10,3,9.3,3,8.8,3.5L3.4,8.8c-0.5,0.5-0.5,1.3,0,1.8l10,10.1c0.5,0.5,1.3,0.5,1.8,0l5.4-5.3c0.5-0.5,0.5-1.3,0-1.8L10.5,3.5M15.8,4.1c2.8,1.3,4.6,4,5,7.2H22C21.6,6,17.3,2,12,2h-0.5l3.3,3.1L15.8,4.1z M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z M11.6,7v7.1c0,1-0.3,1.8-0.9,2.4c-0.6,0.6-1.5,1-2.5,1.1l-0.4,0c-1.1,0-2.1-0.3-2.7-0.9c-0.7-0.6-1-1.5-1-2.6V7h1.4v7.1c0,0.8,0.2,1.3,0.6,1.8c0.4,0.4,1,0.6,1.8,0.6c0.8,0,1.4-0.2,1.8-0.6c0.4-0.4,0.6-1,0.6-1.8V7H11.6M17.3,10.9c-0.2,0-0.4-0.1-0.7-0.1c-0.9,0-1.5,0.4-1.8,1.1v5.5h-1.3V9.7h1.3l0,0.9c0.4-0.7,1.1-1,1.9-1c0.3,0,0.5,0,0.6,0.1V10.9M20,17.5h-1.3V6.4H20V17.5z + M11,19V9A2,2 0 0,0 9,7H5V17H9A2,2 0 0,1 11,19M13,9V19A2,2 0 0,1 15,17H19V7H15A2,2 0 0,0 13,9M21,19H15A2,2 0 0,0 13,21H11A2,2 0 0,0 9,19H3V5H9A2,2 0 0,1 11,7H13A2,2 0 0,1 15,5H21V19Z diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b4955cef6..9d136a6e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -137,6 +137,16 @@ Display + Reading + Reading direction + Left to right + Right to left + Top to bottom + Hide nav bar + Only work for Android 4.4 and above + Immersive full-screen mode + Do not hide nav bar + EH EH source g.e-hentai.org @@ -155,7 +165,7 @@ Image download location Archive download location - Advance + Advanced Show application stats Show application stats at the top-right corner of the screen Clear image memory cache diff --git a/yorozuya b/yorozuya index 78bcf1c6b..86de3b869 160000 --- a/yorozuya +++ b/yorozuya @@ -1 +1 @@ -Subproject commit 78bcf1c6b7c545d4880a5382c59e6a89272619c9 +Subproject commit 86de3b869d7ed0d0fe4fa35b34476e74fe83a095