From 34125d71845df00613e9e73dcf1354216c1cd342 Mon Sep 17 00:00:00 2001 From: y20k Date: Tue, 17 Jan 2017 16:27:43 +0100 Subject: [PATCH] the map now requests updated track recording from the background service as soon as it becomes visible. --- .../trackbook/MainActivityMapFragment.java | 6 ++-- .../org/y20k/trackbook/TrackerService.java | 35 +++++++++++++++---- .../y20k/trackbook/helpers/TrackbookKeys.java | 1 + 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java b/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java index c4f2be1..0882545 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivityMapFragment.java @@ -232,9 +232,11 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys { // load state of tracker service - see if anything changed loadTrackerServiceState(mActivity); - // center map on current position - if TrackerService is running + // request an updated track recording from service - if TrackerService is running if (mTrackerServiceRunning) { - mController.setCenter(convertToGeoPoint(mCurrentBestLocation)); + Intent i = new Intent(); + i.setAction(ACTION_TRACK_REQUEST); + LocalBroadcastManager.getInstance(mActivity).sendBroadcast(i); } // draw track on map - if available diff --git a/app/src/main/java/org/y20k/trackbook/TrackerService.java b/app/src/main/java/org/y20k/trackbook/TrackerService.java index c2b52e4..15c2655 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackerService.java +++ b/app/src/main/java/org/y20k/trackbook/TrackerService.java @@ -17,8 +17,10 @@ package org.y20k.trackbook; import android.app.Service; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.SharedPreferences; import android.database.ContentObserver; import android.hardware.Sensor; @@ -68,6 +70,7 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven private LocationListener mNetworkListener = null; private SettingsContentObserver mSettingsContentObserver; private Location mCurrentBestLocation; + private BroadcastReceiver mTrackRequestReceiver; private boolean mTrackerServiceRunning; private boolean mLocationSystemSetting; @@ -75,6 +78,16 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven @Override public int onStartCommand(Intent intent, int flags, int startId) { + // listen for finished save operation + mTrackRequestReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + sendTrackUpdate(); + } + }; + IntentFilter trackRequestReceiverIntentFilter = new IntentFilter(ACTION_TRACK_REQUEST); + LocalBroadcastManager.getInstance(this).registerReceiver(mTrackRequestReceiver, trackRequestReceiverIntentFilter); + // acquire reference to Location Manager mLocationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); @@ -133,9 +146,10 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven public void onDestroy() { LogHelper.v(LOG_TAG, "onDestroy called."); - // remove listeners + // remove receivers and listeners stopFindingLocation(); mSensorManager.unregisterListener(this); + LocalBroadcastManager.getInstance(this).unregisterReceiver(mTrackRequestReceiver); // cancel notification stopForeground(true); @@ -288,16 +302,22 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven // send local broadcast if new WayPoint added if (newWayPoint != null) { - Intent i = new Intent(); - i.setAction(ACTION_TRACK_UPDATED); - i.putExtra(EXTRA_TRACK, mTrack); - i.putExtra(EXTRA_LAST_LOCATION, mCurrentBestLocation); - LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i); + sendTrackUpdate(); } } + /* Broadcasts a track update */ + private void sendTrackUpdate() { + Intent i = new Intent(); + i.setAction(ACTION_TRACK_UPDATED); + i.putExtra(EXTRA_TRACK, mTrack); + i.putExtra(EXTRA_LAST_LOCATION, mCurrentBestLocation); + LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i); + } + + /* Creates a location listener */ private LocationListener createLocationListener() { return new LocationListener() { @@ -411,6 +431,9 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven LogHelper.v(LOG_TAG, "Saving finished."); } } + /** + * End of inner class + */ } diff --git a/app/src/main/java/org/y20k/trackbook/helpers/TrackbookKeys.java b/app/src/main/java/org/y20k/trackbook/helpers/TrackbookKeys.java index fe204d9..a106027 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/TrackbookKeys.java +++ b/app/src/main/java/org/y20k/trackbook/helpers/TrackbookKeys.java @@ -28,6 +28,7 @@ public interface TrackbookKeys { String ACTION_DEFAULT = "DEFAULT"; String ACTION_SHOW_MAP = "SHOW_MAP"; String ACTION_TRACK_UPDATED = "TRACK_UPDATED"; + String ACTION_TRACK_REQUEST = "TRACK_REQUEST"; String ACTION_TRACKING_STOPPED = "TRACKING_STOPPED"; String ACTION_TRACK_SAVE = "TRACK_SAVE";