diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java index 7d83a633a..b05fce1b8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiSupportProvider.java @@ -22,7 +22,6 @@ import android.content.SharedPreferences; import android.location.Location; import android.net.Uri; import android.os.Handler; -import android.os.SystemClock; import android.widget.Toast; import androidx.annotation.NonNull; @@ -184,6 +183,7 @@ public class HuaweiSupportProvider { private MediaManager mediaManager = null; private GpsAndTime.GpsParameters.Response gpsParametersResponse = null; + private boolean gpsEnabled = false; private final HuaweiPacket.ParamsProvider paramsProvider = new HuaweiPacket.ParamsProvider(); @@ -256,6 +256,12 @@ public class HuaweiSupportProvider { gpsParameterRequest.setFinalizeReq(new RequestCallback() { @Override public void call() { + if (gpsEnabled) { + // Prevent adding multiple GPS providers + LOG.info("GPS is already enabled."); + return; + } + gpsEnabled = true; GBLocationService.start(getContext(), getDevice(), GBLocationProviderType.GPS, 1000); } }); @@ -265,10 +271,19 @@ public class HuaweiSupportProvider { GB.toast(context, "Failed to get GPS parameters", Toast.LENGTH_SHORT, GB.ERROR, e); LOG.error("Failed to get GPS parameters", e); } - } else + } else { + if (gpsEnabled) { + // Prevent adding multiple GPS providers + LOG.info("GPS is already enabled."); + return; + } + gpsEnabled = true; GBLocationService.start(getContext(), getDevice(), GBLocationProviderType.GPS, 1000); - } else + } + } else { + gpsEnabled = false; GBLocationService.stop(getContext(), getDevice()); + } } public void setGpsParametersResponse(GpsAndTime.GpsParameters.Response response) { @@ -1879,6 +1894,12 @@ public class HuaweiSupportProvider { return; } + if (!gpsEnabled) { + LOG.warn("Received GPS data without GPS being enabled! Attempting to stop again."); + GBLocationService.stop(getContext(), getDevice()); + return; + } + SendGpsDataRequest sendGpsDataRequest = new SendGpsDataRequest(this, location, gpsParametersResponse); try { sendGpsDataRequest.doPerform();