Commit 447db463 by Maurits van Beusekom

Version 5.0.0+hotfix.3

parents b439917f 94cf19df
## 5.0.0+hotfix.3
* Includes the changes of 4.4.0+hotfix.4 (which was released to be backwardscompatible).
## 5.0.0+hotfix.2
* Removed some residual usages of the `PermissionStatusUnknown` constants in #ifdef statements that were not found by the compiler.
......@@ -10,6 +14,14 @@
* **BREAKING**: Implemented more intuitive API exposed by `permission_handler_platform_interface: 2.0.0` ([#230](https://github.com/Baseflow/flutter-permission-handler/issues/230)).
## 4.4.0+hotfix.4
* Android: solved issue where `permission_handler` is used in a service (see [#251](https://github.com/Baseflow/flutter-permission-handler/issues/251))
## 4.4.0+hotfix.3
IGNORE THIS VERSION, it was released by accident and contains the same code as 4.4.0+hotfix.2
## 4.4.0+hotfix.2
* Issue #235: Solved a bug which made it impossible to request service status on Android 7;
......
......@@ -5,6 +5,7 @@ import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
......@@ -16,38 +17,45 @@ import java.util.List;
final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
private final Context applicationContext;
private final Activity activity;
private final AppSettingsManager appSettingsManager;
private final PermissionManager permissionManager;
private final ServiceManager serviceManager;
private final ActivityRegistry activityRegistry;
private final PermissionRegistry permissionRegistry;
private final MethodChannel methodChannel;
MethodCallHandlerImpl(
Context applicationContext,
Activity activity,
BinaryMessenger messenger,
AppSettingsManager appSettingsManager,
PermissionManager permissionManager,
ServiceManager serviceManager,
ActivityRegistry activityRegistry,
PermissionRegistry permissionRegistry) {
ServiceManager serviceManager) {
this.applicationContext = applicationContext;
this.activity = activity;
this.appSettingsManager = appSettingsManager;
this.permissionManager = permissionManager;
this.serviceManager = serviceManager;
this.activityRegistry = activityRegistry;
this.permissionRegistry = permissionRegistry;
}
@Nullable
private Activity activity;
@Nullable
private ActivityRegistry activityRegistry;
@Nullable
private PermissionRegistry permissionRegistry;
public void setActivity(@Nullable Activity activity) {
this.activity = activity;
}
public void setActivityRegistry(
@Nullable ActivityRegistry activityRegistry) {
this.activityRegistry = activityRegistry;
}
methodChannel = new MethodChannel(
messenger,
"flutter.baseflow.com/permissions/methods");
methodChannel.setMethodCallHandler(this);
public void setPermissionRegistry(
@Nullable PermissionRegistry permissionRegistry) {
this.permissionRegistry = permissionRegistry;
}
@Override
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull final Result result)
{
switch (call.method) {
......@@ -120,8 +128,4 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
break;
}
}
void stopListening() {
methodChannel.setMethodCallHandler(null);
}
}
......@@ -2,19 +2,16 @@ package com.baseflow.permissionhandler;
import android.app.Activity;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.baseflow.permissionhandler.PermissionManager.ActivityRegistry;
import com.baseflow.permissionhandler.PermissionManager.PermissionRegistry;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import com.baseflow.permissionhandler.PermissionManager.ActivityRegistry;
import com.baseflow.permissionhandler.PermissionManager.PermissionRegistry;
/**
* Platform implementation of the permission_handler Flutter plugin.
......@@ -26,8 +23,11 @@ import com.baseflow.permissionhandler.PermissionManager.PermissionRegistry;
* stable {@code io.flutter.plugin.common} package.
*/
public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAware {
private @Nullable FlutterPluginBinding flutterPluginBinding;
private @Nullable MethodCallHandlerImpl methodCallHandler;
private MethodChannel methodChannel;
@Nullable
private MethodCallHandlerImpl methodCallHandler;
/**
* Registers a plugin implementation that uses the stable {@code io.flutter.plugin.common}
......@@ -37,43 +37,38 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa
* won't react to changes in activity or context, unlike {@link PermissionHandlerPlugin}.
*/
public static void registerWith(Registrar registrar) {
final PermissionHandlerPlugin permissionHandlerPlugin = new PermissionHandlerPlugin();
permissionHandlerPlugin.startListening(
registrar.context(),
final PermissionHandlerPlugin plugin = new PermissionHandlerPlugin();
plugin.startListening(registrar.context(), registrar.messenger());
if (registrar.activeContext() instanceof Activity) {
plugin.startListeningToActivity(
registrar.activity(),
registrar.messenger(),
registrar::addActivityResultListener,
registrar::addRequestPermissionsResultListener
);
);
}
}
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
this.flutterPluginBinding = binding;
startListening(
binding.getApplicationContext(),
binding.getBinaryMessenger()
);
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
this.flutterPluginBinding = null;
stopListening();
}
@Override
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
if(flutterPluginBinding == null) {
return;
}
startListening(
flutterPluginBinding.getApplicationContext(),
binding.getActivity(),
flutterPluginBinding.getBinaryMessenger(),
binding::addActivityResultListener,
binding::addRequestPermissionsResultListener);
}
@Override
public void onDetachedFromActivityForConfigChanges() {
onDetachedFromActivity();
startListeningToActivity(
binding.getActivity(),
binding::addActivityResultListener,
binding::addRequestPermissionsResultListener
);
}
@Override
......@@ -83,28 +78,53 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa
@Override
public void onDetachedFromActivity() {
if (methodCallHandler == null) {
return;
}
stopListeningToActivity();
}
@Override
public void onDetachedFromActivityForConfigChanges() {
onDetachedFromActivity();
}
methodCallHandler.stopListening();
private void startListening(Context applicationContext, BinaryMessenger messenger) {
methodChannel = new MethodChannel(
messenger,
"flutter.baseflow.com/permissions/methods");
methodCallHandler = new MethodCallHandlerImpl(
applicationContext,
new AppSettingsManager(),
new PermissionManager(),
new ServiceManager()
);
methodChannel.setMethodCallHandler(methodCallHandler);
}
private void stopListening() {
methodChannel.setMethodCallHandler(null);
methodChannel = null;
methodCallHandler = null;
}
private void startListening(
Context applicationContext,
Activity activity,
BinaryMessenger messenger,
ActivityRegistry activityRegistry,
PermissionRegistry permissionRegistry) {
methodCallHandler = new MethodCallHandlerImpl(
applicationContext,
activity,
messenger,
new AppSettingsManager(),
new PermissionManager(),
new ServiceManager(),
activityRegistry,
permissionRegistry);
private void startListeningToActivity(
Activity activity,
ActivityRegistry activityRegistry,
PermissionRegistry permissionRegistry
) {
if (methodCallHandler != null) {
methodCallHandler.setActivity(activity);
methodCallHandler.setActivityRegistry(activityRegistry);
methodCallHandler.setPermissionRegistry(permissionRegistry);
}
}
private void stopListeningToActivity() {
if (methodCallHandler != null) {
methodCallHandler.setActivity(null);
methodCallHandler.setActivityRegistry(null);
methodCallHandler.setPermissionRegistry(null);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildSystemType</key>
<string>Latest</string>
</dict>
</plist>
......@@ -3,7 +3,7 @@
#
Pod::Spec.new do |s|
s.name = 'permission_handler'
s.version = '5.0.0+hotfix.2'
s.version = '5.0.0+hotfix.3'
s.summary = 'Permission plugin for Flutter.'
s.description = <<-DESC
Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
......
name: permission_handler
description: Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
version: 5.0.0+hotfix.2
version: 5.0.0+hotfix.3
homepage: https://github.com/baseflowit/flutter-permission-handler
flutter:
......
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