17
17
import com .onesignal .OSSubscriptionStateChanges ;
18
18
import com .onesignal .OneSignal ;
19
19
import com .onesignal .OneSignal .EmailUpdateError ;
20
- import com .onesignal .OneSignal .EmailUpdateHandler ;
21
20
22
21
import org .json .JSONException ;
23
22
import org .json .JSONObject ;
24
23
25
24
import java .util .HashMap ;
26
25
import java .util .Map ;
26
+ import java .util .concurrent .atomic .AtomicBoolean ;
27
27
28
28
import io .flutter .plugin .common .MethodCall ;
29
29
import io .flutter .plugin .common .MethodChannel ;
@@ -231,28 +231,7 @@ private void getDeviceState(Result reply) {
231
231
232
232
private void postNotification (MethodCall call , final Result reply ) {
233
233
JSONObject json = new JSONObject ((Map <String , Object >) call .arguments );
234
- OneSignal .postNotification (json , new OneSignal .PostNotificationResponseHandler () {
235
- @ Override
236
- public void onSuccess (JSONObject response ) {
237
- try {
238
- replySuccess (reply , OneSignalSerializer .convertJSONObjectToHashMap (response ));
239
- } catch (JSONException e ) {
240
- replyError (reply , "OneSignal" , "Encountered an error attempting to deserialize server response: " + e .getMessage (), null );
241
- }
242
- }
243
-
244
- @ Override
245
- public void onFailure (final JSONObject response ) {
246
- try {
247
- replyError (reply , "OneSignal" ,
248
- "Encountered an error attempting to post notification: " + response .toString (),
249
- OneSignalSerializer .convertJSONObjectToHashMap (response ));
250
- } catch (JSONException e ) {
251
- OneSignal .onesignalLog (OneSignal .LOG_LEVEL .ERROR ,
252
- "Encountered an error attempting to deserialize server response: " + e .getMessage ());
253
- }
254
- }
255
- });
234
+ OneSignal .postNotification (json , new OSFlutterResultHandler (flutterRegistrar , channel , reply , "postNotification" ));
256
235
}
257
236
258
237
private void promptLocation (Result reply ) {
@@ -269,80 +248,22 @@ private void setEmail(MethodCall call, final Result reply) {
269
248
String email = call .argument ("email" );
270
249
String emailAuthHashToken = call .argument ("emailAuthHashToken" );
271
250
272
- OneSignal .setEmail (email , emailAuthHashToken , new EmailUpdateHandler () {
273
- @ Override
274
- public void onSuccess () {
275
- replySuccess (reply , null );
276
- }
277
-
278
- @ Override
279
- public void onFailure (EmailUpdateError error ) {
280
- replyError (reply , "OneSignal" ,
281
- "Encountered an error setting email: " + error .getMessage (),
282
- null );
283
- }
284
- });
251
+ OneSignal .setEmail (email , emailAuthHashToken , new OSFlutterEmailHandle (flutterRegistrar , channel , reply , "setEmail" ));
285
252
}
286
253
287
254
private void logoutEmail (final Result reply ) {
288
- OneSignal .logoutEmail (new EmailUpdateHandler () {
289
- @ Override
290
- public void onSuccess () {
291
- replySuccess (reply , null );
292
- }
293
-
294
- @ Override
295
- public void onFailure (EmailUpdateError error ) {
296
- replyError (reply , "OneSignal" ,
297
- "Encountered an error loggoing out of email: " + error .getMessage (),
298
- null );
299
- }
300
- });
255
+ OneSignal .logoutEmail (new OSFlutterEmailHandle (flutterRegistrar , channel , reply , "logoutEmail" ));
301
256
}
302
257
303
258
private void setSMSNumber (MethodCall call , final Result reply ) {
304
259
String smsNumber = call .argument ("smsNumber" );
305
260
String smsAuthHashToken = call .argument ("smsAuthHashToken" );
306
261
307
- OneSignal .setSMSNumber (smsNumber , smsAuthHashToken , new OneSignal .OSSMSUpdateHandler () {
308
- @ Override
309
- public void onSuccess (JSONObject result ) {
310
- try {
311
- replySuccess (reply , OneSignalSerializer .convertJSONObjectToHashMap (result ));
312
- } catch (JSONException e ) {
313
- OneSignal .onesignalLog (OneSignal .LOG_LEVEL .ERROR ,
314
- "Encountered an error attempting to deserialize server response for setSMSNumber: " + e .getMessage ());
315
- }
316
- }
317
-
318
- @ Override
319
- public void onFailure (OneSignal .OSSMSUpdateError error ) {
320
- replyError (reply , "OneSignal" ,
321
- "Encountered an error setting SMS Number: " + error .getMessage (),
322
- null );
323
- }
324
- });
262
+ OneSignal .setSMSNumber (smsNumber , smsAuthHashToken , new OSFlutterResultHandler (flutterRegistrar , channel , reply , "setSMSNumber" ));
325
263
}
326
264
327
265
private void logoutSMSNumber (final Result reply ) {
328
- OneSignal .logoutSMSNumber (new OneSignal .OSSMSUpdateHandler () {
329
- @ Override
330
- public void onSuccess (JSONObject result ) {
331
- try {
332
- replySuccess (reply , OneSignalSerializer .convertJSONObjectToHashMap (result ));
333
- } catch (JSONException e ) {
334
- OneSignal .onesignalLog (OneSignal .LOG_LEVEL .ERROR ,
335
- "Encountered an error attempting to deserialize server response for logoutSMSNumber: " + e .getMessage ());
336
- }
337
- }
338
-
339
- @ Override
340
- public void onFailure (OneSignal .OSSMSUpdateError error ) {
341
- replyError (reply , "OneSignal" ,
342
- "Encountered an error logging out SMS number: " + error .getMessage (),
343
- null );
344
- }
345
- });
266
+ OneSignal .logoutSMSNumber (new OSFlutterResultHandler (flutterRegistrar , channel , reply , "logoutSMSNumber" ));
346
267
}
347
268
348
269
private void setLanguage (MethodCall call , final Result result ) {
@@ -361,45 +282,11 @@ private void setExternalUserId(MethodCall call, final Result result) {
361
282
if (authHashToken != null && authHashToken .length () == 0 )
362
283
authHashToken = null ;
363
284
364
- OneSignal .setExternalUserId (externalUserId , authHashToken , new OneSignal .OSExternalUserIdUpdateCompletionHandler () {
365
- @ Override
366
- public void onSuccess (JSONObject results ) {
367
- try {
368
- replySuccess (result , OneSignalSerializer .convertJSONObjectToHashMap (results ));
369
- } catch (JSONException e ) {
370
- OneSignal .onesignalLog (OneSignal .LOG_LEVEL .ERROR ,
371
- "Encountered an error attempting to deserialize server response for setExternalUserId: " + e .getMessage ());
372
- }
373
- }
374
-
375
- @ Override
376
- public void onFailure (OneSignal .ExternalIdError error ) {
377
- replyError (result , "OneSignal" ,
378
- "Encountered an error setting external id: " + error .getMessage (),
379
- null );
380
- }
381
- });
285
+ OneSignal .setExternalUserId (externalUserId , authHashToken , new OSFlutterResultHandler (flutterRegistrar , channel , result , "setExternalUserId" ));
382
286
}
383
287
384
288
private void removeExternalUserId (final Result result ) {
385
- OneSignal .removeExternalUserId (new OneSignal .OSExternalUserIdUpdateCompletionHandler () {
386
- @ Override
387
- public void onSuccess (JSONObject results ) {
388
- try {
389
- replySuccess (result , OneSignalSerializer .convertJSONObjectToHashMap (results ));
390
- } catch (JSONException e ) {
391
- OneSignal .onesignalLog (OneSignal .LOG_LEVEL .ERROR ,
392
- "Encountered an error attempting to deserialize server response for removeExternalUserId: " + e .getMessage ());
393
- }
394
- }
395
-
396
- @ Override
397
- public void onFailure (OneSignal .ExternalIdError error ) {
398
- replyError (result , "OneSignal" ,
399
- "Encountered an error removing external id: " + error .getMessage (),
400
- null );
401
- }
402
- });
289
+ OneSignal .removeExternalUserId (new OSFlutterResultHandler (flutterRegistrar , channel , result , "removeExternalUserId" ));
403
290
}
404
291
405
292
private void initNotificationOpenedHandlerParams () {
@@ -509,4 +396,90 @@ public void notificationWillShowInForeground(OSNotificationReceivedEvent notific
509
396
}
510
397
}
511
398
399
+ static class OSFlutterEmailHandle extends FlutterRegistrarResponder
400
+ implements OneSignal .EmailUpdateHandler {
401
+ private final Result result ;
402
+ private final String methodName ;
403
+ private final AtomicBoolean replySubmitted = new AtomicBoolean (false );
404
+
405
+ OSFlutterEmailHandle (PluginRegistry .Registrar flutterRegistrar , MethodChannel channel , Result res , String methodName ) {
406
+ this .flutterRegistrar = flutterRegistrar ;
407
+ this .channel = channel ;
408
+ this .result = res ;
409
+ this .methodName = methodName ;
410
+ }
411
+
412
+ @ Override
413
+ public void onSuccess () {
414
+ if (this .replySubmitted .getAndSet (true ))
415
+ return ;
416
+
417
+ replySuccess (result , null );
418
+ }
419
+
420
+ @ Override
421
+ public void onFailure (EmailUpdateError error ) {
422
+ if (this .replySubmitted .getAndSet (true ))
423
+ return ;
424
+
425
+ replyError (result , "OneSignal" ,
426
+ "Encountered an error when " + methodName + ": " + error .getMessage (),
427
+ null );
428
+ }
429
+ }
430
+
431
+ static class OSFlutterResultHandler extends FlutterRegistrarResponder
432
+ implements OneSignal .OSExternalUserIdUpdateCompletionHandler , OneSignal .OSSMSUpdateHandler , OneSignal .PostNotificationResponseHandler {
433
+ private final Result result ;
434
+ private final String methodName ;
435
+ private final AtomicBoolean replySubmitted = new AtomicBoolean (false );
436
+
437
+ OSFlutterResultHandler (PluginRegistry .Registrar flutterRegistrar , MethodChannel channel , Result res , String methodName ) {
438
+ this .flutterRegistrar = flutterRegistrar ;
439
+ this .channel = channel ;
440
+ this .result = res ;
441
+ this .methodName = methodName ;
442
+ }
443
+
444
+ @ Override
445
+ public void onSuccess (JSONObject results ) {
446
+ if (this .replySubmitted .getAndSet (true ))
447
+ return ;
448
+
449
+ try {
450
+ replySuccess (result , OneSignalSerializer .convertJSONObjectToHashMap (results ));
451
+ } catch (JSONException e ) {
452
+ replyError (result , "OneSignal" , "Encountered an error attempting to deserialize server response for " + methodName + ": " + e .getMessage (), null );
453
+ }
454
+ }
455
+
456
+ @ Override
457
+ public void onFailure (OneSignal .OSSMSUpdateError error ) {
458
+ if (this .replySubmitted .getAndSet (true ))
459
+ return ;
460
+
461
+ replyError (result , "OneSignal" , "Encountered an error when " + methodName + " (" + error .getType () + "): " + error .getMessage (), null );
462
+ }
463
+
464
+ @ Override
465
+ public void onFailure (OneSignal .ExternalIdError error ) {
466
+ if (this .replySubmitted .getAndSet (true ))
467
+ return ;
468
+
469
+ replyError (result , "OneSignal" , "Encountered an error when " + methodName + " (" + error .getType () + "): " + error .getMessage (), null );
470
+ }
471
+
472
+ @ Override
473
+ public void onFailure (JSONObject response ) {
474
+ if (this .replySubmitted .getAndSet (true ))
475
+ return ;
476
+
477
+ try {
478
+ replyError (result , "OneSignal" , "Encountered an error attempting to " + methodName + " " + response .toString (), OneSignalSerializer .convertJSONObjectToHashMap (response ));
479
+ } catch (JSONException jsonException ) {
480
+ replyError (result , "OneSignal" , "Encountered an error attempting to deserialize server response " + methodName + " " + jsonException .getMessage (), null );
481
+ }
482
+ }
483
+ }
484
+
512
485
}
0 commit comments