package edu.berkeley.cs.amplab.carat.android.utils; import java.util.HashMap; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.preference.PreferenceManager; import android.util.Log; import edu.berkeley.cs.amplab.carat.android.CaratApplication; import edu.berkeley.cs.amplab.carat.android.MainActivity; import edu.berkeley.cs.amplab.carat.android.R; import edu.berkeley.cs.amplab.carat.android.protocol.ClickTracking; import edu.berkeley.cs.amplab.carat.android.sampling.SamplingLibrary; import edu.berkeley.cs.amplab.carat.android.storage.SimpleHogBug; public class Tracker { private static Tracker instance = null; private static String uuid = null; private static SharedPreferences p = null; private static MainActivity mainActivity = null; private static Context context = null; private static int jscore = 0; public static Tracker getInstance() { if (instance == null) { instance = new Tracker(); mainActivity = CaratApplication.getMainActivity(); context = mainActivity.getApplicationContext(); p = PreferenceManager.getDefaultSharedPreferences(mainActivity); uuid = p.getString(CaratApplication.getRegisteredUuid(), "UNKNOWN"); jscore = CaratApplication.getJscore(); } return instance; } /* * IMPORTANT: The fields "type" and "textBenefit" of the fullObject (the * second parameter) must be initiated before INVOKING this method, * otherwise you get NullPointerException */ public void trackUser(String label, SimpleHogBug fullObject) { PackageInfo pak = SamplingLibrary.getPackageInfo(mainActivity, fullObject.getAppName()); if (p != null) { HashMap<String, String> options = new HashMap<String, String>(); options.put("status", CaratApplication.getMainActivity().getTitle().toString()); options.put("type", fullObject.getType().toString()); if (pak != null) { options.put("app", pak.packageName); options.put("version", pak.versionName); options.put("versionCode", pak.versionCode + ""); options.put("label", label); } options.put("benefit", fullObject.getBenefitText().replace('\u00B1', '+')); ClickTracking.track(uuid, "samplesview", options, CaratApplication.getMainActivity()); } } public void trackUser(String whatIsGettingDone) { Log.d("Tracker.trackUser", whatIsGettingDone); if (p != null) { String uuId = p.getString(CaratApplication.getRegisteredUuid(), "UNKNOWN"); HashMap<String, String> options = new HashMap<String, String>(); options.put("status", mainActivity.getTitle().toString()); ClickTracking.track(uuId, whatIsGettingDone, options, mainActivity); } } public void trackSharing() { if (p != null) { HashMap<String, String> options = new HashMap<String, String>(); options.put("status", mainActivity.getTitle().toString()); options.put("sharetext", mainActivity.getString(R.string.myjscoreis) + " " + jscore); ClickTracking.track(uuid, "caratshared", options, context); } } public void trackFeedback(String os, String model) { if (p != null) { HashMap<String, String> options = new HashMap<String, String>(); options.put("os", os); options.put("model", model); SimpleHogBug[] b = CaratApplication.storage.getBugReport(); int len = 0; if (b != null) len = b.length; options.put("bugs", len + ""); b = CaratApplication.storage.getHogReport(); len = 0; if (b != null) len = b.length; options.put("hogs", len + ""); options.put("status", mainActivity.getTitle().toString()); options.put("sharetext", mainActivity.getString(R.string.myjscoreis) + " " + jscore); ClickTracking.track(uuid, "feedbackbutton", options, context); } } }