Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,29 @@

import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;

/**
* Created by bradhesse on 7/17/18.
*/

class OSFlutterChangeTagsHandler implements ChangeTagsUpdateHandler {
class OSFlutterChangeTagsHandler implements ChangeTagsUpdateHandler, GetTagsHandler {
private Result result;

// the tags callbacks can in some instances be called more than once
// ie. cached vs. server response.
// this property guarantees the callback will never be called more than once.
private AtomicBoolean replySubmitted = new AtomicBoolean(false);

OSFlutterChangeTagsHandler(Result res) {
this.result = res;
}

@Override
public void onSuccess(JSONObject tags) {
if (this.replySubmitted.getAndSet(true))
return;

try {
this.result.success(OneSignalSerializer.convertJSONObjectToHashMap(tags));
} catch (JSONException exception) {
Expand All @@ -39,8 +48,23 @@ public void onSuccess(JSONObject tags) {

@Override
public void onFailure(SendTagsError error) {
if (this.replySubmitted.getAndSet(true))
return;

this.result.error("onesignal", "Encountered an error updating tags (" + String.valueOf(error.getCode()) + "): " + error.getMessage(), null);
}

@Override
public void tagsAvailable(JSONObject jsonObject) {
if (this.replySubmitted.getAndSet(true))
return;

try {
this.result.success(OneSignalSerializer.convertJSONObjectToHashMap(jsonObject));
} catch (JSONException exception) {
this.result.error("onesignal", "Encountered an error serializing tags into hashmap: " + exception.getMessage() + "\n" + exception.getStackTrace(), null);
}
}
}

public class OneSignalTagsController implements MethodCallHandler {
Expand All @@ -55,17 +79,7 @@ public static void registerWith(Registrar registrar) {
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.contentEquals("OneSignal#getTags")) {
final Result res = result;
OneSignal.getTags(new GetTagsHandler() {
@Override
public void tagsAvailable(JSONObject tags) {
try {
res.success(OneSignalSerializer.convertJSONObjectToHashMap(tags));
} catch (JSONException exception) {
res.error("onesignal", "Encountered an error serializing tags into hashmap: " + exception.getMessage() + "\n" + exception.getStackTrace(), null);
}
}
});
OneSignal.getTags(new OSFlutterChangeTagsHandler(result));
} else if (call.method.contentEquals("OneSignal#sendTags")) {
OneSignal.sendTags(new JSONObject((Map<String, Object>) call.arguments), new OSFlutterChangeTagsHandler(result));
} else if (call.method.contentEquals("OneSignal#deleteTags")
Expand Down