/* * Copyright (C) 2013-2014 Sony Computer Science Laboratories, Inc. All Rights Reserved. * Copyright (C) 2014 Sony Corporation. All Rights Reserved. */ package com.sonycsl.Kadecot.server; import android.content.Context; import android.content.SharedPreferences; import com.sonycsl.Kadecot.call.ErrorResponse; import com.sonycsl.Kadecot.call.Response; import com.sonycsl.Kadecot.device.DeviceManager; import org.json.JSONException; import org.json.JSONObject; public class ServerSettings { private static String PREFERENCES_NAME = "Settings"; private static String KEY_LOCATION_LAT = "location_lat"; private static String KEY_LOCATION_LNG = "location_lng"; private static String KEY_WIFI_BSSID = "wifi_bssid"; private static String KEY_WEBSOCKET_SERVER = "websocket_server"; private static String KEY_JSONP_SERVER = "jsonp_server"; private static String KEY_PERSISTENT_MODE = "persistent_mode"; private static String KEY_SNAP_SERVER = "snap_server"; private static final String KEY_LATITUDE = "latitude"; private static final String KEY_LONGITUDE = "longitude"; public enum ExecutionMode { APPLICATION, APPLICATION_BACKGROUND, WEBSOCKET_SERVER, WEBSOCKET_HTTP_SERVER, }; private static ServerSettings sInstance = null; private final Context mContext; private final SharedPreferences mPreferences; private ServerManager mServerManager; private ServerNetwork mServerNetwork; private DeviceManager mDeviceManager; private ServerSettings(Context context) { mContext = context; mPreferences = mContext.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE); } public static synchronized ServerSettings getInstance(Context context) { if (sInstance == null) { sInstance = new ServerSettings(context); } return sInstance; } public void fullInitialize() { mPreferences.edit().clear().commit(); getDeviceManager().deleteAllDeviceData(); getServerManager().onChangedServerSettings(); } public String[] getLocation() { String[] ret = new String[2]; ret[0] = mPreferences.getString(KEY_LOCATION_LAT, "35.681183"); ret[1] = mPreferences.getString(KEY_LOCATION_LNG, "139.765931"); return ret; } public void setLocation(String lat, String lng) { mPreferences.edit().putString(KEY_LOCATION_LAT, lat).putString(KEY_LOCATION_LNG, lng) .commit(); getServerManager().onChangedServerSettings(); } public double[] getLocationDouble() { String[] loc = getLocation(); double[] ret = { Double.parseDouble(loc[0]), Double.parseDouble(loc[1]) }; return ret; } public JSONObject getLocationJSONObject() { JSONObject ret = new JSONObject(); double[] dLocation = getLocationDouble(); try { ret.put(KEY_LATITUDE, dLocation[0]); ret.put(KEY_LONGITUDE, dLocation[1]); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ret; } /* * public JSONArray getLocationJSONArray() { JSONArray location = new * JSONArray(); double[] dLocation = getLocationDouble(); try { * location.put(dLocation[0]); location.put(dLocation[1]); } catch * (JSONException e) { // TODO Auto-generated catch block * e.printStackTrace(); } return location; } */ // network public String getWifiBSSID() { return mPreferences.getString(KEY_WIFI_BSSID, ""); } private void setWifiBSSID(String bssid) { mPreferences.edit().putString(KEY_WIFI_BSSID, bssid).commit(); // getNetwork().checkConnection(); getServerManager().onChangedServerSettings(); } public void removeWifiBSSID() { mPreferences.edit().remove(KEY_WIFI_BSSID).commit(); // getNetwork().checkConnection(); getServerManager().onChangedServerSettings(); } public Response registerNetwork() { String bssid = getNetwork().getCurrentConnectionBSSID(); if (bssid != null) { setWifiBSSID(bssid); return new Response(null); } else { return new ErrorResponse(ErrorResponse.INTERNAL_ERROR_CODE, "cannot register this network"); } } public Response unregisterNetwork() { removeWifiBSSID(); return new Response(null); } public void enableWebSocketServer(boolean enabled) { mPreferences.edit().putBoolean(KEY_WEBSOCKET_SERVER, enabled).commit(); getServerManager().onChangedServerSettings(); } public boolean isEnabledWebSocketServer() { return mPreferences.getBoolean(KEY_WEBSOCKET_SERVER, true); } public void enableJSONPServer(boolean enabled) { mPreferences.edit().putBoolean(KEY_JSONP_SERVER, enabled).commit(); getServerManager().onChangedServerSettings(); } public boolean isEnabledJSONPServer() { return mPreferences.getBoolean(KEY_JSONP_SERVER, false); } public void enableSnapServer(boolean enabled) { mPreferences.edit().putBoolean(KEY_SNAP_SERVER, enabled).commit(); getServerManager().onChangedServerSettings(); } public boolean isEnabledSnapServer() { return mPreferences.getBoolean(KEY_SNAP_SERVER, false); } public void enablePersistentMode(boolean enabled) { mPreferences.edit().putBoolean(KEY_PERSISTENT_MODE, enabled).commit(); getServerManager().onChangedServerSettings(); } public boolean isEnabledPersistentMode() { return mPreferences.getBoolean(KEY_PERSISTENT_MODE, true); } private ServerManager getServerManager() { if (mServerManager == null) { mServerManager = ServerManager.getInstance(mContext); } return mServerManager; } private DeviceManager getDeviceManager() { if (mDeviceManager == null) { mDeviceManager = DeviceManager.getInstance(mContext); } return mDeviceManager; } private ServerNetwork getNetwork() { if (mServerNetwork == null) { mServerNetwork = ServerNetwork.getInstance(mContext); } return mServerNetwork; } }