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