Log time difference between power button presses for gesture

Bug: 24304031
Change-Id: Iab755268ee6d5c0c00836a6f68e65a74286074cf
diff --git a/services/core/java/com/android/server/GestureLauncherService.java b/services/core/java/com/android/server/GestureLauncherService.java
index bd7d4b2..7c85001 100644
--- a/services/core/java/com/android/server/GestureLauncherService.java
+++ b/services/core/java/com/android/server/GestureLauncherService.java
@@ -101,8 +101,7 @@
      * Whether camera double tap power button gesture is currently enabled;
      */
     private boolean mCameraDoubleTapPowerEnabled;
-    private long mLastPowerDownWhileNonInteractive;
-    private long mLastPowerDownWhileInteractive;
+    private long mLastPowerDown;
 
     public GestureLauncherService(Context context) {
         super(context);
@@ -252,35 +251,32 @@
     public boolean interceptPowerKeyDown(KeyEvent event, boolean interactive) {
         boolean launched = false;
         boolean intercept = false;
+        long doubleTapInterval;
         synchronized (this) {
-            if (!mCameraDoubleTapPowerEnabled) {
-                mLastPowerDownWhileNonInteractive = 0;
-                mLastPowerDownWhileInteractive = 0;
-                return false;
-            }
-            if (event.getEventTime() - mLastPowerDownWhileNonInteractive
-                    < CAMERA_POWER_DOUBLE_TAP_TIME_MS) {
+            doubleTapInterval = event.getEventTime() - mLastPowerDown;
+            if (mCameraDoubleTapPowerEnabled
+                    && doubleTapInterval < CAMERA_POWER_DOUBLE_TAP_TIME_MS) {
                 launched = true;
-                intercept = true;
-            } else if (event.getEventTime() - mLastPowerDownWhileInteractive
-                    < CAMERA_POWER_DOUBLE_TAP_TIME_MS) {
-                launched = true;
+                intercept = interactive;
             }
-            mLastPowerDownWhileNonInteractive = interactive ? 0 : event.getEventTime();
-            mLastPowerDownWhileInteractive = interactive ? event.getEventTime() : 0;
+            mLastPowerDown = event.getEventTime();
         }
         if (launched) {
             Slog.i(TAG, "Power button double tap gesture detected, launching camera.");
-            launched = handleCameraLaunchGesture(false /* useWakelock */,
-                    MetricsLogger.ACTION_DOUBLE_TAP_POWER_CAMERA_GESTURE);
+            launched = handleCameraLaunchGesture(false /* useWakelock */);
+            if (launched) {
+                MetricsLogger.action(mContext, MetricsLogger.ACTION_DOUBLE_TAP_POWER_CAMERA_GESTURE,
+                        (int) doubleTapInterval);
+            }
         }
+        MetricsLogger.histogram(mContext, "power_double_tap_interval", (int) doubleTapInterval);
         return intercept && launched;
     }
 
     /**
      * @return true if camera was launched, false otherwise.
      */
-    private boolean handleCameraLaunchGesture(boolean useWakelock, int logCategory) {
+    private boolean handleCameraLaunchGesture(boolean useWakelock) {
         boolean userSetupComplete = Settings.Secure.getInt(mContext.getContentResolver(),
                 Settings.Secure.USER_SETUP_COMPLETE, 0) != 0;
         if (!userSetupComplete) {
@@ -300,7 +296,6 @@
         StatusBarManagerInternal service = LocalServices.getService(
                 StatusBarManagerInternal.class);
         service.onCameraLaunchGestureDetected();
-        MetricsLogger.action(mContext, logCategory);
         return true;
     }
 
@@ -339,8 +334,8 @@
                     Slog.d(TAG, String.format("Received a camera launch event: " +
                             "values=[%.4f, %.4f, %.4f].", values[0], values[1], values[2]));
                 }
-                if (handleCameraLaunchGesture(true /* useWakelock */,
-                        MetricsLogger.ACTION_WIGGLE_CAMERA_GESTURE)) {
+                if (handleCameraLaunchGesture(true /* useWakelock */)) {
+                    MetricsLogger.action(mContext, MetricsLogger.ACTION_WIGGLE_CAMERA_GESTURE);
                     trackCameraLaunchEvent(event);
                 }
                 return;