Skip to content

Commit 002ea8e

Browse files
committed
Add registerWith method for FlutterCallkeepPlugin, fix #4.
1 parent 96653d1 commit 002ea8e

File tree

2 files changed

+49
-6
lines changed

2 files changed

+49
-6
lines changed

android/src/main/java/com/github/cloudwebrtc/flutter_callkeep/FlutterCallkeepPlugin.java

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package com.github.cloudwebrtc.flutter_callkeep;
22

3+
import android.app.Activity;
4+
import android.content.Context;
35
import androidx.annotation.NonNull;
46

57
import io.flutter.embedding.engine.plugins.FlutterPlugin;
68
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
79
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
10+
import io.flutter.plugin.common.BinaryMessenger;
811
import io.flutter.plugin.common.MethodCall;
912
import io.flutter.plugin.common.MethodChannel;
1013
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
1114
import io.flutter.plugin.common.MethodChannel.Result;
15+
import io.flutter.plugin.common.PluginRegistry.Registrar;
1216
import io.wazo.callkeep.CallKeepModule;
1317

1418
/** FlutterCallkeepPlugin */
@@ -20,11 +24,44 @@ public class FlutterCallkeepPlugin implements FlutterPlugin, MethodCallHandler,
2024
private MethodChannel channel;
2125
private CallKeepModule callKeep;
2226

27+
/**
28+
* Plugin registration.
29+
*/
30+
public static void registerWith(Registrar registrar) {
31+
final FlutterCallkeepPlugin plugin = new FlutterCallkeepPlugin();
32+
33+
plugin.startListening(registrar.context(), registrar.messenger());
34+
35+
if (registrar.activeContext() instanceof Activity) {
36+
plugin.setActivity((Activity) registrar.activeContext());
37+
}
38+
39+
registrar.addViewDestroyListener(view -> {
40+
plugin.stopListening();
41+
return false;
42+
});
43+
}
44+
45+
private void setActivity(@NonNull Activity activity) {
46+
callKeep.setActivity(activity);
47+
}
48+
49+
private void startListening(final Context context, BinaryMessenger messenger) {
50+
channel = new MethodChannel(messenger, "FlutterCallKeep.Method");
51+
channel.setMethodCallHandler(this);
52+
callKeep = new CallKeepModule(context, messenger);
53+
}
54+
55+
private void stopListening() {
56+
channel.setMethodCallHandler(null);
57+
channel = null;
58+
callKeep.dispose();
59+
callKeep = null;
60+
}
61+
2362
@Override
2463
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
25-
channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "FlutterCallKeep.Method");
26-
channel.setMethodCallHandler(this);
27-
callKeep = new CallKeepModule(flutterPluginBinding.getApplicationContext(), flutterPluginBinding);
64+
startListening(flutterPluginBinding.getApplicationContext(), flutterPluginBinding.getBinaryMessenger());
2865
}
2966

3067
@Override
@@ -36,7 +73,7 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
3673

3774
@Override
3875
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
39-
channel.setMethodCallHandler(null);
76+
stopListening();
4077
}
4178

4279
@Override

android/src/main/java/io/wazo/callkeep/CallKeepModule.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import java.util.Map;
5555

5656
import io.flutter.embedding.engine.plugins.FlutterPlugin;
57+
import io.flutter.plugin.common.BinaryMessenger;
5758
import io.flutter.plugin.common.EventChannel;
5859
import io.flutter.plugin.common.MethodChannel;
5960
import io.flutter.plugin.common.MethodCall;
@@ -87,15 +88,20 @@ public class CallKeepModule {
8788
Activity _currentActivity = null;
8889
MethodChannel _eventChannel;
8990

90-
public CallKeepModule(Context context, FlutterPlugin.FlutterPluginBinding binding) {
91+
public CallKeepModule(Context context, BinaryMessenger messenger) {
9192
this._context = context;
92-
this._eventChannel = new MethodChannel(binding.getBinaryMessenger(), "FlutterCallKeep.Event");
93+
this._eventChannel = new MethodChannel(messenger, "FlutterCallKeep.Event");
9394
}
9495

9596
public void setActivity(Activity activity) {
9697
this._currentActivity = activity;
9798
}
9899

100+
public void dispose(){
101+
LocalBroadcastManager.getInstance(this._context).unregisterReceiver(voiceBroadcastReceiver);
102+
VoiceConnectionService.setPhoneAccountHandle(null);
103+
}
104+
99105
public boolean HandleMethodCall(@NonNull MethodCall call, @NonNull Result result) {
100106
switch(call.method) {
101107
case "setup": {

0 commit comments

Comments
 (0)