* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_6;
+package org.altusmetrum.altoslib_10;
import java.io.*;
import java.util.*;
+import java.text.*;
public class AltosPreferences {
public static AltosPreferencesBackend backend = null;
public final static String logfilePreferenceFormat = "LOGFILE-%d";
/* state preference name */
+ public final static String statePreferenceHead = "STATE-";
public final static String statePreferenceFormat = "STATE-%d";
+ public final static String statePreferenceLatest = "STATE-LATEST";
/* voice preference name */
public final static String voicePreference = "VOICE";
public final static String unitsPreference = "IMPERIAL-UNITS";
+ /* Maps cache size preference name */
+ final static String mapCachePreference = "MAP-CACHE";
+
+ static LinkedList<AltosMapCacheListener> map_cache_listeners;
+
+ public static int map_cache = 9;
+
public static AltosFrequency[] load_common_frequencies() {
AltosFrequency[] frequencies = null;
boolean existing = false;
common_frequencies = load_common_frequencies();
AltosConvert.imperial_units = backend.getBoolean(unitsPreference, false);
+
+ map_cache = backend.getInt(mapCachePreference, 9);
+ map_cache_listeners = new LinkedList<AltosMapCacheListener>();
}
public static void flush_preferences() {
public static void set_state(int serial, AltosState state, AltosListenerState listener_state) {
+ backend.debug("set_state for %d pos %g,%g\n",
+ serial,
+ state.gps != null ? state.gps.lat : 0.0,
+ state.gps != null ? state.gps.lon : 0.0);
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
synchronized(backend) {
backend.putBytes(String.format(statePreferenceFormat, serial), bytes);
+ backend.putInt(statePreferenceLatest, serial);
flush_preferences();
}
} catch (IOException ie) {
+ backend.debug("set_state failed %s\n", ie.toString());
+ }
+ }
+
+ public static ArrayList<Integer> list_states() {
+ String[] keys = backend.keys();
+ ArrayList<Integer> states = new ArrayList<Integer>();
+
+ for (String key : keys) {
+ if (key.startsWith(statePreferenceHead)) {
+ backend.debug("list_states %s\n", key);
+ try {
+ int serial = AltosParse.parse_int(key.substring(statePreferenceHead.length()));
+ states.add(serial);
+ } catch (ParseException pe) {
+ }
+ }
}
+ return states;
+ }
+
+ public static void remove_state(int serial) {
+ synchronized(backend) {
+ backend.remove(String.format(statePreferenceFormat, serial));
+ }
+ }
+
+ public static int latest_state() {
+ int latest = 0;
+ synchronized (backend) {
+ latest = backend.getInt(statePreferenceLatest, 0);
+ }
+ return latest;
}
public static AltosSavedState state(int serial) {
byte[] bytes = null;
+ backend.debug("get state %d\n", serial);
+
synchronized(backend) {
bytes = backend.getBytes(String.format(statePreferenceFormat, serial), null);
}
- if (bytes == null)
+ if (bytes == null) {
+ backend.debug("no state for %d\n", serial);
return null;
+ }
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
try {
ObjectInputStream ois = new ObjectInputStream(bais);
AltosSavedState saved_state = (AltosSavedState) ois.readObject();
+ backend.debug("got saved state for %d: %g,%g\n",
+ serial,
+ saved_state.state.gps != null ? saved_state.state.gps.lat : 0.0,
+ saved_state.state.gps != null ? saved_state.state.gps.lon : 0.0);
return saved_state;
} catch (IOException ie) {
+ backend.debug("IO exception %s\n", ie.toString());
} catch (ClassNotFoundException ce) {
+ backend.debug("ClassNotFoundException %s\n", ce.toString());
}
return null;
}
units_listeners.remove(l);
}
}
+
+
+ public static void register_map_cache_listener(AltosMapCacheListener l) {
+ synchronized(backend) {
+ map_cache_listeners.add(l);
+ }
+ }
+
+ public static void unregister_map_cache_listener(AltosMapCacheListener l) {
+ synchronized (backend) {
+ map_cache_listeners.remove(l);
+ }
+ }
+
+ public static void set_map_cache(int new_map_cache) {
+ synchronized(backend) {
+ map_cache = new_map_cache;
+ backend.putInt(mapCachePreference, map_cache);
+ flush_preferences();
+ for (AltosMapCacheListener l: map_cache_listeners)
+ l.map_cache_changed(map_cache);
+ }
+ }
+
+ public static int map_cache() {
+ synchronized(backend) {
+ return map_cache;
+ }
+ }
}