11package com .onesignal .flutter ;
22
3+ import android .annotation .SuppressLint ;
34import android .content .Context ;
45
56import com .onesignal .OSDeviceState ;
2526import java .util .Map ;
2627import 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 ;
2832import io .flutter .plugin .common .MethodCall ;
2933import io .flutter .plugin .common .MethodChannel ;
3034import io .flutter .plugin .common .MethodChannel .MethodCallHandler ;
3640/** OnesignalPlugin */
3741public 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