From 27ea0fb78fbc1d1d9afb02628a33672a9ee76a3b Mon Sep 17 00:00:00 2001 From: Floens Date: Mon, 9 Mar 2015 15:22:53 +0100 Subject: [PATCH] Some advanced settings --- .../chan/core/settings/BooleanSetting.java | 11 +++- .../chan/core/settings/ChanSettings.java | 24 +++++++++ .../floens/chan/core/settings/Setting.java | 16 ++++++ .../chan/core/settings/StringSetting.java | 9 +++- .../AdvancedSettingsController.java | 51 +++++++++++++++++-- .../chan/ui/controller/BrowseController.java | 2 +- .../ui/controller/MainSettingsController.java | 6 +-- .../controller/WatchSettingsController.java | 39 ++++++++++++++ .../chan/ui/fragment/FolderPickFragment.java | 4 +- .../chan/ui/preferences/LinkSettingView.java | 11 +++- .../ui/preferences/SettingsController.java | 32 ++++++------ Clover/app/src/main/res/menu/settings.xml | 2 +- Clover/app/src/main/res/values/strings.xml | 26 +++++++++- 13 files changed, 202 insertions(+), 31 deletions(-) create mode 100644 Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/BooleanSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/BooleanSetting.java index 782974ea..22fbcd24 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/BooleanSetting.java +++ b/Clover/app/src/main/java/org/floens/chan/core/settings/BooleanSetting.java @@ -3,10 +3,14 @@ package org.floens.chan.core.settings; import android.content.SharedPreferences; public class BooleanSetting extends Setting { - public BooleanSetting(SharedPreferences sharedPreferences, String key, boolean def) { + public BooleanSetting(SharedPreferences sharedPreferences, String key, Boolean def) { super(sharedPreferences, key, def); } + public BooleanSetting(SharedPreferences sharedPreferences, String key, Boolean def, SettingCallback callback) { + super(sharedPreferences, key, def, callback); + } + @Override public Boolean get() { return sharedPreferences.getBoolean(key, def); @@ -14,6 +18,9 @@ public class BooleanSetting extends Setting { @Override public void set(Boolean value) { - sharedPreferences.edit().putBoolean(key, value).apply(); + if (!value.equals(get())) { + sharedPreferences.edit().putBoolean(key, value).apply(); + onValueChanged(); + } } } diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java index b31fe6ec..23a71f66 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java +++ b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java @@ -39,6 +39,18 @@ public class ChanSettings { public static BooleanSetting developer; + public static StringSetting saveLocation; + public static BooleanSetting saveOriginalFilename; + public static BooleanSetting shareUrl; + public static BooleanSetting networkHttps; + public static BooleanSetting forcePhoneLayout; + public static BooleanSetting anonymize; + public static BooleanSetting anonymizeIds; + public static BooleanSetting repliesButtonsBottom; + + public static BooleanSetting watchCountdown; + public static BooleanSetting watchBackground; + static { SharedPreferences p = AndroidUtils.getPreferences(); @@ -54,6 +66,18 @@ public class ChanSettings { postPinThread = new BooleanSetting(p, "preference_pin_on_post", false); developer = new BooleanSetting(p, "preference_developer", false); + + saveLocation = new StringSetting(p, "preference_image_save_location", Environment.getExternalStorageDirectory() + File.separator + "Clover"); + saveOriginalFilename = new BooleanSetting(p, "preference_image_save_original", false); + shareUrl = new BooleanSetting(p, "preference_image_share_url", false); + networkHttps = new BooleanSetting(p, "preference_network_https", true); + forcePhoneLayout = new BooleanSetting(p, "preference_force_phone_layout", false); + anonymize = new BooleanSetting(p, "preference_anonymize", false); + anonymizeIds = new BooleanSetting(p, "preference_anonymize_ids", false); + repliesButtonsBottom = new BooleanSetting(p, "preference_buttons_bottom", false); + + watchCountdown = new BooleanSetting(p, "preference_watch_countdown", false); + watchBackground = new BooleanSetting(p, "preference_watch_background_enabled", false); } private static SharedPreferences p() { diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/Setting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/Setting.java index 0284a9be..9a71056a 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/Setting.java +++ b/Clover/app/src/main/java/org/floens/chan/core/settings/Setting.java @@ -6,11 +6,17 @@ public abstract class Setting { protected final SharedPreferences sharedPreferences; protected final String key; protected final T def; + private SettingCallback callback; public Setting(SharedPreferences sharedPreferences, String key, T def) { + this(sharedPreferences, key, def, null); + } + + public Setting(SharedPreferences sharedPreferences, String key, T def, SettingCallback callback) { this.sharedPreferences = sharedPreferences; this.key = key; this.def = def; + this.callback = callback; } public abstract T get(); @@ -20,4 +26,14 @@ public abstract class Setting { public T getDefault() { return def; } + + protected final void onValueChanged() { + if (callback != null) { + callback.onValueChange(this, get()); + } + } + + public interface SettingCallback { + public void onValueChange(Setting setting, T value); + } } diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/StringSetting.java b/Clover/app/src/main/java/org/floens/chan/core/settings/StringSetting.java index 491a1a8d..267aa704 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/StringSetting.java +++ b/Clover/app/src/main/java/org/floens/chan/core/settings/StringSetting.java @@ -7,6 +7,10 @@ public class StringSetting extends Setting { super(sharedPreferences, key, def); } + public StringSetting(SharedPreferences sharedPreferences, String key, String def, SettingCallback callback) { + super(sharedPreferences, key, def, callback); + } + @Override public String get() { return sharedPreferences.getString(key, def); @@ -14,6 +18,9 @@ public class StringSetting extends Setting { @Override public void set(String value) { - sharedPreferences.edit().putString(key, value).apply(); + if (!value.equals(get())) { + sharedPreferences.edit().putString(key, value).apply(); + onValueChanged(); + } } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java index f6842cca..84cb0369 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java @@ -1,14 +1,26 @@ package org.floens.chan.ui.controller; +import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; +import android.view.View; import android.widget.LinearLayout; import org.floens.chan.R; +import org.floens.chan.core.settings.ChanSettings; +import org.floens.chan.ui.fragment.FolderPickFragment; +import org.floens.chan.ui.preferences.BooleanSettingView; import org.floens.chan.ui.preferences.LinkSettingView; -import org.floens.chan.ui.preferences.SettingsGroup; import org.floens.chan.ui.preferences.SettingsController; +import org.floens.chan.ui.preferences.SettingsGroup; + +import java.io.File; public class AdvancedSettingsController extends SettingsController { + private static final String TAG = "AdvancedSettingsController"; + + private LinkSettingView saveLocation; + public AdvancedSettingsController(Context context) { super(context); } @@ -17,7 +29,7 @@ public class AdvancedSettingsController extends SettingsController { public void onCreate() { super.onCreate(); - navigationItem.title = string(R.string.settings_advanced_label); + navigationItem.title = string(R.string.settings_screen_advanced); view = inflateRes(R.layout.settings_layout); content = (LinearLayout) view.findViewById(R.id.scrollview_content); @@ -28,9 +40,40 @@ public class AdvancedSettingsController extends SettingsController { } private void populatePreferences() { - SettingsGroup settings = new SettingsGroup(string(R.string.settings_advanced_label)); - settings.settingViews.add(new LinkSettingView(this, "Hallo", null, null)); + SettingsGroup settings = new SettingsGroup(string(R.string.settings_group_advanced)); + + saveLocation = (LinkSettingView) settings.add(new LinkSettingView(this, string(R.string.setting_save_folder), null, new View.OnClickListener() { + @Override + public void onClick(View v) { + File dir = ChanSettings.getImageSaveDirectory(); + if (!dir.mkdirs() && !dir.isDirectory()) { + new AlertDialog.Builder(context).setMessage(R.string.setting_save_folder_error_create_folder).show(); + } else { + FolderPickFragment frag = FolderPickFragment.newInstance(new FolderPickFragment.FolderPickListener() { + @Override + public void folderPicked(File path) { + ChanSettings.saveLocation.set(path.getAbsolutePath()); + setSaveLocationDescription(); + } + }, dir); + ((Activity) context).getFragmentManager().beginTransaction().add(frag, null).commit(); + } + } + })); + setSaveLocationDescription(); + + settings.add(new BooleanSettingView(this, ChanSettings.saveOriginalFilename, string(R.string.setting_save_original_filename), null)); + settings.add(new BooleanSettingView(this, ChanSettings.shareUrl, string(R.string.setting_share_url), string(R.string.setting_share_url_description))); + settings.add(new BooleanSettingView(this, ChanSettings.networkHttps, string(R.string.setting_network_https), string(R.string.setting_network_https_description))); + settings.add(new BooleanSettingView(this, ChanSettings.forcePhoneLayout, string(R.string.setting_force_phone_layout), null)); + settings.add(new BooleanSettingView(this, ChanSettings.anonymize, string(R.string.preference_anonymize), null)); + settings.add(new BooleanSettingView(this, ChanSettings.anonymizeIds, string(R.string.preference_anonymize_ids), null)); + settings.add(new BooleanSettingView(this, ChanSettings.repliesButtonsBottom, string(R.string.setting_buttons_bottom), null)); groups.add(settings); } + + private void setSaveLocationDescription() { + saveLocation.setDescription(ChanSettings.saveLocation.get()); + } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java index c12582d0..89c597dd 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java @@ -79,7 +79,7 @@ public class BrowseController extends Controller implements ToolbarMenuItem.Tool List items = new ArrayList<>(); items.add(new FloatingMenuItem(SEARCH_ID, context.getString(R.string.action_search))); items.add(new FloatingMenuItem(SHARE_ID, context.getString(R.string.action_share))); - items.add(new FloatingMenuItem(SETTINGS_ID, context.getString(R.string.action_settings))); + items.add(new FloatingMenuItem(SETTINGS_ID, context.getString(R.string.settings_screen))); overflow.setSubMenu(new FloatingMenu(context, overflow.getView(), items)); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java index 81e3e15c..747e6bce 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java @@ -57,10 +57,10 @@ public class MainSettingsController extends SettingsController implements Toolba public void onCreate() { super.onCreate(); - navigationItem.title = s(R.string.action_settings); + navigationItem.title = s(R.string.settings_screen); navigationItem.menu = new ToolbarMenu(context); navigationItem.createOverflow(context, this, Arrays.asList( - new FloatingMenuItem(ADVANCED_SETTINGS, s(R.string.action_settings_advanced)) + new FloatingMenuItem(ADVANCED_SETTINGS, s(R.string.settings_screen_advanced)) )); view = inflateRes(R.layout.settings_layout); @@ -110,7 +110,7 @@ public class MainSettingsController extends SettingsController implements Toolba general.add(new LinkSettingView(this, s(R.string.settings_watch), null, new View.OnClickListener() { @Override public void onClick(View v) { - + navigationController.pushController(new WatchSettingsController(context)); } })); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java new file mode 100644 index 00000000..669dd878 --- /dev/null +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java @@ -0,0 +1,39 @@ +package org.floens.chan.ui.controller; + +import android.content.Context; +import android.widget.LinearLayout; + +import org.floens.chan.R; +import org.floens.chan.core.settings.ChanSettings; +import org.floens.chan.ui.preferences.BooleanSettingView; +import org.floens.chan.ui.preferences.SettingsController; +import org.floens.chan.ui.preferences.SettingsGroup; + +public class WatchSettingsController extends SettingsController { + public WatchSettingsController(Context context) { + super(context); + } + + @Override + public void onCreate() { + super.onCreate(); + + navigationItem.title = string(R.string.settings_screen_advanced); + + view = inflateRes(R.layout.settings_layout); + content = (LinearLayout) view.findViewById(R.id.scrollview_content); + + populatePreferences(); + + buildPreferences(); + } + + private void populatePreferences() { + SettingsGroup settings = new SettingsGroup(string(R.string.settings_group_watch)); + + settings.add(new BooleanSettingView(this, ChanSettings.watchCountdown, string(R.string.setting_watch_countdown), string(R.string.setting_watch_countdown_description))); + settings.add(new BooleanSettingView(this, ChanSettings.watchBackground, string(R.string.setting_watch_enable_background), string(R.string.setting_watch_enable_background_description))); + + groups.add(settings); + } +} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/fragment/FolderPickFragment.java b/Clover/app/src/main/java/org/floens/chan/ui/fragment/FolderPickFragment.java index 0288bec5..35460188 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/fragment/FolderPickFragment.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/fragment/FolderPickFragment.java @@ -66,12 +66,12 @@ public class FolderPickFragment extends DialogFragment { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup unused, Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { if (listener == null || currentPath == null) { return null; } - View container = inflater.inflate(R.layout.folder_pick, null); + View container = inflater.inflate(R.layout.folder_pick, parent); statusPath = (TextView) container.findViewById(R.id.folder_status); listView = (ListView) container.findViewById(R.id.folder_list); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/preferences/LinkSettingView.java b/Clover/app/src/main/java/org/floens/chan/ui/preferences/LinkSettingView.java index 0599d5de..60a4079e 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/preferences/LinkSettingView.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/preferences/LinkSettingView.java @@ -6,7 +6,8 @@ import org.floens.chan.R; public class LinkSettingView extends SettingView { private final View.OnClickListener clickListener; - private final String description; + private String description; + private boolean built = false; public LinkSettingView(SettingsController settingsController, String name, String description, View.OnClickListener clickListener) { super(settingsController, name); @@ -18,6 +19,7 @@ public class LinkSettingView extends SettingView { public void setView(View view) { super.setView(view); view.setOnClickListener(clickListener); + built = true; } @Override @@ -34,4 +36,11 @@ public class LinkSettingView extends SettingView { bottom.setEnabled(enabled); } } + + public void setDescription(String description) { + this.description = description; + if (built) { + settingsController.onPreferenceChange(this); + } + } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/preferences/SettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/preferences/SettingsController.java index 597097b6..7248bdd2 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/preferences/SettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/preferences/SettingsController.java @@ -47,7 +47,7 @@ public class SettingsController extends Controller implements AndroidUtils.OnMea } public void onPreferenceChange(SettingView item) { - if ((item instanceof ListSettingView) || (item instanceof StringSettingView)) { + if ((item instanceof ListSettingView) || (item instanceof StringSettingView) || (item instanceof LinkSettingView)) { setDescriptionText(item.view, item.getTopDescription(), item.getBottomDescription()); } } @@ -133,20 +133,22 @@ public class SettingsController extends Controller implements AndroidUtils.OnMea AndroidUtils.animateHeight(bottom, bottomText != null); - bottom.getAnimation().setAnimationListener(new Animation.AnimationListener() { - @Override - public void onAnimationStart(Animation animation) { - bottom.setVisibility(View.VISIBLE); - } - - @Override - public void onAnimationEnd(Animation animation) { - } - - @Override - public void onAnimationRepeat(Animation animation) { - } - }); + if (bottom.getAnimation() != null) { + bottom.getAnimation().setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + bottom.setVisibility(View.VISIBLE); + } + + @Override + public void onAnimationEnd(Animation animation) { + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + }); + } } else { bottom.setText(bottomText); bottom.setVisibility(bottomText == null ? View.GONE : View.VISIBLE); diff --git a/Clover/app/src/main/res/menu/settings.xml b/Clover/app/src/main/res/menu/settings.xml index 6f72fba7..dbb6c764 100644 --- a/Clover/app/src/main/res/menu/settings.xml +++ b/Clover/app/src/main/res/menu/settings.xml @@ -20,6 +20,6 @@ along with this program. If not, see . diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index 08d67dac..c2c86ba5 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -41,7 +41,6 @@ along with this program. If not, see . View mode List Grid - Advanced Search Search board Search thread @@ -152,6 +151,7 @@ along with this program. If not, see . Choose + Settings General Edit boards Thread watcher settings @@ -180,6 +180,30 @@ along with this program. If not, see . Legal information about licenses Developer settings + Advanced settings + Advanced settings + File save folder + Error creating save folder + Save original filename + Share url to image + Share the url to the image instead of the image itself + Use HTTPS + Use HTTPS for all network requests + Force phone layout + Make everyone Anonymous + Hide IDs + Reply buttons on the bottom + + Watcher settings + Watcher settings + Show countdown + Show a countdown left of the new post counter + Enable in the background + Watch pins when Clover is in the background + + + + Edit boards Add or remove boards