package org.mozilla.mozstumbler.client; import android.content.Context; import android.content.SharedPreferences; import org.acra.ACRA; import org.mozilla.mozstumbler.BuildConfig; import org.mozilla.mozstumbler.service.AppGlobals; import org.mozilla.mozstumbler.service.Prefs; import org.mozilla.mozstumbler.service.core.logging.ClientLog; import org.mozilla.mozstumbler.service.core.logging.MockAcraLog; import org.mozilla.mozstumbler.svclocator.services.log.LoggerUtil; import org.mozilla.osmdroid.api.IGeoPoint; import org.mozilla.osmdroid.util.GeoPoint; public class ClientPrefs extends Prefs { public static final String MAP_TILE_RESOLUTION_TYPE = "map_tile_res_options"; public static final String KEEP_SCREEN_ON_PREF = "keep_screen_on"; public static final String CRASH_REPORTING = "crash_reporting"; public static final int MIN_BATTERY_DEFAULT = 15; public static final String LAST_VERSION = "last_version"; public static final String IS_MAP_ZOOM_UNLIMITED = "unlimited_zoom"; public static final String IS_SCANNING_PASSIVE = "passive_scanning"; private static final String LOG_TAG = LoggerUtil.makeLogTag(ClientPrefs.class); private static final String LAT_PREF = "lat"; private static final String LON_PREF = "lon"; private static final String IS_FIRST_RUN = "is_first_run"; public static final String ENABLE_OPTION_TO_SHOW_MLS_ON_MAP = "enable_the_option_to_show_mls_on_map"; private static final String DEFAULT_SIMULATION_LAT_LONG = "default_simulation_lat_lon"; private static final String MIN_BATTERY_PCT = "min_battery_pct"; private static final String LB_BASE_URI = "org.mozilla.mozstumbler.client.lb_base_uri"; private static final String LB_SUBMIT_URL = "org.mozilla.mozstumbler.client.lb_submit_url"; private static final String FXA_CLIENT_ID = "org.mozilla.mozstumbler.client.fxa_client_id"; private static final String FXA_PROFILE_SERVER = "org.mozilla.mozstumbler.client.fxa_profile_server"; private static final String FXA_APP_CALLBACK = "org.mozilla.mozstumbler.client.fxa_app_callback"; private static final String FXA_OAUTH2_SERVER = "org.mozilla.mozstumbler.fxa_oauth2_server"; private static final String FXA_SCOPES = "org.mozilla.mozstumbler.client.fxa_scopes"; private static final String FXA_ENABLED = "org.mozilla.mozstumbler.client.fxa_enabled"; protected ClientPrefs(Context context) { super(context); } public static synchronized ClientPrefs getInstance(Context c) { if (sInstance == null || sInstance.getClass() != ClientPrefs.class) { sInstance = new ClientPrefs(c); } return (ClientPrefs) sInstance; } public static synchronized ClientPrefs getInstanceWithoutContext() { if (sInstance != null && sInstance.getClass() != ClientPrefs.class) { return null; } return (ClientPrefs) sInstance; } // For Mozilla Stumbler to use for manual upgrade of old prefs. static String getPrefsFileNameForUpgrade() { return PREFS_FILE; } public synchronized void setFxaEnabled(boolean on) { setBoolPref(FXA_ENABLED, on); } public String getFxaOauth2Server() { return getStringPref(FXA_OAUTH2_SERVER); } public void setFxaScopes(String scopes) { setStringPref(FXA_SCOPES, scopes); } public String getFxaScopes() { return getStringPref(FXA_SCOPES); } public void setFxaOauth2Server(String uri) { setStringPref(FXA_OAUTH2_SERVER, uri); } public void setFxaAppCallback(String callback_site) { setStringPref(FXA_APP_CALLBACK, callback_site); } public String getFxaAppCallback() { return getStringPref(FXA_APP_CALLBACK); } public String getLbBaseURI() { return getStringPref(LB_BASE_URI); } public void setLbBaseURI(String base_uri) { setStringPref(LB_BASE_URI, base_uri); } public String getLbSubmitUrl() { return getStringPref(LB_SUBMIT_URL); } public void setLbSubmitURL(String url) { setStringPref(LB_SUBMIT_URL, url); } public long getLastVersion() { return getPrefs().getLong(LAST_VERSION, 0); } public void setDontShowChangelog() { setLongPref(LAST_VERSION, BuildConfig.VERSION_CODE); } public void clearSimulationStart() { SharedPreferences.Editor editor = getPrefs().edit(); editor.remove(LAT_PREF); editor.remove(LON_PREF); apply(editor); } public synchronized GeoPoint getLastMapCenter() { final float lat = getPrefs().getFloat(LAT_PREF, 0); final float lon = getPrefs().getFloat(LON_PREF, 0); return new GeoPoint(lat, lon); } public synchronized void setLastMapCenter(IGeoPoint center) { SharedPreferences.Editor editor = getPrefs().edit(); editor.putFloat(LAT_PREF, (float) center.getLatitude()); editor.putFloat(LON_PREF, (float) center.getLongitude()); if (AppGlobals.isDebug) { // Save the location as the start for simulations setSimulationLat((float) center.getLatitude()); setSimulationLon((float) center.getLongitude()); } apply(editor); } public boolean getKeepScreenOn() { return getBoolPrefWithDefault(KEEP_SCREEN_ON_PREF, false); } public void setKeepScreenOn(boolean on) { setBoolPref(KEEP_SCREEN_ON_PREF, on); } /****************/ public boolean showMLSQueryResults() { return getBoolPrefWithDefault(ENABLE_OPTION_TO_SHOW_MLS_ON_MAP, false); } public void enableMLSQueryResults(boolean isEnabled) { setBoolPref(ENABLE_OPTION_TO_SHOW_MLS_ON_MAP, isEnabled); } /****************/ public boolean isFirstRun() { return getBoolPrefWithDefault(IS_FIRST_RUN, true); } public void setFirstRun(boolean b) { setBoolPref(IS_FIRST_RUN, b); } public boolean isCrashReportingEnabled() { // default to true for GITHUB build return getBoolPrefWithDefault(CRASH_REPORTING, BuildConfig.GITHUB); } public void setCrashReportingEnabled(boolean isOn) { setBoolPref(CRASH_REPORTING, isOn); if (isOn) { ClientLog.d(LOG_TAG, "Enabled crash reporting"); ACRA.setLog(MockAcraLog.getOriginalLog()); } else { ClientLog.d(LOG_TAG, "Disabled crash reporting"); ACRA.setLog(new MockAcraLog()); } } public boolean isDefaultSimulationLatLon() { return getBoolPrefWithDefault(DEFAULT_SIMULATION_LAT_LONG, true); } public void wroteSimulationLatLon() { setBoolPref(DEFAULT_SIMULATION_LAT_LONG, false); } public void setMapTileResolutionType(int mapTileResolutionType) { if (mapTileResolutionType >= MapTileResolutionOptions.values().length) { mapTileResolutionType = 0; } setMapTileResolutionType(MapTileResolutionOptions.values()[mapTileResolutionType]); } public MapTileResolutionOptions getMapTileResolutionType() { int i = getPrefs().getInt(MAP_TILE_RESOLUTION_TYPE, 0); if (i >= MapTileResolutionOptions.values().length) { i = 0; } return MapTileResolutionOptions.values()[i]; } public void setMapTileResolutionType(MapTileResolutionOptions mapTileResolutionType) { SharedPreferences.Editor editor = getPrefs().edit(); editor.putInt(MAP_TILE_RESOLUTION_TYPE, mapTileResolutionType.ordinal()); apply(editor); } public int getMinBatteryPercent() { return getPrefs().getInt(MIN_BATTERY_PCT, MIN_BATTERY_DEFAULT); } public void setMinBatteryPercent(int percent) { SharedPreferences.Editor editor = getPrefs().edit(); editor.putInt(MIN_BATTERY_PCT, percent); apply(editor); } public void setFxaClientId(String fxaClientId) { setStringPref(FXA_CLIENT_ID, fxaClientId); } public String getFxaClientId() { return getStringPref(FXA_CLIENT_ID); } public String getFxaProfileServer() { return getStringPref(FXA_PROFILE_SERVER); } public void setFxaProfileServer(String fxaProfileServer) { setStringPref(FXA_PROFILE_SERVER, fxaProfileServer); } public synchronized boolean isFxaEnabled() { return getBoolPrefWithDefault(FXA_ENABLED, false); } public enum MapTileResolutionOptions {Default, HighRes, LowRes, NoMap} public boolean isMapZoomUnlimited() { return getBoolPrefWithDefault(IS_MAP_ZOOM_UNLIMITED, false); } public void setIsMapZoomUnlimited(boolean isOn) { setBoolPref(IS_MAP_ZOOM_UNLIMITED, isOn); } public boolean isScanningPassive() { return getBoolPrefWithDefault(IS_SCANNING_PASSIVE, false); } public void setIsScanningPassive(boolean isOn) { setBoolPref(IS_SCANNING_PASSIVE, isOn); } }