diff --git a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java index 72d7700f..55eb5e7a 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/MainActivity.java @@ -16,6 +16,7 @@ package com.health.openscale.gui; +import android.Manifest; import android.app.AlertDialog; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; @@ -24,6 +25,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Typeface; import android.net.Uri; @@ -75,6 +77,7 @@ import com.health.openscale.gui.measurement.MeasurementEntryFragment; import com.health.openscale.gui.preferences.BluetoothSettingsFragment; import com.health.openscale.gui.preferences.UserSettingsFragment; import com.health.openscale.gui.slides.AppIntroActivity; +import com.health.openscale.gui.utils.PermissionHelper; import java.io.File; import java.util.ArrayList; @@ -582,6 +585,12 @@ public class MainActivity extends AppCompatActivity return; } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.S) { + Timber.d("SDK >= 31 request for Bluetooth Scan and Bluetooth connect permissions"); + requestPermissions(new String[]{Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT}, PermissionHelper.PERMISSIONS_REQUEST_ACCESS_BLUETOOTH); + return; + } + Toast.makeText(getApplicationContext(), getResources().getString(R.string.info_bluetooth_try_connection) + " " + deviceName, Toast.LENGTH_SHORT).show(); setBluetoothStatusIcon(R.drawable.ic_bluetooth_searching); @@ -877,6 +886,32 @@ public class MainActivity extends AppCompatActivity startActivity(Intent.createChooser(intent, getResources().getString(R.string.label_share))); } + @Override + public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + switch (requestCode) { + case PermissionHelper.PERMISSIONS_REQUEST_ACCESS_BLUETOOTH: { + boolean allGranted = true; + for (int result : grantResults) { + if (result != PackageManager.PERMISSION_GRANTED) { + allGranted = false; + break; + } + } + + if (allGranted) { + Timber.d("All Bluetooth permissions granted"); + invokeConnectToBluetoothDevice(); + } else { + Timber.d("At least one Bluetooth permission was not granted"); + Toast.makeText(this, R.string.permission_not_granted, Toast.LENGTH_SHORT).show(); + } + break; + } + } + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); 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 7962e78e..eb618b38 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 @@ -83,26 +83,24 @@ public class PermissionHelper { } private static boolean requestLocationPermission(final Fragment fragment, String[] requiredPermissions) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (requestLocationServicePermission(fragment)) { - if (fragment.getContext().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { - AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getActivity()); + if (requestLocationServicePermission(fragment)) { + if (fragment.getContext().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getActivity()); - builder.setMessage(R.string.permission_bluetooth_info) - .setTitle(R.string.permission_bluetooth_info_title) - .setIcon(R.drawable.ic_preferences_about) - .setPositiveButton(R.string.label_ok, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.dismiss(); - fragment.requestPermissions(requiredPermissions, PERMISSIONS_REQUEST_ACCESS_BLUETOOTH); - } - }); + builder.setMessage(R.string.permission_bluetooth_info) + .setTitle(R.string.permission_bluetooth_info_title) + .setIcon(R.drawable.ic_preferences_about) + .setPositiveButton(R.string.label_ok, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.dismiss(); + fragment.requestPermissions(requiredPermissions, PERMISSIONS_REQUEST_ACCESS_BLUETOOTH); + } + }); - Dialog alertDialog = builder.create(); - alertDialog.setCanceledOnTouchOutside(false); - alertDialog.show(); - return false; - } + Dialog alertDialog = builder.create(); + alertDialog.setCanceledOnTouchOutside(false); + alertDialog.show(); + return false; } } @@ -136,24 +134,20 @@ public class PermissionHelper { } public static boolean requestReadPermission(final Fragment fragment) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (fragment.getContext().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - fragment.requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_ACCESS_READ_STORAGE); - } else { - return true; - } + if (fragment.getContext().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + fragment.requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_ACCESS_READ_STORAGE); + } else { + return true; } return false; } public static boolean requestWritePermission(final Fragment fragment) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (fragment.getContext().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - fragment.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE); - } else { - return true; - } + if (fragment.getContext().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + fragment.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_ACCESS_WRITE_STORAGE); + } else { + return true; } return false;