package com.android.launcher3.logging;
import android.view.View;
import com.android.launcher3.ButtonDropTarget;
import com.android.launcher3.DeleteDropTarget;
import com.android.launcher3.InfoDropTarget;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.UninstallDropTarget;
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";
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";
case Action.SWIPE: return "SWIPE";
case Action.FLING: return "FLING";
default: return "UNKNOWN";
}
}
public static String getTargetStr(Target t) {
String typeStr = "";
if (t == null){
return 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 = "";
if (t == null){
return typeStr;
}
switch(t.itemType){
case LauncherLogProto.APP_ICON: typeStr = "APPICON"; break;
case LauncherLogProto.SHORTCUT: typeStr = "SHORTCUT"; break;
case LauncherLogProto.WIDGET: typeStr = "WIDGET"; break;
case LauncherLogProto.DEEPSHORTCUT: typeStr = "DEEPSHORTCUT"; break;
case LauncherLogProto.FOLDER_ICON: typeStr = "FOLDERICON"; break;
case LauncherLogProto.SEARCHBOX: typeStr = "SEARCHBOX"; break;
default: typeStr = "UNKNOWN";
}
if (t.packageNameHash != 0) {
typeStr += ", packageHash=" + t.packageNameHash;
}
if (t.componentHash != 0) {
typeStr += ", componentHash=" + t.componentHash;
}
if (t.intentHash != 0) {
typeStr += ", intentHash=" + t.intentHash;
}
if (t.spanX != 0) {
typeStr += ", spanX=" + t.spanX;
}
return typeStr += ", grid=(" + t.gridX + "," + t.gridY + "), id=" + t.pageIndex;
}
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";
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";
default: return "UNKNOWN";
}
}
private static String getContainerStr(LauncherLogProto.Target t) {
String str = "";
if (t == null) {
return str;
}
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;
case LauncherLogProto.DEEPSHORTCUTS:
str = "DEEPSHORTCUTS";
break;
default:
str = "UNKNOWN";
}
return str + " id=" + t.pageIndex;
}
/**
* Used for launching an event by tapping on an icon.
*/
public static LauncherLogProto.LauncherEvent initLauncherEvent(
int actionType,
View v,
int parentTargetType){
LauncherLogProto.LauncherEvent event = new LauncherLogProto.LauncherEvent();
event.srcTarget = new LauncherLogProto.Target[2];
event.srcTarget[0] = initTarget(v);
event.srcTarget[1] = new LauncherLogProto.Target();
event.srcTarget[1].type = parentTargetType;
event.action = new LauncherLogProto.Action();
event.action.type = actionType;
return event;
}
/**
* Used for clicking on controls and buttons.
*/
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;
}
/**
* Used for drag and drop interaction.
*/
public static LauncherLogProto.LauncherEvent initLauncherEvent(
int actionType,
View v,
ItemInfo info,
int parentSrcTargetType,
View parentDestTargetType){
LauncherLogProto.LauncherEvent event = new LauncherLogProto.LauncherEvent();
event.srcTarget = new LauncherLogProto.Target[2];
event.srcTarget[0] = initTarget(v, info);
event.srcTarget[1] = new LauncherLogProto.Target();
event.srcTarget[1].type = parentSrcTargetType;
event.destTarget = new LauncherLogProto.Target[2];
event.destTarget[0] = initTarget(v, info);
event.destTarget[1] = initDropTarget(parentDestTargetType);
event.action = new LauncherLogProto.Action();
event.action.type = actionType;
return event;
}
private static Target initTarget(View v, ItemInfo info) {
Target t = new LauncherLogProto.Target();
t.type = Target.ITEM;
switch (info.itemType) {
case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION:
t.itemType = LauncherLogProto.APP_ICON;
break;
case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
t.itemType = LauncherLogProto.SHORTCUT;
break;
case LauncherSettings.Favorites.ITEM_TYPE_FOLDER:
t.itemType = LauncherLogProto.FOLDER_ICON;
break;
case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
t.itemType = LauncherLogProto.WIDGET;
break;
case LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT:
t.itemType = LauncherLogProto.DEEPSHORTCUT;
break;
}
return t;
}
private static Target initDropTarget(View v) {
Target t = new LauncherLogProto.Target();
t.type = (v instanceof ButtonDropTarget)? Target.CONTROL : Target.CONTAINER;
if (t.type == Target.CONTAINER) {
return t;
}
if (v instanceof InfoDropTarget) {
t.controlType = LauncherLogProto.APPINFO_TARGET;
} else if (v instanceof UninstallDropTarget) {
t.controlType = LauncherLogProto.UNINSTALL_TARGET;
} else if (v instanceof DeleteDropTarget) {
t.controlType = LauncherLogProto.REMOVE_TARGET;
}
return t;
}
private static Target initTarget(View v) {
Target t = new LauncherLogProto.Target();
t.type = Target.ITEM;
if (!(v.getTag() instanceof ItemInfo)) {
return t;
}
return initTarget(v, (ItemInfo) v.getTag());
}
}