Commit d40fbe02 by Maurits van Beusekom

Merge branch 'hotfix/4.4.0' of github.com:Baseflow/flutter-permission-handler into hotfix/4.4.0

parents 0fe0135f e700d04d
...@@ -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) {
...@@ -102,8 +110,4 @@ final class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { ...@@ -102,8 +110,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}
...@@ -36,44 +36,39 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa ...@@ -36,44 +36,39 @@ public final class PermissionHandlerPlugin implements FlutterPlugin, ActivityAwa
* <p>Calling this automatically initializes the plugin. However plugins initialized this way * <p>Calling this automatically initializes the plugin. However plugins initialized this way
* 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(),
registrar.activity(), if (registrar.activeContext() instanceof Activity) {
registrar.messenger(), plugin.startListeningToActivity(
registrar::addActivityResultListener, registrar.activity(),
registrar::addRequestPermissionsResultListener registrar::addActivityResultListener,
); 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);
}
} }
} }
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