From 39af826ce9032e339929eb7917b1d29c87d03f69 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 22 Apr 2016 17:32:10 -0400 Subject: [PATCH] altosdroid: Track device location in app, not telemetry service This means we get location even if there isn't a telemetry device connected, making it possible to walk to old device locations Signed-off-by: Keith Packard --- .../altusmetrum/AltosDroid/AltosDroid.java | 46 +++++++++++++++++-- .../AltosDroid/TelemetryService.java | 30 +----------- .../AltosDroid/TelemetryState.java | 2 - 3 files changed, 43 insertions(+), 35 deletions(-) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index f317f31d..85513325 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -45,13 +45,15 @@ import android.view.*; import android.widget.*; import android.app.AlertDialog; import android.location.Location; +import android.location.LocationManager; +import android.location.LocationListener; import android.hardware.usb.*; import android.graphics.*; import android.graphics.drawable.*; import org.altusmetrum.altoslib_10.*; -public class AltosDroid extends FragmentActivity implements AltosUnitsListener { +public class AltosDroid extends FragmentActivity implements AltosUnitsListener, LocationListener { // Actions sent to the telemetry server at startup time @@ -98,6 +100,8 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { private double frequency; private int telemetry_rate; + public Location location = null; + // Tabs TabHost mTabHost; AltosViewPager mViewPager; @@ -314,7 +318,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { state = newest_state; } - update_ui(telemetry_state, state, telemetry_state.location); + update_ui(telemetry_state, state); start_timer(); } @@ -379,7 +383,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { } } - void update_ui(TelemetryState telem_state, AltosState state, Location location) { + void update_ui(TelemetryState telem_state, AltosState state) { int prev_state = AltosLib.ao_flight_invalid; @@ -679,12 +683,26 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { public void onResume() { super.onResume(); AltosDebug.debug("+ ON RESUME +"); + + // Listen for GPS and Network position updates + LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this); + + location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + + AltosDebug.debug("Resume, location is %f,%f\n", + location.getLatitude(), + location.getLongitude()); + + update_ui(telemetry_state, saved_state); } @Override public void onPause() { super.onPause(); AltosDebug.debug("- ON PAUSE -"); + // Stop listening for location updates + ((LocationManager) getSystemService(Context.LOCATION_SERVICE)).removeUpdates(this); } @Override @@ -1015,7 +1033,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { } static String direction(AltosGreatCircle from_receiver, - Location receiver) { + Location receiver) { if (from_receiver == null) return null; @@ -1044,4 +1062,24 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { else return String.format("right %d°", iheading); } + + public void onLocationChanged(Location location) { + this.location = location; + AltosDebug.debug("Location changed to %f,%f", + location.getLatitude(), + location.getLongitude()); + update_ui(telemetry_state, saved_state); + } + + public void onStatusChanged(String provider, int status, Bundle extras) { + AltosDebug.debug("Location status now %d\n", status); + } + + public void onProviderEnabled(String provider) { + AltosDebug.debug("Location provider enabled %s\n", provider); + } + + public void onProviderDisabled(String provider) { + AltosDebug.debug("Location provider disabled %s\n", provider); + } } diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java index 63592e29..1834d55b 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java @@ -38,14 +38,11 @@ import android.os.Messenger; import android.os.RemoteException; import android.os.Looper; import android.widget.Toast; -import android.location.Location; -import android.location.LocationManager; -import android.location.LocationListener; import android.location.Criteria; import org.altusmetrum.altoslib_10.*; -public class TelemetryService extends Service implements LocationListener { +public class TelemetryService extends Service { static final int MSG_REGISTER_CLIENT = 1; static final int MSG_UNREGISTER_CLIENT = 2; @@ -484,11 +481,6 @@ public class TelemetryService extends Service implements LocationListener { telemetry_state.states.put(serial, saved_state.state); } } - - // Listen for GPS and Network position updates - LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); - - locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this); } @Override @@ -535,9 +527,6 @@ public class TelemetryService extends Service implements LocationListener { @Override public void onDestroy() { - // Stop listening for location updates - ((LocationManager) getSystemService(Context.LOCATION_SERVICE)).removeUpdates(this); - // Stop the bluetooth Comms threads disconnect(true); @@ -552,21 +541,4 @@ public class TelemetryService extends Service implements LocationListener { public IBinder onBind(Intent intent) { return messenger.getBinder(); } - - - public void onLocationChanged(Location location) { - telemetry_state.location = location; - AltosDebug.debug("location changed"); - send_to_clients(); - } - - public void onStatusChanged(String provider, int status, Bundle extras) { - } - - public void onProviderEnabled(String provider) { - } - - public void onProviderDisabled(String provider) { - } - } diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java index ec9f4798..d3ccf0a9 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java @@ -30,7 +30,6 @@ public class TelemetryState { int connect; DeviceAddress address; AltosConfigData config; - Location location; int crc_errors; double receiver_battery; double frequency; @@ -44,7 +43,6 @@ public class TelemetryState { connect = CONNECT_NONE; config = null; states = new HashMap(); - location = null; crc_errors = 0; receiver_battery = AltosLib.MISSING; frequency = AltosPreferences.frequency(0); -- 2.30.2