jenkins-bot has submitted this change and it was merged.
Change subject: Add instrumentation for ToC usage
......................................................................
Add instrumentation for ToC usage
Change-Id: I548f4dbae1e8a1e79a93e0a9f775547de87f134a
---
A wikipedia/src/main/java/org/wikipedia/analytics/ToCInteractionFunnel.java
M wikipedia/src/main/java/org/wikipedia/page/ToCHandler.java
2 files changed, 82 insertions(+), 7 deletions(-)
Approvals:
Brion VIBBER: Looks good to me, approved
jenkins-bot: Verified
diff --git
a/wikipedia/src/main/java/org/wikipedia/analytics/ToCInteractionFunnel.java
b/wikipedia/src/main/java/org/wikipedia/analytics/ToCInteractionFunnel.java
new file mode 100644
index 0000000..2b9b4fb
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikipedia/analytics/ToCInteractionFunnel.java
@@ -0,0 +1,63 @@
+package org.wikipedia.analytics;
+
+import android.content.*;
+import android.preference.*;
+import org.json.*;
+import org.wikipedia.*;
+
+import java.util.*;
+
+public class ToCInteractionFunnel extends Funnel {
+ private static final String SCHEMA_NAME = "MobileWikiAppToCInteraction";
+ private static final int REV_ID = 8461467;
+
+ private static final String APP_ID_PREF_NAME = "ANALYTICS_APP_ID_FOR_ToC";
+
+ private final String appInstallToCInteractionID;
+ private final Site site;
+
+ public ToCInteractionFunnel(WikipediaApp app, Site site) {
+ super(app, SCHEMA_NAME, REV_ID);
+ SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(app);
+ if (prefs.contains(APP_ID_PREF_NAME)) {
+ appInstallToCInteractionID = prefs.getString(APP_ID_PREF_NAME,
null);
+ } else {
+ appInstallToCInteractionID = UUID.randomUUID().toString();
+ prefs.edit().putString(APP_ID_PREF_NAME,
appInstallToCInteractionID).commit();
+ }
+
+ this.site = site;
+ }
+
+ @Override
+ protected JSONObject preprocessData(JSONObject eventData) {
+ try {
+ eventData.put("tocInteractionToken", appInstallToCInteractionID);
+ } catch (JSONException e) {
+ throw new RuntimeException(e);
+ }
+ return eventData;
+ }
+
+ protected void log(Object... params) {
+ super.log(site, params);
+ }
+
+ public void logOpen() {
+ log(
+ "action", "open"
+ );
+ }
+
+ public void logClose() {
+ log(
+ "action", "close"
+ );
+ }
+
+ public void logClick() {
+ log(
+ "action", "click"
+ );
+ }
+}
diff --git a/wikipedia/src/main/java/org/wikipedia/page/ToCHandler.java
b/wikipedia/src/main/java/org/wikipedia/page/ToCHandler.java
index b8d4f48..e985cc6 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/ToCHandler.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/ToCHandler.java
@@ -9,6 +9,7 @@
import com.nineoldandroids.view.ViewHelper;
import org.json.*;
import org.wikipedia.*;
+import org.wikipedia.analytics.*;
import org.wikipedia.bridge.*;
import org.wikipedia.styledviews.DisableableDrawerLayout;
@@ -17,13 +18,18 @@
public class ToCHandler {
private final ListView tocList;
private final ProgressBar tocProgress;
- private Page page;
- private final View quickReturnBar;
private final CommunicationBridge bridge;
private final DisableableDrawerLayout slidingPane;
+ private ToCInteractionFunnel funnel;
+
+ /**
+ * Flag to track if the drawer is closing because a link was clicked.
+ * Used to make sure that we don't track closes that are caused by
+ * the user clicking on a section.
+ */
+ private boolean wasClicked = false;
public ToCHandler(final DisableableDrawerLayout slidingPane, final View
quickReturnBar, final CommunicationBridge bridge) {
- this.quickReturnBar = quickReturnBar;
this.bridge = bridge;
this.slidingPane = slidingPane;
@@ -39,12 +45,17 @@
prevTranslateY = ViewHelper.getTranslationY(quickReturnBar);
bridge.sendMessage("requestCurrentSection", new JSONObject());
ViewAnimations.ensureTranslationY(quickReturnBar,
-quickReturnBar.getHeight());
+ funnel.logOpen();
+ wasClicked = false;
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
ViewAnimations.ensureTranslationY(quickReturnBar, (int)
prevTranslateY);
+ if (!wasClicked) {
+ funnel.logClose();
+ }
}
@Override
@@ -67,10 +78,10 @@
}
public void setupToC(final Page page) {
- this.page = page;
tocProgress.setVisibility(View.GONE);
tocList.setVisibility(View.VISIBLE);
+ funnel = new
ToCInteractionFunnel((WikipediaApp)slidingPane.getContext().getApplicationContext(),
page.getTitle().getSite());
bridge.addListener("currentSectionResponse", new
CommunicationBridge.JSEventListener() {
@Override
public void onMessage(String messageType, JSONObject
messagePayload) {
@@ -91,6 +102,8 @@
@Override
public void onClick(View v) {
scrollToSection(page.getSections().get(0));
+ wasClicked = true;
+ funnel.logClick();
hide();
}
});
@@ -101,6 +114,8 @@
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
Section section = (Section)
parent.getAdapter().getItem(position);
scrollToSection(section);
+ wasClicked = true;
+ funnel.logClick();
hide();
}
});
@@ -124,8 +139,6 @@
private static final class ToCAdapter extends BaseAdapter {
private final ArrayList<Section> sections;
- private final PageTitle title;
-
private ToCAdapter(Page page) {
sections = new ArrayList<Section>();
@@ -134,7 +147,6 @@
sections.add(s);
}
}
- this.title = page.getTitle();
}
@Override
--
To view, visit https://gerrit.wikimedia.org/r/132627
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I548f4dbae1e8a1e79a93e0a9f775547de87f134a
Gerrit-PatchSet: 3
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits