1package com.android.launcher3.logging; 2 3import android.view.View; 4 5import com.android.launcher3.ButtonDropTarget; 6import com.android.launcher3.DeleteDropTarget; 7import com.android.launcher3.InfoDropTarget; 8import com.android.launcher3.ItemInfo; 9import com.android.launcher3.LauncherSettings; 10import com.android.launcher3.UninstallDropTarget; 11import com.android.launcher3.userevent.nano.LauncherLogProto; 12import com.android.launcher3.userevent.nano.LauncherLogProto.Action; 13import com.android.launcher3.userevent.nano.LauncherLogProto.Target; 14 15/** 16 * Debugging helper methods. 17 * toString() cannot be overriden inside auto generated {@link LauncherLogProto}. 18 * Note: switch statement cannot be replaced with reflection as proguard strips the constants 19 */ 20public class LoggerUtils { 21 private static final String TAG = "LoggerUtils"; 22 23 public static String getActionStr(LauncherLogProto.Action action) { 24 switch(action.touch) { 25 case Action.TAP: return "TAP"; 26 case Action.LONGPRESS: return "LONGPRESS"; 27 case Action.DRAGDROP: return "DRAGDROP"; 28 case Action.PINCH: return "PINCH"; 29 case Action.SWIPE: return "SWIPE"; 30 case Action.FLING: return "FLING"; 31 default: return "UNKNOWN"; 32 } 33 } 34 35 public static String getTargetStr(Target t) { 36 String typeStr = ""; 37 if (t == null){ 38 return typeStr; 39 } 40 switch (t.type) { 41 case Target.ITEM: 42 return getItemStr(t); 43 case Target.CONTROL: 44 return getControlStr(t); 45 case Target.CONTAINER: 46 return getContainerStr(t); 47 default: 48 return "UNKNOWN TARGET TYPE"; 49 } 50 } 51 52 private static String getItemStr(Target t) { 53 String typeStr = ""; 54 if (t == null){ 55 return typeStr; 56 } 57 switch(t.itemType){ 58 case LauncherLogProto.APP_ICON: typeStr = "APPICON"; break; 59 case LauncherLogProto.SHORTCUT: typeStr = "SHORTCUT"; break; 60 case LauncherLogProto.WIDGET: typeStr = "WIDGET"; break; 61 case LauncherLogProto.DEEPSHORTCUT: typeStr = "DEEPSHORTCUT"; break; 62 case LauncherLogProto.FOLDER_ICON: typeStr = "FOLDERICON"; break; 63 case LauncherLogProto.SEARCHBOX: typeStr = "SEARCHBOX"; break; 64 65 default: typeStr = "UNKNOWN"; 66 } 67 68 if (t.packageNameHash != 0) { 69 typeStr += ", packageHash=" + t.packageNameHash; 70 } 71 if (t.componentHash != 0) { 72 typeStr += ", componentHash=" + t.componentHash; 73 } 74 if (t.intentHash != 0) { 75 typeStr += ", intentHash=" + t.intentHash; 76 } 77 if (t.spanX != 0) { 78 typeStr += ", spanX=" + t.spanX; 79 } 80 return typeStr += ", grid=(" + t.gridX + "," + t.gridY + "), id=" + t.pageIndex; 81 } 82 83 private static String getControlStr(Target t) { 84 if (t == null){ 85 return ""; 86 } 87 switch(t.controlType) { 88 case LauncherLogProto.ALL_APPS_BUTTON: return "ALL_APPS_BUTTON"; 89 case LauncherLogProto.WIDGETS_BUTTON: return "WIDGETS_BUTTON"; 90 case LauncherLogProto.WALLPAPER_BUTTON: return "WALLPAPER_BUTTON"; 91 case LauncherLogProto.SETTINGS_BUTTON: return "SETTINGS_BUTTON"; 92 case LauncherLogProto.REMOVE_TARGET: return "REMOVE_TARGET"; 93 case LauncherLogProto.UNINSTALL_TARGET: return "UNINSTALL_TARGET"; 94 case LauncherLogProto.APPINFO_TARGET: return "APPINFO_TARGET"; 95 case LauncherLogProto.RESIZE_HANDLE: return "RESIZE_HANDLE"; 96 default: return "UNKNOWN"; 97 } 98 } 99 100 private static String getContainerStr(LauncherLogProto.Target t) { 101 String str = ""; 102 if (t == null) { 103 return str; 104 } 105 switch (t.containerType) { 106 case LauncherLogProto.WORKSPACE: 107 str = "WORKSPACE"; 108 break; 109 case LauncherLogProto.HOTSEAT: 110 str = "HOTSEAT"; 111 break; 112 case LauncherLogProto.FOLDER: 113 str = "FOLDER"; 114 break; 115 case LauncherLogProto.ALLAPPS: 116 str = "ALLAPPS"; 117 break; 118 case LauncherLogProto.WIDGETS: 119 str = "WIDGETS"; 120 break; 121 case LauncherLogProto.OVERVIEW: 122 str = "OVERVIEW"; 123 break; 124 case LauncherLogProto.PREDICTION: 125 str = "PREDICTION"; 126 break; 127 case LauncherLogProto.SEARCHRESULT: 128 str = "SEARCHRESULT"; 129 break; 130 case LauncherLogProto.DEEPSHORTCUTS: 131 str = "DEEPSHORTCUTS"; 132 break; 133 default: 134 str = "UNKNOWN"; 135 } 136 return str + " id=" + t.pageIndex; 137 } 138 139 /** 140 * Used for launching an event by tapping on an icon. 141 */ 142 public static LauncherLogProto.LauncherEvent initLauncherEvent( 143 int actionType, 144 View v, 145 int parentTargetType){ 146 LauncherLogProto.LauncherEvent event = new LauncherLogProto.LauncherEvent(); 147 148 event.srcTarget = new LauncherLogProto.Target[2]; 149 event.srcTarget[0] = initTarget(v); 150 event.srcTarget[1] = new LauncherLogProto.Target(); 151 event.srcTarget[1].type = parentTargetType; 152 153 event.action = new LauncherLogProto.Action(); 154 event.action.type = actionType; 155 return event; 156 } 157 158 /** 159 * Used for clicking on controls and buttons. 160 */ 161 public static LauncherLogProto.LauncherEvent initLauncherEvent( 162 int actionType, 163 int childTargetType){ 164 LauncherLogProto.LauncherEvent event = new LauncherLogProto.LauncherEvent(); 165 166 event.srcTarget = new LauncherLogProto.Target[1]; 167 event.srcTarget[0] = new LauncherLogProto.Target(); 168 event.srcTarget[0].type = childTargetType; 169 170 event.action = new LauncherLogProto.Action(); 171 event.action.type = actionType; 172 return event; 173 } 174 175 /** 176 * Used for drag and drop interaction. 177 */ 178 public static LauncherLogProto.LauncherEvent initLauncherEvent( 179 int actionType, 180 View v, 181 ItemInfo info, 182 int parentSrcTargetType, 183 View parentDestTargetType){ 184 LauncherLogProto.LauncherEvent event = new LauncherLogProto.LauncherEvent(); 185 186 event.srcTarget = new LauncherLogProto.Target[2]; 187 event.srcTarget[0] = initTarget(v, info); 188 event.srcTarget[1] = new LauncherLogProto.Target(); 189 event.srcTarget[1].type = parentSrcTargetType; 190 191 event.destTarget = new LauncherLogProto.Target[2]; 192 event.destTarget[0] = initTarget(v, info); 193 event.destTarget[1] = initDropTarget(parentDestTargetType); 194 195 event.action = new LauncherLogProto.Action(); 196 event.action.type = actionType; 197 return event; 198 } 199 200 private static Target initTarget(View v, ItemInfo info) { 201 Target t = new LauncherLogProto.Target(); 202 t.type = Target.ITEM; 203 switch (info.itemType) { 204 case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION: 205 t.itemType = LauncherLogProto.APP_ICON; 206 break; 207 case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT: 208 t.itemType = LauncherLogProto.SHORTCUT; 209 break; 210 case LauncherSettings.Favorites.ITEM_TYPE_FOLDER: 211 t.itemType = LauncherLogProto.FOLDER_ICON; 212 break; 213 case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET: 214 t.itemType = LauncherLogProto.WIDGET; 215 break; 216 case LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT: 217 t.itemType = LauncherLogProto.DEEPSHORTCUT; 218 break; 219 } 220 return t; 221 } 222 223 private static Target initDropTarget(View v) { 224 Target t = new LauncherLogProto.Target(); 225 t.type = (v instanceof ButtonDropTarget)? Target.CONTROL : Target.CONTAINER; 226 if (t.type == Target.CONTAINER) { 227 return t; 228 } 229 230 if (v instanceof InfoDropTarget) { 231 t.controlType = LauncherLogProto.APPINFO_TARGET; 232 } else if (v instanceof UninstallDropTarget) { 233 t.controlType = LauncherLogProto.UNINSTALL_TARGET; 234 } else if (v instanceof DeleteDropTarget) { 235 t.controlType = LauncherLogProto.REMOVE_TARGET; 236 } 237 return t; 238 } 239 240 private static Target initTarget(View v) { 241 Target t = new LauncherLogProto.Target(); 242 t.type = Target.ITEM; 243 if (!(v.getTag() instanceof ItemInfo)) { 244 return t; 245 } 246 return initTarget(v, (ItemInfo) v.getTag()); 247 } 248} 249