mirror of
https://github.com/hackku21/nearby_connections.git
synced 2026-03-02 03:49:22 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user