package com.uservoice.uservoicesdk.deflection; import android.util.Log; import com.uservoice.uservoicesdk.babayaga.Babayaga; import com.uservoice.uservoicesdk.model.Article; import com.uservoice.uservoicesdk.model.BaseModel; import com.uservoice.uservoicesdk.model.Suggestion; import com.uservoice.uservoicesdk.rest.RestMethod; import com.uservoice.uservoicesdk.rest.RestResult; import com.uservoice.uservoicesdk.rest.RestTask; import com.uservoice.uservoicesdk.rest.RestTaskCallback; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; public class Deflection { private static int interactionIdentifier = Integer.parseInt(String.valueOf(new Date().getTime()).substring(4)); private static String searchText; public static void trackDeflection(String kind, BaseModel deflector) { Map<String, String> params = deflectionParams(); params.put("kind", kind); params.put("deflector_id", String.valueOf(deflector.getId())); params.put("deflector_type", (deflector instanceof Article) ? "Faq" : "Suggestion"); new RestTask(RestMethod.GET, "/clients/omnibox/deflections/upsert.json", params, getCallback()).execute(); } public static void trackSearchDeflection(List<BaseModel> results) { Map<String, String> params = deflectionParams(); params.put("kind", "list"); List<BasicNameValuePair> list = RestTask.paramsToList(params); for (BaseModel model : results) { if (model instanceof Suggestion) list.add(new BasicNameValuePair("suggestion_ids[]", String.valueOf(model.getId()))); else if (model instanceof Article) list.add(new BasicNameValuePair("faq_ids[]", String.valueOf(model.getId()))); } new RestTask(RestMethod.GET, "/clients/omnibox/deflections/list_view.json", list, getCallback()).execute(); } public static void setSearchText(String query) { if (query.equals(searchText)) return; searchText = query; interactionIdentifier += 1; } private static RestTaskCallback getCallback() { return new RestTaskCallback(null) { @Override public void onError(RestResult result) { Log.e("UV", "Failed sending deflection: " + result.getMessage()); } @Override public void onComplete(JSONObject result) throws JSONException { Log.d("UV", result.toString()); } }; } private static Map<String, String> deflectionParams() { Map<String, String> params = new HashMap<String, String>(); params.put("uvts", Babayaga.getUvts()); params.put("channel", "android"); params.put("search_term", searchText); params.put("interaction_identifier", String.valueOf(interactionIdentifier)); return params; } }