altosdroid: Get rid of on-line only maps tab
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / AltosDroid.java
index 942ebbd5f06d1b4b50441b0677fb948ad23ec54c..f664510582d291a6f902052cdb2a93ed35f8d502 100644 (file)
@@ -248,9 +248,14 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                }
        }
 
-       boolean registered_units_listener;
-
        int     current_serial;
+       long    switch_time;
+
+       void set_switch_time() {
+               switch_time = System.currentTimeMillis();
+       }
+
+       boolean registered_units_listener;
 
        void update_state(TelemetryState new_telemetry_state) {
 
@@ -269,11 +274,35 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
 
                update_title(telemetry_state);
 
-               AltosDebug.debug("update state current serial %d\n", current_serial);
-
                AltosState      state = null;
-               if (telemetry_state.states.containsKey(current_serial))
+               boolean         aged = true;
+
+               if (telemetry_state.states.containsKey(current_serial)) {
                        state = telemetry_state.states.get(current_serial);
+                       int age = state_age(state);
+                       if (age < 20)
+                               aged = false;
+                       if (switch_time != 0 && (switch_time - state.received_time) > 0)
+                               aged = true;
+               }
+
+               if (aged) {
+                       AltosState      newest_state = null;
+                       int             newest_age = 0;
+
+                       for (int serial : telemetry_state.states.keySet()) {
+                               AltosState      existing = telemetry_state.states.get(serial);
+                               int             existing_age = state_age(existing);
+
+                               if (newest_state == null || existing_age < newest_age) {
+                                       newest_state = existing;
+                                       newest_age = existing_age;
+                               }
+                       }
+
+                       if (newest_state != null)
+                               state = newest_state;
+               }
 
                update_ui(telemetry_state, state, telemetry_state.location);
 
@@ -474,12 +503,20 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                return tab_view;
        }
 
+       public void set_map_source(int source) {
+               for (AltosDroidTab mTab : mTabs)
+                       mTab.set_map_source(source);
+       }
+
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                AltosDebug.init(this);
                AltosDebug.debug("+++ ON CREATE +++");
 
+               // Initialise preferences
+               AltosDroidPreferences.init(this);
+
                fm = getSupportFragmentManager();
 
                // Set up the window layout
@@ -499,7 +536,6 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                mTabsAdapter.addTab(mTabHost.newTabSpec("descent").setIndicator(create_tab_view("Descent")), TabDescent.class, null);
                mTabsAdapter.addTab(mTabHost.newTabSpec("landed").setIndicator(create_tab_view("Landed")), TabLanded.class, null);
                mTabsAdapter.addTab(mTabHost.newTabSpec("map").setIndicator(create_tab_view("Map")), TabMap.class, null);
-               mTabsAdapter.addTab(mTabHost.newTabSpec("offmap").setIndicator(create_tab_view("OffMap")), TabMapOffline.class, null);
 
                // Display the Version
                mVersion = (TextView) findViewById(R.id.version);
@@ -750,6 +786,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
        void setFrequency(double freq) {
                try {
                        mService.send(Message.obtain(null, TelemetryService.MSG_SETFREQUENCY, freq));
+                       set_switch_time();
                } catch (RemoteException e) {
                }
        }
@@ -764,6 +801,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
        void setBaud(int baud) {
                try {
                        mService.send(Message.obtain(null, TelemetryService.MSG_SETBAUD, baud));
+                       set_switch_time();
                } catch (RemoteException e) {
                }
        }
@@ -796,7 +834,6 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                if (i == serials.length)
                        return;
 
-               AltosDebug.debug("Switching to serial %d\n", serial);
                current_serial = serial;
                update_state(null);
        }
@@ -888,6 +925,12 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                        serverIntent = new Intent(this, MapTypeActivity.class);
                        startActivityForResult(serverIntent, REQUEST_MAP_TYPE);
                        return true;
+               case R.id.map_source:
+                       int source = AltosDroidPreferences.map_source();
+                       int new_source = source == AltosDroidPreferences.MAP_SOURCE_ONLINE ? AltosDroidPreferences.MAP_SOURCE_OFFLINE : AltosDroidPreferences.MAP_SOURCE_ONLINE;
+                       AltosDroidPreferences.set_map_source(new_source);
+                       set_map_source(new_source);
+                       return true;
                case R.id.select_tracker:
                        if (serials != null) {
                                String[] trackers = new String[serials.length];