*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_7;
+package org.altusmetrum.altoslib_12;
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 frequency_count = "COUNT";
public final static String frequency_format = "FREQUENCY-%d";
public final static String description_format = "DESCRIPTION-%d";
+ public final static String frequenciesPreference = "FREQUENCIES-1";
/* Units preference */
public static int map_cache = 9;
+ final static String mapTypePreference = "MAP-TYPE";
+ static int map_type;
+
public static AltosFrequency[] load_common_frequencies() {
AltosFrequency[] frequencies = null;
- boolean existing = false;
- existing = backend.nodeExists(common_frequencies_node_name);
-
- if (existing) {
- AltosPreferencesBackend node = backend.node(common_frequencies_node_name);
- int count = node.getInt(frequency_count, 0);
- frequencies = new AltosFrequency[count];
- for (int i = 0; i < count; i++) {
- double frequency;
- String description;
-
- frequency = node.getDouble(String.format(frequency_format, i), 0.0);
- description = node.getString(String.format(description_format, i), null);
- frequencies[i] = new AltosFrequency(frequency, description);
+ try {
+ AltosJson json = AltosJson.fromString(backend.getString(frequenciesPreference,
+ null));
+ frequencies = (AltosFrequency[]) json.make((new AltosFrequency[1]).getClass());
+ } catch (Exception e) {
+ }
+
+ if (frequencies == null) {
+ if (backend.nodeExists(common_frequencies_node_name)) {
+ AltosPreferencesBackend node = backend.node(common_frequencies_node_name);
+ int count = node.getInt(frequency_count, 0);
+
+ if (count > 0) {
+ frequencies = new AltosFrequency[count];
+ for (int i = 0; i < count; i++) {
+ double frequency;
+ String description;
+
+ frequency = node.getDouble(String.format(frequency_format, i), 0.0);
+ description = node.getString(String.format(description_format, i), null);
+ frequencies[i] = new AltosFrequency(frequency, description);
+ }
+ }
}
- } else {
+ }
+
+ if (frequencies == null) {
frequencies = new AltosFrequency[10];
for (int i = 0; i < 10; i++) {
frequencies[i] = new AltosFrequency(434.550 + i * .1,
return frequencies;
}
- public static void save_common_frequencies(AltosFrequency[] frequencies) {
- AltosPreferencesBackend node = backend.node(common_frequencies_node_name);
-
- node.putInt(frequency_count, frequencies.length);
- for (int i = 0; i < frequencies.length; i++) {
- node.putDouble(String.format(frequency_format, i), frequencies[i].frequency);
- node.putString(String.format(description_format, i), frequencies[i].description);
- }
+ public static void save_common_frequencies() {
+ AltosJson json = new AltosJson(common_frequencies);
+ backend.putString(frequenciesPreference, json.toString());
+ flush_preferences();
}
+
public static int launcher_serial;
public static int launcher_channel;
map_cache = backend.getInt(mapCachePreference, 9);
map_cache_listeners = new LinkedList<AltosMapCacheListener>();
+ map_type = backend.getInt(mapTypePreference, AltosMap.maptype_hybrid);
}
public static void flush_preferences() {
}
}
- public static void set_state(int serial, AltosState state, AltosListenerState listener_state) {
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ public static void set_state(AltosState state, int serial) {
- try {
- ObjectOutputStream oos = new ObjectOutputStream(baos);
-
- AltosSavedState saved_state = new AltosSavedState(state, listener_state);
- oos.writeObject(saved_state);
+ synchronized(backend) {
+ backend.putJson(String.format(statePreferenceFormat, serial), new AltosJson(state));
+ backend.putInt(statePreferenceLatest, serial);
+ flush_preferences();
+ }
+ }
- byte[] bytes = baos.toByteArray();
+ public static ArrayList<Integer> list_states() {
+ String[] keys = backend.keys();
+ ArrayList<Integer> states = new ArrayList<Integer>();
- synchronized(backend) {
- backend.putBytes(String.format(statePreferenceFormat, serial), bytes);
- flush_preferences();
+ for (String key : keys) {
+ if (key.startsWith(statePreferenceHead)) {
+ try {
+ int serial = AltosParse.parse_int(key.substring(statePreferenceHead.length()));
+ states.add(serial);
+ } catch (ParseException pe) {
+ }
}
- } catch (IOException ie) {
}
+ return states;
}
- public static AltosSavedState state(int serial) {
- byte[] bytes = null;
-
+ public static void remove_state(int serial) {
synchronized(backend) {
- bytes = backend.getBytes(String.format(statePreferenceFormat, serial), null);
+ backend.remove(String.format(statePreferenceFormat, serial));
+ flush_preferences();
}
+ }
- if (bytes == null)
- return null;
-
- ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+ public static int latest_state() {
+ int latest = 0;
+ synchronized (backend) {
+ latest = backend.getInt(statePreferenceLatest, 0);
+ }
+ return latest;
+ }
- try {
- ObjectInputStream ois = new ObjectInputStream(bais);
- AltosSavedState saved_state = (AltosSavedState) ois.readObject();
- return saved_state;
- } catch (IOException ie) {
- } catch (ClassNotFoundException ce) {
+ public static AltosState state(int serial) {
+ synchronized(backend) {
+ try {
+ AltosJson json = backend.getJson(String.format(statePreferenceFormat, serial));
+ if (json != null)
+ return (AltosState) (json.make(AltosState.class));
+ } catch (Exception e) {
+ }
+ return null;
}
- return null;
}
public static void set_scanning_telemetry(int new_scanning_telemetry) {
public static void set_common_frequencies(AltosFrequency[] frequencies) {
synchronized(backend) {
common_frequencies = frequencies;
- save_common_frequencies(frequencies);
- flush_preferences();
+
+ save_common_frequencies();
}
}
return map_cache;
}
}
+
+ static LinkedList<AltosMapTypeListener> map_type_listeners;
+
+ public static void set_map_type(int map_type) {
+ synchronized(backend) {
+ AltosPreferences.map_type = map_type;
+ backend.putInt(mapTypePreference, map_type);
+ flush_preferences();
+ }
+ if (map_type_listeners != null) {
+ for (AltosMapTypeListener l : map_type_listeners) {
+ l.map_type_changed(map_type);
+ }
+ }
+ }
+
+ public static int map_type() {
+ synchronized(backend) {
+ return map_type;
+ }
+ }
+
+ public static void register_map_type_listener(AltosMapTypeListener l) {
+ synchronized(backend) {
+ if (map_type_listeners == null)
+ map_type_listeners = new LinkedList<AltosMapTypeListener>();
+ map_type_listeners.add(l);
+ }
+ }
+
+ public static void unregister_map_type_listener(AltosMapTypeListener l) {
+ synchronized(backend) {
+ map_type_listeners.remove(l);
+ }
+ }
}