Commit 2fef231c by Abid Hasan

merge conflict resolved

parents 59109a4d 89e62f9c
......@@ -143,7 +143,7 @@ enum PermissionStatus {
/// Permission to access the requested feature is denied by the user.
denied,
/// The feature is disabled (or not available) on the device.
/// Permissions to access the feature is granted by the user but the feature is disabled.
disabled,
/// Permission to access the requested feature is granted by the user.
......
......@@ -28,6 +28,10 @@ analyzer:
missing_return: warning
# allow having TODOs in the code
todo: ignore
# Ignore analyzer hints for updating pubspecs when using Future or
# Stream and not importing dart:async
# Please see https://github.com/flutter/flutter/pull/24528 for details.
#sdk_version_async_exported_from_core: ignore
exclude:
- 'bin/cache/**'
# the following two are relative to the stocks example and the flutter package respectively
......@@ -56,6 +60,7 @@ linter:
- avoid_empty_else
- avoid_field_initializers_in_const_classes
- avoid_function_literals_in_foreach_calls
# - avoid_implementing_value_types # not yet tested
- avoid_init_to_null
# - avoid_js_rounded_ints # only useful when targeting JS runtime
- avoid_null_checks_in_equality_operators
......@@ -65,8 +70,11 @@ linter:
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
# - avoid_returning_null # there are plenty of valid reasons to return null
# - avoid_returning_null_for_future # not yet tested
- avoid_returning_null_for_void
# - avoid_returning_this # there are plenty of valid reasons to return this
# - avoid_setters_without_getters # not yet tested
# - avoid_shadowing_type_parameters # not yet tested
# - avoid_single_cascade_in_expression_statements # not yet tested
- avoid_slow_async_io
- avoid_types_as_parameter_names
......@@ -87,6 +95,7 @@ linter:
- empty_constructor_bodies
- empty_statements
# - file_names # not yet tested
- flutter_style_todos
- hash_and_equals
- implementation_imports
# - invariant_booleans # too many false positives: https://github.com/dart-lang/linter/issues/811
......@@ -111,7 +120,6 @@ linter:
# - parameter_assignments # we do this commonly
- prefer_adjacent_string_concatenation
- prefer_asserts_in_initializer_lists
- prefer_bool_in_asserts
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_const_constructors
......@@ -128,6 +136,7 @@ linter:
# - prefer_function_declarations_over_variables # not yet tested
- prefer_generic_function_type_aliases
- prefer_initializing_formals
# - prefer_int_literals # not yet tested
# - prefer_interpolation_to_compose_strings # not yet tested
- prefer_is_empty
- prefer_is_not_empty
......@@ -140,6 +149,7 @@ linter:
- recursive_getters
- slash_for_doc_comments
- sort_constructors_first
- sort_pub_dependencies
- sort_unnamed_constructors_first
- super_goes_last
- test_types_in_equals
......@@ -147,6 +157,7 @@ linter:
# - type_annotate_public_apis # subset of always_specify_types
- type_init_formals
# - unawaited_futures # too many false positives
# - unnecessary_await_in_return # not yet tested
- unnecessary_brace_in_string_interps
- unnecessary_const
- unnecessary_getters_setters
......@@ -159,6 +170,7 @@ linter:
- unnecessary_statements
- unnecessary_this
- unrelated_type_equality_checks
# - use_function_type_syntax_for_parameters # not yet tested
- use_rethrow_when_possible
# - use_setters_to_change_properties # not yet tested
# - use_string_buffers # has false positives: https://github.com/dart-lang/sdk/issues/34182
......
connection.project.dir=
connection.project.dir=../example/android
eclipse.preferences.version=1
......@@ -149,8 +149,13 @@ class PermissionHandlerPlugin(private val registrar: Registrar, private var requ
val targetsMOrHigher = context.applicationInfo.targetSdkVersion >= android.os.Build.VERSION_CODES.M
for (name in names) {
if (targetsMOrHigher && ContextCompat.checkSelfPermission(context, name) != PackageManager.PERMISSION_GRANTED) {
if (targetsMOrHigher) {
val permissionStatus = ContextCompat.checkSelfPermission(context, name)
if (permissionStatus == PackageManager.PERMISSION_DENIED) {
return PermissionStatus.DENIED
} else if (permissionStatus != PackageManager.PERMISSION_GRANTED) {
return PermissionStatus.UNKNOWN
}
}
}
......@@ -258,7 +263,10 @@ class PermissionHandlerPlugin(private val registrar: Registrar, private var requ
} else if (permission == PermissionGroup.LOCATION) {
val context: Context? = registrar.activity() ?: registrar.activeContext()
val isLocationServiceEnabled= if (context == null) false else isLocationServiceEnabled(context)
val permissionStatus = if (isLocationServiceEnabled) grantResults[i].toPermissionStatus() else PermissionStatus.DISABLED
var permissionStatus = grantResults[i].toPermissionStatus()
if (permissionStatus == PermissionStatus.GRANTED && !isLocationServiceEnabled) {
permissionStatus = PermissionStatus.DISABLED
}
if (!mRequestResults.containsKey(PermissionGroup.LOCATION_ALWAYS)) {
mRequestResults[PermissionGroup.LOCATION_ALWAYS] = permissionStatus
......
......@@ -222,7 +222,7 @@
);
inputPaths = (
"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
"${PODS_ROOT}/../.symlinks/flutter/ios-release/Flutter.framework",
"${PODS_ROOT}/../.symlinks/flutter/ios/Flutter.framework",
"${BUILT_PRODUCTS_DIR}/permission_handler/permission_handler.framework",
);
name = "[CP] Embed Pods Frameworks";
......
......@@ -18,15 +18,16 @@ class LocationPermissionStrategy : NSObject, PermissionStrategy, CLLocationManag
}
private static func getPermissionStatus(permission: PermissionGroup) -> PermissionStatus {
if !CLLocationManager.locationServicesEnabled() {
let authorizationStatus: CLAuthorizationStatus = CLLocationManager.authorizationStatus()
let permissionStatus: PermissionStatus = LocationPermissionStrategy.determinePermissionStatus(
permission: permission,
authorizationStatus: authorizationStatus)
if permissionStatus == PermissionStatus.granted && !CLLocationManager.locationServicesEnabled() {
return PermissionStatus.disabled
}
let status: CLAuthorizationStatus = CLLocationManager.authorizationStatus()
return LocationPermissionStrategy.determinePermissionStatus(
permission: permission,
authorizationStatus: status)
return permissionStatus
}
func requestPermission(permission: PermissionGroup, completionHandler: @escaping PermissionStatusHandler) {
......
......@@ -15,22 +15,25 @@ class SensorPermissionStrategy : NSObject, PermissionStrategy {
}
private static func getPermissionStatus() -> PermissionStatus {
if !CMMotionActivityManager.isActivityAvailable() {
return PermissionStatus.disabled
}
if #available(iOS 11.0, *) {
let status: CMAuthorizationStatus = CMMotionActivityManager.authorizationStatus()
var permissionStatus: PermissionStatus
switch status {
case CMAuthorizationStatus.authorized:
return PermissionStatus.granted
permissionStatus = PermissionStatus.granted
case CMAuthorizationStatus.denied:
return PermissionStatus.denied
permissionStatus = PermissionStatus.denied
case CMAuthorizationStatus.restricted:
return PermissionStatus.restricted
permissionStatus = PermissionStatus.restricted
default:
return PermissionStatus.unknown
permissionStatus = PermissionStatus.unknown
}
if permissionStatus == PermissionStatus.granted && !CMMotionActivityManager.isActivityAvailable() {
return PermissionStatus.disabled
} else {
return permissionStatus
}
}
......
......@@ -32,7 +32,7 @@ class PermissionHandler {
/// Returns a [Future] containing the current permission status for the supplied [PermissionGroup].
Future<PermissionStatus> checkPermissionStatus(
PermissionGroup permission) async {
final dynamic status = await _methodChannel.invokeMethod(
final String status = await _methodChannel.invokeMethod(
'checkPermissionStatus', Codec.encodePermissionGroup(permission));
return Codec.decodePermissionStatus(status);
......@@ -52,7 +52,7 @@ class PermissionHandler {
Future<Map<PermissionGroup, PermissionStatus>> requestPermissions(
List<PermissionGroup> permissions) async {
final String jsonData = Codec.encodePermissionGroups(permissions);
final dynamic status =
final String status =
await _methodChannel.invokeMethod('requestPermissions', jsonData);
return Codec.decodePermissionRequestResult(status);
......
part of permission_handler;
class Codec {
static PermissionStatus decodePermissionStatus(dynamic value) {
final dynamic permission = json.decode(value.toString());
static PermissionStatus decodePermissionStatus(String value) {
final dynamic permission = json.decode(value);
return PermissionStatus.values.firstWhere(
(PermissionStatus e) => e.toString().split('.').last == permission);
}
static Map<PermissionGroup, PermissionStatus> decodePermissionRequestResult(
dynamic value) {
final Map<String, dynamic> jsonObject = json.decode(value.toString());
String value) {
final Map<String, dynamic> jsonObject = json.decode(value);
final Map<PermissionGroup, PermissionStatus> permissionResults =
<PermissionGroup, PermissionStatus>{};
......
......@@ -20,7 +20,7 @@ flutter:
pluginClass: PermissionHandlerPlugin
environment:
sdk: ">=2.0.0-dev.68.0 <3.0.0"
sdk: ">=2.1.0-dev.5.0 <3.0.0"
# To add assets to your plugin package, add an assets section, like this:
# assets:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment