Skip to content

Commit f4aed5e

Browse files
committed
add callbacks to setLanguage method
- Android: added OSFlutterSetLanguageHandler that implements the OSSetLanguageCompletionHandler
1 parent eeb3479 commit f4aed5e

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

android/src/main/java/com/onesignal/flutter/OneSignalPlugin.java

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ private void setLanguage(MethodCall call, final Result result) {
329329
if (language != null && language.length() == 0)
330330
language = null;
331331

332-
OneSignal.setLanguage(language);
332+
OneSignal.setLanguage(language, new OSFlutterSetLanguageHandler(messenger, channel, result, "setLanguage"));
333333
}
334334

335335
private void setExternalUserId(MethodCall call, final Result result) {
@@ -603,6 +603,47 @@ public void onFailure(JSONObject response) {
603603
}
604604
}
605605

606+
static class OSFlutterSetLanguageHandler extends OSFlutterHandler
607+
implements OneSignal.OSSetLanguageCompletionHandler {
608+
609+
OSFlutterSetLanguageHandler(BinaryMessenger messenger, MethodChannel channel, Result res, String methodName) {
610+
super(messenger, channel, res, methodName);
611+
}
612+
613+
@Override
614+
public void onSuccess(String results) {
615+
if (this.replySubmitted.getAndSet(true)) {
616+
OneSignal.onesignalLog(OneSignal.LOG_LEVEL.DEBUG, "OneSignal " + methodName + " handler called twice, ignoring! response: " + results);
617+
return;
618+
}
619+
620+
if (results == null) { // The results currently is always null.
621+
results = "Successfully set language.";
622+
}
623+
624+
HashMap<String, Object> responseMap = new HashMap<>();
625+
responseMap.put("success", true);
626+
responseMap.put("message", results);
627+
replySuccess(result, responseMap);
628+
}
629+
630+
@Override
631+
public void onFailure(OneSignal.OSLanguageError error) {
632+
if (this.replySubmitted.getAndSet(true)) {
633+
return;
634+
}
635+
636+
String errorMessage = error.getMessage();
637+
if (errorMessage == null) {
638+
errorMessage = "Failed to set language.";
639+
}
640+
641+
replyError(result, "OneSignal",
642+
"Encountered an error when " + methodName + ": " + errorMessage,
643+
null);
644+
}
645+
}
646+
606647
static class OSFlutterHandler extends FlutterRegistrarResponder {
607648
protected final Result result;
608649
protected final String methodName;

ios/Classes/OneSignalPlugin.m

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,12 @@ - (void)setLanguage:(FlutterMethodCall *)call withResult:(FlutterResult)result {
338338
language = nil;
339339
}
340340

341-
[OneSignal setLanguage:language];
341+
[OneSignal setLanguage:language withSuccess:^(NSDictionary *results) {
342+
result(results);
343+
} withFailure:^(NSError *error) {
344+
[OneSignal onesignalLog:ONE_S_LL_VERBOSE message:[NSString stringWithFormat:@"Set language Failure with error: %@", error]];
345+
result(error.flutterError);
346+
}];
342347
}
343348

344349
- (void)initNotificationOpenedHandlerParams {

0 commit comments

Comments
 (0)