Skip to content

Commit 2b6758d

Browse files
committed
Add DeviceInfoHandlers to UserStateSynchronizer
* Add deviceInfoCompletionHandler * Add deviceInfoHandlersPerformOnSuccess * Add deviceInfoHandlersPerformOnFailure
1 parent 22cb57b commit 2b6758d

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/UserStateSynchronizer.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import com.onesignal.OneSignal.ChangeTagsUpdateHandler;
99
import com.onesignal.OneSignal.SendTagsError;
1010
import com.onesignal.OneSignalStateSynchronizer.UserStateSynchronizerType;
11+
import com.onesignal.OneSignal.OSDeviceInfoCompletionHandler;
12+
import com.onesignal.OneSignal.OSDeviceInfoError;
1113

1214
import org.json.JSONException;
1315
import org.json.JSONObject;
@@ -37,6 +39,7 @@ abstract class UserStateSynchronizer {
3739
protected static final String ANDROID_PERMISSION = "androidPermission";
3840
protected static final String SUBSCRIBABLE_STATUS = "subscribableStatus";
3941
protected static final String TAGS = "tags";
42+
protected static final String LANGUAGE = "language";
4043
protected static final String EXTERNAL_USER_ID = "external_user_id";
4144
protected static final String EMAIL_KEY = "email";
4245
protected static final String LOGOUT_EMAIL = "logoutEmail";
@@ -92,6 +95,7 @@ String getRegistrationId() {
9295
// sendTags() multiple times it will call each callback
9396
final private Queue<ChangeTagsUpdateHandler> sendTagsHandlers = new ConcurrentLinkedQueue<>();
9497
final private Queue<OneSignal.OSInternalExternalUserIdUpdateCompletionHandler> externalUserIdUpdateHandlers = new ConcurrentLinkedQueue<>();
98+
final private Queue<OneSignal.OSDeviceInfoCompletionHandler> deviceInfoCompletionHandler = new ConcurrentLinkedQueue<>();
9599

96100
boolean hasQueuedHandlers() {
97101
return externalUserIdUpdateHandlers.size() > 0;
@@ -367,6 +371,9 @@ void onFailure(int statusCode, String response, Throwable throwable) {
367371
OneSignal.onesignalLog(OneSignal.LOG_LEVEL.ERROR, "Error setting external user id for push with status code: " + statusCode + " and message: " + response);
368372
externalUserIdUpdateHandlersPerformOnFailure();
369373
}
374+
375+
if (jsonBody.has(LANGUAGE))
376+
deviceInfoHandlersPerformOnFailure(new OSDeviceInfoError(statusCode, response));
370377
}
371378

372379
@Override
@@ -381,6 +388,9 @@ void onSuccess(String response) {
381388

382389
if (jsonBody.has(EXTERNAL_USER_ID))
383390
externalUserIdUpdateHandlersPerformOnSuccess();
391+
392+
if (jsonBody.has(LANGUAGE))
393+
deviceInfoHandlersPerformOnSuccess();
384394
}
385395
});
386396
}
@@ -505,7 +515,9 @@ protected UserState getUserStateForModification() {
505515

506516
abstract protected void scheduleSyncToServer();
507517

508-
void updateDeviceInfo(JSONObject deviceInfo) {
518+
void updateDeviceInfo(JSONObject deviceInfo, @Nullable OSDeviceInfoCompletionHandler handler) {
519+
if (handler != null)
520+
this.deviceInfoCompletionHandler.add(handler);
509521
getUserStateForModification().generateJsonDiffFromIntoSyncValued(deviceInfo, null);
510522
}
511523

@@ -612,4 +624,18 @@ private void externalUserIdUpdateHandlersPerformOnFailure() {
612624
}
613625
}
614626

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+
}
615641
}

0 commit comments

Comments
 (0)