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,35 +17,42 @@ import java.util.List; ...@@ -16,35 +17,42 @@ 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;
}
@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; this.activityRegistry = activityRegistry;
this.permissionRegistry = permissionRegistry; }
methodChannel = new MethodChannel( public void setPermissionRegistry(
messenger, @Nullable PermissionRegistry permissionRegistry) {
"flutter.baseflow.com/permissions/methods"); this.permissionRegistry = permissionRegistry;
methodChannel.setMethodCallHandler(this);
} }
@Override @Override
...@@ -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}
...@@ -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;
}
startListening(
flutterPluginBinding.getApplicationContext(),
binding.getActivity(), binding.getActivity(),
flutterPluginBinding.getBinaryMessenger(),
binding::addActivityResultListener, binding::addActivityResultListener,
binding::addRequestPermissionsResultListener); 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;
} }
methodCallHandler.stopListening(); @Override
methodCallHandler = null; public void onDetachedFromActivityForConfigChanges() {
onDetachedFromActivity();
} }
private void startListening(
Context applicationContext, private void startListening(Context applicationContext, BinaryMessenger messenger) {
Activity activity, methodChannel = new MethodChannel(
BinaryMessenger messenger, messenger,
ActivityRegistry activityRegistry, "flutter.baseflow.com/permissions/methods");
PermissionRegistry permissionRegistry) {
methodCallHandler = new MethodCallHandlerImpl( methodCallHandler = new MethodCallHandlerImpl(
applicationContext, applicationContext,
activity,
messenger,
new AppSettingsManager(), new AppSettingsManager(),
new PermissionManager(), new PermissionManager(),
new ServiceManager(), new ServiceManager()
activityRegistry, );
permissionRegistry);
methodChannel.setMethodCallHandler(methodCallHandler);
}
private void stopListening() {
methodChannel.setMethodCallHandler(null);
methodChannel = null;
methodCallHandler = null;
}
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);
}
} }
} }
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