From 0274d73aa97c3a89b0802190da0848a3d40c9ef5 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Sat, 3 May 2014 21:55:54 +0100 Subject: [PATCH] PreferenceSet refactoring --- .../preferences/PreferenceActivity.java | 48 ++++++++++++------- ...LPreferenceSet.java => PreferenceSet.java} | 16 +++++-- 2 files changed, 45 insertions(+), 19 deletions(-) rename src/org/geometerplus/android/fbreader/preferences/{ZLPreferenceSet.java => PreferenceSet.java} (74%) diff --git a/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java b/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java index 3d780716a..c5610b388 100644 --- a/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java +++ b/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java @@ -183,7 +183,12 @@ public class PreferenceActivity extends ZLPreferenceActivity { if (DeviceType.Instance().isEInk()) { final EInkOptions einkOptions = new EInkOptions(); final Screen einkScreen = createPreferenceScreen("eink"); - final ZLPreferenceSet einkPreferences = new ZLPreferenceSet(); + final PreferenceSet einkPreferences = new PreferenceSet.Enabler() { + @Override + protected Boolean detectState() { + return einkOptions.EnableFastRefresh.getValue(); + } + }; einkScreen.addPreference(new ZLBooleanPreference( this, einkOptions.EnableFastRefresh, einkScreen.Resource, "enableFastRefresh" @@ -191,7 +196,7 @@ public class PreferenceActivity extends ZLPreferenceActivity { @Override protected void onClick() { super.onClick(); - einkPreferences.setEnabled(einkOptions.EnableFastRefresh.getValue()); + einkPreferences.update(); } }); @@ -201,7 +206,7 @@ public class PreferenceActivity extends ZLPreferenceActivity { einkScreen.addPreference(updateIntervalPreference); einkPreferences.add(updateIntervalPreference); - einkPreferences.setEnabled(einkOptions.EnableFastRefresh.getValue()); + einkPreferences.update(); } final Screen textScreen = createPreferenceScreen("text"); @@ -357,8 +362,18 @@ public class PreferenceActivity extends ZLPreferenceActivity { } } - final ZLPreferenceSet footerPreferences = new ZLPreferenceSet(); - final ZLPreferenceSet bgPreferences = new ZLPreferenceSet(); + final PreferenceSet footerPreferences = new PreferenceSet.Enabler() { + @Override + protected Boolean detectState() { + return viewOptions.ScrollbarType.getValue() == FBView.SCROLLBAR_SHOW_AS_FOOTER; + } + }; + final PreferenceSet bgPreferences = new PreferenceSet.Enabler() { + @Override + protected Boolean detectState() { + return "".equals(profile.WallpaperOption.getValue()); + } + }; final Screen cssScreen = createPreferenceScreen("css"); cssScreen.addOption(baseStyle.UseCSSFontFamilyOption, "fontFamily"); @@ -373,7 +388,7 @@ public class PreferenceActivity extends ZLPreferenceActivity { @Override protected void onDialogClosed(boolean result) { super.onDialogClosed(result); - bgPreferences.setEnabled("".equals(getValue())); + bgPreferences.update(); } }; colorsScreen.addPreference(wallpaperPreference); @@ -381,7 +396,7 @@ public class PreferenceActivity extends ZLPreferenceActivity { bgPreferences.add( colorsScreen.addOption(profile.BackgroundOption, "backgroundColor") ); - bgPreferences.setEnabled("".equals(profile.WallpaperOption.getValue())); + bgPreferences.update(); colorsScreen.addOption(profile.HighlightingOption, "highlighting"); colorsScreen.addOption(profile.RegularTextOption, "text"); colorsScreen.addOption(profile.HyperlinkTextOption, "hyperlink"); @@ -422,9 +437,7 @@ public class PreferenceActivity extends ZLPreferenceActivity { @Override protected void onDialogClosed(boolean result) { super.onDialogClosed(result); - footerPreferences.setEnabled( - findIndexOfValue(getValue()) == FBView.SCROLLBAR_SHOW_AS_FOOTER - ); + footerPreferences.update(); } }); @@ -442,9 +455,7 @@ public class PreferenceActivity extends ZLPreferenceActivity { this, statusLineScreen.Resource, "font", footerOptions.Font, false ))); - footerPreferences.setEnabled( - viewOptions.ScrollbarType.getValue() == FBView.SCROLLBAR_SHOW_AS_FOOTER - ); + footerPreferences.update(); /* final Screen colorProfileScreen = createPreferenceScreen("colorProfile"); @@ -461,7 +472,12 @@ public class PreferenceActivity extends ZLPreferenceActivity { scrollingScreen.addOption(pageTurningOptions.FingerScrolling, "fingerScrolling"); scrollingScreen.addOption(miscOptions.EnableDoubleTap, "enableDoubleTapDetection"); - final ZLPreferenceSet volumeKeysPreferences = new ZLPreferenceSet(); + final PreferenceSet volumeKeysPreferences = new PreferenceSet.Enabler() { + @Override + protected Boolean detectState() { + return keyBindings.hasBinding(KeyEvent.KEYCODE_VOLUME_UP, false); + } + }; scrollingScreen.addPreference(new ZLCheckBoxPreference( this, scrollingScreen.Resource, "volumeKeys" ) { @@ -479,7 +495,7 @@ public class PreferenceActivity extends ZLPreferenceActivity { keyBindings.bindKey(KeyEvent.KEYCODE_VOLUME_DOWN, false, FBReaderApp.NoAction); keyBindings.bindKey(KeyEvent.KEYCODE_VOLUME_UP, false, FBReaderApp.NoAction); } - volumeKeysPreferences.setEnabled(isChecked()); + volumeKeysPreferences.update(); } }); volumeKeysPreferences.add(scrollingScreen.addPreference(new ZLCheckBoxPreference( @@ -503,7 +519,7 @@ public class PreferenceActivity extends ZLPreferenceActivity { } } })); - volumeKeysPreferences.setEnabled(keyBindings.hasBinding(KeyEvent.KEYCODE_VOLUME_UP, false)); + volumeKeysPreferences.update(); scrollingScreen.addOption(pageTurningOptions.Animation, "animation"); scrollingScreen.addPreference(new AnimationSpeedPreference( diff --git a/src/org/geometerplus/android/fbreader/preferences/ZLPreferenceSet.java b/src/org/geometerplus/android/fbreader/preferences/PreferenceSet.java similarity index 74% rename from src/org/geometerplus/android/fbreader/preferences/ZLPreferenceSet.java rename to src/org/geometerplus/android/fbreader/preferences/PreferenceSet.java index afabf0cff..0e6b5e9a6 100644 --- a/src/org/geometerplus/android/fbreader/preferences/ZLPreferenceSet.java +++ b/src/org/geometerplus/android/fbreader/preferences/PreferenceSet.java @@ -23,16 +23,26 @@ import java.util.LinkedList; import android.preference.Preference; -class ZLPreferenceSet { +abstract class PreferenceSet { private final LinkedList myPreferences = new LinkedList(); final void add(Preference preference) { myPreferences.add(preference); } - final void setEnabled(boolean enable) { + final void update() { + final T state = detectState(); for (Preference preference : myPreferences) { - preference.setEnabled(enable); + update(preference, state); + } + } + + protected abstract T detectState(); + protected abstract void update(Preference preference, T state); + + static abstract class Enabler extends PreferenceSet { + protected void update(Preference preference, Boolean state) { + preference.setEnabled(state); } } }