Skip to content
Snippets Groups Projects
Commit acdf5665 authored by Hampus Rosenquist's avatar Hampus Rosenquist
Browse files

Fix runtime permission handling

parent 298704fc
No related branches found
No related tags found
No related merge requests found
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
android:maxSdkVersion="30"/> android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30"/> android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/> <uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
......
...@@ -7,11 +7,6 @@ ...@@ -7,11 +7,6 @@
package org.dripdronescanner.android; package org.dripdronescanner.android;
public class Constants { public class Constants {
public static final int REQUEST_BT_CONNECT = 1;
public static final int FINE_LOCATION_PERMISSION_REQUEST_CODE = 2;
public static final int REQUEST_ENABLE_WIFI = 3;
public static final int REQUEST_BT_SCAN = 4;
public static final String DELIM = ","; public static final String DELIM = ",";
public static final int MAX_ID_BYTE_SIZE = 20; public static final int MAX_ID_BYTE_SIZE = 20;
......
...@@ -11,8 +11,6 @@ import android.view.ViewGroup; ...@@ -11,8 +11,6 @@ import android.view.ViewGroup;
import android.util.Log; import android.util.Log;
import android.widget.ImageButton; import android.widget.ImageButton;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.content.res.ResourcesCompat; import androidx.core.content.res.ResourcesCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
...@@ -20,8 +18,6 @@ import androidx.annotation.Nullable; ...@@ -20,8 +18,6 @@ import androidx.annotation.Nullable;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import org.dripdronescanner.android.Constants;
import org.dripdronescanner.android.PermissionUtils;
import org.dripdronescanner.android.R; import org.dripdronescanner.android.R;
import org.dripdronescanner.android.data.AircraftObject; import org.dripdronescanner.android.data.AircraftObject;
import org.dripdronescanner.android.data.LocationData; import org.dripdronescanner.android.data.LocationData;
...@@ -96,14 +92,10 @@ public class AircraftMapView extends Fragment { ...@@ -96,14 +92,10 @@ public class AircraftMapView extends Fragment {
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION);
return; return;
} }
overlay = new MyLocationNewOverlay(new GpsMyLocationProvider(requireContext()), map); enableMyLocation();
overlay.enableMyLocation();
overlay.enableFollowLocation();
map.getOverlays().add(overlay);
}); });
ImageButton centerMapButton = v.findViewById(R.id.ic_center_map); ImageButton centerMapButton = v.findViewById(R.id.ic_center_map);
...@@ -115,6 +107,13 @@ public class AircraftMapView extends Fragment { ...@@ -115,6 +107,13 @@ public class AircraftMapView extends Fragment {
return v; return v;
} }
public void enableMyLocation() {
overlay = new MyLocationNewOverlay(new GpsMyLocationProvider(requireContext()), map);
overlay.enableMyLocation();
overlay.enableFollowLocation();
map.getOverlays().add(overlay);
}
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
...@@ -298,21 +297,4 @@ public class AircraftMapView extends Fragment { ...@@ -298,21 +297,4 @@ public class AircraftMapView extends Fragment {
} }
} }
} }
private final ActivityResultLauncher<String> requestPermissionLauncher =
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
if (isGranted) {
overlay = new MyLocationNewOverlay(new GpsMyLocationProvider(requireContext()), map);
overlay.enableMyLocation();
overlay.enableFollowLocation();
map.getOverlays().add(overlay);
} else {
//showErrorText(R.string.permission_required_toast);
// Explain to the user that the feature is unavailable because the
// feature requires a permission that the user has denied. At the
// same time, respect the user's decision. Don't link to system
// settings in an effort to convince the user to change their
// decision.
}
});
} }
\ No newline at end of file
...@@ -14,6 +14,7 @@ import android.content.Intent; ...@@ -14,6 +14,7 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.location.Location; import android.location.Location;
import android.net.Uri;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
...@@ -26,11 +27,14 @@ import android.view.MenuInflater; ...@@ -26,11 +27,14 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProviders;
...@@ -40,8 +44,6 @@ import com.google.android.gms.location.LocationRequest; ...@@ -40,8 +44,6 @@ import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationResult; import com.google.android.gms.location.LocationResult;
import com.google.android.gms.location.LocationServices; import com.google.android.gms.location.LocationServices;
import org.dripdronescanner.android.Constants;
import org.dripdronescanner.android.PermissionUtils;
import org.dripdronescanner.android.R; import org.dripdronescanner.android.R;
import org.dripdronescanner.android.data.AircraftObject; import org.dripdronescanner.android.data.AircraftObject;
import org.dripdronescanner.android.log.LogWriter; import org.dripdronescanner.android.log.LogWriter;
...@@ -53,8 +55,11 @@ import org.dripdronescanner.android.network.WiFiNaNScanner; ...@@ -53,8 +55,11 @@ import org.dripdronescanner.android.network.WiFiNaNScanner;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
import java.util.Set; import java.util.Set;
public class DebugActivity extends AppCompatActivity { public class DebugActivity extends AppCompatActivity {
...@@ -79,6 +84,13 @@ public class DebugActivity extends AppCompatActivity { ...@@ -79,6 +84,13 @@ public class DebugActivity extends AppCompatActivity {
private Handler handler; private Handler handler;
private Runnable runnableCode; private Runnable runnableCode;
private AlertDialog alertDialog;
private ArrayList<String> permissionsList;
private final String[] permissionsStr = {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN};
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater(); MenuInflater inflater = getMenuInflater();
...@@ -105,7 +117,6 @@ public class DebugActivity extends AppCompatActivity { ...@@ -105,7 +117,6 @@ public class DebugActivity extends AppCompatActivity {
}); });
} }
@TargetApi(Build.VERSION_CODES.O)
private void checkBluetoothSupport(Menu menu) { private void checkBluetoothSupport(Menu menu) {
Object object = getSystemService(BLUETOOTH_SERVICE); Object object = getSystemService(BLUETOOTH_SERVICE);
if (object == null) if (object == null)
...@@ -113,27 +124,23 @@ public class DebugActivity extends AppCompatActivity { ...@@ -113,27 +124,23 @@ public class DebugActivity extends AppCompatActivity {
BluetoothAdapter bluetoothAdapter = ((android.bluetooth.BluetoothManager) object).getAdapter(); BluetoothAdapter bluetoothAdapter = ((android.bluetooth.BluetoothManager) object).getAdapter();
if (bluetoothAdapter != null) { if (bluetoothAdapter != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && bluetoothAdapter.isLeCodedPhySupported()) { if (bluetoothAdapter.isLeCodedPhySupported()) {
menu.findItem(R.id.coded_phy).setTitle(R.string.coded_phy_supported); menu.findItem(R.id.coded_phy).setTitle(R.string.coded_phy_supported);
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && bluetoothAdapter.isLeExtendedAdvertisingSupported()) { if (bluetoothAdapter.isLeExtendedAdvertisingSupported()) {
menu.findItem(R.id.extended_advertising).setTitle(R.string.ea_supported); menu.findItem(R.id.extended_advertising).setTitle(R.string.ea_supported);
} }
} }
} }
@TargetApi(Build.VERSION_CODES.O)
private void checkNaNSupport(Menu menu) { private void checkNaNSupport(Menu menu) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_AWARE)) { if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_AWARE)) {
menu.findItem(R.id.wifi_nan).setTitle(R.string.nan_supported); menu.findItem(R.id.wifi_nan).setTitle(R.string.nan_supported);
} }
} }
@TargetApi(Build.VERSION_CODES.M)
private void checkWiFiSupport(Menu menu) { private void checkWiFiSupport(Menu menu) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { menu.findItem(R.id.wifi_beacon_scan).setTitle(R.string.wifi_beacon_scan_supported);
menu.findItem(R.id.wifi_beacon_scan).setTitle(R.string.wifi_beacon_scan_supported);
}
} }
@Override @Override
...@@ -191,9 +198,6 @@ public class DebugActivity extends AppCompatActivity { ...@@ -191,9 +198,6 @@ public class DebugActivity extends AppCompatActivity {
private void createNewLogfile() { private void createNewLogfile() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
requestBluetoothConnectPermission(Constants.REQUEST_BT_CONNECT);
}
return; return;
} }
loggerFile = getLoggerFileDir(btScanner.getBluetoothAdapter().getName()); loggerFile = getLoggerFileDir(btScanner.getBluetoothAdapter().getName());
...@@ -213,6 +217,18 @@ public class DebugActivity extends AppCompatActivity { ...@@ -213,6 +217,18 @@ public class DebugActivity extends AppCompatActivity {
setContentView(R.layout.activity_debug); setContentView(R.layout.activity_debug);
mModel = ViewModelProviders.of(this).get(AircraftViewModel.class); mModel = ViewModelProviders.of(this).get(AircraftViewModel.class);
// Ask for permissions for SDK >= 31
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
permissionsList = new ArrayList<>();
permissionsList.addAll(Arrays.asList(permissionsStr));
askForPermissions(permissionsList);
// Ask for permissions for 29 <= SDK <= 31
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
permissionsList = new ArrayList<>();
permissionsList.add(Manifest.permission.ACCESS_FINE_LOCATION);
askForPermissions(permissionsList);
}
dataManager = new OpenDroneIdDataManager(new OpenDroneIdDataManager.Callback() { dataManager = new OpenDroneIdDataManager(new OpenDroneIdDataManager.Callback() {
@Override @Override
public void onNewAircraft(AircraftObject object) { public void onNewAircraft(AircraftObject object) {
...@@ -222,40 +238,17 @@ public class DebugActivity extends AppCompatActivity { ...@@ -222,40 +238,17 @@ public class DebugActivity extends AppCompatActivity {
btScanner = new BluetoothScanner(this, dataManager); btScanner = new BluetoothScanner(this, dataManager);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_AWARE)) {
getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_AWARE)) {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) { if (!wifiManager.isWifiEnabled()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { wifiManager.setWifiEnabled(true);
Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI); wifiOn = true;
startActivityForResult(panelIntent, Constants.REQUEST_ENABLE_WIFI);
} else {
wifiManager.setWifiEnabled(true);
wifiOn = true;
}
} }
} }
BluetoothAdapter bluetoothAdapter = btScanner.getBluetoothAdapter(); BluetoothAdapter bluetoothAdapter = btScanner.getBluetoothAdapter();
if (bluetoothAdapter != null) { if (bluetoothAdapter != null) {
createNewLogfile(); createNewLogfile();
// Is Bluetooth turned on?
if (!bluetoothAdapter.isEnabled()) {
// Prompt user to turn on Bluetooth (logic continues in onActivityResult()).
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, Constants.REQUEST_BT_CONNECT);
} else {
bluetoothOn = true;
// Check permission
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "onMapReady: call request permission");
requestLocationPermission(Constants.FINE_LOCATION_PERMISSION_REQUEST_CODE);
} else {
initialize();
}
}
} else { } else {
// Bluetooth is not supported. // Bluetooth is not supported.
showErrorText(R.string.bt_not_supported); showErrorText(R.string.bt_not_supported);
...@@ -296,58 +289,16 @@ public class DebugActivity extends AppCompatActivity { ...@@ -296,58 +289,16 @@ public class DebugActivity extends AppCompatActivity {
mModel.getAllAircraft().observe(this, listObserver); mModel.getAllAircraft().observe(this, listObserver);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
requestBluetoothScanPermission(Constants.REQUEST_BT_SCAN);
}
return;
}
btScanner.startScan(); btScanner.startScan();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { wiFiNaNScanner = new WiFiNaNScanner(this, dataManager, logger);
wiFiNaNScanner = new WiFiNaNScanner(this, dataManager, logger); wiFiNaNScanner.startScan();
wiFiNaNScanner.startScan(); wiFiBeaconScanner = new WiFiBeaconScanner(this, dataManager, logger);
} wiFiBeaconScanner.startScan();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
wiFiBeaconScanner = new WiFiBeaconScanner(this, dataManager, logger);
if (wiFiBeaconScanner != null) {
wiFiBeaconScanner.startScan();
}
}
addDeviceList(); addDeviceList();
} }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Constants.REQUEST_BT_CONNECT) {
if (resultCode == RESULT_OK) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "onMapReady: call request permission");
requestLocationPermission(Constants.FINE_LOCATION_PERMISSION_REQUEST_CODE);
} else {
initialize();
}
} else {
if(!wifiOn) {
// User declined to enable Bluetooth, exit the app.
Toast.makeText(this, R.string.bt_not_enabled_leaving, Toast.LENGTH_LONG).show();
finish();
}
}
} else if (requestCode == Constants.REQUEST_ENABLE_WIFI) {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled() && !bluetoothOn) {
Toast.makeText(this, R.string.wifi_not_enabled_leaving, Toast.LENGTH_LONG).show();
finish();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
public void addDeviceList() { public void addDeviceList() {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.holder, new DeviceList()).commitAllowingStateLoss(); transaction.replace(R.id.holder, new DeviceList()).commitAllowingStateLoss();
...@@ -381,60 +332,70 @@ public class DebugActivity extends AppCompatActivity { ...@@ -381,60 +332,70 @@ public class DebugActivity extends AppCompatActivity {
Toast.makeText(this, messageId, Toast.LENGTH_SHORT).show(); Toast.makeText(this, messageId, Toast.LENGTH_SHORT).show();
} }
public void requestLocationPermission(int requestCode) { private final ActivityResultLauncher<String[]> permissionsLauncher =
Log.d(TAG, "requestLocationPermission: request permission"); registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(),
new ActivityResultCallback<Map<String, Boolean>>() {
// Location permission has not been granted yet, request it. @Override
PermissionUtils.requestPermission(this, requestCode, public void onActivityResult(Map<String,Boolean> result) {
Manifest.permission.ACCESS_FINE_LOCATION, false); ArrayList<Boolean> list = new ArrayList<>(result.values());
} permissionsList = new ArrayList<>();
int permissionsCount = 0;
@RequiresApi(api = Build.VERSION_CODES.S) for (int i = 0; i < list.size(); i++) {
public void requestBluetoothConnectPermission(int requestCode) { if (shouldShowRequestPermissionRationale(permissionsStr[i])) {
Log.d(TAG, "requestBluetoothConnectPermission: request permission"); permissionsList.add(permissionsStr[i]);
}else if (!hasPermission(DebugActivity.this, permissionsStr[i])){
// Bluetooth permission has not been granted yet, request it. permissionsCount++;
PermissionUtils.requestPermission(this, requestCode, }
Manifest.permission.BLUETOOTH_CONNECT, false); }
if (permissionsList.size() > 0) {
// Some permissions are denied and can be asked again.
askForPermissions(permissionsList);
} else if (permissionsCount > 0) {
showPermissionDialog();
} else {
// All permissions granted.
initialize();
AircraftMapView aircraftMapViewFragment = (AircraftMapView) getSupportFragmentManager().findFragmentById(R.id.mapView);
if (aircraftMapViewFragment != null) {
aircraftMapViewFragment.enableMyLocation();
}
}
}
});
private void askForPermissions(ArrayList<String> permissionsList) {
String[] newPermissionStr = new String[permissionsList.size()];
for (int i = 0; i < newPermissionStr.length; i++) {
newPermissionStr[i] = permissionsList.get(i);
}
if (newPermissionStr.length > 0) {
permissionsLauncher.launch(newPermissionStr);
} else {
/* User has pressed 'Deny & Don't ask again' so we have to show the enable permissions dialog
which will lead them to app details page to enable permissions from there. */
showPermissionDialog();
}
} }
@RequiresApi(api = Build.VERSION_CODES.S) private boolean hasPermission(Context context, String permissionStr) {
public void requestBluetoothScanPermission(int requestCode) { return ContextCompat.checkSelfPermission(context, permissionStr) == PackageManager.PERMISSION_GRANTED;
Log.d(TAG, "requestBluetoothConnectPermission: request permission");
// Bluetooth permission has not been granted yet, request it.
PermissionUtils.requestPermission(this, requestCode,
Manifest.permission.BLUETOOTH_SCAN, false);
} }
@Override private void showPermissionDialog() {
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, AlertDialog.Builder builder = new AlertDialog.Builder(this);
@NonNull int[] grantResults) { builder.setTitle("Permission required")
super.onRequestPermissionsResult(requestCode, permissions, grantResults); .setMessage("Some permissions are need to be allowed to use this app without any problems.")
if (requestCode == Constants.FINE_LOCATION_PERMISSION_REQUEST_CODE) { .setPositiveButton("Settings", (dialog, which) -> {
Log.d(TAG, "onRequestPermissionsResult: back from request FINE_LOCATION"); Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
if (PermissionUtils.isPermissionGranted(permissions, grantResults, Uri uri = Uri.fromParts("package", getPackageName(), null);
Manifest.permission.ACCESS_FINE_LOCATION)) { intent.setData(uri);
initialize(); startActivity(intent);
} else { dialog.dismiss();
showErrorText(R.string.permission_required_toast); });
} if (alertDialog == null) {
alertDialog = builder.create();
} else if (requestCode == Constants.REQUEST_BT_CONNECT) { if (!alertDialog.isShowing()) {
Log.d(TAG, "onRequestPermissionsResult: back from request BLUETOOTH_CONNECT"); alertDialog.show();
if (PermissionUtils.isPermissionGranted(permissions, grantResults,
Manifest.permission.BLUETOOTH_CONNECT)) {
initialize();
} else {
showErrorText(R.string.bluetooth_connect_permission_required_toast);
}
} else if (requestCode == Constants.REQUEST_BT_SCAN) {
Log.d(TAG, "onRequestPermissionsResult: back from request BLUETOOTH_SCAN");
if (PermissionUtils.isPermissionGranted(permissions, grantResults,
Manifest.permission.BLUETOOTH_SCAN)) {
initialize();
} else {
showErrorText(R.string.bluetooth_scan_permission_required_toast);
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment