diff --git a/app/src/main/java/org/y20k/trackbook/MainActivity.java b/app/src/main/java/org/y20k/trackbook/MainActivity.java index e6b605e..ca8692f 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivity.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivity.java @@ -62,10 +62,14 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // set state of tracking mTracking = false; - mPermissionsGranted = false; + if (savedInstanceState != null) { + mTracking = savedInstanceState.getBoolean(INSTANCE_TRACKING_STARTED, false); + } // check permissions on Android 6 and higher + mPermissionsGranted = false; if (Build.VERSION.SDK_INT >= 23) { // check permissions mMissingPermissions = checkPermissions(); @@ -109,6 +113,22 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { } + @Override + protected void onSaveInstanceState(Bundle outState) { + outState.putBoolean(INSTANCE_TRACKING_STARTED, mTracking); + super.onSaveInstanceState(outState); + } + + + @Override + protected void onResume() { + super.onResume(); + + // set state of FloatingActionButton + setFloatingActionButtonState(); + } + + @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { @@ -193,9 +213,6 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_white_24dp); mTracking = false; - // re-start preliminary tracking - // startFindingLocation(); - // stop tracker service Intent intent = new Intent(this, TrackerService.class); intent.setAction(ACTION_STOP); @@ -221,6 +238,16 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys { } + /* Set state of FloatingActionButton */ + private void setFloatingActionButtonState() { + if (mTracking) { + mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_red_24dp); + } else { + mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_white_24dp); + } + } + + /* Check which permissions have been granted */ private List checkPermissions() { List permissions = new ArrayList<>(); diff --git a/app/src/main/java/org/y20k/trackbook/TrackerService.java b/app/src/main/java/org/y20k/trackbook/TrackerService.java index 40806d4..7cb06df 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackerService.java +++ b/app/src/main/java/org/y20k/trackbook/TrackerService.java @@ -52,11 +52,12 @@ public class TrackerService extends Service implements TrackbookKeys { @Override public int onStartCommand(Intent intent, int flags, int startId) { + // acquire reference to Location Manager + mLocationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); + // checking for empty intent if (intent == null) { Log.v(LOG_TAG, "Null-Intent received. Stopping self."); - // remove notification - stopForeground(true); stopSelf(); } @@ -67,25 +68,10 @@ public class TrackerService extends Service implements TrackbookKeys { // create a new track mTrack = new Track(getApplicationContext()); - // acquire reference to Location Manager - mLocationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); - - // listeners that responds to location updates - mGPSListener = createLocationListener(); - mNetworkListener = createLocationListener(); - - // register location listeners and request updates - try { - mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mGPSListener); - } catch (SecurityException e) { - e.printStackTrace(); - } - try { - mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mNetworkListener); - } catch (SecurityException e) { - e.printStackTrace(); - } + // create gps and network location listeners + createListeners(); + // set a timer to prevent endless tracking mTimer = new CountDownTimer(CONSTANT_MAXIMAL_DURATION, CONSTANT_TRACKING_INTERVAL) { @Override public void onTick(long l) { @@ -102,18 +88,10 @@ public class TrackerService extends Service implements TrackbookKeys { // ACTION STOP else if (intent.getAction().equals(ACTION_STOP)) { - // remove listeners - try { - mLocationManager.removeUpdates(mGPSListener); - } catch (SecurityException e) { - e.printStackTrace(); - } - try { - mLocationManager.removeUpdates(mNetworkListener); - } catch (SecurityException e) { - e.printStackTrace(); - } Log.v(LOG_TAG, "Service received command: STOP"); + + // remove listeners + removeListeners(); } // START_STICKY is used for services that are explicitly started and stopped as needed @@ -130,24 +108,15 @@ public class TrackerService extends Service implements TrackbookKeys { @Override public void onDestroy() { - super.onDestroy(); + Log.v(LOG_TAG, "onDestroy called."); // remove listeners - try { - mLocationManager.removeUpdates(mGPSListener); - } catch (SecurityException e) { - e.printStackTrace(); - } - try { - mLocationManager.removeUpdates(mNetworkListener); - } catch (SecurityException e) { - e.printStackTrace(); - } - - Log.v(LOG_TAG, "onDestroy called."); + removeListeners(); // cancel notification stopForeground(true); + + super.onDestroy(); } @@ -184,4 +153,56 @@ public class TrackerService extends Service implements TrackbookKeys { } }; } + + + /* Creates gps and network location listeners */ + private void createListeners() { + Log.v(LOG_TAG, "Setting up location listeners."); + + // listeners that responds to location updates + mGPSListener = createLocationListener(); + mNetworkListener = createLocationListener(); + + // register location listeners and request updates + try { + mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mGPSListener); + } catch (SecurityException e) { + e.printStackTrace(); + } + try { + mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mNetworkListener); + } catch (SecurityException e) { + e.printStackTrace(); + } + } + + + /* Removes gps and network location listeners */ + private void removeListeners() { + Log.v(LOG_TAG, "Removing location listeners."); + + // remove gps listener + if (mGPSListener != null) { + Log.v(LOG_TAG, "Removing GPS location listener."); + try { + mLocationManager.removeUpdates(mGPSListener); + } catch (SecurityException e) { + // catches permission problems + e.printStackTrace(); + } + } + + // remove network listener + if (mNetworkListener != null) { + Log.v(LOG_TAG, "Removing network location listener."); + try { + mLocationManager.removeUpdates(mNetworkListener); + } catch (SecurityException e) { + // catches permission problems + e.printStackTrace(); + } + } + + } + } 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 b61b1b7..c09aea3 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/TrackbookKeys.java +++ b/app/src/main/java/org/y20k/trackbook/helpers/TrackbookKeys.java @@ -49,6 +49,7 @@ public interface TrackbookKeys { public static final String INSTANCE_LONGITUDE = "longitude"; public static final String INSTANCE_ZOOM_LEVEL = "zoomLevel"; public static final String INSTANCE_CURRENT_LOCATION = "currentLocation"; + public static final String INSTANCE_TRACKING_STARTED = "trackingStarted"; /* RESULTS */