Bug 1251340 - Add probes for entering / exiting bookmark folders r?margaret draft
authorAndrzej Hunt <ahunt@mozilla.com>
Thu, 21 Apr 2016 16:54:06 +0200
changeset 362647 e2a982de69458757e5c873f5dffcfe9f1ac28770
parent 362646 00ecd5d8bbe78c6f6969edaa54ab1ce0a722dbbc
child 519851 60ad03c150d5a13b8931fb092f95e73a077f7f2b
push id17004
push userahunt@mozilla.com
push dateMon, 02 May 2016 21:06:39 +0000
reviewersmargaret
bugs1251340
milestone49.0a1
Bug 1251340 - Add probes for entering / exiting bookmark folders r?margaret MozReview-Commit-ID: 202wvJHy6Qn
mobile/android/base/java/org/mozilla/gecko/home/BookmarksListView.java
--- a/mobile/android/base/java/org/mozilla/gecko/home/BookmarksListView.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/BookmarksListView.java
@@ -1,16 +1,17 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ /* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 package org.mozilla.gecko.home;
 
 import java.util.EnumSet;
+import java.util.List;
 
 import android.util.Log;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.Telemetry;
 import org.mozilla.gecko.TelemetryContract;
 import org.mozilla.gecko.db.BrowserContract;
 import org.mozilla.gecko.db.BrowserContract.Bookmarks;
 import org.mozilla.gecko.home.HomePager.OnUrlOpenListener;
@@ -59,23 +60,76 @@ public class BookmarksListView extends H
                 if (action == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
                     return getBookmarksListAdapter().moveToParentFolder();
                 }
                 return false;
             }
         });
     }
 
+    /**
+     * Get the appropriate telemetry extra for a given folder.
+     *
+     * baseFolderID is the ID of the first-level folder in the parent stack, i.e. the first folder
+     * that was selected from the root hierarchy (e.g. Desktop, Reading List, or any mobile first-level
+     * subfolder). If the current folder is a first-level folder, then the fixed root ID may be used
+     * instead.
+     *
+     * We use baseFolderID only to distinguish whether or not we're currently in a desktop subfolder.
+     * If it isn't equal to FAKE_DESKTOP_FOLDER_ID we know we're in a mobile subfolder, or one
+     * of the smartfolders.
+     */
+    private String getTelemetryExtraForFolder(int folderID, int baseFolderID, int stackDepth) {
+        if (folderID == Bookmarks.FAKE_DESKTOP_FOLDER_ID) {
+            return "folder_desktop";
+        } else if (folderID == Bookmarks.FIXED_SCREENSHOT_FOLDER_ID) {
+            return "folder_screenshots";
+        } else if (folderID == Bookmarks.FAKE_READINGLIST_SMARTFOLDER_ID) {
+            return "folder_reading_list";
+        } else {
+            // The stack depth is 2 for either the fake desktop folder, or any subfolder of mobile
+            // bookmarks, we subtract these offsets so that any direct subfolder of mobile
+            // has a level equal to 1. (Desktop folders will be one level deeper due to the
+            // fake desktop folder, hence subtract 2.)
+            if (baseFolderID == Bookmarks.FAKE_DESKTOP_FOLDER_ID) {
+                return "folder_desktop_subfolder_" + (stackDepth - 2);
+            } else {
+                return "folder_mobile_subfolder_" + (stackDepth - 1);
+            }
+        }
+    }
+
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         final BookmarksListAdapter adapter = getBookmarksListAdapter();
         if (adapter.isShowingChildFolder()) {
             if (position == 0) {
                 // If we tap on an opened folder, move back to parent folder.
+
+                final List<BookmarksListAdapter.FolderInfo> parentStack = ((BookmarksListAdapter) getAdapter()).getParentStack();
+                if (parentStack.size() < 2) {
+                    throw new IllegalStateException("Cannot move to parent folder if we are already in the root folder");
+                }
+
+                // The first item (top of stack) is the current folder, we're returning to the next one
+                BookmarksListAdapter.FolderInfo folder = parentStack.get(1);
+                final int parentID = folder.id;
+                final int baseFolderID;
+                if (parentStack.size() > 2) {
+                    baseFolderID = parentStack.get(parentStack.size() - 2).id;
+                } else {
+                    baseFolderID = Bookmarks.FIXED_ROOT_ID;
+                }
+
+                final String extra = getTelemetryExtraForFolder(parentID, baseFolderID, parentStack.size() - 1);
+
+                // Move to parent _after_ retrieving stack information
                 adapter.moveToParentFolder();
+
+                Telemetry.sendUIEvent(TelemetryContract.Event.SHOW, TelemetryContract.Method.LIST_ITEM, extra);
                 return;
             }
 
             // Accounting for the folder view.
             position--;
         }
 
         final Cursor cursor = adapter.getCursor();
@@ -94,16 +148,28 @@ public class BookmarksListView extends H
         }
 
         int type = cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks.TYPE));
         if (type == Bookmarks.TYPE_FOLDER) {
             // If we're clicking on a folder, update adapter to move to that folder
             final int folderId = cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks._ID));
             final String folderTitle = adapter.getFolderTitle(parent.getContext(), cursor);
             adapter.moveToChildFolder(folderId, folderTitle);
+
+            final List<BookmarksListAdapter.FolderInfo> parentStack = ((BookmarksListAdapter) getAdapter()).getParentStack();
+
+            final int baseFolderID;
+            if (parentStack.size() > 2) {
+                baseFolderID = parentStack.get(parentStack.size() - 2).id;
+            } else {
+                baseFolderID = Bookmarks.FIXED_ROOT_ID;
+            }
+
+            final String extra = getTelemetryExtraForFolder(folderId, baseFolderID, parentStack.size() + 1);
+            Telemetry.sendUIEvent(TelemetryContract.Event.SHOW, TelemetryContract.Method.LIST_ITEM, extra);
         } else {
             // Otherwise, just open the URL
             final String url = cursor.getString(cursor.getColumnIndexOrThrow(Bookmarks.URL));
 
             Telemetry.sendUIEvent(TelemetryContract.Event.LOAD_URL, TelemetryContract.Method.LIST_ITEM, "bookmarks");
             Telemetry.addToHistogram("FENNEC_LOAD_SAVED_PAGE", NetworkUtils.isConnected(getContext()) ? 2 : 3);
 
             // This item is a TwoLinePageRow, so we allow switch-to-tab.