forked from upstream-mirrors/OpenTracks
Bugfix: handle missing permissions properly.
Affected only SDK >= 33. Fixes #1781.
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
package de.dennisguse.opentracks.services;
|
||||
|
||||
import de.dennisguse.opentracks.util.PermissionRequester;
|
||||
|
||||
public class MissingPermissionException extends RuntimeException {
|
||||
|
||||
private final PermissionRequester permissionRequester;
|
||||
|
||||
public MissingPermissionException(PermissionRequester permissionRequester) {
|
||||
this.permissionRequester = permissionRequester;
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,6 @@ import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ServiceInfo;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.PowerManager.WakeLock;
|
||||
@@ -46,7 +45,6 @@ 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 {
|
||||
@@ -207,18 +205,11 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
|
||||
private synchronized void startSensors() {
|
||||
if (isSensorStarted()) {
|
||||
Log.i(TAG, "sensors already started; skipping");
|
||||
return;
|
||||
}
|
||||
Log.i(TAG, "startSensors");
|
||||
wakeLock = SystemUtils.acquireWakeLock(this, wakeLock);
|
||||
trackPointCreator.start(this, handler);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
||||
if (!PermissionRequester.RECORDING.hasPermission(this)) {
|
||||
throw new RuntimeException("Android14: Please grant permissions LOCATION and NEARBY DEVICES (manually)");
|
||||
}
|
||||
}
|
||||
|
||||
ServiceCompat.startForeground(this, TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.setGPSonlyStarted(this), ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION + ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
import android.os.IBinder.DeathRecipient;
|
||||
import android.os.RemoteException;
|
||||
@@ -29,6 +30,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import de.dennisguse.opentracks.BuildConfig;
|
||||
import de.dennisguse.opentracks.util.PermissionRequester;
|
||||
|
||||
/**
|
||||
* Wrapper for the track recording service.
|
||||
@@ -157,6 +159,12 @@ public class TrackRecordingServiceConnection {
|
||||
}
|
||||
|
||||
public static void executeForeground(Context context, Callback callback) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
||||
if (!PermissionRequester.RECORDING.hasPermission(context)) {
|
||||
throw new MissingPermissionException(PermissionRequester.RECORDING);
|
||||
}
|
||||
}
|
||||
|
||||
Callback withUnbind = (service, connection) -> {
|
||||
callback.onConnected(service, connection);
|
||||
connection.unbind(context);
|
||||
|
||||
Reference in New Issue
Block a user