8
8
import com .onesignal .OneSignal .ChangeTagsUpdateHandler ;
9
9
import com .onesignal .OneSignal .SendTagsError ;
10
10
import com .onesignal .OneSignalStateSynchronizer .UserStateSynchronizerType ;
11
+ import com .onesignal .OneSignal .OSDeviceInfoCompletionHandler ;
12
+ import com .onesignal .OneSignal .OSDeviceInfoError ;
11
13
12
14
import org .json .JSONException ;
13
15
import org .json .JSONObject ;
@@ -37,6 +39,7 @@ abstract class UserStateSynchronizer {
37
39
protected static final String ANDROID_PERMISSION = "androidPermission" ;
38
40
protected static final String SUBSCRIBABLE_STATUS = "subscribableStatus" ;
39
41
protected static final String TAGS = "tags" ;
42
+ protected static final String LANGUAGE = "language" ;
40
43
protected static final String EXTERNAL_USER_ID = "external_user_id" ;
41
44
protected static final String EMAIL_KEY = "email" ;
42
45
protected static final String LOGOUT_EMAIL = "logoutEmail" ;
@@ -92,6 +95,7 @@ String getRegistrationId() {
92
95
// sendTags() multiple times it will call each callback
93
96
final private Queue <ChangeTagsUpdateHandler > sendTagsHandlers = new ConcurrentLinkedQueue <>();
94
97
final private Queue <OneSignal .OSInternalExternalUserIdUpdateCompletionHandler > externalUserIdUpdateHandlers = new ConcurrentLinkedQueue <>();
98
+ final private Queue <OneSignal .OSDeviceInfoCompletionHandler > deviceInfoCompletionHandler = new ConcurrentLinkedQueue <>();
95
99
96
100
boolean hasQueuedHandlers () {
97
101
return externalUserIdUpdateHandlers .size () > 0 ;
@@ -367,6 +371,9 @@ void onFailure(int statusCode, String response, Throwable throwable) {
367
371
OneSignal .onesignalLog (OneSignal .LOG_LEVEL .ERROR , "Error setting external user id for push with status code: " + statusCode + " and message: " + response );
368
372
externalUserIdUpdateHandlersPerformOnFailure ();
369
373
}
374
+
375
+ if (jsonBody .has (LANGUAGE ))
376
+ deviceInfoHandlersPerformOnFailure (new OSDeviceInfoError (statusCode , response ));
370
377
}
371
378
372
379
@ Override
@@ -381,6 +388,9 @@ void onSuccess(String response) {
381
388
382
389
if (jsonBody .has (EXTERNAL_USER_ID ))
383
390
externalUserIdUpdateHandlersPerformOnSuccess ();
391
+
392
+ if (jsonBody .has (LANGUAGE ))
393
+ deviceInfoHandlersPerformOnSuccess ();
384
394
}
385
395
});
386
396
}
@@ -505,7 +515,9 @@ protected UserState getUserStateForModification() {
505
515
506
516
abstract protected void scheduleSyncToServer ();
507
517
508
- void updateDeviceInfo (JSONObject deviceInfo ) {
518
+ void updateDeviceInfo (JSONObject deviceInfo , @ Nullable OSDeviceInfoCompletionHandler handler ) {
519
+ if (handler != null )
520
+ this .deviceInfoCompletionHandler .add (handler );
509
521
getUserStateForModification ().generateJsonDiffFromIntoSyncValued (deviceInfo , null );
510
522
}
511
523
@@ -612,4 +624,18 @@ private void externalUserIdUpdateHandlersPerformOnFailure() {
612
624
}
613
625
}
614
626
627
+ private void deviceInfoHandlersPerformOnSuccess () {
628
+ String language = OneSignalStateSynchronizer .getLanguage ();
629
+ OneSignal .OSDeviceInfoCompletionHandler handler ;
630
+ while ((handler = deviceInfoCompletionHandler .poll ()) != null ) {
631
+ handler .onSuccess (language );
632
+ }
633
+ }
634
+
635
+ private void deviceInfoHandlersPerformOnFailure (OSDeviceInfoError error ) {
636
+ OneSignal .OSDeviceInfoCompletionHandler handler ;
637
+ while ((handler = deviceInfoCompletionHandler .poll ()) != null ) {
638
+ handler .onFailure (error );
639
+ }
640
+ }
615
641
}
0 commit comments