diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index fe459bb0d7..c2bddd5330 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -3049,7 +3049,6 @@ public class Launcher extends BaseActivity List apps = mLauncherCallbacks.getPredictedApps(); if (apps != null) { mAppsView.setPredictedApps(apps); - getUserEventDispatcher().setPredictedApps(apps); } } } diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index ccef4f2f5b..20951921c7 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -359,7 +359,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc @Override public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) { - targetParent.containerType = mAppsRecyclerView.getContainerType(v); + // This is filled in {@link AllAppsRecyclerView} } @Override diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java index 75dd760986..2abb766e84 100644 --- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java +++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java @@ -30,19 +30,22 @@ import android.view.View; import com.android.launcher3.BaseRecyclerView; import com.android.launcher3.BubbleTextView; import com.android.launcher3.DeviceProfile; +import com.android.launcher3.ItemInfo; import com.android.launcher3.R; import com.android.launcher3.anim.SpringAnimationHandler; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.graphics.DrawableFactory; +import com.android.launcher3.logging.UserEventDispatcher.LogContainerProvider; import com.android.launcher3.touch.SwipeDetector; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; +import com.android.launcher3.userevent.nano.LauncherLogProto.Target; import java.util.List; /** * A RecyclerView with custom fast scroll support for the all apps view. */ -public class AllAppsRecyclerView extends BaseRecyclerView { +public class AllAppsRecyclerView extends BaseRecyclerView implements LogContainerProvider { private AlphabeticalAppsList mApps; private AllAppsFastScrollHelper mFastScrollHelper; @@ -232,9 +235,10 @@ public class AllAppsRecyclerView extends BaseRecyclerView { updateEmptySearchBackgroundBounds(); } - public int getContainerType(View v) { + @Override + public void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent) { if (mApps.hasFilter()) { - return ContainerType.SEARCHRESULT; + targetParent.containerType = ContainerType.SEARCHRESULT; } else { if (v instanceof BubbleTextView) { BubbleTextView icon = (BubbleTextView) v; @@ -243,11 +247,13 @@ public class AllAppsRecyclerView extends BaseRecyclerView { List items = mApps.getAdapterItems(); AlphabeticalAppsList.AdapterItem item = items.get(position); if (item.viewType == AllAppsGridAdapter.VIEW_TYPE_PREDICTION_ICON) { - return ContainerType.PREDICTION; + targetParent.containerType = ContainerType.PREDICTION; + target.predictedRank = item.rowAppIndex; + return; } } } - return ContainerType.ALLAPPS; + targetParent.containerType = ContainerType.ALLAPPS; } } diff --git a/src/com/android/launcher3/logging/UserEventDispatcher.java b/src/com/android/launcher3/logging/UserEventDispatcher.java index e28a97ad86..d5c6515c0b 100644 --- a/src/com/android/launcher3/logging/UserEventDispatcher.java +++ b/src/com/android/launcher3/logging/UserEventDispatcher.java @@ -36,10 +36,8 @@ import com.android.launcher3.userevent.nano.LauncherLogProto.Action; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.launcher3.userevent.nano.LauncherLogProto.LauncherEvent; import com.android.launcher3.userevent.nano.LauncherLogProto.Target; -import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.LogConfig; -import java.util.List; import java.util.Locale; import java.util.UUID; @@ -128,9 +126,6 @@ public class UserEventDispatcher { private boolean mIsInLandscapeMode; private String mUuidStr; - // Used for filling in predictedRank on {@link Target}s. - private List mPredictedApps; - // APP_ICON SHORTCUT WIDGET // -------------------------------------------------------------- // packageNameHash required optional required @@ -138,32 +133,11 @@ public class UserEventDispatcher { // intentHash required // -------------------------------------------------------------- - protected LauncherEvent createLauncherEvent(View v, int intentHashCode, ComponentName cn) { - LauncherEvent event = newLauncherEvent(newTouchAction(Action.Touch.TAP), - newItemTarget(v), newTarget(Target.Type.CONTAINER)); - - // TODO: make idx percolate up the view hierarchy if needed. - int idx = 0; - if (fillInLogContainerData(event, v)) { - ItemInfo itemInfo = (ItemInfo) v.getTag(); - event.srcTarget[idx].intentHash = intentHashCode; - if (cn != null) { - event.srcTarget[idx].packageNameHash = (mUuidStr + cn.getPackageName()).hashCode(); - event.srcTarget[idx].componentHash = (mUuidStr + cn.flattenToString()).hashCode(); - if (mPredictedApps != null) { - event.srcTarget[idx].predictedRank = mPredictedApps.indexOf( - new ComponentKey(cn, itemInfo.user)); - } - } - } - return event; - } - /** * Fills in the container data on the given event if the given view is not null. * @return whether container data was added. */ - private boolean fillInLogContainerData(LauncherEvent event, @Nullable View v) { + protected boolean fillInLogContainerData(LauncherEvent event, @Nullable View v) { // Fill in grid(x,y), pageIndex of the child and container type of the parent LogContainerProvider provider = getLaunchProviderRecursive(v); if (v == null || !(v.getTag() instanceof ItemInfo) || provider == null) { @@ -175,20 +149,31 @@ public class UserEventDispatcher { } public void logAppLaunch(View v, Intent intent) { - LauncherEvent ev = createLauncherEvent(v, intent.hashCode(), intent.getComponent()); - if (ev == null) { - return; + LauncherEvent event = newLauncherEvent(newTouchAction(Action.Touch.TAP), + newItemTarget(v), newTarget(Target.Type.CONTAINER)); + + if (fillInLogContainerData(event, v)) { + fillIntentInfo(event.srcTarget[0], intent); + } + dispatchUserEvent(event, intent); + } + + protected void fillIntentInfo(Target target, Intent intent) { + target.intentHash = intent.hashCode(); + ComponentName cn = intent.getComponent(); + if (cn != null) { + target.packageNameHash = (mUuidStr + cn.getPackageName()).hashCode(); + target.componentHash = (mUuidStr + cn.flattenToString()).hashCode(); } - dispatchUserEvent(ev, intent); } public void logNotificationLaunch(View v, PendingIntent intent) { - ComponentName dummyComponent = new ComponentName(intent.getCreatorPackage(), "--dummy--"); - LauncherEvent ev = createLauncherEvent(v, intent.hashCode(), dummyComponent); - if (ev == null) { - return; + LauncherEvent event = newLauncherEvent(newTouchAction(Action.Touch.TAP), + newItemTarget(v), newTarget(Target.Type.CONTAINER)); + if (fillInLogContainerData(event, v)) { + event.srcTarget[0].packageNameHash = (mUuidStr + intent.getCreatorPackage()).hashCode(); } - dispatchUserEvent(ev, null); + dispatchUserEvent(event, null); } public void logActionCommand(int command, int containerType) { @@ -273,10 +258,6 @@ public class UserEventDispatcher { resetElapsedContainerMillis(); } - public void setPredictedApps(List predictedApps) { - mPredictedApps = predictedApps; - } - /* Currently we are only interested in whether this event happens or not and don't * care about which screen moves to where. */ public void logOverviewReorder() { @@ -348,7 +329,10 @@ public class UserEventDispatcher { } private static String getTargetsStr(Target[] targets) { - return "child:" + LoggerUtils.getTargetStr(targets[0]) + - (targets.length > 1 ? "\tparent:" + LoggerUtils.getTargetStr(targets[1]) : ""); + String result = "child:" + LoggerUtils.getTargetStr(targets[0]); + for (int i = 1; i < targets.length; i++) { + result += "\tparent:" + LoggerUtils.getTargetStr(targets[i]); + } + return result; } }