Merge commit 'refs/changes/98/2553198/2' of sso://googleplex-android/platform/packages/apps/Launcher3 into am-948a617f-f892-4399-bd5c-3dd472692cca

Change-Id: I4b54791fcaaf09a9aad6774d19645e7d7793c75d
This commit is contained in:
Sunny Goyal 2017-07-19 11:08:35 -07:00
commit d3e669b9ae
4 changed files with 38 additions and 49 deletions

View File

@ -3049,7 +3049,6 @@ public class Launcher extends BaseActivity
List<ComponentKey> apps = mLauncherCallbacks.getPredictedApps();
if (apps != null) {
mAppsView.setPredictedApps(apps);
getUserEventDispatcher().setPredictedApps(apps);
}
}
}

View File

@ -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

View File

@ -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<AlphabeticalAppsList.AdapterItem> 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;
}
}

View File

@ -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<ComponentKey> 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<ComponentKey> 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;
}
}