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;
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);
}
public BooleanSetting(SharedPreferences sharedPreferences, String key, Boolean def, SettingCallback<Boolean> callback) {
super(sharedPreferences, key, def, callback);
}
@Override
public Boolean get() {
return sharedPreferences.getBoolean(key, def);
@ -14,6 +18,9 @@ public class BooleanSetting extends Setting<Boolean> {
@Override
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 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() {

@ -6,11 +6,17 @@ public abstract class Setting<T> {
protected final SharedPreferences sharedPreferences;
protected final String key;
protected final T def;
private SettingCallback<T> callback;
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.key = key;
this.def = def;
this.callback = callback;
}
public abstract T get();
@ -20,4 +26,14 @@ public abstract class Setting<T> {
public T getDefault() {
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);
}
public StringSetting(SharedPreferences sharedPreferences, String key, String def, SettingCallback<String> callback) {
super(sharedPreferences, key, def, callback);
}
@Override
public String get() {
return sharedPreferences.getString(key, def);
@ -14,6 +18,9 @@ public class StringSetting extends Setting<String> {
@Override
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;
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());
}
}

@ -79,7 +79,7 @@ public class BrowseController extends Controller implements ToolbarMenuItem.Tool
List<FloatingMenuItem> 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));

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

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

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

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

@ -20,6 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<item
android:id="@+id/action_settings_advanced"
android:orderInCategory="1"
android:title="@string/action_settings_advanced"
android:title="@string/settings_advanced_label"
app:showAsAction="never" />
</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_list">List</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_board">Search board</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="settings_screen">Settings</string>
<string name="settings_group_general">General</string>
<string name="settings_board_edit">Edit boards</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_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_summary">Add or remove boards</string>

Loading…
Cancel
Save