1
0
mirror of https://github.com/roytam1/UXP.git synced 2026-06-18 06:19:27 +00:00
Files
UXP/mobile/android/thirdparty/com/adjust/sdk/AttributionHandler.java
T

156 lines
4.7 KiB
Java

package com.adjust.sdk;
import android.net.Uri;
import ch.boye.httpclientandroidlib.HttpResponse;
import ch.boye.httpclientandroidlib.client.HttpClient;
import ch.boye.httpclientandroidlib.client.methods.HttpGet;
import org.json.JSONObject;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/**
* Created by pfms on 07/11/14.
*/
public class AttributionHandler implements IAttributionHandler {
private ScheduledExecutorService scheduler;
private IActivityHandler activityHandler;
private ILogger logger;
private ActivityPackage attributionPackage;
private ScheduledFuture waitingTask;
private HttpClient httpClient;
private boolean paused;
public AttributionHandler(IActivityHandler activityHandler,
ActivityPackage attributionPackage,
boolean startPaused) {
scheduler = Executors.newSingleThreadScheduledExecutor();
logger = AdjustFactory.getLogger();
httpClient = Util.getHttpClient();
init(activityHandler, attributionPackage, startPaused);
}
@Override
public void init(IActivityHandler activityHandler,
ActivityPackage attributionPackage,
boolean startPaused) {
this.activityHandler = activityHandler;
this.attributionPackage = attributionPackage;
this.paused = startPaused;
}
@Override
public void getAttribution() {
getAttribution(0);
}
@Override
public void checkAttribution(final JSONObject jsonResponse) {
scheduler.submit(new Runnable() {
@Override
public void run() {
checkAttributionInternal(jsonResponse);
}
});
}
@Override
public void pauseSending() {
paused = true;
}
@Override
public void resumeSending() {
paused = false;
}
private void getAttribution(int delayInMilliseconds) {
if (waitingTask != null) {
waitingTask.cancel(false);
}
if (delayInMilliseconds != 0) {
logger.debug("Waiting to query attribution in %d milliseconds", delayInMilliseconds);
}
waitingTask = scheduler.schedule(new Runnable() {
@Override
public void run() {
getAttributionInternal();
}
}, delayInMilliseconds, TimeUnit.MILLISECONDS);
}
private void checkAttributionInternal(JSONObject jsonResponse) {
if (jsonResponse == null) return;
JSONObject attributionJson = jsonResponse.optJSONObject("attribution");
AdjustAttribution attribution = AdjustAttribution.fromJson(attributionJson);
int timerMilliseconds = jsonResponse.optInt("ask_in", -1);
// without ask_in attribute
if (timerMilliseconds < 0) {
activityHandler.tryUpdateAttribution(attribution);
activityHandler.setAskingAttribution(false);
return;
}
activityHandler.setAskingAttribution(true);
getAttribution(timerMilliseconds);
}
private void getAttributionInternal() {
if (paused) {
logger.debug("Attribution Handler is paused");
return;
}
logger.verbose("%s", attributionPackage.getExtendedString());
HttpResponse httpResponse = null;
try {
HttpGet request = getRequest(attributionPackage);
httpResponse = httpClient.execute(request);
} catch (Exception e) {
logger.error("Failed to get attribution (%s)", e.getMessage());
return;
}
JSONObject jsonResponse = Util.parseJsonResponse(httpResponse, logger);
checkAttributionInternal(jsonResponse);
}
private Uri buildUri(ActivityPackage attributionPackage) {
Uri.Builder uriBuilder = new Uri.Builder();
uriBuilder.scheme(Constants.SCHEME);
uriBuilder.authority(Constants.AUTHORITY);
uriBuilder.appendPath(attributionPackage.getPath());
for (Map.Entry<String, String> entry : attributionPackage.getParameters().entrySet()) {
uriBuilder.appendQueryParameter(entry.getKey(), entry.getValue());
}
return uriBuilder.build();
}
private HttpGet getRequest(ActivityPackage attributionPackage) throws URISyntaxException {
HttpGet request = new HttpGet();
Uri uri = buildUri(attributionPackage);
request.setURI(new URI(uri.toString()));
request.addHeader("Client-SDK", attributionPackage.getClientSdk());
return request;
}
}