X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=altosdroid%2Fsrc%2Forg%2Faltusmetrum%2FAltosDroid%2FPreloadMapActivity.java;h=ab5e433d46d2f0cd4dd650461654b51b2c7ffcdb;hb=c5f49d0ac254047f13c6c1ecfb5520eff72109ac;hp=1968edaef4bf56b2d455c5c2167113fb6537f94d;hpb=2b6768ed32d7be444c49caa40d30b520177bb22a;p=fw%2Faltos diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java index 1968edae..ab5e433d 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java @@ -41,7 +41,7 @@ import android.location.LocationManager; import android.location.LocationListener; import android.location.Criteria; -import org.altusmetrum.altoslib_7.*; +import org.altusmetrum.altoslib_10.*; /** * This Activity appears as a dialog. It lists any paired devices and @@ -61,13 +61,18 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe private Spinner known_sites_spinner; private Spinner min_zoom; private Spinner max_zoom; - private Spinner tile_radius; + private TextView radius_label; + private Spinner radius; private EditText latitude; private EditText longitude; private ProgressBar progress; + private AltosMapLoader loader; + + long loader_notify_time; + /* AltosMapLoaderListener interfaces */ public void loader_start(final int max) { this.runOnUiThread(new Runnable() { @@ -87,6 +92,7 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe } public void loader_done(int max) { + loader = null; this.runOnUiThread(new Runnable() { public void run() { progress.setProgress(0); @@ -106,7 +112,6 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe } AltosMap map; - AltosMapLoader loader; class PreloadMapImage implements AltosImage { public void flush() { @@ -136,14 +141,14 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe public void paint(AltosMapTransform t) { } - public PreloadMapTile(AltosMapTileListener listener, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { - super(listener, upper_left, center, zoom, maptype, px_size, 2); + public PreloadMapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { + super(cache, upper_left, center, zoom, maptype, px_size, 2); } } - public AltosMapTile new_tile(AltosMapTileListener listener, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { - return new PreloadMapTile(listener, upper_left, center, zoom, maptype, px_size); + public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) { + return new PreloadMapTile(cache, upper_left, center, zoom, maptype, px_size); } public int width() { @@ -227,8 +232,17 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe return value(max_zoom); } - private int radius() { - return value(tile_radius); + private double value_distance(Spinner spinner) { + return (Double) spinner.getSelectedItem(); + } + + private double radius() { + double r = value_distance(radius); + if (AltosPreferences.imperial_units()) + r = AltosConvert.miles_to_meters(r); + else + r = r * 1000; + return r; } private int bit(CheckBox box, int value) { @@ -245,16 +259,22 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe } private void load() { + if (loader != null) + return; + try { double lat = latitude(); double lon = longitude(); int min = min_z(); int max = max_z(); - int r = radius(); + double r = radius(); int t = types(); - loader.load(lat, lon, min, max, r, t); + AltosDebug.debug("PreloadMap load %f %f %d %d %f %d\n", + lat, lon, min, max, r, t); + loader = new AltosMapLoader(map, this, lat, lon, min, max, r, t); } catch (ParseException e) { + AltosDebug.debug("PreloadMap load raised exception %s", e.toString()); } } @@ -276,6 +296,37 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe spinner.setSelection(spinner_def); } + + private void add_distance(Spinner spinner, double[] distances_km, double def_km, double[] distances_mi, double def_mi) { + + ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item); + + int spinner_def = 0; + int pos = 0; + + double[] distances; + double def; + if (AltosPreferences.imperial_units()) { + distances = distances_mi; + def = def_mi; + } else { + distances = distances_km; + def = def_km; + } + + for (int i = 0; i < distances.length; i++) { + adapter.add(distances[i]); + if (distances[i] == def) + spinner_def = pos; + pos++; + } + + spinner.setAdapter(adapter); + spinner.setSelection(spinner_def); + } + + + class SiteListListener implements OnItemSelectedListener { public void onItemSelected(AdapterView parent, View view, int pos, long id) { AltosLaunchSite site = (AltosLaunchSite) parent.getItemAtPosition(pos); @@ -289,6 +340,11 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe } } + double[] radius_mi = { 1, 2, 5, 10, 20 }; + double radius_def_mi = 2; + double[] radius_km = { 1, 2, 5, 10, 20, 30 }; + double radius_def_km = 2; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -326,8 +382,13 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe add_numbers(max_zoom, AltosMap.min_zoom - AltosMap.default_zoom, AltosMap.max_zoom - AltosMap.default_zoom, 2); - tile_radius = (Spinner) findViewById(R.id.preload_tile_radius); - add_numbers(tile_radius, 1, 5, 5); + radius_label = (TextView) findViewById(R.id.preload_radius_label); + radius = (Spinner) findViewById(R.id.preload_radius); + if (AltosPreferences.imperial_units()) + radius_label.setText("Radius (miles)"); + else + radius_label.setText("Radius (km)"); + add_distance(radius, radius_km, radius_def_km, radius_mi, radius_def_mi); progress = (ProgressBar) findViewById(R.id.preload_progress); @@ -344,8 +405,6 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe map = new AltosMap(this); - loader = new AltosMapLoader(map, this); - // Listen for GPS and Network position updates LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); @@ -358,6 +417,9 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe protected void onDestroy() { super.onDestroy(); + if (loader != null) + loader.abort(); + // Stop listening for location updates ((LocationManager) getSystemService(Context.LOCATION_SERVICE)).removeUpdates(this); }