package com.heyzap.sdk;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
import org.json.JSONObject;
import com.heyzap.http.JsonHttpResponseHandler;
import com.heyzap.http.RequestParams;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.util.Log;
class HeyzapAnalytics {
public static final String LOG_TAG = "HeyzapSDK";
private static final String HEYZAP_ANALYTICS_ID_PREF = "heyzap_button_analytics_id";
private static final String HEYZAP_ENDPOINT = "http://android.heyzap.com/mobile/track_sdk_event";
static final String HEYZAP_SDK_PLATFORM = "android";
static final String HEYZAP_SDK_VERSION = "3.4.17";
private static boolean loaded = false;
private static String trackHash = "";
public static synchronized void trackEvent(final Context context, final String eventType) {
Log.d(LOG_TAG, "Tracking " + eventType + " event.");
// Load the device id and any previous tracking hash
if(!loaded) {
init(context);
loaded = true;
}
RequestParams params = new RequestParams();
params.put("track_hash", trackHash);
params.put("type", eventType);
SDKRestClient.get(context, "/mobile/track_sdk_event", params);
}
public static String getAnalyticsReferrer(Context context) {
return getAnalyticsReferrer(context, null);
}
public static String getAnalyticsReferrer(Context context, String additionalParams) {
String referrerTrackHash = getTrackHash(context);
String referrer;
if(referrerTrackHash != null) {
referrer = "utm_medium=device&utm_source=heyzap_track&utm_campaign=" + referrerTrackHash;
} else {
referrer = "utm_medium=device&utm_source=sdk&utm_campaign=" + context.getPackageName();
}
if (additionalParams != null ) referrer += "&" + additionalParams;
return URLEncoder.encode(referrer);
}
private static void init(final Context context) {
Utils.load(context);
new Thread(new Runnable(){
@Override
public void run(){
// Load up previous tracking hash
String tempTrackHash = getTrackHash(context);
if(tempTrackHash != null) {
trackHash = tempTrackHash;
}
}
}).start();
}
private static void setTrackHash(Context context, String newTrackHash) {
if(newTrackHash != null && !newTrackHash.trim().equals("") && !trackHash.equals(newTrackHash)) {
trackHash = newTrackHash;
SharedPreferences prefs = context.getSharedPreferences(HEYZAP_ANALYTICS_ID_PREF, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString(HEYZAP_ANALYTICS_ID_PREF, trackHash);
editor.commit();
}
}
private static String getTrackHash(Context context) {
if(trackHash == null){
final SharedPreferences prefs = context.getSharedPreferences(HEYZAP_ANALYTICS_ID_PREF, Context.MODE_PRIVATE);
if(prefs != null) {
trackHash = prefs.getString(HEYZAP_ANALYTICS_ID_PREF, null);
}
}
if (trackHash != null && trackHash.trim().equals("")) return null;
return trackHash;
}
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}