package org.primftpd.prefs;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import org.primftpd.PrefsBean;
import org.primftpd.util.Defaults;
import org.slf4j.Logger;
import java.io.File;
public class LoadPrefsUtil
{
public static final String PREF_KEY_USER = "userNamePref";
public static final String PREF_KEY_PASSWORD = "passwordPref";
public static final String PREF_ANONYMOUS_LOGIN = "anonymousLoginPref";
public static final String PREF_KEY_PORT = "portPref";
public static final String PREF_KEY_SECURE_PORT = "securePortPref";
public static final String PREF_KEY_START_DIR = "startDirPref";
public static final String PREF_KEY_ANNOUNCE = "announcePref";
public static final String PREF_KEY_WAKELOCK = "wakelockPref";
public static final String PREF_KEY_WHICH_SERVER = "whichServerToStartPref";
public static final String PREF_KEY_START_ON_BOOT = "startOnBootPref";
public static final String PREF_KEY_PUB_KEY_AUTH = "pubKeyAuthPref";
public static final String PREF_KEY_THEME = "themePref";
public static final String PREF_KEY_LOGGING = "loggingPref";
public static final String PREF_KEY_FTP_PASSIVE_PORTS = "ftpPassivePortsPref";
public static final int PORT_DEFAULT_VAL = 12345;
static final String PORT_DEFAULT_VAL_STR = String.valueOf(PORT_DEFAULT_VAL);
public static final int SECURE_PORT_DEFAULT_VAL = 1234;
static final String SECURE_PORT_DEFAULT_VAL_STR =
String.valueOf(SECURE_PORT_DEFAULT_VAL);
/**
* @return Android {@link SharedPreferences} object.
*/
public static SharedPreferences getPrefs(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context);
}
public static Boolean anonymousLogin(SharedPreferences prefs) {
return prefs.getBoolean(
LoadPrefsUtil.PREF_ANONYMOUS_LOGIN,
Boolean.FALSE);
}
public static String userName(SharedPreferences prefs) {
return prefs.getString(
LoadPrefsUtil.PREF_KEY_USER,
"user");
}
public static String password(SharedPreferences prefs) {
return prefs.getString(
LoadPrefsUtil.PREF_KEY_PASSWORD,
null);
}
public static File startDir(SharedPreferences prefs) {
String prefStr = prefs.getString(
LoadPrefsUtil.PREF_KEY_START_DIR,
null);
return prefStr != null ? new File(prefStr) : Defaults.HOME_DIR;
}
public static Boolean announce(SharedPreferences prefs) {
// default to false as it may cause crashes
return prefs.getBoolean(
LoadPrefsUtil.PREF_KEY_ANNOUNCE,
Boolean.FALSE);
}
public static Boolean wakelock(SharedPreferences prefs) {
return prefs.getBoolean(
LoadPrefsUtil.PREF_KEY_WAKELOCK,
Boolean.TRUE);
}
public static Boolean startOnBoot(SharedPreferences prefs) {
return prefs.getBoolean(
LoadPrefsUtil.PREF_KEY_START_ON_BOOT,
Boolean.FALSE);
}
public static Boolean pubKeyAuth(SharedPreferences prefs) {
return prefs.getBoolean(
LoadPrefsUtil.PREF_KEY_PUB_KEY_AUTH,
Boolean.FALSE);
}
public static ServerToStart serverToStart(SharedPreferences prefs) {
String whichServerStr = prefs.getString(
LoadPrefsUtil.PREF_KEY_WHICH_SERVER,
ServerToStart.ALL.xmlValue());
return ServerToStart.byXmlVal(whichServerStr);
}
public static Theme theme(SharedPreferences prefs) {
String themeStr = prefs.getString(
PREF_KEY_THEME,
Theme.DARK.xmlValue());
return Theme.byXmlVal(themeStr);
}
public static String ftpPassivePorts(SharedPreferences prefs) {
return prefs.getString(
LoadPrefsUtil.PREF_KEY_FTP_PASSIVE_PORTS,
null);
}
public static int loadPortInsecure(
Logger logger,
SharedPreferences prefs)
{
return loadPort(
logger,
prefs,
PREF_KEY_PORT,
PORT_DEFAULT_VAL,
PORT_DEFAULT_VAL_STR);
}
public static int loadPortSecure(
Logger logger,
SharedPreferences prefs)
{
return loadPort(
logger,
prefs,
PREF_KEY_SECURE_PORT,
SECURE_PORT_DEFAULT_VAL,
SECURE_PORT_DEFAULT_VAL_STR);
}
static int loadPort(
Logger logger,
SharedPreferences prefs,
String prefsKey,
int defaultVal,
String defaultValStr)
{
// load port
int port = defaultVal;
String portStr = prefs.getString(
prefsKey,
defaultValStr);
try {
port = Integer.valueOf(portStr);
} catch (NumberFormatException e) {
logger.info("NumberFormatException while parsing port key '{}'", prefsKey);
}
return port;
}
/**
* @param port Port to validate
* @return True if port is valid, false if invalid.
*/
static boolean validatePort(int port) {
return port > 1024 && port <= 64000;
}
public static PrefsBean loadPrefs(Logger logger, SharedPreferences prefs) {
boolean anonymousLogin = anonymousLogin(prefs);
logger.debug("got anonymousLogin: {}", Boolean.valueOf(anonymousLogin));
String userName = userName(prefs);
logger.debug("got userName: {}", userName);
String password = password(prefs);
logger.debug("got password: {}", password);
File startDir = startDir(prefs);
logger.debug("got startDir: {}", startDir);
boolean announce = announce(prefs);
logger.debug("got announce: {}", Boolean.valueOf(announce));
boolean wakelock = wakelock(prefs);
logger.debug("got wakelock: {}", Boolean.valueOf(wakelock));
boolean pubKeyAuth = pubKeyAuth(prefs);
logger.debug("got pubKeyAuth: {}", Boolean.valueOf(pubKeyAuth));
ServerToStart serverToStart = serverToStart(prefs);
logger.debug("got 'which server': {}", serverToStart);
String ftpPassivePorts = ftpPassivePorts(prefs);
logger.debug("got ftpPassivePorts: {}", ftpPassivePorts);
int port = loadPortInsecure(logger, prefs);
logger.debug("got 'port': {}", Integer.valueOf(port));
int securePort = loadPortSecure(logger, prefs);
logger.debug("got 'secure port': {}", Integer.valueOf(securePort));
// create prefsBean
return new PrefsBean(
userName,
password,
anonymousLogin,
securePort,
startDir,
announce,
wakelock,
pubKeyAuth,
port,
serverToStart,
ftpPassivePorts);
}
}