package org.wikipedia.analytics;
import android.support.annotation.NonNull;
import org.json.JSONObject;
import org.wikipedia.WikipediaApp;
import org.wikipedia.page.PageTitle;
import org.wikipedia.settings.Prefs;
// https://meta.wikimedia.org/wiki/Schema:MobileWikiAppShareAFact
public class ShareAFactFunnel extends Funnel {
private static final String SCHEMA_NAME = "MobileWikiAppShareAFact";
private static final int REV_ID = 12588711;
/**
* The length value of 99 is somewhat arbitrary right now. We need to restrict the
* total length of the event data somewhat to avoid the event getting dropped.
*/
private static final int MAX_LENGTH = 99;
private final String pageTitle;
private final int pageId;
private final long revisionId;
public ShareAFactFunnel(WikipediaApp app, PageTitle pageTitle, int pageId, long revisionId) {
super(app, SCHEMA_NAME, REV_ID, pageTitle.getWikiSite());
this.pageTitle = pageTitle.getDisplayText();
this.pageId = pageId;
this.revisionId = revisionId;
}
@Override
protected JSONObject preprocessData(@NonNull JSONObject eventData) {
preprocessData(eventData, "tutorialFeatureEnabled", true);
preprocessData(eventData, "tutorialShown", calculateTutorialsShown());
return super.preprocessData(eventData);
}
@NonNull
@Override
protected String getSessionTokenField() {
return "shareSessionToken";
}
private void logAction(String action, String text, ShareMode shareMode) {
if (text != null) {
text = text.substring(0, Math.min(MAX_LENGTH, text.length()));
}
log(
"action", action,
"article", pageTitle,
"pageID", pageId,
"revID", revisionId,
"text", text,
"sharemode", shareMode
);
}
private void logAction(String action, String text) {
logAction(action, text, null);
}
/** Text in the web view was highlighted. */
public void logHighlight() {
logAction("highlight", null);
}
/** The share button in the UI was tapped. */
public void logShareTap(String text) {
logAction("sharetap", text);
}
/** 'Share as image' or 'Share as text' was tapped. */
public void logShareIntent(String text, ShareMode shareMode) {
logAction("shareintent", text, shareMode);
}
/**
* 'Share as text' and 'Share as image' was shown but cancelled and neither was chosen.
*/
public void logAbandoned(String text) {
logAction("abandoned", text);
}
public enum ShareMode {
image,
text
}
private int calculateTutorialsShown() {
return !Prefs.isShareTutorialEnabled() ? 2 : !Prefs.isSelectTextTutorialEnabled() ? 1 : 0;
}
}