-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathEagerAdjustCordova.java
128 lines (106 loc) · 4.81 KB
/
EagerAdjustCordova.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package com.adjust.sdk;
import android.os.Bundle;
import org.apache.cordova.CallbackContext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.adjust.sdk.AdjustCordovaUtils.COMMAND_CREATE;
import static com.adjust.sdk.AdjustCordovaUtils.COMMAND_SET_ATTRIBUTION_CALLBACK;
import static com.adjust.sdk.AdjustCordovaUtils.COMMAND_SET_DEFERRED_DEEPLINK_CALLBACK;
import static com.adjust.sdk.AdjustCordovaUtils.COMMAND_SET_EVENT_TRACKING_FAILED_CALLBACK;
import static com.adjust.sdk.AdjustCordovaUtils.COMMAND_SET_EVENT_TRACKING_SUCCEEDED_CALLBACK;
import static com.adjust.sdk.AdjustCordovaUtils.COMMAND_SET_SESSION_TRACKING_FAILED_CALLBACK;
import static com.adjust.sdk.AdjustCordovaUtils.COMMAND_SET_SESSION_TRACKING_SUCCEEDED_CALLBACK;
import static com.adjust.sdk.AdjustCordovaUtils.KEY_APP_TOKEN;
import static com.adjust.sdk.AdjustCordovaUtils.KEY_ENVIRONMENT;
public class EagerAdjustCordova extends AdjustCordova {
// DO NOT CHANGE (Used in MainActivity)
private final String AdjustTokenKey = "adjust_token";
private final String EnvironmentKey = "environment";
// Adjust event callbacks to set
private final List<String> callbacks = Arrays.asList(
COMMAND_SET_ATTRIBUTION_CALLBACK,
COMMAND_SET_EVENT_TRACKING_SUCCEEDED_CALLBACK,
COMMAND_SET_EVENT_TRACKING_FAILED_CALLBACK,
COMMAND_SET_SESSION_TRACKING_SUCCEEDED_CALLBACK,
COMMAND_SET_SESSION_TRACKING_FAILED_CALLBACK,
COMMAND_SET_DEFERRED_DEEPLINK_CALLBACK);
private Map<String, BufferedCallbackContext> callbackContextMap = new HashMap<>();
@Override
public void onResume(boolean multitasking) {
super.onResume(multitasking);
for (String callback : callbacks) {
setBufferedCallback(callback);
}
initializeSdk();
}
/**
* Sets `COMMAND_SET_*_CALLBACK` callback as a placeholder until we call
* setCallback from JS.
* This enables us to buffer the result of the callback incase
* JS is slow in calling setCallback.
*/
private void setBufferedCallback(String action) {
BufferedCallbackContext bufferedCallbackContext = new BufferedCallbackContext(action, webView);
JSONArray empty = new JSONArray();
try {
this.execute(action, empty, bufferedCallbackContext);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
handleCallback(action, callbackContext);
return super.execute(action, args, callbackContext);
}
/**
* Stores BufferedCallbacks to the Map as a placeholder callback,
* for when the JS is slower in setting the callback for each action.
* BufferedCallback stores the result (if invoked) and passes the
* result via the `sendPluginResult` call to the callback to JS.
*
* @param action
* @param callbackContext
*/
private void handleCallback(String action, CallbackContext callbackContext) {
// Only handle callbacks for specified commands
if (!callbacks.contains(action)) return;
BufferedCallbackContext bufferedCallback = callbackContextMap.remove(action);
if (bufferedCallback != null) {
bufferedCallback.replayResults(callbackContext);
} else if (callbackContext instanceof BufferedCallbackContext) {
callbackContextMap.put(action, (BufferedCallbackContext) callbackContext);
}
}
// Initializer function to call the `execute` method with the required arguments for init.
private void initializeSdk() {
// Getting data from extras
Bundle extras = this.cordova.getActivity().getIntent().getExtras();
// If no eager initialization params were set, e.g. in Debug UI, don't do initialize eagerly.
if (extras == null) return;
try {
String appToken = extras.getString(AdjustTokenKey);
boolean isDebug = extras.getBoolean(EnvironmentKey, false);
JSONObject data = new JSONObject();
data.put(KEY_APP_TOKEN, appToken);
data.put(
KEY_ENVIRONMENT,
isDebug
? AdjustConfig.ENVIRONMENT_SANDBOX
: AdjustConfig.ENVIRONMENT_PRODUCTION
);
JSONArray dataArray = new JSONArray();
dataArray.put(data);
JSONArray jsonArray = new JSONArray();
jsonArray.put(dataArray);
execute(COMMAND_CREATE, jsonArray, null);
} catch (JSONException e) {
e.printStackTrace();
}
}
}