Log shortcuts open on ACTION_UP instead of in showForIcon().
- We only want to log when the container is opened and potentially
used, not when a long press is followed by a drag-and-drop.
- Also cleaned up code that was determining the container of the
app icon, since LaunchSourceProvider.fillInLaunchSourceData()
can do that instead (it's more robust and consistent).
Bug: 30791570
Change-Id: I05b6750f26182fda8a9940ac66f1371c2d228ca9
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
index 55f544c..2183477 100644
--- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java
@@ -208,12 +208,8 @@
@Override
public void fillInLaunchSourceData(View v, ItemInfo info, Target target, Target targetParent) {
- targetParent.containerType = getContainerType(v);
- }
-
- public int getContainerType(View v) {
if (mApps.hasFilter()) {
- return LauncherLogProto.SEARCHRESULT;
+ targetParent.containerType = LauncherLogProto.SEARCHRESULT;
} else {
if (v instanceof BubbleTextView) {
BubbleTextView icon = (BubbleTextView) v;
@@ -222,11 +218,12 @@
List<AlphabeticalAppsList.AdapterItem> items = mApps.getAdapterItems();
AlphabeticalAppsList.AdapterItem item = items.get(position);
if (item.viewType == AllAppsGridAdapter.VIEW_TYPE_PREDICTION_ICON) {
- return LauncherLogProto.PREDICTION;
+ targetParent.containerType = LauncherLogProto.PREDICTION;
+ return;
}
}
}
- return LauncherLogProto.ALLAPPS;
+ targetParent.containerType = LauncherLogProto.ALLAPPS;
}
}
diff --git a/src/com/android/launcher3/logging/UserEventDispatcher.java b/src/com/android/launcher3/logging/UserEventDispatcher.java
index e780cc9..64a5f57 100644
--- a/src/com/android/launcher3/logging/UserEventDispatcher.java
+++ b/src/com/android/launcher3/logging/UserEventDispatcher.java
@@ -147,12 +147,14 @@
dispatchUserEvent(event, null);
}
- public void logDeepShortcutsOpen(int containerType) {
+ public void logDeepShortcutsOpen(View icon) {
LauncherEvent event = LoggerUtils.initLauncherEvent(
Action.TOUCH, Target.ITEM, Target.CONTAINER);
- event.action.touch = Action.LONGPRESS;
+ LaunchSourceProvider provider = getLaunchProviderRecursive(icon);
+ ItemInfo info = (ItemInfo) icon.getTag();
+ provider.fillInLaunchSourceData(icon, info, event.srcTarget[0], event.srcTarget[1]);
event.srcTarget[0].itemType = LauncherLogProto.DEEPSHORTCUT;
- event.srcTarget[1].containerType = containerType;
+ event.action.touch = Action.LONGPRESS;
event.elapsedContainerMillis = System.currentTimeMillis() - mElapsedContainerMillis;
event.elapsedSessionMillis = System.currentTimeMillis() - mElapsedSessionMillis;
dispatchUserEvent(event, null);
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
index a341b97..6cd6d33 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutsContainer.java
@@ -33,7 +33,6 @@
import android.os.Looper;
import android.text.TextUtils;
import android.util.AttributeSet;
-import android.util.Log;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater;
@@ -54,19 +53,16 @@
import com.android.launcher3.LauncherAnimUtils;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherModel;
-import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherViewPropertyAnimator;
import com.android.launcher3.R;
import com.android.launcher3.ShortcutInfo;
import com.android.launcher3.Utilities;
import com.android.launcher3.Workspace;
import com.android.launcher3.accessibility.ShortcutMenuAccessibilityDelegate;
-import com.android.launcher3.allapps.AllAppsRecyclerView;
import com.android.launcher3.compat.UserHandleCompat;
import com.android.launcher3.dragndrop.DragController;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.dragndrop.DragView;
-import com.android.launcher3.folder.Folder;
import com.android.launcher3.graphics.TriangleShape;
import com.android.launcher3.logging.UserEventDispatcher;
import com.android.launcher3.userevent.nano.LauncherLogProto;
@@ -476,6 +472,7 @@
}
} else if (action == MotionEvent.ACTION_UP) {
cleanupDeferredDrag(true);
+ mLauncher.getUserEventDispatcher().logDeepShortcutsOpen(mDeferredDragIcon);
} else if (action == MotionEvent.ACTION_CANCEL) {
// Do not change the source icon visibility if we are already dragging the source icon.
cleanupDeferredDrag(!mSrcIconDragStarted);
@@ -745,33 +742,11 @@
container.populateAndShow(icon, ids);
icon.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS,
HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
- logOpen(launcher, icon);
return container;
}
return null;
}
- private static void logOpen(Launcher launcher, View icon) {
- ItemInfo info = (ItemInfo) icon.getTag();
- long iconContainer = info.container;
- Folder openFolder = launcher.getWorkspace().getOpenFolder();
- int containerType;
- if (iconContainer == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
- containerType = LauncherLogProto.WORKSPACE;
- } else if (iconContainer == LauncherSettings.Favorites.CONTAINER_HOTSEAT) {
- containerType = LauncherLogProto.HOTSEAT;
- } else if (openFolder != null && iconContainer == openFolder.getInfo().id) {
- containerType = LauncherLogProto.FOLDER;
- } else if (icon.getParent() instanceof AllAppsRecyclerView) {
- containerType = ((AllAppsRecyclerView) icon.getParent()).getContainerType(icon);
- } else {
- // This should not happen.
- Log.w(TAG, "Couldn't determine parent of shortcut container");
- containerType = LauncherLogProto.DEFAULT_CONTAINERTYPE;
- }
- launcher.getUserEventDispatcher().logDeepShortcutsOpen(containerType);
- }
-
/**
* Extension of {@link ShortcutInfo} which does not badge the icons.
*/