package com.uservoice.uservoicesdk.babayaga;
import android.net.http.AndroidHttpClient;
import android.os.AsyncTask;
import android.util.Base64;
import android.util.Log;
import com.uservoice.uservoicesdk.Session;
import com.uservoice.uservoicesdk.UserVoice;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Map;
public class BabayagaTask extends AsyncTask<String, String, Void> {
private final String event;
private final Map<String, Object> traits;
private final Map<String, Object> eventProps;
private final String uvts;
public BabayagaTask(String event, String uvts, Map<String, Object> traits, Map<String, Object> eventProps) {
this.event = event;
this.uvts = uvts;
this.traits = traits;
this.eventProps = eventProps;
}
@Override
protected Void doInBackground(String... args) {
try {
JSONObject data = new JSONObject();
if (traits != null && !traits.isEmpty()) {
data.put("u", new JSONObject(traits));
}
if (eventProps != null && !eventProps.isEmpty()) {
data.put("e", eventProps);
}
String subdomainId = Session.getInstance().getClientConfig().getSubdomainId();
StringBuilder url = new StringBuilder(String.format("https://%s/t/%s/%s/%s", Babayaga.DOMAIN, subdomainId, Babayaga.CHANNEL, event));
if (uvts != null) {
url.append("/");
url.append(uvts);
}
url.append("/track.js?_=");
url.append(new Date().getTime());
url.append("&c=_");
if (data.length() != 0) {
url.append("&d=");
try {
url.append(URLEncoder.encode(Base64.encodeToString(data.toString().getBytes(), Base64.NO_WRAP), "UTF-8"));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
HttpRequestBase request = new HttpGet();
request.setURI(new URI(url.toString()));
AndroidHttpClient client = AndroidHttpClient.newInstance(String.format("uservoice-android-%s", UserVoice.getVersion()), Session.getInstance().getContext());
HttpResponse response = client.execute(request);
HttpEntity responseEntity = response.getEntity();
StatusLine responseStatus = response.getStatusLine();
int statusCode = responseStatus != null ? responseStatus.getStatusCode() : 0;
if (statusCode != 200)
return null;
String body = responseEntity != null ? EntityUtils.toString(responseEntity) : null;
client.close();
if (body != null && !body.isEmpty()) {
String payload = body.substring(2, body.length() - 2);
JSONObject responseData = new JSONObject(payload);
String uvts = responseData.getString("uvts");
Babayaga.setUvts(uvts);
}
} catch (Exception e) {
e.printStackTrace();
Log.e("UV", String.format("%s: %s", e.getClass().getName(), e.getMessage()));
}
return null;
}
}