Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(368)

Unified Diff: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java

Issue 53283003: Added UMA stat for tracking accidental navigations on double tap. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
index e4075f56ebd0d9943cb0317218848331c3cbefb3..6037b4a1a8649d7e8bfadc35251de9ee73d28a2c 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
@@ -23,6 +23,7 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.ResultReceiver;
+import android.os.SystemClock;
import android.provider.Browser;
import android.provider.Settings;
import android.text.Editable;
@@ -67,6 +68,7 @@ import org.chromium.content.browser.input.InputMethodManagerWrapper;
import org.chromium.content.browser.input.InsertionHandleController;
import org.chromium.content.browser.input.SelectPopupDialog;
import org.chromium.content.browser.input.SelectionHandleController;
+import org.chromium.content.common.CommandLine;
import org.chromium.content.common.TraceEvent;
import org.chromium.ui.ViewAndroid;
import org.chromium.ui.ViewAndroidDelegate;
@@ -451,6 +453,12 @@ public class ContentViewCore
private ViewAndroid mViewAndroid;
+ // Used for tracking UMA ActionAfterDoubleTap to tell user's immediate action after
+ // a double tap.
+ private long mLastDoubleTapTime = 0;
+ private static final long ACTION_AFTER_DOUBLE_TAP_WINDOW = 5000;
Rick Byers 2013/10/31 17:53:10 add an _MS suffix to make it clear this is millise
bokan 2013/10/31 22:31:58 Done.
+ private static boolean mHasClickDelay;
+
/**
* Constructs a new ContentViewCore. Embedders must call initialize() after constructing
@@ -768,6 +776,8 @@ public class ContentViewCore
mPid = nativeGetCurrentRenderProcessId(mNativeContentViewCore);
sendOrientationChangeEvent();
+
+ mHasClickDelay = !CommandLine.getInstance().hasSwitch(CommandLine.DISABLE_CLICK_DELAY);
Rick Byers 2013/10/31 17:53:10 If you move the logic in this file into ContentVie
bokan 2013/10/31 22:31:58 Done.
}
@CalledByNative
@@ -1307,12 +1317,47 @@ public class ContentViewCore
}
}
+ // Enum for immediate user action after a double tap UMA stat.
+ // Be sure to update histograms.xml and the SendActionAfterDoubleTapUma
+ // native method if you change these
+ public static class ActionAfterDoubleTap {
+ public static final int NAVIGATE_BACK = 0;
+ public static final int NAVIGATE_STOP = 1;
+ public static final int NO_ACTION = 2;
+ }
+
+ public void updateActionAfterDoubleTapUMA(int actionType) {
+ long now = SystemClock.uptimeMillis();
+ if (mLastDoubleTapTime > 0
+ && (now - mLastDoubleTapTime) < ACTION_AFTER_DOUBLE_TAP_WINDOW) {
+ nativeSendActionAfterDoubleTapUma(
+ mNativeContentViewCore,
+ actionType,
+ mHasClickDelay);
+ }
+
+ mLastDoubleTapTime = 0;
+ }
+
+ private void updateDoubleTapUmaTimer(long curTimeMs) {
+ if (mLastDoubleTapTime > 0
+ && curTimeMs - mLastDoubleTapTime >= ACTION_AFTER_DOUBLE_TAP_WINDOW) {
+ // Time expired, user took no action (that we care about)
+ nativeSendActionAfterDoubleTapUma(
+ mNativeContentViewCore,
+ ActionAfterDoubleTap.NO_ACTION,
+ mHasClickDelay);
+ mLastDoubleTapTime = 0;
+ }
+ }
+
@Override
public boolean sendGesture(int type, long timeMs, int x, int y, Bundle b) {
if (offerGestureToEmbedder(type)) return false;
if (mNativeContentViewCore == 0) return false;
updateTextHandlesForGesture(type);
updateGestureStateListener(type, b);
+ updateDoubleTapUmaTimer(timeMs);
Rick Byers 2013/10/31 17:53:10 what exactly is this timeMs here - the original ev
bokan 2013/10/31 22:31:58 It was supposed to be the current time. I've chang
switch (type) {
case ContentViewGestureHandler.GESTURE_SHOW_PRESSED_STATE:
nativeShowPressState(mNativeContentViewCore, timeMs, x, y);
@@ -1324,6 +1369,7 @@ public class ContentViewCore
nativeTapDown(mNativeContentViewCore, timeMs, x, y);
return true;
case ContentViewGestureHandler.GESTURE_DOUBLE_TAP:
+ mLastDoubleTapTime = timeMs;
Rick Byers 2013/10/31 17:53:10 If we didn't report an UMA above but mLastDoubleTa
bokan 2013/10/31 22:31:58 Done.
nativeDoubleTap(mNativeContentViewCore, timeMs, x, y);
return true;
case ContentViewGestureHandler.GESTURE_SINGLE_TAP_UP:
@@ -3352,4 +3398,7 @@ public class ContentViewCore
private native void nativeSetAccessibilityEnabled(
int nativeContentViewCoreImpl, boolean enabled);
+
+ private native void nativeSendActionAfterDoubleTapUma(int nativeContentViewCoreImpl,
+ int type, boolean hasDelay);
}

Powered by Google App Engine
This is Rietveld 408576698