+ 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 {
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+
+ AltosSavedState saved_state = new AltosSavedState(state, listener_state);
+ oos.writeObject(saved_state);
+
+ byte[] bytes = baos.toByteArray();
+
+ 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) {
+ 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;
+ }
+