altosdroid: Save selected map type in AltosDroid object
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / AltosDroid.java
index 27ebf20685cfbd3d788e873412a42968857b41d0..5be9ba84429f38190e9d5038648fa85eab453600 100644 (file)
@@ -21,6 +21,7 @@ import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.Timer;
 import java.util.TimerTask;
+import java.text.*;
 
 import android.app.Activity;
 import android.app.PendingIntent;
@@ -37,15 +38,16 @@ import android.os.Handler;
 import android.os.Message;
 import android.os.Messenger;
 import android.os.RemoteException;
+import android.content.res.Resources;
 import android.support.v4.app.FragmentActivity;
 import android.support.v4.app.FragmentManager;
 import android.util.DisplayMetrics;
-import android.util.Log;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.Window;
 import android.view.View;
+import android.view.LayoutInflater;
 import android.widget.TabHost;
 import android.widget.TextView;
 import android.widget.RelativeLayout;
@@ -54,12 +56,9 @@ import android.app.AlertDialog;
 import android.location.Location;
 import android.hardware.usb.*;
 
-import org.altusmetrum.altoslib_6.*;
+import org.altusmetrum.altoslib_7.*;
 
 public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
-       // Debugging
-       static final String TAG = "AltosDroid";
-       static final boolean D = true;
 
        // Actions sent to the telemetry server at startup time
 
@@ -74,6 +73,10 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
        // Intent request codes
        public static final int REQUEST_CONNECT_DEVICE = 1;
        public static final int REQUEST_ENABLE_BT      = 2;
+       public static final int REQUEST_PRELOAD_MAPS   = 3;
+       public static final int REQUEST_MAP_TYPE       = 4;
+
+       public int map_type = AltosMap.maptype_hybrid;
 
        public static FragmentManager   fm;
 
@@ -130,17 +133,17 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
 
                        switch (msg.what) {
                        case MSG_STATE:
-                               if(D) Log.d(TAG, "MSG_STATE");
+                               AltosDebug.debug("MSG_STATE");
                                TelemetryState telemetry_state = (TelemetryState) msg.obj;
                                if (telemetry_state == null) {
-                                       Log.d(TAG, "telemetry_state null!");
+                                       AltosDebug.debug("telemetry_state null!");
                                        return;
                                }
 
                                ad.update_state(telemetry_state);
                                break;
                        case MSG_UPDATE_AGE:
-                               if(D) Log.d(TAG, "MSG_UPDATE_AGE");
+                               AltosDebug.debug("MSG_UPDATE_AGE");
                                ad.update_age();
                                break;
                        }
@@ -407,10 +410,19 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                return String.format(format, value);
        }
 
+       private View create_tab_view(String label) {
+               LayoutInflater inflater = (LayoutInflater) this.getLayoutInflater();
+               View tab_view = inflater.inflate(R.layout.tab_layout, null);
+               TextView text_view = (TextView) tab_view.findViewById (R.id.tabLabel);
+               text_view.setText(label);
+               return tab_view;
+       }
+
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
-               if(D) Log.e(TAG, "+++ ON CREATE +++");
+               AltosDebug.init(this);
+               AltosDebug.debug("+++ ON CREATE +++");
 
                fm = getSupportFragmentManager();
 
@@ -428,32 +440,12 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
 
                mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager);
 
-               mTabsAdapter.addTab(mTabHost.newTabSpec("pad").setIndicator("Pad"), TabPad.class, null);
-               mTabsAdapter.addTab(mTabHost.newTabSpec("ascent").setIndicator("Ascent"), TabAscent.class, null);
-               mTabsAdapter.addTab(mTabHost.newTabSpec("descent").setIndicator("Descent"), TabDescent.class, null);
-               mTabsAdapter.addTab(mTabHost.newTabSpec("landed").setIndicator("Landed"), TabLanded.class, null);
-               mTabsAdapter.addTab(mTabHost.newTabSpec("map").setIndicator("Map"), TabMap.class, null);
-
-
-               // Scale the size of the Tab bar for different screen densities
-               // This probably won't be needed when we start supporting ICS+ tabs.
-               DisplayMetrics metrics = new DisplayMetrics();
-               getWindowManager().getDefaultDisplay().getMetrics(metrics);
-               int density = metrics.densityDpi;
-
-               if (density==DisplayMetrics.DENSITY_XHIGH)
-                       tabHeight = 65;
-               else if (density==DisplayMetrics.DENSITY_HIGH)
-                       tabHeight = 45;
-               else if (density==DisplayMetrics.DENSITY_MEDIUM)
-                       tabHeight = 35;
-               else if (density==DisplayMetrics.DENSITY_LOW)
-                       tabHeight = 25;
-               else
-                       tabHeight = 65;
-
-               for (int i = 0; i < 5; i++)
-                       mTabHost.getTabWidget().getChildAt(i).getLayoutParams().height = tabHeight;
+               mTabsAdapter.addTab(mTabHost.newTabSpec("pad").setIndicator(create_tab_view("Pad")), TabPad.class, null);
+               mTabsAdapter.addTab(mTabHost.newTabSpec("ascent").setIndicator(create_tab_view("Ascent")), TabAscent.class, null);
+               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);
 
                // Set up the custom title
                mTitle = (TextView) findViewById(R.id.title_left_text);
@@ -535,13 +527,13 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                boolean granted = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true);
 
-               if (D) Log.e(TAG, "intent " + intent + " device " + device + " granted " + granted);
+               AltosDebug.debug("intent %s device %s granted %s", intent, device, granted);
 
                if (!granted)
                        device = null;
 
                if (device != null) {
-                       if (D) Log.d(TAG, "intent has usb device " + device.toString());
+                       AltosDebug.debug("intent has usb device " + device.toString());
                        connectUsb(device);
                } else {
 
@@ -551,11 +543,11 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                         * don't want to loop forever...
                         */
                        if (granted) {
-                               if (D) Log.d(TAG, "check for a USB device at startup");
+                               AltosDebug.debug("check for a USB device at startup");
                                if (check_usb())
                                        return;
                        }
-                       if (D) Log.d(TAG, "Starting by looking for bluetooth devices");
+                       AltosDebug.debug("Starting by looking for bluetooth devices");
                        if (ensureBluetooth())
                                return;
                        finish();
@@ -565,7 +557,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
        @Override
        public void onStart() {
                super.onStart();
-               if(D) Log.e(TAG, "++ ON START ++");
+               AltosDebug.debug("++ ON START ++");
 
                noticeIntent(getIntent());
 
@@ -584,26 +576,26 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
        @Override
        public void onNewIntent(Intent intent) {
                super.onNewIntent(intent);
-               if(D) Log.d(TAG, "onNewIntent");
+               AltosDebug.debug("onNewIntent");
                noticeIntent(intent);
        }
 
        @Override
        public void onResume() {
                super.onResume();
-               if(D) Log.e(TAG, "+ ON RESUME +");
+               AltosDebug.debug("+ ON RESUME +");
        }
 
        @Override
        public void onPause() {
                super.onPause();
-               if(D) Log.e(TAG, "- ON PAUSE -");
+               AltosDebug.debug("- ON PAUSE -");
        }
 
        @Override
        public void onStop() {
                super.onStop();
-               if(D) Log.e(TAG, "-- ON STOP --");
+               AltosDebug.debug("-- ON STOP --");
 
                doUnbindService();
                if (mAltosVoice != null) {
@@ -615,14 +607,14 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
        @Override
        public void onDestroy() {
                super.onDestroy();
-               if(D) Log.e(TAG, "--- ON DESTROY ---");
+               AltosDebug.debug("--- ON DESTROY ---");
 
                if (mAltosVoice != null) mAltosVoice.stop();
                stop_timer();
        }
 
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-               if(D) Log.d(TAG, "onActivityResult " + resultCode);
+               AltosDebug.debug("onActivityResult " + resultCode);
                switch (requestCode) {
                case REQUEST_CONNECT_DEVICE:
                        // When DeviceListActivity returns with a device to connect to
@@ -637,12 +629,16 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                                //setupChat();
                        } else {
                                // User did not enable Bluetooth or an error occured
-                               Log.e(TAG, "BT not enabled");
+                               AltosDebug.error("BT not enabled");
                                stopService(new Intent(AltosDroid.this, TelemetryService.class));
                                Toast.makeText(this, R.string.bt_not_enabled, Toast.LENGTH_SHORT).show();
                                finish();
                        }
                        break;
+               case REQUEST_MAP_TYPE:
+                       if (resultCode == Activity.RESULT_OK)
+                               set_map_type(data);
+                       break;
                }
        }
 
@@ -653,9 +649,9 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                        // Attempt to connect to the device
                        try {
                                mService.send(Message.obtain(null, TelemetryService.MSG_OPEN_USB, device));
-                               if (D) Log.d(TAG, "Sent OPEN_USB message");
+                               AltosDebug.debug("Sent OPEN_USB message");
                        } catch (RemoteException e) {
-                               if (D) Log.e(TAG, "connect device message failed");
+                               AltosDebug.debug("connect device message failed");
                        }
                }
        }
@@ -666,12 +662,12 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                        String address = data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
                        String name = data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_NAME);
 
-                       if (D) Log.d(TAG, "Connecting to " + address + " " + name);
+                       AltosDebug.debug("Connecting to " + address + " " + name);
                        DeviceAddress   a = new DeviceAddress(address, name);
                        mService.send(Message.obtain(null, TelemetryService.MSG_CONNECT, a));
-                       if (D) Log.d(TAG, "Sent connecting message");
+                       AltosDebug.debug("Sent connecting message");
                } catch (RemoteException e) {
-                       if (D) Log.e(TAG, "connect device message failed");
+                       AltosDebug.debug("connect device message failed");
                }
        }
 
@@ -682,6 +678,17 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                }
        }
 
+       private void set_map_type(Intent data) {
+               int type = data.getIntExtra(MapTypeActivity.EXTRA_MAP_TYPE, -1);
+
+               AltosDebug.debug("intent set_map_type %d\n", type);
+               if (type != -1) {
+                       map_type = type;
+                       for (AltosDroidTab mTab : mTabs)
+                               mTab.set_map_type(map_type);
+               }
+       }
+
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                MenuInflater inflater = getMenuInflater();
@@ -698,8 +705,8 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
 
        void setFrequency(String freq) {
                try {
-                       setFrequency (Double.parseDouble(freq.substring(11, 17)));
-               } catch (NumberFormatException e) {
+                       setFrequency (AltosParse.parse_double_net(freq.substring(11, 17)));
+               } catch (ParseException e) {
                }
        }
 
@@ -747,7 +754,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                        disconnectDevice();
                        return true;
                case R.id.quit:
-                       Log.d(TAG, "R.id.quit");
+                       AltosDebug.debug("R.id.quit");
                        disconnectDevice();
                        finish();
                        return true;
@@ -802,6 +809,14 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
                        boolean imperial = AltosPreferences.imperial_units();
                        AltosPreferences.set_imperial_units(!imperial);
                        return true;
+               case R.id.preload_maps:
+                       serverIntent = new Intent(this, PreloadMapActivity.class);
+                       startActivityForResult(serverIntent, REQUEST_PRELOAD_MAPS);
+                       return true;
+               case R.id.map_type:
+                       serverIntent = new Intent(this, MapTypeActivity.class);
+                       startActivityForResult(serverIntent, REQUEST_MAP_TYPE);
+                       return true;
                }
                return false;
        }