diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 16f0d609b..a6be36737 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -57,7 +57,6 @@ import de.dennisguse.opentracks.util.IntentDashboardUtils; import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.ListItemUtils; import de.dennisguse.opentracks.util.PreferencesUtils; -import de.dennisguse.opentracks.util.ServiceUtils; import de.dennisguse.opentracks.util.StringUtils; import de.dennisguse.opentracks.util.TrackIconUtils; import de.dennisguse.opentracks.util.TrackUtils; @@ -164,8 +163,6 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe } }; - private boolean startGps = false; // true to start gps - // Callback when the trackRecordingServiceConnection binding changes. private final Runnable bindChangedCallback = new Runnable() { @Override @@ -178,6 +175,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe TrackRecordingServiceInterface service = trackRecordingServiceConnection.getServiceIfBound(); if (service == null) { Log.d(TAG, "service not available to start gps or a new recording"); + gpsStatusValue = GpsStatusValue.GPS_NONE; return; } @@ -189,12 +187,11 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe updateGpsMenuItem(true, isRecording); }); - if (!startGps) { + if (isGpsStarted()) { return; } service.startGps(); - startGps = false; gpsStatusValue = GpsStatusValue.GPS_ENABLED; updateGpsMenuItem(true, isRecording); } @@ -361,7 +358,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe @Override public boolean onPrepareOptionsMenu(Menu menu) { - boolean isGpsStarted = ServiceUtils.isTrackRecordingServiceRunning(this); + boolean isGpsStarted = isGpsStarted(); boolean isRecording = PreferencesUtils.isRecording(recordingTrackId); updateMenuItems(isGpsStarted, isRecording); @@ -381,10 +378,8 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); } else { - startGps = !ServiceUtils.isTrackRecordingServiceRunning(this); - // Invoke trackRecordingService - if (startGps) { + if (!isGpsStarted()) { trackRecordingServiceConnection.startAndBind(this); bindChangedCallback.run(); } else { @@ -440,6 +435,10 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe // Do nothing } + private boolean isGpsStarted() { + return gpsStatusValue != GpsStatusValue.GPS_NONE && gpsStatusValue != GpsStatusValue.GPS_DISABLED; + } + private void requestGPSPermissions() { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, GPS_REQUEST_CODE); diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java b/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java index b096d4cde..cedc0bd05 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java @@ -70,6 +70,7 @@ class GpsStatus { if (gpsStatusRunner != null) { gpsStatusRunner.stop(); gpsStatusRunner = null; + client = null; } } diff --git a/src/main/java/de/dennisguse/opentracks/util/ServiceUtils.java b/src/main/java/de/dennisguse/opentracks/util/ServiceUtils.java deleted file mode 100644 index 740540cf5..000000000 --- a/src/main/java/de/dennisguse/opentracks/util/ServiceUtils.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.dennisguse.opentracks.util; - -import android.app.ActivityManager; -import android.content.ComponentName; -import android.content.Context; - -import java.util.List; - -import de.dennisguse.opentracks.services.TrackRecordingService; - -public class ServiceUtils { - - private ServiceUtils() { - } - - /** - * Returns true if the recording service is running. - * - * @param context the current context - */ - @Deprecated //TODO This method must be removed as the service will nowadays always be started - public static boolean isTrackRecordingServiceRunning(Context context) { - ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); - if (activityManager == null) { - return false; - } - - //TODO This approach is deprecated as of API level 26 and should be replaced. - List services = activityManager.getRunningServices(Integer.MAX_VALUE); - - for (ActivityManager.RunningServiceInfo serviceInfo : services) { - ComponentName componentName = serviceInfo.service; - String serviceName = componentName.getClassName(); - if (TrackRecordingService.class.getName().equals(serviceName)) { - return true; - } - } - return false; - } -}