Skip to content

Commit ccfd812

Browse files
authored
Merge pull request #486 from luis901101/migrate_android_embedding_v2
Android plugin API updated to support v2 Embedding
2 parents baa8e17 + 952e78c commit ccfd812

File tree

10 files changed

+128
-74
lines changed

10 files changed

+128
-74
lines changed

.gitignore

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,12 @@
66
pubspec.lock
77

88
build/
9-
.idea/
10-
android/.idea
9+
android/.idea
10+
.flutter-plugins-dependencies
11+
flutter_export_environment.sh
12+
13+
# IntelliJ related
14+
*.iml
15+
*.ipr
16+
*.iws
17+
.idea/

android/src/main/java/com/onesignal/flutter/FlutterRegistrarResponder.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
package com.onesignal.flutter;
22

3+
import android.content.Context;
34
import android.os.Handler;
45
import android.os.Looper;
56

67
import com.onesignal.OneSignal;
78

89
import java.util.HashMap;
910

11+
import io.flutter.plugin.common.BinaryMessenger;
1012
import io.flutter.plugin.common.MethodChannel;
1113
import io.flutter.plugin.common.PluginRegistry;
1214

1315
abstract class FlutterRegistrarResponder {
16+
Context context;
1417
MethodChannel channel;
15-
PluginRegistry.Registrar flutterRegistrar;
18+
BinaryMessenger messenger;
1619

1720
/**
1821
* MethodChannel class is home to success() method used by Result class

android/src/main/java/com/onesignal/flutter/OneSignalInAppMessagingController.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.Collection;
66
import java.util.Map;
77

8+
import io.flutter.plugin.common.BinaryMessenger;
89
import io.flutter.plugin.common.MethodCall;
910
import io.flutter.plugin.common.MethodChannel;
1011
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
@@ -14,11 +15,11 @@
1415
public class OneSignalInAppMessagingController extends FlutterRegistrarResponder implements MethodCallHandler {
1516
private MethodChannel channel;
1617

17-
static void registerWith(Registrar registrar) {
18+
static void registerWith(BinaryMessenger messenger) {
1819
OneSignalInAppMessagingController controller = new OneSignalInAppMessagingController();
19-
controller.channel = new MethodChannel(registrar.messenger(), "OneSignal#inAppMessages");
20+
controller.messenger = messenger;
21+
controller.channel = new MethodChannel(messenger, "OneSignal#inAppMessages");
2022
controller.channel.setMethodCallHandler(controller);
21-
controller.flutterRegistrar = registrar;
2223
}
2324

2425
@Override

android/src/main/java/com/onesignal/flutter/OneSignalOutcomeEventsController.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.HashMap;
77
import java.util.concurrent.atomic.AtomicBoolean;
88

9+
import io.flutter.plugin.common.BinaryMessenger;
910
import io.flutter.plugin.common.MethodCall;
1011
import io.flutter.plugin.common.MethodChannel;
1112
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
@@ -21,8 +22,8 @@ class OSFlutterOutcomeEventsHandler extends FlutterRegistrarResponder implements
2122
// this property guarantees the callback will never be called more than once.
2223
private AtomicBoolean replySubmitted = new AtomicBoolean(false);
2324

24-
OSFlutterOutcomeEventsHandler(PluginRegistry.Registrar flutterRegistrar, MethodChannel channel, Result result) {
25-
this.flutterRegistrar = flutterRegistrar;
25+
OSFlutterOutcomeEventsHandler(BinaryMessenger messenger, MethodChannel channel, Result result) {
26+
this.messenger = messenger;
2627
this.channel = channel;
2728
this.result = result;
2829
}
@@ -42,14 +43,12 @@ public void onSuccess(OSOutcomeEvent outcomeEvent) {
4243

4344
public class OneSignalOutcomeEventsController extends FlutterRegistrarResponder implements MethodCallHandler {
4445
private MethodChannel channel;
45-
private Registrar registrar;
4646

47-
static void registerWith(Registrar registrar) {
47+
static void registerWith(BinaryMessenger messenger) {
4848
OneSignalOutcomeEventsController controller = new OneSignalOutcomeEventsController();
49-
controller.registrar = registrar;
50-
controller.channel = new MethodChannel(registrar.messenger(), "OneSignal#outcomes");
49+
controller.messenger = messenger;
50+
controller.channel = new MethodChannel(messenger, "OneSignal#outcomes");
5151
controller.channel.setMethodCallHandler(controller);
52-
controller.flutterRegistrar = registrar;
5352
}
5453

5554
@Override
@@ -72,7 +71,7 @@ private void sendOutcome(MethodCall call, Result result) {
7271
return;
7372
}
7473

75-
OneSignal.sendOutcome(name, new OSFlutterOutcomeEventsHandler(registrar, channel, result));
74+
OneSignal.sendOutcome(name, new OSFlutterOutcomeEventsHandler(messenger, channel, result));
7675
}
7776

7877
private void sendUniqueOutcome(MethodCall call, Result result) {
@@ -83,7 +82,7 @@ private void sendUniqueOutcome(MethodCall call, Result result) {
8382
return;
8483
}
8584

86-
OneSignal.sendUniqueOutcome(name, new OSFlutterOutcomeEventsHandler(registrar, channel, result));
85+
OneSignal.sendUniqueOutcome(name, new OSFlutterOutcomeEventsHandler(messenger, channel, result));
8786
}
8887

8988
private void sendOutcomeWithValue(MethodCall call, Result result) {
@@ -100,7 +99,7 @@ private void sendOutcomeWithValue(MethodCall call, Result result) {
10099
return;
101100
}
102101

103-
OneSignal.sendOutcomeWithValue(name, value.floatValue(), new OSFlutterOutcomeEventsHandler(registrar, channel, result));
102+
OneSignal.sendOutcomeWithValue(name, value.floatValue(), new OSFlutterOutcomeEventsHandler(messenger, channel, result));
104103
}
105104

106105
}

android/src/main/java/com/onesignal/flutter/OneSignalPlugin.java

Lines changed: 66 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.onesignal.flutter;
22

3+
import android.annotation.SuppressLint;
34
import android.content.Context;
45

56
import com.onesignal.OSDeviceState;
@@ -25,6 +26,9 @@
2526
import java.util.Map;
2627
import java.util.concurrent.atomic.AtomicBoolean;
2728

29+
import androidx.annotation.NonNull;
30+
import io.flutter.embedding.engine.plugins.FlutterPlugin;
31+
import io.flutter.plugin.common.BinaryMessenger;
2832
import io.flutter.plugin.common.MethodCall;
2933
import io.flutter.plugin.common.MethodChannel;
3034
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
@@ -36,7 +40,8 @@
3640
/** OnesignalPlugin */
3741
public class OneSignalPlugin
3842
extends FlutterRegistrarResponder
39-
implements MethodCallHandler,
43+
implements FlutterPlugin,
44+
MethodCallHandler,
4045
OneSignal.OSNotificationOpenedHandler,
4146
OneSignal.OSInAppMessageClickHandler,
4247
OSSubscriptionObserver,
@@ -52,32 +57,61 @@ public class OneSignalPlugin
5257
private boolean hasSetRequiresPrivacyConsent = false;
5358
private boolean waitingForUserPrivacyConsent = false;
5459

55-
private HashMap<String, OSNotificationReceivedEvent> notificationReceivedEventCache = new HashMap<>();
60+
private final HashMap<String, OSNotificationReceivedEvent> notificationReceivedEventCache = new HashMap<>();
61+
62+
public OneSignalPlugin() {
63+
}
64+
65+
private void init(Context context, BinaryMessenger messenger)
66+
{
67+
this.context = context;
68+
this.messenger = messenger;
5669

57-
public static void registerWith(Registrar registrar) {
5870
OneSignal.sdkType = "flutter";
5971

60-
OneSignalPlugin plugin = new OneSignalPlugin();
72+
waitingForUserPrivacyConsent = false;
73+
channel = new MethodChannel(messenger, "OneSignal");
74+
channel.setMethodCallHandler(this);
75+
76+
OneSignalTagsController.registerWith(messenger);
77+
OneSignalInAppMessagingController.registerWith(messenger);
78+
OneSignalOutcomeEventsController.registerWith(messenger);
79+
}
80+
81+
@Override
82+
public void onAttachedToEngine(@NonNull FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
83+
init(
84+
flutterPluginBinding.getApplicationContext(),
85+
flutterPluginBinding.getBinaryMessenger()
86+
);
87+
}
88+
89+
@Override
90+
public void onDetachedFromEngine(@NonNull FlutterPlugin.FlutterPluginBinding binding) {
91+
onDetachedFromEngine();
92+
}
93+
94+
private void onDetachedFromEngine() {
95+
OneSignal.setNotificationOpenedHandler(null);
96+
OneSignal.setInAppMessageClickHandler(null);
97+
}
6198

62-
plugin.waitingForUserPrivacyConsent = false;
63-
plugin.channel = new MethodChannel(registrar.messenger(), "OneSignal");
64-
plugin.channel.setMethodCallHandler(plugin);
65-
plugin.flutterRegistrar = registrar;
99+
// This static method is only to remain compatible with apps that don’t use the v2 Android embedding.
100+
@Deprecated()
101+
@SuppressLint("Registrar")
102+
public static void registerWith(Registrar registrar) {
103+
final OneSignalPlugin plugin = new OneSignalPlugin();
104+
plugin.init(registrar.context(), registrar.messenger());
66105

67106
// Create a callback for the flutterRegistrar to connect the applications onDestroy
68-
plugin.flutterRegistrar.addViewDestroyListener(new PluginRegistry.ViewDestroyListener() {
107+
registrar.addViewDestroyListener(new PluginRegistry.ViewDestroyListener() {
69108
@Override
70109
public boolean onViewDestroy(FlutterNativeView flutterNativeView) {
71110
// Remove all handlers so they aren't triggered with wrong context
72-
OneSignal.setNotificationOpenedHandler(null);
73-
OneSignal.setInAppMessageClickHandler(null);
111+
plugin.onDetachedFromEngine();
74112
return false;
75113
}
76114
});
77-
78-
OneSignalTagsController.registerWith(registrar);
79-
OneSignalInAppMessagingController.registerWith(registrar);
80-
OneSignalOutcomeEventsController.registerWith(registrar);
81115
}
82116

83117
@Override
@@ -145,7 +179,6 @@ private void disablePush(MethodCall call, Result result) {
145179

146180
private void setAppId(MethodCall call, Result reply) {
147181
String appId = call.argument("appId");
148-
Context context = flutterRegistrar.activeContext();
149182

150183
OneSignal.setInAppMessageClickHandler(this);
151184
OneSignal.initWithContext(context);
@@ -231,7 +264,7 @@ private void getDeviceState(Result reply) {
231264

232265
private void postNotification(MethodCall call, final Result reply) {
233266
JSONObject json = new JSONObject((Map<String, Object>) call.arguments);
234-
OneSignal.postNotification(json, new OSFlutterPostNotificationHandler(flutterRegistrar, channel, reply, "postNotification"));
267+
OneSignal.postNotification(json, new OSFlutterPostNotificationHandler(messenger, channel, reply, "postNotification"));
235268
}
236269

237270
private void promptLocation(Result reply) {
@@ -248,22 +281,22 @@ private void setEmail(MethodCall call, final Result reply) {
248281
String email = call.argument("email");
249282
String emailAuthHashToken = call.argument("emailAuthHashToken");
250283

251-
OneSignal.setEmail(email, emailAuthHashToken, new OSFlutterEmailHandler(flutterRegistrar, channel, reply, "setEmail"));
284+
OneSignal.setEmail(email, emailAuthHashToken, new OSFlutterEmailHandler(messenger, channel, reply, "setEmail"));
252285
}
253286

254287
private void logoutEmail(final Result reply) {
255-
OneSignal.logoutEmail(new OSFlutterEmailHandler(flutterRegistrar, channel, reply, "logoutEmail"));
288+
OneSignal.logoutEmail(new OSFlutterEmailHandler(messenger, channel, reply, "logoutEmail"));
256289
}
257290

258291
private void setSMSNumber(MethodCall call, final Result reply) {
259292
String smsNumber = call.argument("smsNumber");
260293
String smsAuthHashToken = call.argument("smsAuthHashToken");
261294

262-
OneSignal.setSMSNumber(smsNumber, smsAuthHashToken, new OSFlutterSMSHandler(flutterRegistrar, channel, reply, "setSMSNumber"));
295+
OneSignal.setSMSNumber(smsNumber, smsAuthHashToken, new OSFlutterSMSHandler(messenger, channel, reply, "setSMSNumber"));
263296
}
264297

265298
private void logoutSMSNumber(final Result reply) {
266-
OneSignal.logoutSMSNumber(new OSFlutterSMSHandler(flutterRegistrar, channel, reply, "logoutSMSNumber"));
299+
OneSignal.logoutSMSNumber(new OSFlutterSMSHandler(messenger, channel, reply, "logoutSMSNumber"));
267300
}
268301

269302
private void setLanguage(MethodCall call, final Result result) {
@@ -282,11 +315,11 @@ private void setExternalUserId(MethodCall call, final Result result) {
282315
if (authHashToken != null && authHashToken.length() == 0)
283316
authHashToken = null;
284317

285-
OneSignal.setExternalUserId(externalUserId, authHashToken, new OSFlutterExternalUserIdHandler(flutterRegistrar, channel, result, "setExternalUserId"));
318+
OneSignal.setExternalUserId(externalUserId, authHashToken, new OSFlutterExternalUserIdHandler(messenger, channel, result, "setExternalUserId"));
286319
}
287320

288321
private void removeExternalUserId(final Result result) {
289-
OneSignal.removeExternalUserId(new OSFlutterExternalUserIdHandler(flutterRegistrar, channel, result, "removeExternalUserId"));
322+
OneSignal.removeExternalUserId(new OSFlutterExternalUserIdHandler(messenger, channel, result, "removeExternalUserId"));
290323
}
291324

292325
private void initNotificationOpenedHandlerParams() {
@@ -399,8 +432,8 @@ public void notificationWillShowInForeground(OSNotificationReceivedEvent notific
399432
static class OSFlutterEmailHandler extends OSFlutterHandler
400433
implements OneSignal.EmailUpdateHandler {
401434

402-
OSFlutterEmailHandler(PluginRegistry.Registrar flutterRegistrar, MethodChannel channel, Result res, String methodName) {
403-
super(flutterRegistrar, channel, res, methodName);
435+
OSFlutterEmailHandler(BinaryMessenger messenger, MethodChannel channel, Result res, String methodName) {
436+
super(messenger, channel, res, methodName);
404437
}
405438

406439
@Override
@@ -427,8 +460,8 @@ public void onFailure(EmailUpdateError error) {
427460
static class OSFlutterSMSHandler extends OSFlutterHandler
428461
implements OneSignal.OSSMSUpdateHandler {
429462

430-
OSFlutterSMSHandler(PluginRegistry.Registrar flutterRegistrar, MethodChannel channel, Result res, String methodName) {
431-
super(flutterRegistrar, channel, res, methodName);
463+
OSFlutterSMSHandler(BinaryMessenger messenger, MethodChannel channel, Result res, String methodName) {
464+
super(messenger, channel, res, methodName);
432465
}
433466

434467
@Override
@@ -457,8 +490,8 @@ public void onFailure(OneSignal.OSSMSUpdateError error) {
457490
static class OSFlutterExternalUserIdHandler extends OSFlutterHandler
458491
implements OneSignal.OSExternalUserIdUpdateCompletionHandler {
459492

460-
OSFlutterExternalUserIdHandler(PluginRegistry.Registrar flutterRegistrar, MethodChannel channel, Result res, String methodName) {
461-
super(flutterRegistrar, channel, res, methodName);
493+
OSFlutterExternalUserIdHandler(BinaryMessenger messenger, MethodChannel channel, Result res, String methodName) {
494+
super(messenger, channel, res, methodName);
462495
}
463496

464497
@Override
@@ -487,8 +520,8 @@ public void onFailure(OneSignal.ExternalIdError error) {
487520
static class OSFlutterPostNotificationHandler extends OSFlutterHandler
488521
implements OneSignal.PostNotificationResponseHandler {
489522

490-
OSFlutterPostNotificationHandler(PluginRegistry.Registrar flutterRegistrar, MethodChannel channel, Result res, String methodName) {
491-
super(flutterRegistrar, channel, res, methodName);
523+
OSFlutterPostNotificationHandler(BinaryMessenger messenger, MethodChannel channel, Result res, String methodName) {
524+
super(messenger, channel, res, methodName);
492525
}
493526

494527
@Override
@@ -525,8 +558,8 @@ static class OSFlutterHandler extends FlutterRegistrarResponder {
525558
protected final String methodName;
526559
protected final AtomicBoolean replySubmitted = new AtomicBoolean(false);
527560

528-
OSFlutterHandler(PluginRegistry.Registrar flutterRegistrar, MethodChannel channel, Result res, String methodName) {
529-
this.flutterRegistrar = flutterRegistrar;
561+
OSFlutterHandler(BinaryMessenger messenger, MethodChannel channel, Result res, String methodName) {
562+
this.messenger = messenger;
530563
this.channel = channel;
531564
this.result = res;
532565
this.methodName = methodName;

0 commit comments

Comments
 (0)