site: proper setting names

Closes #482
master
Floens 7 years ago
parent a093b9dfbd
commit c0e1a5c9fd
  1. 6
      Clover/app/src/main/java/org/floens/chan/core/presenter/SiteSetupPresenter.java
  2. 5
      Clover/app/src/main/java/org/floens/chan/core/site/Site.java
  3. 3
      Clover/app/src/main/java/org/floens/chan/core/site/SiteBase.java
  4. 51
      Clover/app/src/main/java/org/floens/chan/core/site/SiteSetting.java
  5. 12
      Clover/app/src/main/java/org/floens/chan/core/site/sites/chan4/Chan4.java
  6. 36
      Clover/app/src/main/java/org/floens/chan/ui/controller/SiteSetupController.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<Setting<?>> settings = site.settings();
List<SiteSetting> settings = site.settings();
if (!settings.isEmpty()) {
callback.showSettings(settings);
}
@ -57,6 +57,6 @@ public class SiteSetupPresenter {
void setIsLoggedIn(boolean isLoggedIn);
void showSettings(List<Setting<?>> settings);
void showSettings(List<SiteSetting> settings);
}
}

@ -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<Setting<?>> settings();
List<SiteSetting> settings();
SiteEndpoints endpoints();

@ -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<Setting<?>> settings() {
public List<SiteSetting> settings() {
return new ArrayList<>();
}

@ -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 <http://www.gnu.org/licenses/>.
*/
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<String> 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<String> optionNames) {
SiteSetting setting = new SiteSetting(name, Type.OPTIONS, options);
setting.optionNames = optionNames;
return setting;
}
}

@ -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<Setting<?>> settings() {
public List<SiteSetting> settings() {
return Arrays.asList(
captchaType
SiteSetting.forOption(
captchaType,
"Captcha type",
Arrays.asList("Javascript", "Noscript"))
);
}

@ -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<Setting<?>> settings) {
public void showSettings(List<SiteSetting> 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<ListSettingView.Item<Enum>> 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<ListSettingView.Item<Enum>> 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);

Loading…
Cancel
Save