forked from upstream-mirrors/OpenTracks
Bugfix (Android14): for recording Location/GPS and Nearby Devices/Bluetooth are mandatory due to Android.
Fixes #1749.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -89,13 +89,17 @@ public class PermissionRequester {
|
||||
}
|
||||
|
||||
private static final List<String> ALL_PERMISSIONS;
|
||||
private static final List<String> RECORDING_PERMISSIONS;
|
||||
|
||||
static {
|
||||
ArrayList<String> all = new ArrayList<>(GPS_PERMISSION);
|
||||
all.addAll(BLUETOOTH_PERMISSIONS);
|
||||
all.addAll(NOTIFICATION_PERMISSIONS);
|
||||
ArrayList<String> 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);
|
||||
|
||||
@@ -317,6 +317,7 @@ limitations under the License.
|
||||
<string name="recording_service">Recording service</string>
|
||||
<!-- Permission -->
|
||||
<string name="permission_gps_failed">OpenTracks requires permission to use GPS.</string>
|
||||
<string name="permission_recording_failed">OpenTracks requires permission to access your location as well as nearby devices.</string>
|
||||
<string name="permission_bluetooth_failed">OpenTracks requires permission to use Bluetooth.</string>
|
||||
<string name="permission_bluetooth_failed_rejected">You manually need to grant OpenTracks access to Nearby Devices in system settings.</string>
|
||||
<!-- Search -->
|
||||
|
||||
Reference in New Issue
Block a user