Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 52f5f640 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic 'am-948a617f-f892-4399-bd5c-3dd472692cca' into ub-launcher3-master

* changes:
  Merge commit 'refs/changes/98/2553198/2' of sso://googleplex-android/platform/packages/apps/Launcher3 into am-948a617f-f892-4399-bd5c-3dd472692cca am: d3e669b9
  Merge commit 'refs/changes/98/2553198/2' of sso://googleplex-android/platform/packages/apps/Launcher3 into am-948a617f-f892-4399-bd5c-3dd472692cca
  Updating UserEventDispatcher to make some methods accessible.
parents b21b934b 6309ade9
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -3049,7 +3049,6 @@ public class Launcher extends BaseActivity
            List<ComponentKey> apps = mLauncherCallbacks.getPredictedApps();
            if (apps != null) {
                mAppsView.setPredictedApps(apps);
                getUserEventDispatcher().setPredictedApps(apps);
            }
        }
    }
+1 −1
Original line number Diff line number Diff line
@@ -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
+11 −5
Original line number Diff line number Diff line
@@ -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;
        }
    }

+26 −42
Original line number Diff line number Diff line
@@ -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;
    }
}