diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 668f6dfd0..33da17e80 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -212,7 +212,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co } private void requestRequiredPermissions() { - PermissionRequester.ALL.requestPermissionsIfNeeded(this, this, null, (requester) -> Toast.makeText(this, R.string.permission_gps_failed, Toast.LENGTH_LONG).show()); + PermissionRequester.ALL.requestPermissionsIfNeeded(this, this, null, (requester) -> Toast.makeText(this, R.string.permission_recording_failed, Toast.LENGTH_LONG).show()); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index e4b6fa4d9..8a1a00bd4 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -26,6 +26,7 @@ import android.os.Looper; import android.os.PowerManager.WakeLock; import android.util.Log; import android.util.Pair; +import android.widget.Toast; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; @@ -36,6 +37,7 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.time.Duration; +import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.Marker; import de.dennisguse.opentracks.data.models.Track; @@ -45,6 +47,7 @@ import de.dennisguse.opentracks.services.announcement.VoiceAnnouncementManager; import de.dennisguse.opentracks.services.handlers.GpsStatusValue; import de.dennisguse.opentracks.services.handlers.TrackPointCreator; import de.dennisguse.opentracks.settings.PreferencesUtils; +import de.dennisguse.opentracks.util.PermissionRequester; import de.dennisguse.opentracks.util.SystemUtils; public class TrackRecordingService extends Service implements TrackPointCreator.Callback, SharedPreferences.OnSharedPreferenceChangeListener, TrackRecordingManager.IdleObserver { @@ -199,6 +202,14 @@ public class TrackRecordingService extends Service implements TrackPointCreator. wakeLock = SystemUtils.acquireWakeLock(this, wakeLock); trackPointCreator.start(this, handler); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + if (!PermissionRequester.RECORDING.hasPermission(this)) { + Toast.makeText(this, R.string.permission_recording_failed, Toast.LENGTH_LONG).show(); + return; + } + } + startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.setGPSonlyStarted(this), ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION + ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE); } else { startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.setGPSonlyStarted(this)); diff --git a/src/main/java/de/dennisguse/opentracks/util/PermissionRequester.java b/src/main/java/de/dennisguse/opentracks/util/PermissionRequester.java index 7a72b59ad..7975b924a 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PermissionRequester.java +++ b/src/main/java/de/dennisguse/opentracks/util/PermissionRequester.java @@ -89,13 +89,17 @@ public class PermissionRequester { } private static final List ALL_PERMISSIONS; + private static final List RECORDING_PERMISSIONS; static { - ArrayList all = new ArrayList<>(GPS_PERMISSION); - all.addAll(BLUETOOTH_PERMISSIONS); - all.addAll(NOTIFICATION_PERMISSIONS); + ArrayList recording = new ArrayList<>(GPS_PERMISSION); + recording.addAll(BLUETOOTH_PERMISSIONS); - ALL_PERMISSIONS = Collections.unmodifiableList(all); + RECORDING_PERMISSIONS = Collections.unmodifiableList(recording); + + recording.addAll(NOTIFICATION_PERMISSIONS); + + ALL_PERMISSIONS = Collections.unmodifiableList(recording); } public final static PermissionRequester GPS = new PermissionRequester(GPS_PERMISSION); @@ -103,6 +107,7 @@ public class PermissionRequester { public final static PermissionRequester NOTIFICATION = new PermissionRequester(NOTIFICATION_PERMISSIONS); public final static PermissionRequester ALL = new PermissionRequester(ALL_PERMISSIONS); + public final static PermissionRequester RECORDING = new PermissionRequester(RECORDING_PERMISSIONS); public interface RejectedCallback { void rejected(PermissionRequester permissionRequester); diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 153523052..87f05af4f 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -317,6 +317,7 @@ limitations under the License. Recording service OpenTracks requires permission to use GPS. + OpenTracks requires permission to access your location as well as nearby devices. OpenTracks requires permission to use Bluetooth. You manually need to grant OpenTracks access to Nearby Devices in system settings.