Commit 23f59173 by Maurits van Beusekom

Version 5.0.0+hotfix.2

parents 9591a9c8 cfeb4f7e
## 5.0.0+hotfix.2
* Includes the changes of 4.4.0+hotfix.4 (which was released to be backwardscompatible).
## 5.0.0+hotfix.1 ## 5.0.0+hotfix.1
* Make sure all enums from `permission_handler_platform_interface: 2.0.0` are exposed through the `permission_handler`. * Make sure all enums from `permission_handler_platform_interface: 2.0.0` are exposed through the `permission_handler`.
...@@ -6,6 +10,14 @@ ...@@ -6,6 +10,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)). * **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 ## 4.4.0+hotfix.2
* Issue #235: Solved a bug which made it impossible to request service status on Android 7; * Issue #235: Solved a bug which made it impossible to request service status on Android 7;
......
...@@ -5,6 +5,7 @@ import android.content.Context; ...@@ -5,6 +5,7 @@ import android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel;
...@@ -16,38 +17,45 @@ import java.util.List; ...@@ -16,38 +17,45 @@ import java.util.List;
final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
private final Context applicationContext; private final Context applicationContext;
private final Activity activity;
private final AppSettingsManager appSettingsManager; private final AppSettingsManager appSettingsManager;
private final PermissionManager permissionManager; private final PermissionManager permissionManager;
private final ServiceManager serviceManager; private final ServiceManager serviceManager;
private final ActivityRegistry activityRegistry;
private final PermissionRegistry permissionRegistry;
private final MethodChannel methodChannel;
MethodCallHandlerImpl( MethodCallHandlerImpl(
Context applicationContext, Context applicationContext,
Activity activity,
BinaryMessenger messenger,
AppSettingsManager appSettingsManager, AppSettingsManager appSettingsManager,
PermissionManager permissionManager, PermissionManager permissionManager,
ServiceManager serviceManager, ServiceManager serviceManager) {
ActivityRegistry activityRegistry,
PermissionRegistry permissionRegistry) {
this.applicationContext = applicationContext; this.applicationContext = applicationContext;
this.activity = activity;
this.appSettingsManager = appSettingsManager; this.appSettingsManager = appSettingsManager;
this.permissionManager = permissionManager; this.permissionManager = permissionManager;
this.serviceManager = serviceManager; 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( public void setPermissionRegistry(
messenger, @Nullable PermissionRegistry permissionRegistry) {
"flutter.baseflow.com/permissions/methods"); this.permissionRegistry = permissionRegistry;
methodChannel.setMethodCallHandler(this);
} }
@Override @Override
public void onMethodCall(@NonNull MethodCall call, @NonNull final Result result) public void onMethodCall(@NonNull MethodCall call, @NonNull final Result result)
{ {
switch (call.method) { switch (call.method) {
...@@ -120,8 +128,4 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { ...@@ -120,8 +128,4 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
break; break;
} }
} }
void stopListening() {
methodChannel.setMethodCallHandler(null);
}
} }
...@@ -2,19 +2,16 @@ package com.baseflow.permissionhandler; ...@@ -2,19 +2,16 @@ package com.baseflow.permissionhandler;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; 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.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.PluginRegistry.Registrar; 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. * Platform implementation of the permission_handler Flutter plugin.
...@@ -26,8 +23,11 @@ import com.baseflow.permissionhandler.PermissionManager.PermissionRegistry; ...@@ -26,8 +23,11 @@ import com.baseflow.permissionhandler.PermissionManager.PermissionRegistry;
* stable {@code io.flutter.plugin.common} package. * stable {@code io.flutter.plugin.common} package.
*/ */
public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAware { 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} * Registers a plugin implementation that uses the stable {@code io.flutter.plugin.common}
...@@ -37,43 +37,38 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa ...@@ -37,43 +37,38 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa
* won't react to changes in activity or context, unlike {@link PermissionHandlerPlugin}. * won't react to changes in activity or context, unlike {@link PermissionHandlerPlugin}.
*/ */
public static void registerWith(Registrar registrar) { public static void registerWith(Registrar registrar) {
final PermissionHandlerPlugin permissionHandlerPlugin = new PermissionHandlerPlugin(); final PermissionHandlerPlugin plugin = new PermissionHandlerPlugin();
permissionHandlerPlugin.startListening( plugin.startListening(registrar.context(), registrar.messenger());
registrar.context(),
if (registrar.activeContext() instanceof Activity) {
plugin.startListeningToActivity(
registrar.activity(), registrar.activity(),
registrar.messenger(),
registrar::addActivityResultListener, registrar::addActivityResultListener,
registrar::addRequestPermissionsResultListener registrar::addRequestPermissionsResultListener
); );
}
} }
@Override @Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
this.flutterPluginBinding = binding; startListening(
binding.getApplicationContext(),
binding.getBinaryMessenger()
);
} }
@Override @Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
this.flutterPluginBinding = null; stopListening();
} }
@Override @Override
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) { public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
if(flutterPluginBinding == null) { startListeningToActivity(
return; binding.getActivity(),
} binding::addActivityResultListener,
binding::addRequestPermissionsResultListener
startListening( );
flutterPluginBinding.getApplicationContext(),
binding.getActivity(),
flutterPluginBinding.getBinaryMessenger(),
binding::addActivityResultListener,
binding::addRequestPermissionsResultListener);
}
@Override
public void onDetachedFromActivityForConfigChanges() {
onDetachedFromActivity();
} }
@Override @Override
...@@ -83,28 +78,53 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa ...@@ -83,28 +78,53 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa
@Override @Override
public void onDetachedFromActivity() { public void onDetachedFromActivity() {
if (methodCallHandler == null) { stopListeningToActivity();
return; }
}
@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; methodCallHandler = null;
} }
private void startListening( private void startListeningToActivity(
Context applicationContext, Activity activity,
Activity activity, ActivityRegistry activityRegistry,
BinaryMessenger messenger, PermissionRegistry permissionRegistry
ActivityRegistry activityRegistry, ) {
PermissionRegistry permissionRegistry) { if (methodCallHandler != null) {
methodCallHandler = new MethodCallHandlerImpl( methodCallHandler.setActivity(activity);
applicationContext, methodCallHandler.setActivityRegistry(activityRegistry);
activity, methodCallHandler.setPermissionRegistry(permissionRegistry);
messenger, }
new AppSettingsManager(), }
new PermissionManager(),
new ServiceManager(), private void stopListeningToActivity() {
activityRegistry, if (methodCallHandler != null) {
permissionRegistry); 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 @@ ...@@ -3,7 +3,7 @@
# #
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'permission_handler' s.name = 'permission_handler'
s.version = '5.0.0+hotfix.1' s.version = '5.0.0+hotfix.5'
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: 5.0.0+hotfix.1 version: 5.0.0+hotfix.2
homepage: https://github.com/baseflowit/flutter-permission-handler homepage: https://github.com/baseflowit/flutter-permission-handler
flutter: 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