mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Prevent crash on devices without GPS
This commit is contained in:
+7
@@ -93,6 +93,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
|
||||
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceManager;
|
||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
|
||||
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst;
|
||||
import nodomain.freeyourgadget.gadgetbridge.externalevents.gps.GBLocationService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.BatteryConfig;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.CannedMessagesSpec;
|
||||
@@ -683,6 +684,12 @@ public class DeviceSpecificSettingsFragment extends AbstractPreferenceFragment i
|
||||
addPreferenceHandlerFor(PREF_CAMERA_REMOTE);
|
||||
addPreferenceHandlerFor(PREF_SCREEN_LIFT_WRIST);
|
||||
|
||||
final Preference sendGpsToBandPref = findPreference(PREF_WORKOUT_SEND_GPS_TO_BAND);
|
||||
if (sendGpsToBandPref != null && !GBLocationService.isGpsSupportedAndEnabled()) {
|
||||
sendGpsToBandPref.setEnabled(false);
|
||||
sendGpsToBandPref.setSummary(R.string.phone_gps_not_available);
|
||||
}
|
||||
|
||||
addPreferenceHandlerFor(PREF_BATTERY_POLLING_ENABLE);
|
||||
addPreferenceHandlerFor(PREF_BATTERY_POLLING_INTERVAL);
|
||||
addPreferenceHandlerFor(PREF_TIME_SYNC);
|
||||
|
||||
+14
-8
@@ -21,6 +21,7 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.location.LocationManager;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -37,6 +38,7 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.BuildConfig;
|
||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||
@@ -86,18 +88,17 @@ public class GBLocationService extends BroadcastReceiver {
|
||||
|
||||
LOG.debug("Starting location provider {} for {}", providerType, device.getAliasOrName());
|
||||
|
||||
if (!providersByDevice.containsKey(device)) {
|
||||
providersByDevice.put(device, new ArrayList<>());
|
||||
}
|
||||
|
||||
updateNotification();
|
||||
|
||||
final List<GBLocationProvider> existingProviders = providersByDevice.get(device);
|
||||
|
||||
final GBLocationListener locationListener = new GBLocationListener(device);
|
||||
final GBLocationProvider locationProvider = providerType.newInstance(context, locationListener);
|
||||
try {
|
||||
locationProvider.start(updateInterval);
|
||||
} catch (final Exception e) {
|
||||
LOG.error("Failed to start location provider {} for {}", providerType, device.getAliasOrName(), e);
|
||||
return;
|
||||
}
|
||||
final List<GBLocationProvider> existingProviders = providersByDevice.computeIfAbsent(device, ignored -> new ArrayList<>());
|
||||
Objects.requireNonNull(existingProviders).add(locationProvider);
|
||||
updateNotification();
|
||||
return;
|
||||
case ACTION_STOP:
|
||||
if (device != null) {
|
||||
@@ -144,6 +145,11 @@ public class GBLocationService extends BroadcastReceiver {
|
||||
updateNotification();
|
||||
}
|
||||
|
||||
public static boolean isGpsSupportedAndEnabled() {
|
||||
final LocationManager locationManager = (LocationManager) GBApplication.getContext().getSystemService(Context.LOCATION_SERVICE);
|
||||
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
|
||||
}
|
||||
|
||||
public static void start(final Context context,
|
||||
@NonNull final GBDevice device,
|
||||
final GBLocationProviderType providerType,
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2022-2024 José Rebelo, LukasEdl
|
||||
/* Copyright (C) 2022-2026 José Rebelo, LukasEdl
|
||||
|
||||
This file is part of Gadgetbridge.
|
||||
|
||||
@@ -47,7 +47,7 @@ public class PhoneLocationProvider extends GBLocationProvider {
|
||||
|
||||
@Override
|
||||
public void start(final int interval) {
|
||||
LOG.info("Starting phone gps location provider");
|
||||
LOG.info("Starting phone location provider ({})", provider);
|
||||
|
||||
if (!GB.checkPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) && !GB.checkPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION)) {
|
||||
GB.toast("Location permission not granted", Toast.LENGTH_SHORT, GB.ERROR);
|
||||
|
||||
+1
-1
@@ -1859,7 +1859,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport
|
||||
final boolean sendGpsToBand = HuamiCoordinator.getWorkoutSendGpsToBand(getDevice().getAddress());
|
||||
|
||||
if (workoutNeedsGps) {
|
||||
if (sendGpsToBand) {
|
||||
if (sendGpsToBand && GBLocationService.isGpsSupportedAndEnabled()) {
|
||||
lastPhoneGpsSent = 0;
|
||||
sendPhoneGps(HuamiPhoneGpsStatus.SEARCHING, null);
|
||||
GBLocationService.start(getContext(), getDevice(), GBLocationProviderType.GPS, 1000);
|
||||
|
||||
+1
-1
@@ -155,7 +155,7 @@ public class ZeppOsWorkoutService extends AbstractZeppOsService {
|
||||
final boolean sendGpsToBand = getDevicePrefs().getBoolean(DeviceSettingsPreferenceConst.PREF_WORKOUT_SEND_GPS_TO_BAND, false);
|
||||
|
||||
if (workoutNeedsGps) {
|
||||
if (sendGpsToBand) {
|
||||
if (sendGpsToBand && GBLocationService.isGpsSupportedAndEnabled()) {
|
||||
lastPhoneGpsSent = 0;
|
||||
sendPhoneGps(HuamiPhoneGpsStatus.SEARCHING, null);
|
||||
GBLocationService.start(getContext(), getSupport().getDevice(), GBLocationProviderType.GPS, 1000);
|
||||
|
||||
+1
-1
@@ -656,7 +656,7 @@ public class XiaomiHealthService extends AbstractXiaomiService {
|
||||
);
|
||||
|
||||
final boolean sendGpsToBand = getDevicePrefs().getBoolean(DeviceSettingsPreferenceConst.PREF_WORKOUT_SEND_GPS_TO_BAND, false);
|
||||
if (!sendGpsToBand) {
|
||||
if (!sendGpsToBand || !GBLocationService.isGpsSupportedAndEnabled()) {
|
||||
getSupport().sendCommand(
|
||||
"send location disabled",
|
||||
XiaomiProto.Command.newBuilder()
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
<string name="all_satellites">All Satellites</string>
|
||||
<string name="speed_first">Speed first</string>
|
||||
<string name="accuracy_first">Accuracy First</string>
|
||||
<string name="phone_gps_not_available">Phone GPS is not available</string>
|
||||
|
||||
<string name="device_card_activity_card_title">Activity info on device card</string>
|
||||
<string name="device_card_activity_card_title_summary">Choose what activity details are displayed on device card</string>
|
||||
|
||||
Reference in New Issue
Block a user