Some advanced settings

tempwork
Floens 10 years ago
parent 4bdc0b20e4
commit 27ea0fb78f
  1. 11
      Clover/app/src/main/java/org/floens/chan/core/settings/BooleanSetting.java
  2. 24
      Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java
  3. 16
      Clover/app/src/main/java/org/floens/chan/core/settings/Setting.java
  4. 9
      Clover/app/src/main/java/org/floens/chan/core/settings/StringSetting.java
  5. 51
      Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java
  6. 2
      Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java
  7. 6
      Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java
  8. 39
      Clover/app/src/main/java/org/floens/chan/ui/controller/WatchSettingsController.java
  9. 4
      Clover/app/src/main/java/org/floens/chan/ui/fragment/FolderPickFragment.java
  10. 11
      Clover/app/src/main/java/org/floens/chan/ui/preferences/LinkSettingView.java
  11. 32
      Clover/app/src/main/java/org/floens/chan/ui/preferences/SettingsController.java
  12. 2
      Clover/app/src/main/res/menu/settings.xml
  13. 26
      Clover/app/src/main/res/values/strings.xml

@ -3,10 +3,14 @@ package org.floens.chan.core.settings;
import android.content.SharedPreferences; import android.content.SharedPreferences;
public class BooleanSetting extends Setting<Boolean> { public class BooleanSetting extends Setting<Boolean> {
public BooleanSetting(SharedPreferences sharedPreferences, String key, boolean def) { public BooleanSetting(SharedPreferences sharedPreferences, String key, Boolean def) {
super(sharedPreferences, key, def); super(sharedPreferences, key, def);
} }
public BooleanSetting(SharedPreferences sharedPreferences, String key, Boolean def, SettingCallback<Boolean> callback) {
super(sharedPreferences, key, def, callback);
}
@Override @Override
public Boolean get() { public Boolean get() {
return sharedPreferences.getBoolean(key, def); return sharedPreferences.getBoolean(key, def);
@ -14,6 +18,9 @@ public class BooleanSetting extends Setting<Boolean> {
@Override @Override
public void set(Boolean value) { public void set(Boolean value) {
sharedPreferences.edit().putBoolean(key, value).apply(); if (!value.equals(get())) {
sharedPreferences.edit().putBoolean(key, value).apply();
onValueChanged();
}
} }
} }

@ -39,6 +39,18 @@ public class ChanSettings {
public static BooleanSetting developer; 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 { static {
SharedPreferences p = AndroidUtils.getPreferences(); SharedPreferences p = AndroidUtils.getPreferences();
@ -54,6 +66,18 @@ public class ChanSettings {
postPinThread = new BooleanSetting(p, "preference_pin_on_post", false); postPinThread = new BooleanSetting(p, "preference_pin_on_post", false);
developer = new BooleanSetting(p, "preference_developer", 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() { private static SharedPreferences p() {

@ -6,11 +6,17 @@ public abstract class Setting<T> {
protected final SharedPreferences sharedPreferences; protected final SharedPreferences sharedPreferences;
protected final String key; protected final String key;
protected final T def; protected final T def;
private SettingCallback<T> callback;
public Setting(SharedPreferences sharedPreferences, String key, T def) { public Setting(SharedPreferences sharedPreferences, String key, T def) {
this(sharedPreferences, key, def, null);
}
public Setting(SharedPreferences sharedPreferences, String key, T def, SettingCallback<T> callback) {
this.sharedPreferences = sharedPreferences; this.sharedPreferences = sharedPreferences;
this.key = key; this.key = key;
this.def = def; this.def = def;
this.callback = callback;
} }
public abstract T get(); public abstract T get();
@ -20,4 +26,14 @@ public abstract class Setting<T> {
public T getDefault() { public T getDefault() {
return def; return def;
} }
protected final void onValueChanged() {
if (callback != null) {
callback.onValueChange(this, get());
}
}
public interface SettingCallback<T> {
public void onValueChange(Setting setting, T value);
}
} }

@ -7,6 +7,10 @@ public class StringSetting extends Setting<String> {
super(sharedPreferences, key, def); super(sharedPreferences, key, def);
} }
public StringSetting(SharedPreferences sharedPreferences, String key, String def, SettingCallback<String> callback) {
super(sharedPreferences, key, def, callback);
}
@Override @Override
public String get() { public String get() {
return sharedPreferences.getString(key, def); return sharedPreferences.getString(key, def);
@ -14,6 +18,9 @@ public class StringSetting extends Setting<String> {
@Override @Override
public void set(String value) { public void set(String value) {
sharedPreferences.edit().putString(key, value).apply(); if (!value.equals(get())) {
sharedPreferences.edit().putString(key, value).apply();
onValueChanged();
}
} }
} }

@ -1,14 +1,26 @@
package org.floens.chan.ui.controller; package org.floens.chan.ui.controller;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import org.floens.chan.R; 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.LinkSettingView;
import org.floens.chan.ui.preferences.SettingsGroup;
import org.floens.chan.ui.preferences.SettingsController; import org.floens.chan.ui.preferences.SettingsController;
import org.floens.chan.ui.preferences.SettingsGroup;
import java.io.File;
public class AdvancedSettingsController extends SettingsController { public class AdvancedSettingsController extends SettingsController {
private static final String TAG = "AdvancedSettingsController";
private LinkSettingView saveLocation;
public AdvancedSettingsController(Context context) { public AdvancedSettingsController(Context context) {
super(context); super(context);
} }
@ -17,7 +29,7 @@ public class AdvancedSettingsController extends SettingsController {
public void onCreate() { public void onCreate() {
super.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); view = inflateRes(R.layout.settings_layout);
content = (LinearLayout) view.findViewById(R.id.scrollview_content); content = (LinearLayout) view.findViewById(R.id.scrollview_content);
@ -28,9 +40,40 @@ public class AdvancedSettingsController extends SettingsController {
} }
private void populatePreferences() { private void populatePreferences() {
SettingsGroup settings = new SettingsGroup(string(R.string.settings_advanced_label)); SettingsGroup settings = new SettingsGroup(string(R.string.settings_group_advanced));
settings.settingViews.add(new LinkSettingView(this, "Hallo", null, null));
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); groups.add(settings);
} }
private void setSaveLocationDescription() {
saveLocation.setDescription(ChanSettings.saveLocation.get());
}
} }

@ -79,7 +79,7 @@ public class BrowseController extends Controller implements ToolbarMenuItem.Tool
List<FloatingMenuItem> items = new ArrayList<>(); List<FloatingMenuItem> items = new ArrayList<>();
items.add(new FloatingMenuItem(SEARCH_ID, context.getString(R.string.action_search))); 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(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)); overflow.setSubMenu(new FloatingMenu(context, overflow.getView(), items));

@ -57,10 +57,10 @@ public class MainSettingsController extends SettingsController implements Toolba
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
navigationItem.title = s(R.string.action_settings); navigationItem.title = s(R.string.settings_screen);
navigationItem.menu = new ToolbarMenu(context); navigationItem.menu = new ToolbarMenu(context);
navigationItem.createOverflow(context, this, Arrays.asList( 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); 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() { general.add(new LinkSettingView(this, s(R.string.settings_watch), null, new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
navigationController.pushController(new WatchSettingsController(context));
} }
})); }));

@ -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);
}
}

@ -66,12 +66,12 @@ public class FolderPickFragment extends DialogFragment {
} }
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup unused, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
if (listener == null || currentPath == null) { if (listener == null || currentPath == null) {
return 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); statusPath = (TextView) container.findViewById(R.id.folder_status);
listView = (ListView) container.findViewById(R.id.folder_list); listView = (ListView) container.findViewById(R.id.folder_list);

@ -6,7 +6,8 @@ import org.floens.chan.R;
public class LinkSettingView extends SettingView { public class LinkSettingView extends SettingView {
private final View.OnClickListener clickListener; 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) { public LinkSettingView(SettingsController settingsController, String name, String description, View.OnClickListener clickListener) {
super(settingsController, name); super(settingsController, name);
@ -18,6 +19,7 @@ public class LinkSettingView extends SettingView {
public void setView(View view) { public void setView(View view) {
super.setView(view); super.setView(view);
view.setOnClickListener(clickListener); view.setOnClickListener(clickListener);
built = true;
} }
@Override @Override
@ -34,4 +36,11 @@ public class LinkSettingView extends SettingView {
bottom.setEnabled(enabled); bottom.setEnabled(enabled);
} }
} }
public void setDescription(String description) {
this.description = description;
if (built) {
settingsController.onPreferenceChange(this);
}
}
} }

@ -47,7 +47,7 @@ public class SettingsController extends Controller implements AndroidUtils.OnMea
} }
public void onPreferenceChange(SettingView item) { 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()); setDescriptionText(item.view, item.getTopDescription(), item.getBottomDescription());
} }
} }
@ -133,20 +133,22 @@ public class SettingsController extends Controller implements AndroidUtils.OnMea
AndroidUtils.animateHeight(bottom, bottomText != null); AndroidUtils.animateHeight(bottom, bottomText != null);
bottom.getAnimation().setAnimationListener(new Animation.AnimationListener() { if (bottom.getAnimation() != null) {
@Override bottom.getAnimation().setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) { @Override
bottom.setVisibility(View.VISIBLE); public void onAnimationStart(Animation animation) {
} bottom.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animation animation) { @Override
} public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) { @Override
} public void onAnimationRepeat(Animation animation) {
}); }
});
}
} else { } else {
bottom.setText(bottomText); bottom.setText(bottomText);
bottom.setVisibility(bottomText == null ? View.GONE : View.VISIBLE); bottom.setVisibility(bottomText == null ? View.GONE : View.VISIBLE);

@ -20,6 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<item <item
android:id="@+id/action_settings_advanced" android:id="@+id/action_settings_advanced"
android:orderInCategory="1" android:orderInCategory="1"
android:title="@string/action_settings_advanced" android:title="@string/settings_advanced_label"
app:showAsAction="never" /> app:showAsAction="never" />
</menu> </menu>

@ -41,7 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<string name="action_board_view_mode">View mode</string> <string name="action_board_view_mode">View mode</string>
<string name="action_board_view_mode_list">List</string> <string name="action_board_view_mode_list">List</string>
<string name="action_board_view_mode_grid">Grid</string> <string name="action_board_view_mode_grid">Grid</string>
<string name="action_settings_advanced">Advanced</string>
<string name="action_search">Search</string> <string name="action_search">Search</string>
<string name="action_search_board">Search board</string> <string name="action_search_board">Search board</string>
<string name="action_search_thread">Search thread</string> <string name="action_search_thread">Search thread</string>
@ -152,6 +151,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<string name="folder_pick_ok">Choose</string> <string name="folder_pick_ok">Choose</string>
<string name="settings_screen">Settings</string>
<string name="settings_group_general">General</string> <string name="settings_group_general">General</string>
<string name="settings_board_edit">Edit boards</string> <string name="settings_board_edit">Edit boards</string>
<string name="settings_watch">Thread watcher settings</string> <string name="settings_watch">Thread watcher settings</string>
@ -180,6 +180,30 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<string name="settings_about_licences_description">Legal information about licenses</string> <string name="settings_about_licences_description">Legal information about licenses</string>
<string name="settings_developer">Developer settings</string> <string name="settings_developer">Developer settings</string>
<string name="settings_screen_advanced">Advanced settings</string>
<string name="settings_group_advanced">Advanced settings</string>
<string name="setting_save_folder">File save folder</string>
<string name="setting_save_folder_error_create_folder">Error creating save folder</string>
<string name="setting_save_original_filename">Save original filename</string>
<string name="setting_share_url">Share url to image</string>
<string name="setting_share_url_description">Share the url to the image instead of the image itself</string>
<string name="setting_network_https">Use HTTPS</string>
<string name="setting_network_https_description">Use HTTPS for all network requests</string>
<string name="setting_force_phone_layout">Force phone layout</string>
<string name="setting_anonymize">Make everyone Anonymous</string>
<string name="setting_anonymize_ids">Hide IDs</string>
<string name="setting_buttons_bottom">Reply buttons on the bottom</string>
<string name="settings_screen_watch">Watcher settings</string>
<string name="settings_group_watch">Watcher settings</string>
<string name="setting_watch_countdown">Show countdown</string>
<string name="setting_watch_countdown_description">Show a countdown left of the new post counter</string>
<string name="setting_watch_enable_background">Enable in the background</string>
<string name="setting_watch_enable_background_description">Watch pins when Clover is in the background</string>
<string name="preference_board_edit">Edit boards</string> <string name="preference_board_edit">Edit boards</string>
<string name="preference_board_edit_summary">Add or remove boards</string> <string name="preference_board_edit_summary">Add or remove boards</string>

Loading…
Cancel
Save