diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/SiteSetupPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/SiteSetupPresenter.java index 534a51f6..e05ac5fb 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/SiteSetupPresenter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/presenter/SiteSetupPresenter.java @@ -1,8 +1,8 @@ package org.floens.chan.core.presenter; import org.floens.chan.core.database.DatabaseManager; -import org.floens.chan.core.settings.Setting; import org.floens.chan.core.site.Site; +import org.floens.chan.core.site.SiteSetting; import java.util.List; @@ -29,7 +29,7 @@ public class SiteSetupPresenter { callback.showLogin(); } - List> settings = site.settings(); + List settings = site.settings(); if (!settings.isEmpty()) { callback.showSettings(settings); } @@ -57,6 +57,6 @@ public class SiteSetupPresenter { void setIsLoggedIn(boolean isLoggedIn); - void showSettings(List> settings); + void showSettings(List settings); } } diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/Site.java b/Clover/app/src/main/java/org/floens/chan/core/site/Site.java index a40557a6..a85acd1d 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/Site.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/Site.java @@ -21,12 +21,11 @@ import org.floens.chan.core.model.Post; import org.floens.chan.core.model.json.site.SiteConfig; import org.floens.chan.core.model.orm.Board; import org.floens.chan.core.model.orm.Loadable; -import org.floens.chan.core.settings.Setting; import org.floens.chan.core.settings.json.JsonSettings; -import org.floens.chan.core.site.parser.ChanReader; import org.floens.chan.core.site.http.DeleteRequest; import org.floens.chan.core.site.http.LoginRequest; import org.floens.chan.core.site.http.Reply; +import org.floens.chan.core.site.parser.ChanReader; import java.util.List; @@ -150,7 +149,7 @@ public interface Site { boolean boardFeature(BoardFeature boardFeature, Board board); - List> settings(); + List settings(); SiteEndpoints endpoints(); diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteBase.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteBase.java index 6042e8cb..454627a0 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteBase.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/SiteBase.java @@ -25,7 +25,6 @@ import org.floens.chan.core.database.LoadableProvider; import org.floens.chan.core.manager.BoardManager; import org.floens.chan.core.model.json.site.SiteConfig; import org.floens.chan.core.model.orm.Board; -import org.floens.chan.core.settings.Setting; import org.floens.chan.core.settings.SettingProvider; import org.floens.chan.core.settings.json.JsonSettings; import org.floens.chan.core.settings.json.JsonSettingsProvider; @@ -99,7 +98,7 @@ public abstract class SiteBase implements Site { } @Override - public List> settings() { + public List settings() { return new ArrayList<>(); } diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteSetting.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteSetting.java new file mode 100644 index 00000000..17b94c21 --- /dev/null +++ b/Clover/app/src/main/java/org/floens/chan/core/site/SiteSetting.java @@ -0,0 +1,51 @@ +/* + * Clover - 4chan browser https://github.com/Floens/Clover/ + * Copyright (C) 2014 Floens + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.floens.chan.core.site; + +import org.floens.chan.core.settings.OptionsSetting; +import org.floens.chan.core.settings.Setting; + +import java.util.List; + +/** + * Hacky stuff to give the site settings a good UI. + */ +public class SiteSetting { + public enum Type { + OPTIONS + } + + public final String name; + public final Type type; + public final Setting setting; + + public List optionNames; + + private SiteSetting(String name, Type type, Setting setting) { + this.name = name; + this.type = type; + this.setting = setting; + } + + public static SiteSetting forOption(OptionsSetting options, String name, + List optionNames) { + SiteSetting setting = new SiteSetting(name, Type.OPTIONS, options); + setting.optionNames = optionNames; + return setting; + } +} diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan4/Chan4.java b/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan4/Chan4.java index 50aa614d..fc4a3ed3 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan4/Chan4.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan4/Chan4.java @@ -26,7 +26,6 @@ import org.floens.chan.core.model.orm.Board; import org.floens.chan.core.model.orm.Loadable; import org.floens.chan.core.settings.OptionSettingItem; import org.floens.chan.core.settings.OptionsSetting; -import org.floens.chan.core.settings.Setting; import org.floens.chan.core.settings.SettingProvider; import org.floens.chan.core.settings.SharedPreferencesSettingProvider; import org.floens.chan.core.settings.StringSetting; @@ -38,6 +37,7 @@ import org.floens.chan.core.site.SiteBase; import org.floens.chan.core.site.SiteEndpoints; import org.floens.chan.core.site.SiteIcon; import org.floens.chan.core.site.SiteRequestModifier; +import org.floens.chan.core.site.SiteSetting; import org.floens.chan.core.site.SiteUrlHandler; import org.floens.chan.core.site.common.CommonReplyHttpCall; import org.floens.chan.core.site.common.FutabaChanReader; @@ -478,14 +478,18 @@ public class Chan4 extends SiteBase { public void initializeSettings() { super.initializeSettings(); - captchaType = new OptionsSetting<>(settingsProvider, "preference_captcha_type", + captchaType = new OptionsSetting<>(settingsProvider, + "preference_captcha_type", CaptchaType.class, CaptchaType.V2NOJS); } @Override - public List> settings() { + public List settings() { return Arrays.asList( - captchaType + SiteSetting.forOption( + captchaType, + "Captcha type", + Arrays.asList("Javascript", "Noscript")) ); } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/SiteSetupController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/SiteSetupController.java index a7a88e37..ec686253 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/SiteSetupController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/SiteSetupController.java @@ -18,12 +18,13 @@ package org.floens.chan.ui.controller; import android.content.Context; +import android.support.annotation.NonNull; import org.floens.chan.R; import org.floens.chan.core.presenter.SiteSetupPresenter; import org.floens.chan.core.settings.OptionsSetting; -import org.floens.chan.core.settings.Setting; import org.floens.chan.core.site.Site; +import org.floens.chan.core.site.SiteSetting; import org.floens.chan.ui.settings.LinkSettingView; import org.floens.chan.ui.settings.ListSettingView; import org.floens.chan.ui.settings.SettingsController; @@ -98,21 +99,25 @@ public class SiteSetupController extends SettingsController implements SiteSetup } @Override - public void showSettings(List> settings) { + public void showSettings(List settings) { SettingsGroup group = new SettingsGroup("Additional settings"); - for (Setting setting : settings) { - if (setting instanceof OptionsSetting) { - OptionsSetting optionsSetting = (OptionsSetting) setting; + for (SiteSetting setting : settings) { + if (setting.type == SiteSetting.Type.OPTIONS) { + + // Turn the SiteSetting for a list of options into a proper setting with a + // name and a list of options, both given in the SiteSetting. + OptionsSetting optionsSetting = (OptionsSetting) setting.setting; List> items = new ArrayList<>(); - for (Enum anEnum : optionsSetting.getItems()) { - items.add(new ListSettingView.Item<>(anEnum.name(), anEnum)); + Enum[] settingItems = optionsSetting.getItems(); + for (int i = 0; i < settingItems.length; i++) { + String name = setting.optionNames.get(i); + Enum anEnum = settingItems[i]; + items.add(new ListSettingView.Item<>(name, anEnum)); } - String name = optionsSetting.getItems()[0].getDeclaringClass().getSimpleName(); - ListSettingView v = new ListSettingView(this, - optionsSetting, name, items); + ListSettingView v = getListSettingView(setting, optionsSetting, items); group.add(v); } @@ -121,6 +126,17 @@ public class SiteSetupController extends SettingsController implements SiteSetup groups.add(group); } + @SuppressWarnings("unchecked") + @NonNull + private ListSettingView getListSettingView( + SiteSetting setting, + OptionsSetting optionsSetting, + List> items) { + // we know it's an enum + return (ListSettingView) new ListSettingView(this, + optionsSetting, setting.name, items); + } + @Override public void showLogin() { SettingsGroup login = new SettingsGroup(R.string.setup_site_group_login);