package net.osmand.plus.download; import java.io.File; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URLEncoder; import java.text.MessageFormat; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Random; import net.osmand.PlatformUtil; import net.osmand.osm.io.NetworkUtils; import net.osmand.plus.OsmandApplication; import net.osmand.plus.Version; import org.apache.commons.logging.Log; import android.os.Build; public class DownloadTracker { private static final Log log = PlatformUtil.getLog(DownloadTracker.class); private Map<String, String> getCustomVars(OsmandApplication ctx) { Map<String, String> map = new LinkedHashMap<String, String>(); map.put("App", Version.getFullVersion(ctx)); map.put("Device", Build.DEVICE); map.put("Brand", Build.BRAND); map.put("Model", Build.MODEL); map.put("Package", ctx.getPackageName()); map.put("Version name", ctx.getVersionName()); map.put("Version code", ctx.getVersionCode()+""); return map; } private String randomNumber() { return (new Random(System.currentTimeMillis()).nextInt(100000000) + 100000000) + ""; } static final String analyticsVersion = "4.3"; // Analytics version - AnalyticsVersion public void trackEvent(OsmandApplication a, String category, String action, String label, int value, String trackingAcount) { Map<String, String> parameters = new LinkedHashMap<String, String>(); try { Map<String, String> customVariables = getCustomVars(a); parameters.put("AnalyticsVersion", analyticsVersion); parameters.put("utmn", randomNumber()); parameters.put("utmhn", "http://app.osmand.net"); parameters.put("utmni", "1"); parameters.put("utmt", "event"); StringBuilder customVars = new StringBuilder(); Iterator<Entry<String, String>> customs = customVariables.entrySet().iterator(); for (int i = 0; i < customVariables.size(); i++) { Entry<String, String> n = customs.next(); if (i > 0) { customVars.append("*"); } // "'" => "'0", ')' => "'1", '*' => "'2", '!' => "'3", customVars.append((i + 1) + "!").append((n.getKey() + n.getValue())); } parameters.put("utmcs", "UTF-8"); parameters.put("utmul", "en"); parameters.put("utmhid", (System.currentTimeMillis() / 1000) + ""); parameters.put("utmac", trackingAcount); String domainHash = "app.osmand.net".hashCode() + ""; String utma = domainHash + "."; File fl = a.getAppPath(".nomedia"); if (fl.exists()) { utma += (fl.lastModified()) + "."; } else { utma += (randomNumber()) + "."; } utma += ((System.currentTimeMillis() / 1000) + "."); utma += ((System.currentTimeMillis() / 1000) + "."); utma += ((System.currentTimeMillis() / 1000) + "."); utma += "1"; parameters.put("utmcc", "__utma=" + utma + ";"); parameters.put("utme", MessageFormat.format("5({0}*{1}*{2})({3})", category, action, label == null ? "" : label, value) + customVars); String scheme = ""; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) scheme = "https"; else scheme = "http"; String beaconUrl = scheme + "://www.google-analytics.com/__utm.gif"; StringBuilder urlString = new StringBuilder(beaconUrl + "?"); Iterator<Entry<String, String>> it = parameters.entrySet().iterator(); while (it.hasNext()) { Entry<String, String> e = it.next(); urlString.append(e.getKey()).append("=").append(URLEncoder.encode(e.getValue(), "UTF-8")); if (it.hasNext()) { urlString.append("&"); } } log.debug(urlString); HttpURLConnection conn = NetworkUtils.getHttpURLConnection(urlString.toString()); conn.setConnectTimeout(5000); conn.setDoInput(false); conn.setDoOutput(false); conn.connect(); log.info("Response analytics is " + conn.getResponseCode() + " " + conn.getResponseMessage()); } catch (IOException e) { log.error(e.getMessage(), e); } } }