package carnero.cgeo;
import java.util.Locale;
import java.util.Map;
import java.util.HashMap;
import carnero.cgeo.googlemaps.googleMapFactory;
import carnero.cgeo.mapinterfaces.MapFactory;
import carnero.cgeo.mapsforge.mfMapFactory;
import android.os.Environment;
import android.content.Intent;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.util.Log;
public class cgSettings {
public enum mapSourceEnum {
googleMap,
mapsforgeMapnik,
mapsforgeOsmarender,
mapsforgeCycle,
mapsforgeOffline;
static mapSourceEnum fromInt(int id) {
mapSourceEnum[] values = mapSourceEnum.values();
if (id >= 0 && id < values.length) {
return values[id];
} else {
return googleMap;
}
}
}
// constants
public final static int unitsMetric = 1;
public final static int unitsImperial = 2;
public final static int mapSatellite = 1;
public final static int mapClassic = 2;
public final static String cache = ".cgeo";
public final static String analytics = "UA-1103507-15";
// twitter api keys
public final static String keyConsumerPublic = "RFafPiNi3xRhcS1TPE3wTw";
public final static String keyConsumerSecret = "7iDJprNPI9hzRwWhpzycSr9SPZMFrdVdsxD2OauI9k";
// version
public int version = 0;
// skin
public int skin = 0;
public int buttonActive = R.drawable.action_button_dark;
public int buttonInactive = R.drawable.action_button_dark_off;
public int buttonPressed = R.drawable.action_button_dark_pressed;
// settings
public boolean loaded = false;
public boolean hideMySearch = false;
public int helper = 0;
public int initialized = 0;
public String languages = null;
public int cachesFound = 0;
public int autoLoadDesc = 0;
public int units = unitsMetric;
public int livelist = 1;
public int maptype = mapSatellite;
public int mapzoom = 14;
public int maplive = 1;
public int maptrail = 1;
public boolean useEnglish = false;
public boolean showCaptcha = false;
public int excludeMine = 0;
public int excludeDisabled = 0;
public int storeOfflineMaps = 0;
public int asBrowser = 1;
public int useCompass = 1;
public int useGNavigation = 1;
public int showAddress = 1;
public int publicLoc = 0;
public int twitter = 0;
public int altCorrection = 0;
public String signature = null;
public String cacheType = null;
public String tokenPublic = null;
public String tokenSecret = null;
// usable values
public static final String tag = "c:geo";
// preferences file
public static final String preferences = "cgeo.pref";
// private variables
private Context context = null;
private SharedPreferences prefs = null;
private String username = null;
private String password = null;
private String passVote = null;
// maps
public static final int MAP_GOOGLE = 0;
public static final int MAP_MF = 1;
public MapFactory mapFactory = null;
public mapSourceEnum mapProviderUsed = mapSourceEnum.googleMap;
public mapSourceEnum mapProvider = mapSourceEnum.googleMap;
public String mapFile = null;
public cgSettings(Context contextIn, SharedPreferences prefsIn) {
context = contextIn;
prefs = prefsIn;
load();
}
public void load() {
version = prefs.getInt("version", 0);
initialized = prefs.getInt("initialized", 0);
helper = prefs.getInt("helper", 0);
skin = prefs.getInt("skin", 0);
setSkinDefaults();
languages = prefs.getString("languages", null);
cachesFound = prefs.getInt("found", 0);
autoLoadDesc = prefs.getInt("autoloaddesc", 0);
units = prefs.getInt("units", 1);
livelist = prefs.getInt("livelist", 1);
maptype = prefs.getInt("maptype", 1);
maplive = prefs.getInt("maplive", 1);
mapzoom = prefs.getInt("mapzoom", 14);
maptrail = prefs.getInt("maptrail", 1);
useEnglish = prefs.getBoolean("useenglish", false);
showCaptcha = prefs.getBoolean("showcaptcha", false);
excludeMine = prefs.getInt("excludemine", 0);
excludeDisabled = prefs.getInt("excludedisabled", 0);
storeOfflineMaps = prefs.getInt("offlinemaps", 1);
asBrowser = prefs.getInt("asbrowser", 1);
useCompass = prefs.getInt("usecompass", 1);
useGNavigation = prefs.getInt("usegnav", 1);
showAddress = prefs.getInt("showaddress", 1);
publicLoc = prefs.getInt("publicloc", 0);
twitter = prefs.getInt("twitter", 0);
altCorrection = prefs.getInt("altcorrection", 0);
signature = prefs.getString("signature", null);
cacheType = prefs.getString("cachetype", null);
tokenPublic = prefs.getString("tokenpublic", null);
tokenSecret = prefs.getString("tokensecret", null);
mapFile = prefs.getString("mfmapfile", null);
mapProvider = mapSourceEnum.fromInt(prefs.getInt("mapsource", 0));
setLanguage(useEnglish);
}
private void setSkinDefaults() {
if (skin == 1) {
buttonActive = R.drawable.action_button_light;
buttonInactive = R.drawable.action_button_light_off;
buttonPressed = R.drawable.action_button_light_pressed;
} else {
skin = 0;
buttonActive = R.drawable.action_button_dark;
buttonInactive = R.drawable.action_button_dark_off;
buttonPressed = R.drawable.action_button_dark_pressed;
}
}
public void setSkin(int skinIn) {
if (skin == 1) {
skin = 1;
setSkinDefaults();
} else {
skin = 0;
setSkinDefaults();
}
}
public void setLanguage(boolean useEnglish) {
Locale locale = Locale.getDefault();
if (useEnglish) {
locale = new Locale("en");
}
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
}
public void reloadTwitterTokens() {
tokenPublic = prefs.getString("tokenpublic", null);
tokenSecret = prefs.getString("tokensecret", null);
}
public void reloadCacheType() {
cacheType = prefs.getString("cachetype", null);
}
public String getStorage() {
return getStorageSpecific(null)[0];
}
public String getStorageSec() {
return getStorageSpecific(null)[1];
}
public String[] getStorageSpecific(Boolean hidden) {
String[] storage = new String[2];
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
storage[0] = Environment.getExternalStorageDirectory() + "/" + cache + "/";
storage[1] = Environment.getDataDirectory() + "/data/carnero.cgeo/" + cache + "/";
} else {
storage[0] = Environment.getDataDirectory() + "/data/carnero.cgeo/" + cache + "/";
storage[1] = Environment.getExternalStorageDirectory() + "/" + cache + "/";
}
return storage;
}
public boolean isLogin() {
final String preUsername = prefs.getString("username", null);
final String prePassword = prefs.getString("password", null);
if (preUsername == null || prePassword == null || preUsername.length() == 0 || prePassword.length() == 0) {
return false;
} else {
return true;
}
}
public HashMap<String, String> getLogin() {
final HashMap<String, String> login = new HashMap<String, String>();
if (username == null || password == null) {
final String preUsername = prefs.getString("username", null);
final String prePassword = prefs.getString("password", null);
if (initialized == 0 && (preUsername == null || prePassword == null)) {
Intent initIntent = new Intent(context, cgeoinit.class);
context.startActivity(initIntent);
final SharedPreferences.Editor prefsEdit = prefs.edit();
prefsEdit.putInt("initialized", 1);
prefsEdit.commit();
initialized = 1;
return null;
} else if (initialized == 1 && (preUsername == null || prePassword == null)) {
return null;
}
login.put("username", preUsername);
login.put("password", prePassword);
username = preUsername;
password = prePassword;
} else {
login.put("username", username);
login.put("password", password);
}
return login;
}
public String getUsername() {
String user = null;
if (username == null) {
user = prefs.getString("username", null);
} else {
user = username;
}
return user;
}
public boolean setLogin(String username, String password) {
final SharedPreferences.Editor prefsEdit = prefs.edit();
if (username == null || username.length() == 0 || password == null || password.length() == 0) {
// erase username and password
prefsEdit.remove("username");
prefsEdit.remove("password");
} else {
// save username and password
prefsEdit.putString("username", username);
prefsEdit.putString("password", password);
}
this.username = username;
this.password = password;
return prefsEdit.commit();
}
public boolean isGCvoteLogin() {
final String preUsername = prefs.getString("username", null);
final String prePassword = prefs.getString("pass-vote", null);
if (preUsername == null || prePassword == null || preUsername.length() == 0 || prePassword.length() == 0) {
return false;
} else {
return true;
}
}
public boolean setGCvoteLogin(String password) {
final SharedPreferences.Editor prefsEdit = prefs.edit();
if (password == null || password.length() == 0) {
// erase password
prefsEdit.remove("pass-vote");
} else {
// save password
prefsEdit.putString("pass-vote", password);
}
passVote = password;
return prefsEdit.commit();
}
public HashMap<String, String> getGCvoteLogin() {
final HashMap<String, String> login = new HashMap<String, String>();
if (username == null || password == null) {
final String preUsername = prefs.getString("username", null);
final String prePassword = prefs.getString("pass-vote", null);
if (preUsername == null || prePassword == null) {
return null;
}
login.put("username", preUsername);
login.put("password", prePassword);
username = preUsername;
passVote = prePassword;
} else {
login.put("username", username);
login.put("password", password);
}
return login;
}
public boolean setSignature(String signature) {
final SharedPreferences.Editor prefsEdit = prefs.edit();
if (signature == null || signature.length() == 0) {
// erase signature
prefsEdit.remove("signature");
} else {
// save signature
prefsEdit.putString("signature", signature);
}
this.signature = signature;
return prefsEdit.commit();
}
public String getSignature() {
return prefs.getString("signature", null);
}
public boolean setLanguages(String languages) {
final SharedPreferences.Editor prefsEdit = prefs.edit();
if (languages == null || languages.length() == 0) {
// erase languages
prefsEdit.remove("languages");
} else {
// save langauges
languages = languages.toLowerCase();
languages = languages.replaceAll("([^a-z]+)", " ");
languages = languages.replaceAll("([ ]+)", " ");
prefsEdit.putString("languages", languages);
}
this.languages = languages;
return prefsEdit.commit();
}
public boolean setAltCorrection(int altitude) {
final SharedPreferences.Editor prefsEdit = prefs.edit();
prefsEdit.putInt("altcorrection", altitude);
altCorrection = altitude;
return prefsEdit.commit();
}
public String getLanguages() {
return prefs.getString("languages", null);
}
public void deleteCookies() {
SharedPreferences.Editor prefsEdit = prefs.edit();
// delete cookies
Map<String, ?> prefsValues = prefs.getAll();
if (prefsValues != null && prefsValues.size() > 0) {
Log.i(cgSettings.tag, "Removing cookies");
Object[] keys = prefsValues.keySet().toArray();
for (int i = 0; i < keys.length; i++) {
if (keys[i].toString().length() > 7 && keys[i].toString().substring(0, 7).equals("cookie_") == true) {
prefsEdit.remove(keys[i].toString());
}
}
}
prefsEdit.commit();
}
public String setCacheType(String cacheTypeIn) {
final SharedPreferences.Editor edit = prefs.edit();
edit.putString("cachetype", cacheTypeIn);
edit.commit();
cacheType = cacheTypeIn;
return cacheType;
}
public void liveMapEnable() {
final SharedPreferences.Editor edit = prefs.edit();
edit.putInt("maplive", 1);
if (edit.commit() == true) {
maplive = 1;
}
}
public void liveMapDisable() {
final SharedPreferences.Editor edit = prefs.edit();
edit.putInt("maplive", 0);
if (edit.commit() == true) {
maplive = 0;
}
}
public int getLastList() {
int listId = prefs.getInt("lastlist", -1);
return listId;
}
public void saveLastList(int listId) {
final SharedPreferences.Editor edit = prefs.edit();
edit.putInt("lastlist", listId);
edit.commit();
}
public MapFactory getMapFactory() {
if (mapProvider == mapSourceEnum.googleMap) {
if (mapProviderUsed != mapSourceEnum.googleMap || mapFactory == null) {
mapFactory = new googleMapFactory();
mapProviderUsed = mapProvider;
}
} else if (mapProvider != mapSourceEnum.googleMap) {
if (mapProviderUsed == mapSourceEnum.googleMap || mapFactory == null) {
mapFactory = new mfMapFactory();
mapProviderUsed = mapProvider;
}
}
return mapFactory;
}
public String getMapFile() {
return mapFile;
}
public boolean setMapFile(String mapFileIn) {
final SharedPreferences.Editor prefsEdit = prefs.edit();
prefsEdit.putString("mfmapfile", mapFileIn);
mapFile = mapFileIn;
return prefsEdit.commit();
}
public Context getContext() {
return context;
}
}