From 5aa2714959405043639cb2d0b8d9ab8c6eef0bd2 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Thu, 21 Jul 2016 11:48:37 -0700 Subject: Add user event log for deep shortcuts and all apps opening interaction. b/30114798 Change-Id: I11ad99d0bc1983294d6a5329b98917cb87250823 --- src/com/android/launcher3/Launcher.java | 5 +++ .../allapps/AllAppsTransitionController.java | 9 +++++ src/com/android/launcher3/logging/LoggerUtils.java | 39 +++++++++++++++++----- .../launcher3/logging/UserEventDispatcher.java | 35 ++++++++++++------- .../shortcuts/DeepShortcutsContainer.java | 8 ++--- 5 files changed, 70 insertions(+), 26 deletions(-) (limited to 'src/com/android') diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 73cd800ca..f57753bde 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -117,6 +117,7 @@ import com.android.launcher3.model.WidgetsModel; import com.android.launcher3.pageindicators.PageIndicator; import com.android.launcher3.shortcuts.DeepShortcutManager; import com.android.launcher3.shortcuts.DeepShortcutsContainer; +import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.MultiHashMap; import com.android.launcher3.util.PackageManagerHelper; @@ -2590,6 +2591,8 @@ public class Launcher extends Activity protected void onClickAllAppsButton(View v) { if (LOGD) Log.d(TAG, "onClickAllAppsButton"); if (!isAppsViewVisible()) { + mUserEventDispatcher.logActionOnControl(LauncherLogProto.Action.TAP, + LauncherLogProto.ALL_APPS_BUTTON); showAppsView(true /* animated */, false /* resetListToTop */, true /* updatePredictedApps */, false /* focusSearchBar */); } @@ -2598,6 +2601,8 @@ public class Launcher extends Activity protected void onLongClickAllAppsButton(View v) { if (LOGD) Log.d(TAG, "onLongClickAllAppsButton"); if (!isAppsViewVisible()) { + mUserEventDispatcher.logActionOnControl(LauncherLogProto.Action.LONGPRESS, + LauncherLogProto.ALL_APPS_BUTTON); showAppsView(true /* animated */, false /* resetListToTop */, true /* updatePredictedApps */, true /* focusSearchBar */); } diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index 03b3107aa..136308bb1 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -22,6 +22,7 @@ import com.android.launcher3.PagedView; import com.android.launcher3.R; import com.android.launcher3.Workspace; import com.android.launcher3.Workspace.Direction; +import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.util.TouchController; /** @@ -210,6 +211,10 @@ public class AllAppsTransitionController implements TouchController, VerticalPul calculateDuration(velocity, mAppsView.getTranslationY()); if (!mLauncher.isAllAppsVisible()) { + mLauncher.getUserEventDispatcher().logActionOnContainer( + LauncherLogProto.Action.FLING, + LauncherLogProto.Action.UP, + LauncherLogProto.HOTSEAT); mLauncher.showAppsView(true, true, false, false); } else { animateToAllApps(mCurrentAnimation, mAnimationDuration, true); @@ -234,6 +239,10 @@ public class AllAppsTransitionController implements TouchController, VerticalPul } else { calculateDuration(velocity, Math.abs(mAppsView.getTranslationY())); if (!mLauncher.isAllAppsVisible()) { + mLauncher.getUserEventDispatcher().logActionOnContainer( + LauncherLogProto.Action.SWIPE, + LauncherLogProto.Action.UP, + LauncherLogProto.HOTSEAT); mLauncher.showAppsView(true, true, false, false); } else { animateToAllApps(mCurrentAnimation, mAnimationDuration, true); diff --git a/src/com/android/launcher3/logging/LoggerUtils.java b/src/com/android/launcher3/logging/LoggerUtils.java index 584e38e9e..9e927218b 100644 --- a/src/com/android/launcher3/logging/LoggerUtils.java +++ b/src/com/android/launcher3/logging/LoggerUtils.java @@ -1,15 +1,9 @@ package com.android.launcher3.logging; -import android.os.Bundle; -import android.util.Log; - -import com.android.launcher3.LauncherSettings; -import com.android.launcher3.ShortcutInfo; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Action; import com.android.launcher3.userevent.nano.LauncherLogProto.Target; - /** * Debugging helper methods. * toString() cannot be overriden inside auto generated {@link LauncherLogProto}. @@ -24,12 +18,17 @@ public class LoggerUtils { case Action.LONGPRESS: return "LONGPRESS"; case Action.DRAGDROP: return "DRAGDROP"; case Action.PINCH: return "PINCH"; + case Action.SWIPE: return "SWIPE"; + case Action.FLING: return "FLING"; default: return "UNKNOWN"; } } public static String getTargetStr(Target t) { - String typeStr; + String typeStr = ""; + if (t == null){ + return typeStr; + } switch (t.type) { case Target.ITEM: return getItemStr(t); @@ -44,6 +43,9 @@ public class LoggerUtils { private static String getItemStr(Target t) { String typeStr = ""; + if (t == null){ + return typeStr; + } switch(t.itemType){ case LauncherLogProto.APP_ICON: typeStr = "ICON"; break; case LauncherLogProto.SHORTCUT: typeStr = "SHORTCUT"; break; @@ -58,6 +60,9 @@ public class LoggerUtils { } private static String getControlStr(Target t) { + if (t == null){ + return ""; + } switch(t.controlType) { case LauncherLogProto.ALL_APPS_BUTTON: return "ALL_APPS_BUTTON"; case LauncherLogProto.WIDGETS_BUTTON: return "WIDGETS_BUTTON"; @@ -72,8 +77,10 @@ public class LoggerUtils { } private static String getContainerStr(LauncherLogProto.Target t) { - String str; - Log.d(TAG, "t.containerType" + t.containerType); + String str = ""; + if (t == null) { + return str; + } switch (t.containerType) { case LauncherLogProto.WORKSPACE: str = "WORKSPACE"; @@ -122,4 +129,18 @@ public class LoggerUtils { event.action.type = actionType; return event; } + + public static LauncherLogProto.LauncherEvent initLauncherEvent( + int actionType, + int childTargetType){ + LauncherLogProto.LauncherEvent event = new LauncherLogProto.LauncherEvent(); + + event.srcTarget = new LauncherLogProto.Target[1]; + event.srcTarget[0] = new LauncherLogProto.Target(); + event.srcTarget[0].type = childTargetType; + + event.action = new LauncherLogProto.Action(); + event.action.type = actionType; + return event; + } } diff --git a/src/com/android/launcher3/logging/UserEventDispatcher.java b/src/com/android/launcher3/logging/UserEventDispatcher.java index 0deee57ca..f67f48791 100644 --- a/src/com/android/launcher3/logging/UserEventDispatcher.java +++ b/src/com/android/launcher3/logging/UserEventDispatcher.java @@ -37,8 +37,8 @@ import java.util.Locale; public class UserEventDispatcher { private static final boolean DEBUG_LOGGING = false; - private final static int MAXIMUM_VIEW_HIERARCHY_LEVEL = 5; + /** * Implemented by containers to provide a launch source for a given child. */ @@ -46,10 +46,11 @@ public class UserEventDispatcher { /** * Copies data from the source to the destination proto. - * @param v source of the data - * @param info source of the data - * @param target dest of the data - * @param targetParent dest of the data + * + * @param v source of the data + * @param info source of the data + * @param target dest of the data + * @param targetParent dest of the data */ void fillInLaunchSourceData(View v, ItemInfo info, Target target, Target targetParent); } @@ -126,12 +127,23 @@ public class UserEventDispatcher { dispatchUserEvent(createLauncherEvent(v, intent), intent); } - public void logTap(View v) { - // TODO + public void logActionOnControl(int action, int controlType) { + LauncherEvent event = LoggerUtils.initLauncherEvent(Action.TOUCH, Target.CONTROL); + event.action.touch = action; + event.srcTarget[0].controlType = controlType; + event.elapsedContainerMillis = System.currentTimeMillis() - mElapsedContainerMillis; + event.elapsedSessionMillis = System.currentTimeMillis() - mElapsedSessionMillis; + dispatchUserEvent(event, null); } - public void logLongPress() { - // TODO + public void logActionOnContainer(int action, int dir, int containerType) { + LauncherEvent event = LoggerUtils.initLauncherEvent(Action.TOUCH, Target.CONTAINER); + event.action.touch = action; + event.action.dir = dir; + event.srcTarget[0].containerType = containerType; + event.elapsedContainerMillis = System.currentTimeMillis() - mElapsedContainerMillis; + event.elapsedSessionMillis = System.currentTimeMillis() - mElapsedSessionMillis; + dispatchUserEvent(event, null); } public void logDragNDrop() { @@ -152,7 +164,6 @@ public class UserEventDispatcher { public final void resetElapsedSessionMillis() { mElapsedSessionMillis = System.currentTimeMillis(); mElapsedContainerMillis = System.currentTimeMillis(); - } public final void resetActionDurationMillis() { @@ -164,8 +175,8 @@ public class UserEventDispatcher { Log.d("UserEvent", String.format(Locale.US, "action:%s\nchild:%s\nparent:%s\nelapsed container %d ms session %d ms", LoggerUtils.getActionStr(ev.action), - LoggerUtils.getTargetStr(ev.srcTarget[0]), - LoggerUtils.getTargetStr(ev.srcTarget[1]), + LoggerUtils.getTargetStr(ev.srcTarget != null ? ev.srcTarget[0] : null), + LoggerUtils.getTargetStr(ev.srcTarget.length > 1 ? ev.srcTarget[1] : null), ev.elapsedContainerMillis, ev.elapsedSessionMillis)); } diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java index f91665f86..9f59e06b0 100644 --- a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java +++ b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java @@ -486,10 +486,8 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC @Override public void fillInLaunchSourceData(View v, ItemInfo info, Target target, Target targetParent) { - target.itemType = LauncherLogProto.SHORTCUT; // TODO: change to DYNAMIC_SHORTCUT - target.gridX = info.cellX; - target.gridY = info.cellY; - target.pageIndex = 0; - targetParent.containerType = LauncherLogProto.FOLDER; // TODO: change to DYNAMIC_SHORTCUTS + target.itemType = LauncherLogProto.DEEPSHORTCUT; + // TODO: add target.rank + targetParent.containerType = LauncherLogProto.DEEPSHORTCUTS; } } -- cgit v1.2.3