| package com.android.launcher3.logging; |
| |
| import static com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType.DEFAULT_CONTAINERTYPE; |
| |
| import android.view.View; |
| import android.view.ViewParent; |
| |
| import com.android.launcher3.ItemInfo; |
| import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; |
| import com.android.launcher3.userevent.nano.LauncherLogProto.Target; |
| |
| import androidx.annotation.Nullable; |
| |
| |
| public class StatsLogUtils { |
| |
| // Defined in android.stats.launcher.nano |
| // As they cannot be linked in this file, defining again. |
| public final static int LAUNCHER_STATE_BACKGROUND = 0; |
| public final static int LAUNCHER_STATE_HOME = 1; |
| public final static int LAUNCHER_STATE_OVERVIEW = 2; |
| public final static int LAUNCHER_STATE_ALLAPPS = 3; |
| |
| private final static int MAXIMUM_VIEW_HIERARCHY_LEVEL = 5; |
| |
| public interface LogStateProvider { |
| int getCurrentState(); |
| } |
| |
| /** |
| * Implemented by containers to provide a container source for a given child. |
| * |
| * Currently, |
| */ |
| public interface LogContainerProvider { |
| |
| /** |
| * Copies data from the source to the destination proto. |
| * |
| * @param v source of the data |
| * @param info source of the data |
| * @param target dest of the data |
| * @param targetParent dest of the data |
| */ |
| void fillInLogContainerData(View v, ItemInfo info, Target target, Target targetParent); |
| } |
| |
| /** |
| * Recursively finds the parent of the given child which implements IconLogInfoProvider |
| */ |
| public static LogContainerProvider getLaunchProviderRecursive(@Nullable View v) { |
| ViewParent parent; |
| if (v != null) { |
| parent = v.getParent(); |
| } else { |
| return null; |
| } |
| |
| // Optimization to only check up to 5 parents. |
| int count = MAXIMUM_VIEW_HIERARCHY_LEVEL; |
| while (parent != null && count-- > 0) { |
| if (parent instanceof LogContainerProvider) { |
| return (LogContainerProvider) parent; |
| } else { |
| parent = parent.getParent(); |
| } |
| } |
| return null; |
| } |
| |
| public static int getContainerTypeFromState(int state) { |
| int containerType = DEFAULT_CONTAINERTYPE; |
| switch (state) { |
| case StatsLogUtils.LAUNCHER_STATE_ALLAPPS: |
| containerType = ContainerType.ALLAPPS; |
| break; |
| case StatsLogUtils.LAUNCHER_STATE_HOME: |
| containerType = ContainerType.WORKSPACE; |
| break; |
| case StatsLogUtils.LAUNCHER_STATE_OVERVIEW: |
| containerType = ContainerType.OVERVIEW; |
| break; |
| } |
| return containerType; |
| } |
| } |