package com.uservoice.uservoicesdk.babayaga; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import com.uservoice.uservoicesdk.Session; import com.uservoice.uservoicesdk.model.BaseModel; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Babayaga { public static String CHANNEL = "d"; static String DOMAIN = "by.uservoice.com"; private static String uvts; private static Map<String, Object> traits; private static SharedPreferences prefs; private static List<Track> queue = new ArrayList<Track>(); public static void setUserTraits(Map<String, Object> traits) { Babayaga.traits = traits; } public static void track(Event event) { track(event, null); } public static void track(Event event, String searchText, List<? extends BaseModel> results) { Map<String, Object> props = new HashMap<String, Object>(); List<Integer> ids = new ArrayList<Integer>(results.size()); for (BaseModel model : results) { ids.add(model.getId()); } props.put("ids", ids); props.put("text", searchText); track(event, props); } public static void track(Event event, int id) { Map<String, Object> props = new HashMap<String, Object>(); props.put("id", id); track(event, props); } public static void track(Event event, Map<String, Object> eventProps) { track(event.getCode(), eventProps); } public static void track(String event, Map<String, Object> eventProps) { if (Session.getInstance().getClientConfig() == null) { queue.add(new Track(event, eventProps)); } else { // Log.d("UV", "BY flushing: " + event); new BabayagaTask(event, uvts, traits, eventProps).execute(); } } public static void flush() { for (Track track : queue) { track(track.event, track.eventProps); } queue = new ArrayList<Track>(); } public static void init(Context context) { prefs = context.getSharedPreferences("uv", 0); if (prefs.contains("uvts")) { uvts = prefs.getString("uvts", null); } track(Event.VIEW_APP); } public static String getUvts() { return uvts; } public static void setUvts(String uvts) { Babayaga.uvts = uvts; Editor edit = prefs.edit(); edit.putString("uvts", uvts); edit.commit(); } public enum Event { VIEW_APP("g"), VIEW_FORUM("m"), VIEW_TOPIC("c"), VIEW_KB("k"), VIEW_CHANNEL("o"), VIEW_IDEA("i"), VIEW_ARTICLE("f"), AUTHENTICATE("u"), SEARCH_IDEAS("s"), SEARCH_ARTICLES("r"), VOTE_IDEA("v"), VOTE_ARTICLE("z"), SUBMIT_TICKET("t"), SUBMIT_IDEA("d"), SUBSCRIBE_IDEA("b"), IDENTIFY("y"), COMMENT_IDEA("h"); private final String code; private Event(String code) { this.code = code; } public String getCode() { return code; } } private static class Track { public String event; public Map<String, Object> eventProps; public Track(String event, Map<String, Object> eventProps) { this.event = event; this.eventProps = eventProps; } } }