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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 89 additions and 44 deletions

View File

@ -1,3 +1,8 @@
## 2.0.1-dev
* askLocationPermission return type changed to Future<bool>
* Updated Example accordingly
* Readme Updated
## 2.0.0-dev
* enableLocationService return type changed to Future<bool>
* Updated Example accordingly

View File

@ -47,16 +47,17 @@ Since ACCESS_FINE_LOCATION and READ_EXTERNAL_STORAGE is considered to be dangero
#### As a **convenience** this library provides methods to check and request location and external read/write permissions
```dart
// returns true/false asynchronously
bool a = await Nearby().checkLocationPermissions()
bool a = await Nearby().checkLocationPermissions();
// asks for permission only if its not given
Nearby().askLocationPermission()
// returns true/false if the location permission is granted on/off resp.
bool b = Nearby().askLocationPermission();
// OPTIONAL: if you need to transfer files and rename it on device
bool b = Nearby().checkExternalStoragePermission()
bool b = Nearby().checkExternalStoragePermission();
// asks for READ + WRTIE EXTERNAL STORAGE permission only if its not given
Nearby().askExternalStoragePermission()
Nearby().askExternalStoragePermission() ;
Nearby().askLocationAndExternalStoragePermission() // for all permissions in one go..
Nearby().askLocationAndExternalStoragePermission(); // for all permissions in one go..
```
## Work Flow

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);
}
}

View File

@ -3,8 +3,8 @@ import 'dart:math';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:nearby_connections/nearby_connections.dart';
import 'package:image_picker/image_picker.dart';
import 'package:nearby_connections/nearby_connections.dart';
void main() => runApp(MyApp());
@ -68,8 +68,15 @@ class _MyBodyState extends State<Body> {
),
RaisedButton(
child: Text("askLocationPermission"),
onPressed: () {
Nearby().askLocationPermission();
onPressed: () async {
if (await Nearby().askLocationPermission()) {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text("Location Permission granted :)")));
} else {
Scaffold.of(context).showSnackBar(SnackBar(
content:
Text("Location permissions not granted :(")));
}
},
),
RaisedButton(
@ -114,11 +121,12 @@ class _MyBodyState extends State<Body> {
child: Text("enableLocationServices"),
onPressed: () async {
if (await Nearby().enableLocationServices()) {
Scaffold.of(context).showSnackBar(
SnackBar(content: Text("Location Service Enabled :)")));
Scaffold.of(context).showSnackBar(SnackBar(
content: Text("Location Service Enabled :)")));
} else {
Scaffold.of(context).showSnackBar(
SnackBar(content: Text("Enabling Location Service Failed :(")));
Scaffold.of(context).showSnackBar(SnackBar(
content:
Text("Enabling Location Service Failed :(")));
}
},
),

View File

@ -108,7 +108,7 @@ packages:
path: ".."
relative: true
source: path
version: "2.0.0-dev"
version: "2.0.1-dev"
path:
dependency: transitive
description:

View File

@ -1,9 +1,10 @@
import 'dart:async';
import 'dart:typed_data';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:nearby_connections/src/defs.dart';
import 'package:nearby_connections/src/classes.dart';
import 'package:nearby_connections/src/defs.dart';
/// The NearbyConnection class
///
@ -130,7 +131,8 @@ class Nearby {
}
//for advertisers
OnConnectionInitiated _advertConnectionInitiated, _discoverConnectionInitiated;
OnConnectionInitiated _advertConnectionInitiated,
_discoverConnectionInitiated;
OnConnectionResult _advertConnectionResult, _discoverConnectionResult;
OnDisconnected _advertDisconnected, _discoverDisconnected;
@ -156,8 +158,8 @@ class Nearby {
/// convenience method
///
/// Asks location permission
void askLocationPermission() =>
_channel.invokeMethod('askLocationPermission');
Future<bool> askLocationPermission() async =>
await _channel.invokeMethod('askLocationPermission');
/// convenience method
///

View File

@ -1,6 +1,6 @@
name: nearby_connections
description: Plugin for the android NearbyConnections API. Bytes and Files Supported.
version: 2.0.0-dev
version: 2.0.1-dev
homepage: https://github.com/mannprerak2/nearby_connections
environment: