Commit 8bc75640 by Maurits van Beusekom

Release 2.1.0

parents b127f83d 558bbbe5
## 2.1.0
* Added Android support to check if location services are enabled. If location services are not running the permission check returns `PermissionStatus.DISABLED`.
## 2.0.1 ## 2.0.1
* Fix bug with dependency on `com.android.support:support-compat` library * Fix bug with dependency on `com.android.support:support-compat` library
......
...@@ -22,7 +22,7 @@ To use this plugin, add `permission_handler` as a [dependency in your pubspec.ya ...@@ -22,7 +22,7 @@ To use this plugin, add `permission_handler` as a [dependency in your pubspec.ya
```yaml ```yaml
dependencies: dependencies:
permission_handler: '^2.0.1' permission_handler: '^2.1.0'
``` ```
> **NOTE:** There's a known issue with integrating plugins that use Swift into a Flutter project created with the Objective-C template. See issue [Flutter#16049](https://github.com/flutter/flutter/issues/16049) for help on integration. > **NOTE:** There's a known issue with integrating plugins that use Swift into a Flutter project created with the Objective-C template. See issue [Flutter#16049](https://github.com/flutter/flutter/issues/16049) for help on integration.
......
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
<classpath> <classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/> <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin/default"/>
</classpath> </classpath>
...@@ -6,6 +6,7 @@ import android.content.Intent ...@@ -6,6 +6,7 @@ import android.content.Intent
import android.content.pm.PackageInfo import android.content.pm.PackageInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Build import android.os.Build
import android.provider.Settings
import android.support.v4.app.ActivityCompat import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
import android.util.Log import android.util.Log
...@@ -18,6 +19,10 @@ import io.flutter.plugin.common.MethodChannel.Result ...@@ -18,6 +19,10 @@ import io.flutter.plugin.common.MethodChannel.Result
import io.flutter.plugin.common.MethodCall import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.PluginRegistry import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.PluginRegistry.Registrar import io.flutter.plugin.common.PluginRegistry.Registrar
import android.text.TextUtils
import android.provider.Settings.SettingNotFoundException
class PermissionHandlerPlugin(private val registrar: Registrar, private var requestedPermissions: MutableList<String>? = null) : MethodCallHandler { class PermissionHandlerPlugin(private val registrar: Registrar, private var requestedPermissions: MutableList<String>? = null) : MethodCallHandler {
private var mRequestResults = mutableMapOf<PermissionGroup, PermissionStatus>() private var mRequestResults = mutableMapOf<PermissionGroup, PermissionStatus>()
...@@ -149,6 +154,12 @@ class PermissionHandlerPlugin(private val registrar: Registrar, private var requ ...@@ -149,6 +154,12 @@ class PermissionHandlerPlugin(private val registrar: Registrar, private var requ
} }
} }
if (permission == PermissionGroup.LOCATION || permission == PermissionGroup.LOCATION_ALWAYS || permission == PermissionGroup.LOCATION_WHEN_IN_USE) {
if (!isLocationServiceEnabled(context)) {
return PermissionStatus.DISABLED
}
}
return PermissionStatus.GRANTED return PermissionStatus.GRANTED
} }
...@@ -245,16 +256,20 @@ class PermissionHandlerPlugin(private val registrar: Registrar, private var requ ...@@ -245,16 +256,20 @@ class PermissionHandlerPlugin(private val registrar: Registrar, private var requ
mRequestResults[PermissionGroup.SPEECH] = grantResults[i].toPermissionStatus() mRequestResults[PermissionGroup.SPEECH] = grantResults[i].toPermissionStatus()
} }
} else if (permission == PermissionGroup.LOCATION) { } 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
if (!mRequestResults.containsKey(PermissionGroup.LOCATION_ALWAYS)) { if (!mRequestResults.containsKey(PermissionGroup.LOCATION_ALWAYS)) {
mRequestResults[PermissionGroup.LOCATION_ALWAYS] = grantResults[i].toPermissionStatus() mRequestResults[PermissionGroup.LOCATION_ALWAYS] = permissionStatus
} }
if (!mRequestResults.containsKey(PermissionGroup.LOCATION_WHEN_IN_USE)) { if (!mRequestResults.containsKey(PermissionGroup.LOCATION_WHEN_IN_USE)) {
mRequestResults[PermissionGroup.LOCATION_WHEN_IN_USE] = grantResults[i].toPermissionStatus() mRequestResults[PermissionGroup.LOCATION_WHEN_IN_USE] = permissionStatus
} }
}
if (!mRequestResults.containsKey(permission)) { mRequestResults[permission] = permissionStatus
} else if (!mRequestResults.containsKey(permission)) {
mRequestResults[permission] = grantResults[i].toPermissionStatus() mRequestResults[permission] = grantResults[i].toPermissionStatus()
} }
...@@ -436,6 +451,27 @@ class PermissionHandlerPlugin(private val registrar: Registrar, private var requ ...@@ -436,6 +451,27 @@ class PermissionHandlerPlugin(private val registrar: Registrar, private var requ
return false return false
} }
private fun isLocationServiceEnabled(context: Context): Boolean {
val locationMode: Int
val locationProviders: String
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
try {
locationMode = Settings.Secure.getInt(context.contentResolver, Settings.Secure.LOCATION_MODE)
} catch (e: SettingNotFoundException) {
e.printStackTrace()
return false
}
return locationMode != Settings.Secure.LOCATION_MODE_OFF
} else {
locationProviders = Settings.Secure.getString(context.contentResolver, Settings.Secure.LOCATION_PROVIDERS_ALLOWED)
return !TextUtils.isEmpty(locationProviders)
}
}
private fun handleSuccess(permissionStatus: PermissionStatus, result: Result?) { private fun handleSuccess(permissionStatus: PermissionStatus, result: Result?) {
result?.success(Codec.encodePermissionStatus(permissionStatus)) result?.success(Codec.encodePermissionStatus(permissionStatus))
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# #
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'permission_handler' s.name = 'permission_handler'
s.version = '2.0.1' s.version = '2.1.0'
s.summary = 'Permission plugin for Flutter.' s.summary = 'Permission plugin for Flutter.'
s.description = <<-DESC s.description = <<-DESC
Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions. Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
......
name: permission_handler name: permission_handler
description: Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions. description: Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
version: 2.0.1 version: 2.1.0
author: Baseflow <hello@baseflow.com> author: Baseflow <hello@baseflow.com>
homepage: https://github.com/baseflowit/flutter-permission-handler homepage: https://github.com/baseflowit/flutter-permission-handler
......
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