diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/AdvanceSettingsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/AdvanceSettingsScene.java new file mode 100644 index 000000000..c44e13803 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/AdvanceSettingsScene.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 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 + * 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; + +import android.content.res.Resources; +import android.os.Bundle; + +import com.hippo.ehviewer.BuildConfig; +import com.hippo.ehviewer.Constants; +import com.hippo.ehviewer.R; +import com.hippo.scene.preference.Preference; +import com.hippo.scene.preference.PreferenceCategory; +import com.hippo.scene.preference.PreferenceScene; +import com.hippo.scene.preference.PreferenceSet; +import com.hippo.scene.preference.SwitchPreference; +import com.hippo.util.Messenger; + +public class AdvanceSettingsScene extends PreferenceScene implements Preference.OnValueChangeListener { + + private static final String KEY_SHOW_APPLICATION_STATS = "show_application_stats"; + private static final boolean DEFAULT_SHOW_APPLICATION_STATS = BuildConfig.DEBUG; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setTitle(R.string.settings); + setIcon(R.drawable.ic_arrow_left_dark); + + setPreferenceSet(getPreferenceSet()); + } + + @Override + public void onIconClick() { + finish(); + } + + private PreferenceSet[] getPreferenceSet() { + Resources resources = getStageActivity().getResources(); + + SwitchPreference statsPreference = new SwitchPreference(KEY_SHOW_APPLICATION_STATS, + resources.getString(R.string.settings_show_application_stats_title), + resources.getString(R.string.settings_show_application_stats_summary)); + statsPreference.setDefaultValue(DEFAULT_SHOW_APPLICATION_STATS); + statsPreference.setOnValueChangeListener(this); + + PreferenceSet preferenceSet = new PreferenceSet(); + preferenceSet.setPreferenceCategory( + new PreferenceCategory(resources.getString(R.string.settings_advance))); + + preferenceSet.setPreferenceList(new Preference[] { + statsPreference + }); + + return new PreferenceSet[] { + preferenceSet + }; + } + + @Override + public boolean OnValueChange(Preference preference, Object newValue) { + String key = preference.getKey(); + switch (key) { + case KEY_SHOW_APPLICATION_STATS: + Messenger.getInstance().notify(Constants.MESSENGER_ID_SHOW_APP_STATUS, newValue); + return true; + default: + return true; + } + } +} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DisplaySettingsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/DisplaySettingsScene.java index 657284949..8a6c4e1c4 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DisplaySettingsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DisplaySettingsScene.java @@ -19,12 +19,10 @@ import android.content.res.Resources; import android.os.Bundle; import com.hippo.ehviewer.R; -import com.hippo.scene.preference.DialogPreference; import com.hippo.scene.preference.Preference; import com.hippo.scene.preference.PreferenceCategory; import com.hippo.scene.preference.PreferenceScene; import com.hippo.scene.preference.PreferenceSet; -import com.hippo.scene.preference.SwitchPreference; public class DisplaySettingsScene extends PreferenceScene { @@ -42,18 +40,9 @@ public class DisplaySettingsScene extends PreferenceScene { Resources resources = getStageActivity().getResources(); PreferenceSet preferenceSet = new PreferenceSet(); - preferenceSet.setPreferenceCategory(new PreferenceCategory("Display")); + preferenceSet.setPreferenceCategory(new PreferenceCategory(resources.getString(R.string.settings_display))); Preference[] preferences = new Preference[] { - new SwitchPreference("custom_theme_color", "屏幕方向", "速度速度速度速度加快"), - new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"), - new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"), - new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"), - new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"), - new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"), - new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地"), - new DialogPreference("sssss", "ssssssssss", "sssssssssss"), - new Preference("fdfdfdf", "哈哈哈", "恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地恩雅咋地") }; preferenceSet.setPreferenceList(preferences); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/EHSettingsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/EHSettingsScene.java new file mode 100644 index 000000000..d861cc2c3 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/EHSettingsScene.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 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 + * 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; + +import android.content.res.Resources; +import android.os.Bundle; + +import com.hippo.ehviewer.BuildConfig; +import com.hippo.ehviewer.Constants; +import com.hippo.ehviewer.R; +import com.hippo.ehviewer.client.EhClient; +import com.hippo.scene.preference.ListPreference; +import com.hippo.scene.preference.Preference; +import com.hippo.scene.preference.PreferenceCategory; +import com.hippo.scene.preference.PreferenceScene; +import com.hippo.scene.preference.PreferenceSet; +import com.hippo.util.Messenger; + +public final class EHSettingsScene extends PreferenceScene implements Preference.OnValueChangeListener { + + private static final String KEY_EH_SOURCE = "eh_source"; + private static final int DEFAULT_EH_SOURCE = BuildConfig.DEBUG ? + EhClient.SOURCE_EX : EhClient.SOURCE_G; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setTitle(R.string.settings); + setIcon(R.drawable.ic_arrow_left_dark); + + setPreferenceSet(getPreferenceSet()); + } + + @Override + public void onIconClick() { + finish(); + } + + private PreferenceSet[] getPreferenceSet() { + Resources resources = getStageActivity().getResources(); + + ListPreference sourcePreference = new ListPreference(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.setDefaultValue(DEFAULT_EH_SOURCE); + sourcePreference.setOnValueChangeListener(this); + + PreferenceSet preferenceSet = new PreferenceSet(); + preferenceSet.setPreferenceCategory(new PreferenceCategory(resources.getString(R.string.settings_eh))); + + preferenceSet.setPreferenceList(new Preference[] { + sourcePreference + }); + + return new PreferenceSet[] { + preferenceSet + }; + } + + @Override + public boolean OnValueChange(Preference preference, Object newValue) { + String key = preference.getKey(); + switch (key) { + case KEY_EH_SOURCE: + Messenger.getInstance().notify(Constants.MESSENGER_ID_EH_SOURCE, newValue); + return true; + default: + return true; + } + } +} 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 a91d26a1e..8a86f488a 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 @@ -34,20 +34,31 @@ public final class MainSettingsScene extends PreferenceHeaderScene { Resources resources = getStageActivity().getResources(); PreferenceHeader[] phs = new PreferenceHeader[] { - new PreferenceHeader( - resources.getDrawable(R.drawable.ic_cellphone_android_theme_primary), - resources.getString(R.string.display), - DisplaySettingsScene.class - ), - new PreferenceHeader( - resources.getDrawable(R.drawable.ic_eh_theme_primary), - resources.getString(R.string.eh), - null - ) + newPreferenceHeader( + R.drawable.ic_cellphone_android_theme_primary, + R.string.settings_display, + DisplaySettingsScene.class), + newPreferenceHeader( + R.drawable.ic_eh_theme_primary, + R.string.settings_eh, + EHSettingsScene.class), + newPreferenceHeader( + R.drawable.ic_lambda_theme_primary, + R.string.settings_advance, + AdvanceSettingsScene.class) }; setPreferenceHeaders(phs); } + private PreferenceHeader newPreferenceHeader(int drawableId, int titleId, Class clazz) { + Resources resources = getStageActivity().getResources(); + return new PreferenceHeader( + resources.getDrawable(drawableId), + resources.getString(titleId), + clazz + ); + } + @Override public void onIconClick() { finish(); diff --git a/app/src/main/java/com/hippo/ehviewer/util/Config.java b/app/src/main/java/com/hippo/ehviewer/util/Config.java index c3baaf8b8..7339d3e0e 100644 --- a/app/src/main/java/com/hippo/ehviewer/util/Config.java +++ b/app/src/main/java/com/hippo/ehviewer/util/Config.java @@ -20,9 +20,7 @@ import android.content.SharedPreferences; import android.preference.PreferenceManager; import com.hippo.ehviewer.BuildConfig; -import com.hippo.ehviewer.Constants; import com.hippo.ehviewer.client.EhClient; -import com.hippo.util.Messenger; public final class Config { @@ -104,7 +102,6 @@ public final class Config { value = DEFAULT_EH_SOURCE; } putInt(KEY_EH_SOURCE, value); - Messenger.getInstance().notify(Constants.MESSENGER_ID_EH_SOURCE, value); } public static boolean getSignIn() { diff --git a/app/src/main/java/com/hippo/scene/SimpleDialog.java b/app/src/main/java/com/hippo/scene/SimpleDialog.java index e80ebe6b7..6fa906ebd 100644 --- a/app/src/main/java/com/hippo/scene/SimpleDialog.java +++ b/app/src/main/java/com/hippo/scene/SimpleDialog.java @@ -254,9 +254,9 @@ public class SimpleDialog extends SceneDialog implements View.OnClickListener, } } - public int getSelectItemPosition() { + public int getCheckedItemPosition() { // TODO check mListView isShown - return mListView.getSelectedItemPosition(); + return mListView.getCheckedItemPosition(); } @Override diff --git a/app/src/main/java/com/hippo/scene/preference/DialogPreference.java b/app/src/main/java/com/hippo/scene/preference/DialogPreference.java deleted file mode 100644 index f4804f008..000000000 --- a/app/src/main/java/com/hippo/scene/preference/DialogPreference.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.hippo.scene.preference; - -import android.support.v7.widget.RecyclerView; - -import com.hippo.ehviewer.util.Config; -import com.hippo.scene.SimpleDialog; - -// TODO show current value as summary -public class DialogPreference extends Preference { - - private CharSequence[] mKeys; - private int[] mValues; - - private int mDefaultValue; - - public DialogPreference(String key, String title, String summary) { - super(key, title, summary); - } - - public void setKeys(CharSequence[] keys) { - mKeys = keys; - } - - public void setValues(int[] values) { - mValues = values; - } - - public void setDefaultValue(int defaultValue) { - mDefaultValue = defaultValue; - } - - @Override - public boolean onClick(RecyclerView.ViewHolder viewHolder, int x, int y) { - if (!super.onClick(viewHolder, x, y)) { - new SimpleDialog.Builder(viewHolder.itemView.getContext()) - .setTitle(getTitle()) - .setSingleChoiceItems(mKeys, Config.getInt(getKey(), mDefaultValue), null) - .setStartPoint(x, y) - .setOnCloseListener(new SimpleDialog.OnCloseListener() { - @Override - public void onClose(SimpleDialog dialog, boolean cancel) { - if (!cancel) { - int position = dialog.getSelectItemPosition(); - if (position >= 0 && position < mValues.length) { - Config.putInt(getKey(), mValues[position]); - // TODO Update summary - } - } - } - }).show(); - } - return true; - } -} diff --git a/app/src/main/java/com/hippo/scene/preference/ListPreference.java b/app/src/main/java/com/hippo/scene/preference/ListPreference.java new file mode 100644 index 000000000..6eb78b011 --- /dev/null +++ b/app/src/main/java/com/hippo/scene/preference/ListPreference.java @@ -0,0 +1,88 @@ +package com.hippo.scene.preference; + +import android.annotation.NonNull; +import android.support.v7.widget.RecyclerView; + +import com.hippo.ehviewer.util.Config; +import com.hippo.scene.SimpleDialog; + +// TODO show current value as summary +public class ListPreference extends Preference { + + private String[] mKeys; + private int[] mValues; + + private int mDefaultValue; + + public ListPreference(String key, String title, String summary) { + super(key, title, summary); + } + + public void setKeys(String[] keys) { + mKeys = keys; + } + + public void setValues(int[] values) { + mValues = values; + } + + public void setDefaultValue(int defaultValue) { + mDefaultValue = defaultValue; + } + + @Override + public String getDisplaySummary() { + int position = getValuePosition(); + if (position >= 0 && position < mKeys.length) { + return mKeys[getValuePosition()]; + } else { + return null; + } + } + + private int getValuePosition() { + return getValuePosition(Config.getInt(getKey(), mDefaultValue)); + } + + private int getValuePosition(int value) { + int length = mValues.length; + for (int i = 0; i < length; i++) { + if (value == mValues[i]) { + return i; + } + } + return -1; + } + + @Override + protected void storeValue(Object newValue) { + Config.putInt(getKey(), (Integer) newValue); + } + + @Override + protected void onUpdateViewByNewValue(@NonNull RecyclerView.ViewHolder viewHolder, Object newValue) { + updateSummary(viewHolder); + } + + @Override + public boolean onClick(RecyclerView.ViewHolder viewHolder, int x, int y) { + if (!super.onClick(viewHolder, x, y)) { + new SimpleDialog.Builder(viewHolder.itemView.getContext()) + .setTitle(getTitle()) + .setSingleChoiceItems(mKeys, getValuePosition(), null) + .setStartPoint(x, y) + .setOnCloseListener(new SimpleDialog.OnCloseListener() { + @Override + public void onClose(SimpleDialog dialog, boolean cancel) { + if (!cancel) { + int position = dialog.getCheckedItemPosition(); + if (position >= 0 && position < mValues.length) { + setValue(mValues[position]); + } + } + } + }).show(); + } + return true; + } +} 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 710e5e39c..692d94bf9 100644 --- a/app/src/main/java/com/hippo/scene/preference/Preference.java +++ b/app/src/main/java/com/hippo/scene/preference/Preference.java @@ -15,9 +15,11 @@ package com.hippo.scene.preference; +import android.annotation.NonNull; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -27,23 +29,32 @@ public class Preference extends PreferenceBase { private int mPosition; - private String mKey; + private @NonNull String mKey; private String mTitle; private String mSummary; private OnClickListener mOnClickListener; + private OnValueChangeListener mOnValueChangeListener; private ViewHolderGetter mViewHolderGetter; - public Preference(String key, String title, String summary) { + public Preference(@NonNull String key, String title, String summary) { mKey = key; mTitle = title; mSummary = summary; } - public String getKey() { + public @NonNull String getKey() { return mKey; } + public String getTitle() { + return mTitle; + } + + public String getSummary() { + return mSummary; + } + public int getPosition() { return mPosition; } @@ -52,6 +63,38 @@ public class Preference extends PreferenceBase { mPosition = position; } + /** + * @return the text display below title + */ + public String getDisplaySummary() { + return mSummary; + } + + /** + * Call it when you want to save new value + */ + public void setValue(Object newValue) { + if (mOnValueChangeListener == null || mOnValueChangeListener.OnValueChange(this, newValue)) { + storeValue(newValue); + RecyclerView.ViewHolder viewHolder = getViewHolder(); + if (viewHolder != null) { + onUpdateViewByNewValue(viewHolder, newValue); + } + } + } + + /** + * Save value to file + */ + protected void storeValue(Object newValue) { + } + + /** + * Update view because value change + */ + protected void onUpdateViewByNewValue(@NonNull RecyclerView.ViewHolder viewHolder, Object newValue) { + } + @Override int getItemViewType() { return PreferenceCenter.TYPE_PEFERENCE; @@ -65,7 +108,9 @@ public class Preference extends PreferenceBase { void bindViewHolder(Context context, RecyclerView.ViewHolder viewHolder) { PreferenceHolder pvh = (PreferenceHolder) viewHolder; pvh.title.setText(mTitle); - pvh.summary.setText(mSummary); + + updateSummary(viewHolder); + if (!stableWidgetFrame() || !pvh.hasSetWidgetFrame) { pvh.widgetFrame.removeAllViews(); onBind(context, pvh.widgetFrame); @@ -81,6 +126,22 @@ public class Preference extends PreferenceBase { protected void onUpdateView(RecyclerView.ViewHolder viewHolder) { } + protected void updateSummary(RecyclerView.ViewHolder viewHolder) { + if (viewHolder == null) { + viewHolder = getViewHolder(); + } + if (viewHolder != null) { + PreferenceHolder pvh = (PreferenceHolder) viewHolder; + String displaySummary = getDisplaySummary(); + if (displaySummary == null) { + pvh.summary.setVisibility(View.GONE); + } else { + pvh.summary.setVisibility(View.VISIBLE); + pvh.summary.setText(displaySummary); + } + } + } + @Override public boolean onClick(RecyclerView.ViewHolder viewHolder, int x, int y) { return mOnClickListener != null && mOnClickListener.onClick(); @@ -90,23 +151,7 @@ public class Preference extends PreferenceBase { return false; } - public String getSummary() { - return mSummary; - } - - public void setSummary(String summary) { - mSummary = summary; - } - - public String getTitle() { - return mTitle; - } - - public void setTitle(String title) { - mTitle = title; - } - - public RecyclerView.ViewHolder getViewHolder() { + private RecyclerView.ViewHolder getViewHolder() { if (mViewHolderGetter != null) { return mViewHolderGetter.getViewHolder(mPosition); } else { @@ -118,7 +163,11 @@ public class Preference extends PreferenceBase { mOnClickListener = listener; } - public void setViewHolderGetter(ViewHolderGetter viewHolderGetter) { + public void setOnValueChangeListener(OnValueChangeListener listener) { + mOnValueChangeListener = listener; + } + + void setViewHolderGetter(ViewHolderGetter viewHolderGetter) { mViewHolderGetter = viewHolderGetter; } @@ -126,7 +175,11 @@ public class Preference extends PreferenceBase { boolean onClick(); } - public interface ViewHolderGetter { + public interface OnValueChangeListener { + boolean OnValueChange(Preference preference, Object newValue); + } + + interface ViewHolderGetter { RecyclerView.ViewHolder getViewHolder(int position); } } diff --git a/app/src/main/java/com/hippo/scene/preference/PreferenceCenter.java b/app/src/main/java/com/hippo/scene/preference/PreferenceCenter.java index 232aa6be7..9204d8496 100644 --- a/app/src/main/java/com/hippo/scene/preference/PreferenceCenter.java +++ b/app/src/main/java/com/hippo/scene/preference/PreferenceCenter.java @@ -38,7 +38,7 @@ public final class PreferenceCenter { register(TYPE_PEFERENCE_CATEGORY, PreferenceCategory.class); register(TYPE_PEFERENCE, Preference.class); register(TYPE_SWITCH_PEFERENCE, SwitchPreference.class); - register(TYPE_DIALOG_PEFERENCE, DialogPreference.class); + register(TYPE_DIALOG_PEFERENCE, ListPreference.class); } @SuppressWarnings("unchecked") diff --git a/app/src/main/java/com/hippo/scene/preference/PreferenceDivider.java b/app/src/main/java/com/hippo/scene/preference/PreferenceDivider.java index 791f16e30..f2ec8b032 100644 --- a/app/src/main/java/com/hippo/scene/preference/PreferenceDivider.java +++ b/app/src/main/java/com/hippo/scene/preference/PreferenceDivider.java @@ -36,7 +36,7 @@ public class PreferenceDivider extends PreferenceBase { } @Override - void bindViewHolde(Context context, RecyclerView.ViewHolder viewHolder) { + void bindViewHolder(Context context, RecyclerView.ViewHolder viewHolder) { // Empty } } diff --git a/app/src/main/java/com/hippo/scene/preference/PreferenceScene.java b/app/src/main/java/com/hippo/scene/preference/PreferenceScene.java index 6e6da16c1..4f1a31426 100644 --- a/app/src/main/java/com/hippo/scene/preference/PreferenceScene.java +++ b/app/src/main/java/com/hippo/scene/preference/PreferenceScene.java @@ -89,6 +89,7 @@ public class PreferenceScene extends AppbarScene { } Preference p = ps.getPreferenceData(i); p.setPosition(position); + p.setViewHolderGetter(mPreferenceViewHolderGetter); preferenceBaseList.add(p); position++; } 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 60a51d241..ef9774ac3 100644 --- a/app/src/main/java/com/hippo/scene/preference/SwitchPreference.java +++ b/app/src/main/java/com/hippo/scene/preference/SwitchPreference.java @@ -15,6 +15,7 @@ package com.hippo.scene.preference; +import android.annotation.NonNull; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SwitchCompat; @@ -26,16 +27,55 @@ import com.hippo.ehviewer.util.Config; public class SwitchPreference extends Preference { + private String mSummaryOn; + private String mSummaryOff; + private boolean mDefaultValue; public SwitchPreference(String key, String title, String summary) { super(key, title, summary); } + public void setSummaryOn(String summaryOn) { + mSummaryOn = summaryOn; + } + + public void setSummaryOff(String summaryOff) { + mSummaryOff = summaryOff; + } + public void setDefaultValue(boolean defaultValue) { mDefaultValue = defaultValue; } + @Override + public String getDisplaySummary() { + String displaySummary = getValue() ? mSummaryOn : mSummaryOff; + if (displaySummary == null) { + displaySummary = getSummary(); + } + return displaySummary; + } + + private boolean getValue() { + return Config.getBoolean(getKey(), mDefaultValue); + } + + private SwitchCompat getSwitch(RecyclerView.ViewHolder viewHolder) { + return (SwitchCompat) ((PreferenceHolder) viewHolder).widgetFrame.getChildAt(0); + } + + @Override + protected void storeValue(Object newValue) { + Config.putBoolean(getKey(), (Boolean) newValue); + } + + @Override + protected void onUpdateViewByNewValue(@NonNull RecyclerView.ViewHolder viewHolder, Object newValue) { + getSwitch(viewHolder).setChecked((Boolean) newValue); + updateSummary(viewHolder); + } + @Override int getItemViewType() { return PreferenceCenter.TYPE_SWITCH_PEFERENCE; @@ -49,18 +89,13 @@ public class SwitchPreference extends Preference { @Override protected void onUpdateView(RecyclerView.ViewHolder viewHolder) { - PreferenceHolder pvh = (PreferenceHolder) viewHolder; - ((SwitchCompat) pvh.widgetFrame.getChildAt(0)) - .setChecked(Config.getBoolean(getKey(), mDefaultValue)); + getSwitch(viewHolder).setChecked(getValue()); } @Override public boolean onClick(RecyclerView.ViewHolder viewHolder, int x, int y) { if (!super.onClick(viewHolder, x, y)) { - PreferenceHolder pvh = (PreferenceHolder) viewHolder; - SwitchCompat switchCompat = (SwitchCompat) pvh.widgetFrame.getChildAt(0); - switchCompat.toggle(); - Config.putBoolean(getKey(), switchCompat.isChecked()); + setValue(!getValue()); } return true; } diff --git a/app/src/main/res/drawable/ic_lambda_theme_primary.xml b/app/src/main/res/drawable/ic_lambda_theme_primary.xml new file mode 100644 index 000000000..c0d0aeb1a --- /dev/null +++ b/app/src/main/res/drawable/ic_lambda_theme_primary.xml @@ -0,0 +1,39 @@ + + + + + + + diff --git a/app/src/main/res/layout/widget_frame_switch_preference.xml b/app/src/main/res/layout/widget_frame_switch_preference.xml index c182d6634..57a488465 100644 --- a/app/src/main/res/layout/widget_frame_switch_preference.xml +++ b/app/src/main/res/layout/widget_frame_switch_preference.xml @@ -15,5 +15,8 @@ --> + android:layout_height="wrap_content" + android:paddingLeft="16dp" + tools:ignore="RtlHardcoded,RtlSymmetry"/> diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f28872064..6296f26e7 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -92,6 +92,4 @@ 用户名 密码 - 显示 - diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 3067d2ed6..66aaee58e 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -22,4 +22,16 @@ @string/star_5 + + @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/pathdata.xml b/app/src/main/res/values/pathdata.xml index 6c0abc6b4..2d678da6a 100644 --- a/app/src/main/res/values/pathdata.xml +++ b/app/src/main/res/values/pathdata.xml @@ -33,5 +33,6 @@ M11,5h-8v14h8v-2h-6v-4h6v-2h-6v-4h6V5M13,5h2v6h4V5h2v14h-2v-6h-4v6h-2V5z M3 10v-5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v5l-6 2l-6 -4l-6 2M3 14v5a2 2 0 0 0 2 2h14a2 2 0 0 0 2 -2v-5l-6 2l-6 -4l-6 2z M10,2A2,2 0 0,1 12,4V8.5C12,8.5 14,8.25 14,9.25C14,9.25 16,9 16,10C16,10 18,9.75 18,10.75C18,10.75 20,10.5 20,11.5V15C20,16 17,21 17,22H9C9,22 7,15 4,13C4,13 3,7 8,12V4A2,2 0 0,1 10,2Z + M7.7,3c1.1,0,1.9,0.2,2.5,0.5c0.6,0.3,1,0.8,1.3,1.5l6.3,12.6c0.2,0.3,0.4,0.6,0.6,0.8c0.2,0.2,0.5,0.3,0.9,0.3c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0l0.1,2.2c-0.2,0-0.4,0.1-0.6,0.1c-0.2,0-0.5,0-0.8,0c-0.5,0-1,0-1.4-0.1c-0.4-0.1-0.8-0.2-1.1-0.4c-0.3-0.2-0.6-0.4-0.9-0.8c-0.3-0.3-0.5-0.7-0.7-1.2l-2.9-6l-3.7,8.3H4L9.7,8.7L8.4,6.3C8.2,5.9,8,5.7,7.7,5.5S7.1,5.3,6.6,5.3c-0.1,0-0.2,0-0.4,0s-0.3,0-0.4,0l0-2.1c0.1,0,0.2,0,0.4-0.1c0.2,0,0.3,0,0.5-0.1c0.2,0,0.3,0,0.5,0C7.4,3,7.6,3,7.7,3z diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 84ae04239..d27f5717c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -89,6 +89,19 @@ Weird Network available ? + + Display + + EH + EH source + g.e-hentai.org + exhentai.org + lofi.e-hentai.org + + Advance + Show application stats + Show application stats at the top-right corner of the screen + \"What ?\" \"I lose my panda …\" @@ -112,7 +125,4 @@ Username Password - Display - EH -