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

Reply via email to