From 2776f00eaa9818fe830c648b147d94321d1a707f Mon Sep 17 00:00:00 2001 From: y20k Date: Wed, 2 Sep 2020 16:00:08 +0200 Subject: [PATCH] addresses #78 --- .../java/org/y20k/trackbook/MainActivity.kt | 2 +- .../java/org/y20k/trackbook/MapFragment.kt | 19 ++++++++++++++----- .../java/org/y20k/trackbook/TrackerService.kt | 7 ++----- .../trackbook/ui/MapFragmentLayoutHolder.kt | 9 ++++----- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/y20k/trackbook/MainActivity.kt b/app/src/main/java/org/y20k/trackbook/MainActivity.kt index 9f70971..2e4c505 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivity.kt +++ b/app/src/main/java/org/y20k/trackbook/MainActivity.kt @@ -52,7 +52,7 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - // todo remove after testing finished + // todo: remove after testing finished if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { StrictMode.setVmPolicy( VmPolicy.Builder() diff --git a/app/src/main/java/org/y20k/trackbook/MapFragment.kt b/app/src/main/java/org/y20k/trackbook/MapFragment.kt index 0eefaba..eaf8492 100644 --- a/app/src/main/java/org/y20k/trackbook/MapFragment.kt +++ b/app/src/main/java/org/y20k/trackbook/MapFragment.kt @@ -138,6 +138,7 @@ class MapFragment : Fragment(), YesNoDialog.YesNoDialogListener, MapOverlayHelpe super.onStop() // unbind from TrackerService activity?.unbindService(connection) + handleServiceUnbind() } @@ -201,6 +202,17 @@ class MapFragment : Fragment(), YesNoDialog.YesNoDialogListener, MapOverlayHelpe } + /* Handles state when service is being unbound */ + private fun handleServiceUnbind() { + bound = false + // unregister listener for changes in shared preferences + PreferenceManager.getDefaultSharedPreferences(activity as Context).unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener) + // stop receiving location updates + handler.removeCallbacks(periodicLocationRequestRunnable) + } + + + /* Starts / pauses tracking and toggles the recording sub menu_bottom_navigation */ private fun handleTrackingManagementMenu() { when (trackingState) { @@ -285,11 +297,8 @@ class MapFragment : Fragment(), YesNoDialog.YesNoDialogListener, MapOverlayHelpe handler.postDelayed(periodicLocationRequestRunnable, 0) } override fun onServiceDisconnected(arg0: ComponentName) { - bound = false - // unregister listener for changes in shared preferences - PreferenceManager.getDefaultSharedPreferences(activity as Context).unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener) - // stop receiving location updates - handler.removeCallbacks(periodicLocationRequestRunnable) + // service has crashed, or was killed by the system + handleServiceUnbind() } } /* diff --git a/app/src/main/java/org/y20k/trackbook/TrackerService.kt b/app/src/main/java/org/y20k/trackbook/TrackerService.kt index 224810c..6a945a1 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackerService.kt +++ b/app/src/main/java/org/y20k/trackbook/TrackerService.kt @@ -247,11 +247,6 @@ class TrackerService(): Service(), CoroutineScope, SensorEventListener { /* Stop tracking location */ fun stopTracking() { - // stop receiving location updates - if app is not bound (= visible) - if (!bound) { - removeGpsLocationListener() - removeGpsLocationListener() - } // save state track.recordingStop = GregorianCalendar.getInstance().time trackingState = Keys.STATE_TRACKING_STOPPED @@ -327,6 +322,7 @@ class TrackerService(): Service(), CoroutineScope, SensorEventListener { // check if already registered if (!gpsLocationListenerRegistered) { // check if Network provider is available + gpsProviderActive = LocationHelper.isGpsEnabled(locationManager) if (gpsProviderActive) { // check for location permission if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { @@ -351,6 +347,7 @@ class TrackerService(): Service(), CoroutineScope, SensorEventListener { // check if already registered if (!networkLocationListenerRegistered) { // check if Network provider is available + networkProviderActive = LocationHelper.isNetworkEnabled(locationManager) if (networkProviderActive && !gpsOnly) { // check for location permission if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { diff --git a/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt b/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt index 6783e24..3bef8be 100644 --- a/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt +++ b/app/src/main/java/org/y20k/trackbook/ui/MapFragmentLayoutHolder.kt @@ -207,14 +207,13 @@ data class MapFragmentLayoutHolder(private var context: Context, private var mar if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED) { // CASE: Location permission not granted locationErrorBar.setText(R.string.snackbar_message_location_permission_denied) - locationErrorBar.show() + if (!locationErrorBar.isShown) locationErrorBar.show() } else if (!gpsProviderActive && !networkProviderActive) { // CASE: Location setting is off locationErrorBar.setText(R.string.snackbar_message_location_offline) - locationErrorBar.show() - } else if (locationErrorBar.isShown) { - // CASE: Snackbar is visible but unnecessary - locationErrorBar.dismiss() + if (!locationErrorBar.isShown) locationErrorBar.show() + } else { + if (locationErrorBar.isShown) locationErrorBar.dismiss() } }