diff --git a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java
index 03d529fa..badd800d 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/preferences/BluetoothPreferences.java
@@ -232,7 +232,9 @@ public class BluetoothPreferences extends PreferenceFragment {
@Override
public boolean onPreferenceClick(Preference preference) {
if (PermissionHelper.requestBluetoothPermission(getActivity(), fragment)) {
- startBluetoothDiscovery();
+ if (PermissionHelper.requestLocationServicePermission(getActivity())) {
+ startBluetoothDiscovery();
+ }
}
return true;
}
diff --git a/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java b/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java
index 5e36fee7..948b6343 100644
--- a/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java
+++ b/android_app/app/src/main/java/com/health/openscale/gui/utils/PermissionHelper.java
@@ -18,6 +18,7 @@ package com.health.openscale.gui.utils;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.Dialog;
import android.app.Fragment;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
@@ -25,11 +26,16 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
-import androidx.core.app.ActivityCompat;
+import android.location.LocationManager;
+import android.provider.Settings;
import android.widget.Toast;
import com.health.openscale.R;
+import androidx.core.app.ActivityCompat;
+
+import static android.content.Context.LOCATION_SERVICE;
+
public class PermissionHelper {
public final static int PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION = 1;
public final static int PERMISSIONS_REQUEST_ACCESS_READ_STORAGE = 2;
@@ -70,7 +76,34 @@ public class PermissionHelper {
}
});
- builder.show();
+ Dialog alertDialog = builder.create();
+ alertDialog.setCanceledOnTouchOutside(false);
+ alertDialog.show();
+ return false;
+ }
+
+ return true;
+ }
+
+ public static boolean requestLocationServicePermission(final Activity activity) {
+ LocationManager locationManager = (LocationManager) activity.getSystemService(LOCATION_SERVICE);
+ if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+ builder.setTitle(R.string.permission_bluetooth_info_title);
+ builder.setIcon(R.drawable.ic_preferences_about);
+ builder.setMessage(R.string.permission_location_service_info);
+ builder.setPositiveButton(R.string.label_ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialogInterface, int i) {
+ // Show location settings when the user acknowledges the alert dialog
+ Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
+ activity.startActivity(intent);
+ }
+ });
+
+ Dialog alertDialog = builder.create();
+ alertDialog.setCanceledOnTouchOutside(false);
+ alertDialog.show();
return false;
}
diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml
index 1ec6b392..9f2a4c9c 100644
--- a/android_app/app/src/main/res/values/strings.xml
+++ b/android_app/app/src/main/res/values/strings.xml
@@ -193,6 +193,7 @@
Permission not granted
Coarse location permission needed to search for Bluetooth devices. It can be revoked after the device is found.
+ Location Service (GPS) needs to be enabled to search for Bluetooth scale. Please enable it under Android settings.
Info
read/write openScale data, including user information and all saved measurements
Read/Write openScale Data