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