Update askLocationPermission method (#21)

* enableLocationService return type changed to Future<bool>
* typos fixes #15
* fix #15 added to changelog and bug fixes
* askLocationPermission return type changed to Future<bool> : fixes #9
This commit is contained in:
Gourav Saini
2020-08-16 00:21:27 +05:30
committed by GitHub
parent e7edb9865b
commit 00289fa7bc
8 changed files with 89 additions and 44 deletions

View File

@@ -1,11 +1,14 @@
package com.pkmnapps.nearby_connections;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentSender;
import android.content.pm.PackageManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.common.api.ResolvableApiException;
@@ -20,33 +23,29 @@ import com.google.android.gms.tasks.Task;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry;
class LocationEnabler implements PluginRegistry.ActivityResultListener {
class LocationHelper implements PluginRegistry.ActivityResultListener, PluginRegistry.RequestPermissionsResultListener {
@Nullable
private Activity activity;
private static final int LOCATION_ENABLE_REQUEST = 777;
private static final int REQUEST_LOCATION_PERMISSION = 7777;
private LocationSettingsRequest mLocationSettingsRequest;
private Result pendingResult;
private LocationEnabler(@Nullable Activity activity) {
private LocationHelper(@Nullable Activity activity) {
this.activity = activity;
}
LocationEnabler(PluginRegistry.Registrar registrar) {
LocationHelper(PluginRegistry.Registrar registrar) {
this(registrar.activity());
}
LocationEnabler() {
LocationHelper() {
this.activity = null;
}
void setActivity(@Nullable Activity activity) {
this.activity = activity;
initiateLocationServiceRequest();
}
@Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
if (pendingResult == null) {
@@ -64,6 +63,30 @@ class LocationEnabler implements PluginRegistry.ActivityResultListener {
return false;
}
@Override
public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_LOCATION_PERMISSION && permissions.length > 0) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (pendingResult != null) {
pendingResult.success(true);
pendingResult = null;
}
} else {
if (pendingResult != null) {
pendingResult.success(false);
pendingResult = null;
}
}
return true;
}
return false;
}
void setActivity(@Nullable Activity activity) {
this.activity = activity;
initiateLocationServiceRequest();
}
private void initiateLocationServiceRequest() {
LocationRequest mLocationRequest = LocationRequest.create();
LocationSettingsRequest.Builder builder = new LocationSettingsRequest
@@ -107,4 +130,10 @@ class LocationEnabler implements PluginRegistry.ActivityResultListener {
});
}
void requestLocationPermission(Result result) {
this.pendingResult = result;
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_LOCATION_PERMISSION);
}
}

View File

@@ -48,8 +48,8 @@ public class NearbyConnectionsPlugin implements MethodCallHandler, FlutterPlugin
private Activity activity;
private static final String SERVICE_ID = "com.pkmnapps.nearby_connections";
private static MethodChannel channel;
private static LocationEnabler locationEnabler;
private static ActivityPluginBinding activityBinding;
private static LocationHelper locationHelper;
private static ActivityPluginBinding activityPluginBinding;
private static PluginRegistry.Registrar pluginRegistrar;
private NearbyConnectionsPlugin(Activity activity) {
@@ -63,8 +63,8 @@ public class NearbyConnectionsPlugin implements MethodCallHandler, FlutterPlugin
public static void registerWith(Registrar registrar) {
pluginRegistrar = registrar;
locationEnabler = new LocationEnabler(registrar);
locationEnabler.setActivity(registrar.activity());
locationHelper = new LocationHelper(registrar);
locationHelper.setActivity(registrar.activity());
initiate();
channel = new MethodChannel(registrar.messenger(), "nearby_connections");
channel.setMethodCallHandler(new NearbyConnectionsPlugin(registrar.activity()));
@@ -85,10 +85,7 @@ public class NearbyConnectionsPlugin implements MethodCallHandler, FlutterPlugin
}
break;
case "askLocationPermission":
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
Log.d("nearby_connections", "askLocationPermission");
result.success(null);
locationHelper.requestLocationPermission(result);
break;
case "checkLocationEnabled":
LocationManager lm = (LocationManager) activity.getSystemService(activity.LOCATION_SERVICE);
@@ -105,7 +102,7 @@ public class NearbyConnectionsPlugin implements MethodCallHandler, FlutterPlugin
result.success(gps_enabled || network_enabled);
break;
case "enableLocationServices":
locationEnabler.requestLocationEnable(result);
locationHelper.requestLocationEnable(result);
break;
case "checkExternalStoragePermission":
if (ContextCompat.checkSelfPermission(activity,
@@ -480,18 +477,18 @@ public class NearbyConnectionsPlugin implements MethodCallHandler, FlutterPlugin
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
locationEnabler = new LocationEnabler();
locationHelper = new LocationHelper();
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
locationEnabler = null;
locationHelper = null;
}
private static void attachToActivity(ActivityPluginBinding binding) {
activityBinding = binding;
activityPluginBinding = binding;
try {
locationEnabler.setActivity(binding.getActivity());
locationHelper.setActivity(binding.getActivity());
initiate();
} catch (Exception e) {
e.printStackTrace();
@@ -499,8 +496,9 @@ public class NearbyConnectionsPlugin implements MethodCallHandler, FlutterPlugin
}
private void detachActivity() {
activityBinding.removeActivityResultListener(locationEnabler);
activityBinding = null;
activityPluginBinding.removeRequestPermissionsResultListener(locationHelper);
activityPluginBinding.removeActivityResultListener(locationHelper);
activityPluginBinding = null;
}
@Override
@@ -525,9 +523,11 @@ public class NearbyConnectionsPlugin implements MethodCallHandler, FlutterPlugin
private static void initiate() {
if (pluginRegistrar != null) {
pluginRegistrar.addActivityResultListener(locationEnabler);
pluginRegistrar.addActivityResultListener(locationHelper);
pluginRegistrar.addRequestPermissionsResultListener(locationHelper);
} else {
activityBinding.addActivityResultListener(locationEnabler);
activityPluginBinding.addActivityResultListener(locationHelper);
activityPluginBinding.addRequestPermissionsResultListener(locationHelper);
}
}