X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosPreferences.java;h=43fc9f22441fd7f27fa246f82d3c251587657d27;hp=5aa45d3f5d992745bf03afceddd983bde97ecb37;hb=21d176f161b90f18f236ef887cef9676d712eee3;hpb=4231d68bae69d9a7d1f52205002db452cd5f986d diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index 5aa45d3f..43fc9f22 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -15,10 +15,11 @@ * 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; @@ -42,7 +43,9 @@ public class AltosPreferences { 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"; @@ -118,6 +121,13 @@ public class AltosPreferences { public final static String unitsPreference = "IMPERIAL-UNITS"; + /* Maps cache size preference name */ + final static String mapCachePreference = "MAP-CACHE"; + + static LinkedList map_cache_listeners; + + public static int map_cache = 9; + public static AltosFrequency[] load_common_frequencies() { AltosFrequency[] frequencies = null; boolean existing = false; @@ -208,6 +218,9 @@ public class AltosPreferences { common_frequencies = load_common_frequencies(); AltosConvert.imperial_units = backend.getBoolean(unitsPreference, false); + + map_cache = backend.getInt(mapCachePreference, 9); + map_cache_listeners = new LinkedList(); } public static void flush_preferences() { @@ -338,6 +351,11 @@ public class AltosPreferences { 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 { @@ -350,30 +368,73 @@ public class AltosPreferences { 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 list_states() { + String[] keys = backend.keys(); + ArrayList states = new ArrayList(); + + 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; } @@ -548,4 +609,33 @@ public class AltosPreferences { 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; + } + } }