diff options
author | Hyunyoung Song <hyunyoungs@google.com> | 2016-03-08 16:55:47 -0800 |
---|---|---|
committer | Hyunyoung Song <hyunyoungs@google.com> | 2016-03-08 16:55:47 -0800 |
commit | 8fd5e938d34ee84d076b5c5d2575cc6c46c254ce (patch) | |
tree | 3aeac9ef99a4e946d861a3bf50e15d4fadb65be7 /src/com/android/launcher3/logging | |
parent | 726eb822d38ad422f37b74c4b0fc504a423ab926 (diff) | |
download | android_packages_apps_Trebuchet-8fd5e938d34ee84d076b5c5d2575cc6c46c254ce.tar.gz android_packages_apps_Trebuchet-8fd5e938d34ee84d076b5c5d2575cc6c46c254ce.tar.bz2 android_packages_apps_Trebuchet-8fd5e938d34ee84d076b5c5d2575cc6c46c254ce.zip |
Add getUserEventLogger to LauncherCallbacks
b/26494415
Change-Id: I8abaaf1269c12435a523e31bf769991018ea5c02
Diffstat (limited to 'src/com/android/launcher3/logging')
-rw-r--r-- | src/com/android/launcher3/logging/LoggerUtils.java | 117 | ||||
-rw-r--r-- | src/com/android/launcher3/logging/UserEventLogger.java | 93 |
2 files changed, 210 insertions, 0 deletions
diff --git a/src/com/android/launcher3/logging/LoggerUtils.java b/src/com/android/launcher3/logging/LoggerUtils.java new file mode 100644 index 000000000..4b30384f2 --- /dev/null +++ b/src/com/android/launcher3/logging/LoggerUtils.java @@ -0,0 +1,117 @@ +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.Stats; +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}. + * Note: switch statement cannot be replaced with reflection as proguard strips the constants + */ +public class LoggerUtils { + private static final String TAG = "LoggerUtils"; + private static final boolean DEBUG = false; + + static int getContainerType(ShortcutInfo shortcut) { + switch ((int) shortcut.container) { + case LauncherSettings.Favorites.CONTAINER_DESKTOP: return LauncherLogProto.WORKSPACE; + case LauncherSettings.Favorites.CONTAINER_HOTSEAT: return LauncherLogProto.HOTSEAT; + default: + return (int) shortcut.container; + } + } + + public static String getActionStr(LauncherLogProto.Action action) { + switch(action.touch) { + case Action.TAP: return "TAP"; + case Action.LONGPRESS: return "LONGPRESS"; + case Action.DRAGDROP: return "DRAGDROP"; + case Action.PINCH: return "PINCH"; + default: return "UNKNOWN"; + } + } + + public static String getTargetStr(Target t) { + String typeStr; + switch (t.type) { + case Target.ITEM: + return getItemStr(t); + case Target.CONTROL: + return getControlStr(t); + case Target.CONTAINER: + return getContainerStr(t); + default: + return "UNKNOWN TARGET TYPE"; + } + } + + private static String getItemStr(Target t) { + String typeStr = ""; + switch(t.itemType){ + case LauncherLogProto.APP_ICON: typeStr = "ICON"; break; + case LauncherLogProto.SHORTCUT: typeStr = "SHORTCUT"; break; + case LauncherLogProto.WIDGET: typeStr = "WIDGET"; break; + default: typeStr = "UNKNOWN"; + } + + return typeStr + " " + t.packageNameHash + " grid=(" + t.gridX + "," + t.gridY + ") " + + getContainerStr(t.parent); + } + + private static String getControlStr(Target t) { + switch(t.controlType) { + case LauncherLogProto.ALL_APPS_BUTTON: return "ALL_APPS_BUTTON"; + case LauncherLogProto.WIDGETS_BUTTON: return "WIDGETS_BUTTON"; + case LauncherLogProto.WALLPAPER_BUTTON: return "WALLPAPER_BUTTON"; + case LauncherLogProto.SETTINGS_BUTTON: return "SETTINGS_BUTTON"; + case LauncherLogProto.REMOVE_TARGET: return "REMOVE_TARGET"; + case LauncherLogProto.UNINSTALL_TARGET: return "UNINSTALL_TARGET"; + case LauncherLogProto.APPINFO_TARGET: return "APPINFO_TARGET"; + case LauncherLogProto.RESIZE_HANDLE: return "RESIZE_HANDLE"; + case LauncherLogProto.FAST_SCROLL_HANDLE: return "FAST_SCROLL_HANDLE"; + default: return "UNKNOWN"; + } + } + + private static String getContainerStr(LauncherLogProto.Target t) { + String str; + Log.d(TAG, "t.containerType" + t.containerType); + switch (t.containerType) { + case LauncherLogProto.WORKSPACE: + str = "WORKSPACE"; + break; + case LauncherLogProto.HOTSEAT: + str = "HOTSEAT"; + break; + case LauncherLogProto.FOLDER: + str = "FOLDER"; + break; + case LauncherLogProto.ALLAPPS: + str = "ALLAPPS"; + break; + case LauncherLogProto.WIDGETS: + str = "WIDGETS"; + break; + case LauncherLogProto.OVERVIEW: + str = "OVERVIEW"; + break; + case LauncherLogProto.PREDICTION: + str = "PREDICTION"; + break; + case LauncherLogProto.SEARCHRESULT: + str = "SEARCHRESULT"; + break; + default: + str = "UNKNOWN"; + } + return str + " id=" + t.pageIndex; + } +} diff --git a/src/com/android/launcher3/logging/UserEventLogger.java b/src/com/android/launcher3/logging/UserEventLogger.java index d05b68306..4e5b2c1b4 100644 --- a/src/com/android/launcher3/logging/UserEventLogger.java +++ b/src/com/android/launcher3/logging/UserEventLogger.java @@ -1,4 +1,97 @@ package com.android.launcher3.logging; +import android.os.Bundle; +import android.util.Log; + +import com.android.launcher3.ShortcutInfo; +import com.android.launcher3.Stats; +import com.android.launcher3.config.FeatureFlags; +import com.android.launcher3.userevent.nano.LauncherLogProto; + +import java.util.Locale; + public abstract class UserEventLogger { + + private String TAG = "UserEventLogger"; + private boolean DEBUG = false; + + private long mElapsedContainerMillis; + private long mElapsedSessionMillis; + private long mActionDurationMillis; + + + public final void logAppLaunch(String provider, ShortcutInfo shortcut, Bundle bundle) { + if (FeatureFlags.LAUNCHER3_LEGACY_LOGGING) return; + + LauncherLogProto.LauncherEvent event = new LauncherLogProto.LauncherEvent(); + event.action = new LauncherLogProto.Action(); + event.action.type = LauncherLogProto.Action.TOUCH; + event.action.touch = LauncherLogProto.Action.TAP; + + event.srcTarget = new LauncherLogProto.Target(); + event.srcTarget.type = LauncherLogProto.Target.ITEM; + event.srcTarget.itemType = LauncherLogProto.APP_ICON; + // TODO: package hash name should be different per device. + event.srcTarget.packageNameHash = provider.hashCode(); + + event.srcTarget.parent = new LauncherLogProto.Target(); + String subContainer = bundle.getString(Stats.SOURCE_EXTRA_SUB_CONTAINER); + + if (shortcut != null) { + event.srcTarget.parent.containerType = LoggerUtils.getContainerType(shortcut); + event.srcTarget.pageIndex = (int) shortcut.screenId; + event.srcTarget.gridX = shortcut.cellX; + event.srcTarget.gridX = shortcut.cellY; + } + if (subContainer != null) { + event.srcTarget.parent.type = LauncherLogProto.Target.CONTAINER; + if (subContainer.equals(Stats.SUB_CONTAINER_FOLDER)) { + event.srcTarget.parent.containerType = LauncherLogProto.FOLDER; + } else if (subContainer.equals(Stats.SUB_CONTAINER_ALL_APPS_A_Z)) { + event.srcTarget.parent.containerType = LauncherLogProto.ALLAPPS; + } else if (subContainer.equals(Stats.CONTAINER_HOTSEAT)) { + event.srcTarget.parent.containerType = LauncherLogProto.HOTSEAT; + } else if (subContainer.equals(Stats.SUB_CONTAINER_ALL_APPS_PREDICTION)) { + event.srcTarget.parent.containerType = LauncherLogProto.PREDICTION; + } + + if (DEBUG) { + Log.d(TAG, String.format("parent bundle: %s %s %s %s", + bundle.getString(Stats.SOURCE_EXTRA_CONTAINER), + bundle.getString(Stats.SOURCE_EXTRA_CONTAINER_PAGE), + bundle.getString(Stats.SOURCE_EXTRA_SUB_CONTAINER), + bundle.getString(Stats.SOURCE_EXTRA_SUB_CONTAINER_PAGE))); + } + } + event.elapsedContainerMillis = System.currentTimeMillis() - mElapsedContainerMillis; + event.elapsedSessionMillis = System.currentTimeMillis() - mElapsedSessionMillis; + processEvent(event); + } + + /** + * Currently logs following containers: workspace, allapps, widget tray. + */ + public final void resetElapsedContainerMillis() { + mElapsedContainerMillis = System.currentTimeMillis(); + if(DEBUG) { + Log.d(TAG, "resetElapsedContainerMillis " + mElapsedContainerMillis); + } + } + + public final void resetElapsedSessionMillis() { + mElapsedSessionMillis = System.currentTimeMillis(); + mElapsedContainerMillis = System.currentTimeMillis(); + if(DEBUG) { + Log.d(TAG, "resetElapsedSessionMillis " + mElapsedSessionMillis); + } + } + + public final void resetActionDurationMillis() { + mActionDurationMillis = System.currentTimeMillis(); + if(DEBUG) { + Log.d(TAG, "resetElapsedContainerMillis " + mElapsedContainerMillis); + } + } + + public abstract void processEvent(LauncherLogProto.LauncherEvent ev); }
\ No newline at end of file |