Merge "Log Launcher transitions to WW" into ub-launcher3-rvc-dev am: 5c9a1ef5cd
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/11862643 Change-Id: Id063bb45ce1322e9207b85a4d74048d2229761fc
This commit is contained in:
+6
@@ -23,6 +23,7 @@ import static com.android.launcher3.allapps.AllAppsTransitionController.ALL_APPS
|
||||
import static com.android.launcher3.anim.Interpolators.DEACCEL_3;
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_ALL_APPS_EDU;
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_HOME_GESTURE;
|
||||
import static com.android.launcher3.touch.AbstractStateChangeTouchController.SUCCESS_TRANSITION_PROGRESS;
|
||||
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_OFFSET;
|
||||
import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS;
|
||||
@@ -44,6 +45,7 @@ import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.launcher3.anim.PendingAnimation;
|
||||
import com.android.launcher3.compat.AccessibilityManagerCompat;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.logging.StatsLogManager;
|
||||
import com.android.launcher3.states.StateAnimationConfig;
|
||||
import com.android.launcher3.testing.TestProtocol;
|
||||
import com.android.launcher3.touch.SingleAxisSwipeDetector;
|
||||
@@ -246,5 +248,9 @@ public class NavBarToHomeTouchController implements TouchController,
|
||||
startContainerType,
|
||||
mEndState.containerType,
|
||||
mLauncher.getWorkspace().getCurrentPage());
|
||||
mLauncher.getStatsLogManager().logger()
|
||||
.withSrcState(StatsLogManager.containerTypeToAtomState(mStartState.containerType))
|
||||
.withDstState(StatsLogManager.containerTypeToAtomState(mEndState.containerType))
|
||||
.log(LAUNCHER_HOME_GESTURE);
|
||||
}
|
||||
}
|
||||
|
||||
+12
@@ -28,6 +28,10 @@ import static com.android.launcher3.anim.Interpolators.DEACCEL_5;
|
||||
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||
import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity;
|
||||
import static com.android.launcher3.anim.PropertySetter.NO_ANIM_PROPERTY_SETTER;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_HOME;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_UNKNOWN_SWIPEDOWN;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_UNKNOWN_SWIPEUP;
|
||||
import static com.android.launcher3.logging.StatsLogManager.getLauncherAtomEvent;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_ALL_APPS_FADE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_VERTICAL_PROGRESS;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_FADE;
|
||||
@@ -61,6 +65,7 @@ import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||
import com.android.launcher3.anim.PendingAnimation;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.graphics.OverviewScrim;
|
||||
import com.android.launcher3.logging.StatsLogManager;
|
||||
import com.android.launcher3.states.StateAnimationConfig;
|
||||
import com.android.launcher3.touch.BaseSwipeDetector;
|
||||
import com.android.launcher3.touch.BothAxesSwipeDetector;
|
||||
@@ -429,6 +434,13 @@ public class NoButtonQuickSwitchTouchController implements TouchController,
|
||||
mStartState.containerType,
|
||||
targetState.containerType,
|
||||
mLauncher.getWorkspace().getCurrentPage());
|
||||
mLauncher.getStatsLogManager().logger()
|
||||
.withSrcState(LAUNCHER_STATE_HOME)
|
||||
.withDstState(StatsLogManager.containerTypeToAtomState(targetState.containerType))
|
||||
.log(getLauncherAtomEvent(mStartState.containerType, targetState.containerType,
|
||||
targetState.ordinal > mStartState.ordinal
|
||||
? LAUNCHER_UNKNOWN_SWIPEUP
|
||||
: LAUNCHER_UNKNOWN_SWIPEDOWN));
|
||||
mLauncher.getStateManager().goToState(targetState, false, this::clearState);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,12 @@ import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||
import static com.android.launcher3.anim.Interpolators.OVERSHOOT_1_2;
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
|
||||
import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_BACKGROUND;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.IGNORE;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_HOME_GESTURE;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_OVERVIEW_GESTURE;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_QUICKSWITCH_LEFT;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_QUICKSWITCH_RIGHT;
|
||||
import static com.android.launcher3.util.DefaultDisplay.getSingleFrameMs;
|
||||
import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW;
|
||||
import static com.android.quickstep.GestureState.GestureEndTarget.HOME;
|
||||
@@ -62,6 +68,7 @@ import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.anim.AnimationSuccessListener;
|
||||
import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||
import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.launcher3.logging.StatsLogManager;
|
||||
import com.android.launcher3.logging.UserEventDispatcher;
|
||||
import com.android.launcher3.statemanager.StatefulActivity;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
|
||||
@@ -891,6 +898,27 @@ public abstract class BaseSwipeUpHandlerV2<T extends StatefulActivity<?>, Q exte
|
||||
ContainerType.NAVBAR, ContainerType.APP,
|
||||
endTarget.containerType,
|
||||
pageIndex);
|
||||
StatsLogManager.EventEnum event;
|
||||
switch (endTarget) {
|
||||
case HOME:
|
||||
event = LAUNCHER_HOME_GESTURE;
|
||||
break;
|
||||
case RECENTS:
|
||||
event = LAUNCHER_OVERVIEW_GESTURE;
|
||||
break;
|
||||
case LAST_TASK:
|
||||
case NEW_TASK:
|
||||
event = (mLogDirection == Direction.LEFT)
|
||||
? LAUNCHER_QUICKSWITCH_LEFT
|
||||
: LAUNCHER_QUICKSWITCH_RIGHT;
|
||||
break;
|
||||
default:
|
||||
event = IGNORE;
|
||||
}
|
||||
StatsLogManager.newInstance(mContext).logger()
|
||||
.withSrcState(LAUNCHER_STATE_BACKGROUND)
|
||||
.withDstState(StatsLogManager.containerTypeToAtomState(endTarget.containerType))
|
||||
.log(event);
|
||||
}
|
||||
|
||||
/** Animates to the given progress, where 0 is the current app and 1 is overview. */
|
||||
|
||||
+19
-2
@@ -15,6 +15,9 @@
|
||||
*/
|
||||
package com.android.quickstep.inputconsumers;
|
||||
|
||||
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_HOME;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_HOME_GESTURE;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.PointF;
|
||||
@@ -22,9 +25,10 @@ import android.view.MotionEvent;
|
||||
|
||||
import com.android.launcher3.BaseActivity;
|
||||
import com.android.launcher3.BaseDraggingActivity;
|
||||
import com.android.launcher3.logging.StatsLogUtils;
|
||||
import com.android.launcher3.logger.LauncherAtom;
|
||||
import com.android.launcher3.testing.TestLogging;
|
||||
import com.android.launcher3.testing.TestProtocol;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
|
||||
import com.android.quickstep.GestureState;
|
||||
@@ -40,11 +44,13 @@ public class OverviewWithoutFocusInputConsumer implements InputConsumer,
|
||||
private final Context mContext;
|
||||
private final InputMonitorCompat mInputMonitor;
|
||||
private final TriggerSwipeUpTouchTracker mTriggerSwipeUpTracker;
|
||||
private final GestureState mGestureState;
|
||||
|
||||
public OverviewWithoutFocusInputConsumer(Context context,
|
||||
RecentsAnimationDeviceState deviceState, GestureState gestureState,
|
||||
InputMonitorCompat inputMonitor, boolean disableHorizontalSwipe) {
|
||||
mContext = context;
|
||||
mGestureState = gestureState;
|
||||
mInputMonitor = inputMonitor;
|
||||
mTriggerSwipeUpTracker = new TriggerSwipeUpTouchTracker(context, disableHorizontalSwipe,
|
||||
deviceState.getNavBarPosition(), this::onInterceptTouch, this);
|
||||
@@ -81,10 +87,21 @@ public class OverviewWithoutFocusInputConsumer implements InputConsumer,
|
||||
BaseActivity activity = BaseDraggingActivity.fromContext(mContext);
|
||||
int pageIndex = -1; // This number doesn't reflect workspace page index.
|
||||
// It only indicates that launcher client screen was shown.
|
||||
int containerType = StatsLogUtils.getContainerTypeFromState(activity.getCurrentState());
|
||||
int containerType = (mGestureState != null && mGestureState.getEndTarget() != null)
|
||||
? mGestureState.getEndTarget().containerType
|
||||
: LauncherLogProto.ContainerType.WORKSPACE;
|
||||
activity.getUserEventDispatcher().logActionOnContainer(
|
||||
wasFling ? Touch.FLING : Touch.SWIPE, Direction.UP, containerType, pageIndex);
|
||||
activity.getUserEventDispatcher().setPreviousHomeGesture(true);
|
||||
activity.getStatsLogManager().logger()
|
||||
.withSrcState(LAUNCHER_STATE_HOME)
|
||||
.withDstState(LAUNCHER_STATE_HOME)
|
||||
.withContainerInfo(LauncherAtom.ContainerInfo.newBuilder()
|
||||
.setWorkspace(
|
||||
LauncherAtom.WorkspaceContainer.newBuilder()
|
||||
.setPageIndex(-1))
|
||||
.build())
|
||||
.log(LAUNCHER_HOME_GESTURE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,7 +23,6 @@ import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGE
|
||||
import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__BACKGROUND;
|
||||
import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__HOME;
|
||||
import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__OVERVIEW;
|
||||
import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGED__SRC_STATE__HOME;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
@@ -179,8 +178,8 @@ public class StatsLogCompatManager extends StatsLogManager {
|
||||
private InstanceId mInstanceId = DEFAULT_INSTANCE_ID;
|
||||
private OptionalInt mRank = OptionalInt.empty();
|
||||
private Optional<ContainerInfo> mContainerInfo = Optional.empty();
|
||||
private int mSrcState = LAUNCHER_UICHANGED__SRC_STATE__HOME;
|
||||
private int mDstState = LAUNCHER_UICHANGED__DST_STATE__BACKGROUND;
|
||||
private int mSrcState = LAUNCHER_STATE_UNSPECIFIED;
|
||||
private int mDstState = LAUNCHER_STATE_UNSPECIFIED;
|
||||
private Optional<FromState> mFromState = Optional.empty();
|
||||
private Optional<ToState> mToState = Optional.empty();
|
||||
private Optional<String> mEditText = Optional.empty();
|
||||
|
||||
@@ -37,8 +37,6 @@ import androidx.annotation.IntDef;
|
||||
|
||||
import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener;
|
||||
import com.android.launcher3.logging.StatsLogManager;
|
||||
import com.android.launcher3.logging.StatsLogUtils;
|
||||
import com.android.launcher3.logging.StatsLogUtils.LogStateProvider;
|
||||
import com.android.launcher3.logging.UserEventDispatcher;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto;
|
||||
import com.android.launcher3.util.SystemUiController;
|
||||
@@ -52,7 +50,7 @@ import java.util.ArrayList;
|
||||
/**
|
||||
* Launcher BaseActivity
|
||||
*/
|
||||
public abstract class BaseActivity extends Activity implements LogStateProvider, ActivityContext {
|
||||
public abstract class BaseActivity extends Activity implements ActivityContext {
|
||||
|
||||
private static final String TAG = "BaseActivity";
|
||||
|
||||
@@ -146,13 +144,11 @@ public abstract class BaseActivity extends Activity implements LogStateProvider,
|
||||
return mDeviceProfile;
|
||||
}
|
||||
|
||||
public int getCurrentState() { return StatsLogUtils.LAUNCHER_STATE_BACKGROUND; }
|
||||
|
||||
public void modifyUserEvent(LauncherLogProto.LauncherEvent event) {}
|
||||
|
||||
public final StatsLogManager getStatsLogManager() {
|
||||
if (mStatsLogManager == null) {
|
||||
mStatsLogManager = StatsLogManager.newInstance(this, this);
|
||||
mStatsLogManager = StatsLogManager.newInstance(this);
|
||||
}
|
||||
return mStatsLogManager;
|
||||
}
|
||||
|
||||
@@ -38,6 +38,10 @@ import static com.android.launcher3.LauncherState.SPRING_LOADED;
|
||||
import static com.android.launcher3.Utilities.postAsyncCallback;
|
||||
import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_LAUNCHER_LOAD;
|
||||
import static com.android.launcher3.logging.LoggerUtils.newContainerTarget;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_BACKGROUND;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ONRESUME;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ONSTOP;
|
||||
import static com.android.launcher3.logging.StatsLogManager.containerTypeToAtomState;
|
||||
import static com.android.launcher3.popup.SystemShortcut.APP_INFO;
|
||||
import static com.android.launcher3.popup.SystemShortcut.INSTALL;
|
||||
import static com.android.launcher3.popup.SystemShortcut.WIDGETS;
|
||||
@@ -110,8 +114,9 @@ import com.android.launcher3.folder.FolderIcon;
|
||||
import com.android.launcher3.icons.IconCache;
|
||||
import com.android.launcher3.keyboard.CustomActionsPopup;
|
||||
import com.android.launcher3.keyboard.ViewGroupFocusHelper;
|
||||
import com.android.launcher3.logger.LauncherAtom;
|
||||
import com.android.launcher3.logging.FileLog;
|
||||
import com.android.launcher3.logging.StatsLogUtils;
|
||||
import com.android.launcher3.logging.StatsLogManager;
|
||||
import com.android.launcher3.logging.UserEventDispatcher;
|
||||
import com.android.launcher3.model.AppLaunchTracker;
|
||||
import com.android.launcher3.model.BgDataModel.Callbacks;
|
||||
@@ -920,13 +925,32 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche
|
||||
|
||||
|
||||
private void logStopAndResume(int command) {
|
||||
int pageIndex = mWorkspace.isOverlayShown() ? -1 : mWorkspace.getCurrentPage();
|
||||
int containerType = mStateManager.getState().containerType;
|
||||
|
||||
StatsLogManager.EventEnum event;
|
||||
StatsLogManager.StatsLogger logger = getStatsLogManager().logger();
|
||||
if (command == Action.Command.RESUME) {
|
||||
logger.withSrcState(LAUNCHER_STATE_BACKGROUND)
|
||||
.withDstState(containerTypeToAtomState(mStateManager.getState().containerType));
|
||||
event = LAUNCHER_ONRESUME;
|
||||
} else { /* command == Action.Command.STOP */
|
||||
logger.withSrcState(containerTypeToAtomState(mStateManager.getState().containerType))
|
||||
.withDstState(LAUNCHER_STATE_BACKGROUND);
|
||||
event = LAUNCHER_ONSTOP;
|
||||
}
|
||||
|
||||
if (containerType == ContainerType.WORKSPACE && mWorkspace != null) {
|
||||
getUserEventDispatcher().logActionCommand(command,
|
||||
containerType, -1, mWorkspace.isOverlayShown() ? -1 : 0);
|
||||
containerType, -1, pageIndex);
|
||||
logger.withContainerInfo(LauncherAtom.ContainerInfo.newBuilder()
|
||||
.setWorkspace(
|
||||
LauncherAtom.WorkspaceContainer.newBuilder()
|
||||
.setPageIndex(pageIndex)).build());
|
||||
} else {
|
||||
getUserEventDispatcher().logActionCommand(command, containerType, -1);
|
||||
}
|
||||
logger.log(event);
|
||||
}
|
||||
|
||||
private void scheduleDeferredCheck() {
|
||||
@@ -1835,16 +1859,6 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCurrentState() {
|
||||
if (mStateManager.getState() == LauncherState.ALL_APPS) {
|
||||
return StatsLogUtils.LAUNCHER_STATE_ALLAPPS;
|
||||
} else if (mStateManager.getState() == OVERVIEW) {
|
||||
return StatsLogUtils.LAUNCHER_STATE_OVERVIEW;
|
||||
}
|
||||
return StatsLogUtils.LAUNCHER_STATE_HOME;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startActivitySafely(View v, Intent intent, ItemInfo item,
|
||||
@Nullable String sourceContainer) {
|
||||
|
||||
@@ -28,6 +28,9 @@ import static com.android.launcher3.LauncherState.SPRING_LOADED;
|
||||
import static com.android.launcher3.config.FeatureFlags.ADAPTIVE_ICON_WINDOW_ANIM;
|
||||
import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_OVERLAY;
|
||||
import static com.android.launcher3.logging.LoggerUtils.newContainerTarget;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_HOME;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPELEFT;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPERIGHT;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
@@ -79,6 +82,7 @@ import com.android.launcher3.folder.PreviewBackground;
|
||||
import com.android.launcher3.graphics.DragPreviewProvider;
|
||||
import com.android.launcher3.graphics.PreloadIconDrawable;
|
||||
import com.android.launcher3.icons.BitmapRenderer;
|
||||
import com.android.launcher3.logger.LauncherAtom;
|
||||
import com.android.launcher3.logging.StatsLogManager;
|
||||
import com.android.launcher3.logging.StatsLogManager.LauncherEvent;
|
||||
import com.android.launcher3.logging.UserEventDispatcher;
|
||||
@@ -999,6 +1003,15 @@ public class Workspace extends PagedView<WorkspacePageIndicator>
|
||||
if (!mOverlayShown) {
|
||||
mLauncher.getUserEventDispatcher().logActionOnContainer(Action.Touch.SWIPE,
|
||||
Action.Direction.LEFT, ContainerType.WORKSPACE, 0);
|
||||
mLauncher.getStatsLogManager().logger()
|
||||
.withSrcState(LAUNCHER_STATE_HOME)
|
||||
.withDstState(LAUNCHER_STATE_HOME)
|
||||
.withContainerInfo(LauncherAtom.ContainerInfo.newBuilder()
|
||||
.setWorkspace(
|
||||
LauncherAtom.WorkspaceContainer.newBuilder()
|
||||
.setPageIndex(0))
|
||||
.build())
|
||||
.log(LAUNCHER_SWIPELEFT);
|
||||
}
|
||||
mOverlayShown = true;
|
||||
// Not announcing the overlay page for accessibility since it announces itself.
|
||||
@@ -1008,6 +1021,15 @@ public class Workspace extends PagedView<WorkspacePageIndicator>
|
||||
if (!ued.isPreviousHomeGesture()) {
|
||||
mLauncher.getUserEventDispatcher().logActionOnContainer(Action.Touch.SWIPE,
|
||||
Action.Direction.RIGHT, ContainerType.WORKSPACE, -1);
|
||||
mLauncher.getStatsLogManager().logger()
|
||||
.withSrcState(LAUNCHER_STATE_HOME)
|
||||
.withDstState(LAUNCHER_STATE_HOME)
|
||||
.withContainerInfo(LauncherAtom.ContainerInfo.newBuilder()
|
||||
.setWorkspace(
|
||||
LauncherAtom.WorkspaceContainer.newBuilder()
|
||||
.setPageIndex(-1))
|
||||
.build())
|
||||
.log(LAUNCHER_SWIPERIGHT);
|
||||
}
|
||||
} else if (Float.compare(mOverlayTranslation, 0f) != 0) {
|
||||
// When arriving to 0 overscroll from non-zero overscroll, announce page for
|
||||
@@ -1099,9 +1121,20 @@ public class Workspace extends PagedView<WorkspacePageIndicator>
|
||||
protected void notifyPageSwitchListener(int prevPage) {
|
||||
super.notifyPageSwitchListener(prevPage);
|
||||
if (prevPage != mCurrentPage) {
|
||||
int swipeDirection = (prevPage < mCurrentPage) ? Action.Direction.RIGHT : Action.Direction.LEFT;
|
||||
int swipeDirection = (prevPage < mCurrentPage)
|
||||
? Action.Direction.RIGHT : Action.Direction.LEFT;
|
||||
StatsLogManager.EventEnum event = (prevPage < mCurrentPage)
|
||||
? LAUNCHER_SWIPERIGHT : LAUNCHER_SWIPELEFT;
|
||||
mLauncher.getUserEventDispatcher().logActionOnContainer(Action.Touch.SWIPE,
|
||||
swipeDirection, ContainerType.WORKSPACE, prevPage);
|
||||
mLauncher.getStatsLogManager().logger()
|
||||
.withSrcState(LAUNCHER_STATE_HOME)
|
||||
.withDstState(LAUNCHER_STATE_HOME)
|
||||
.withContainerInfo(LauncherAtom.ContainerInfo.newBuilder()
|
||||
.setWorkspace(
|
||||
LauncherAtom.WorkspaceContainer.newBuilder()
|
||||
.setPageIndex(prevPage)).build())
|
||||
.log(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,12 @@
|
||||
*/
|
||||
package com.android.launcher3.logging;
|
||||
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.IGNORE;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_CLOSE_DOWN;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_OPEN_UP;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_HOME_GESTURE;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_OVERVIEW_GESTURE;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -23,8 +29,8 @@ import com.android.launcher3.R;
|
||||
import com.android.launcher3.logger.LauncherAtom.ContainerInfo;
|
||||
import com.android.launcher3.logger.LauncherAtom.FromState;
|
||||
import com.android.launcher3.logger.LauncherAtom.ToState;
|
||||
import com.android.launcher3.logging.StatsLogUtils.LogStateProvider;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.userevent.LauncherLogProto;
|
||||
import com.android.launcher3.util.ResourceBasedOverride;
|
||||
|
||||
/**
|
||||
@@ -35,6 +41,54 @@ import com.android.launcher3.util.ResourceBasedOverride;
|
||||
*/
|
||||
public class StatsLogManager implements ResourceBasedOverride {
|
||||
|
||||
public static final int LAUNCHER_STATE_UNSPECIFIED = 0;
|
||||
public static final int LAUNCHER_STATE_BACKGROUND = 1;
|
||||
public static final int LAUNCHER_STATE_HOME = 2;
|
||||
public static final int LAUNCHER_STATE_OVERVIEW = 3;
|
||||
public static final int LAUNCHER_STATE_ALLAPPS = 4;
|
||||
public static final int LAUNCHER_STATE_UNCHANGED = 5;
|
||||
|
||||
/**
|
||||
* Returns proper launcher state enum for {@link StatsLogManager}
|
||||
* (to be removed during UserEventDispatcher cleanup)
|
||||
*/
|
||||
public static int containerTypeToAtomState(int containerType) {
|
||||
switch (containerType) {
|
||||
case LauncherLogProto.ContainerType.ALLAPPS_VALUE:
|
||||
return LAUNCHER_STATE_ALLAPPS;
|
||||
case LauncherLogProto.ContainerType.OVERVIEW_VALUE:
|
||||
return LAUNCHER_STATE_OVERVIEW;
|
||||
case LauncherLogProto.ContainerType.WORKSPACE_VALUE:
|
||||
return LAUNCHER_STATE_HOME;
|
||||
case LauncherLogProto.ContainerType.APP_VALUE:
|
||||
return LAUNCHER_STATE_BACKGROUND;
|
||||
}
|
||||
return LAUNCHER_STATE_UNSPECIFIED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns event enum based on the two {@link ContainerType} transition information when
|
||||
* swipe gesture happens.
|
||||
* (to be removed during UserEventDispatcher cleanup)
|
||||
*/
|
||||
public static EventEnum getLauncherAtomEvent(int startContainerType,
|
||||
int targetContainerType, EventEnum fallbackEvent) {
|
||||
if (startContainerType == LauncherLogProto.ContainerType.WORKSPACE.getNumber()
|
||||
&& targetContainerType == LauncherLogProto.ContainerType.WORKSPACE.getNumber()) {
|
||||
return LAUNCHER_HOME_GESTURE;
|
||||
} else if (startContainerType != LauncherLogProto.ContainerType.TASKSWITCHER.getNumber()
|
||||
&& targetContainerType == LauncherLogProto.ContainerType.TASKSWITCHER.getNumber()) {
|
||||
return LAUNCHER_OVERVIEW_GESTURE;
|
||||
} else if (startContainerType != LauncherLogProto.ContainerType.ALLAPPS.getNumber()
|
||||
&& targetContainerType == LauncherLogProto.ContainerType.ALLAPPS.getNumber()) {
|
||||
return LAUNCHER_ALLAPPS_OPEN_UP;
|
||||
} else if (startContainerType == LauncherLogProto.ContainerType.ALLAPPS.getNumber()
|
||||
&& targetContainerType != LauncherLogProto.ContainerType.ALLAPPS.getNumber()) {
|
||||
return LAUNCHER_ALLAPPS_CLOSE_DOWN;
|
||||
}
|
||||
return fallbackEvent; // TODO fix
|
||||
}
|
||||
|
||||
public interface EventEnum {
|
||||
int getId();
|
||||
}
|
||||
@@ -164,6 +218,44 @@ public class StatsLogManager implements ResourceBasedOverride {
|
||||
|
||||
@UiEvent(doc = "App launch ranking logged for hotseat predictions)")
|
||||
LAUNCHER_HOTSEAT_RANKED(553),
|
||||
@UiEvent(doc = "Launcher is now in background. e.g., Screen off event")
|
||||
LAUNCHER_ONSTOP(562),
|
||||
|
||||
@UiEvent(doc = "Launcher is now in foreground. e.g., Screen on event, back button")
|
||||
LAUNCHER_ONRESUME(563),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in LEFT direction on workspace.")
|
||||
LAUNCHER_SWIPELEFT(564),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in RIGHT direction on workspace.")
|
||||
LAUNCHER_SWIPERIGHT(565),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in UP direction in unknown way.")
|
||||
LAUNCHER_UNKNOWN_SWIPEUP(566),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in DOWN direction in unknown way.")
|
||||
LAUNCHER_UNKNOWN_SWIPEDOWN(567),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in UP direction to open apps drawer.")
|
||||
LAUNCHER_ALLAPPS_OPEN_UP(568),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in DOWN direction to close apps drawer.")
|
||||
LAUNCHER_ALLAPPS_CLOSE_DOWN(569),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in UP direction and hold from the bottom bazel area")
|
||||
LAUNCHER_OVERVIEW_GESTURE(570),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in LEFT direction on the bottom bazel area.")
|
||||
LAUNCHER_QUICKSWITCH_LEFT(571),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in RIGHT direction on the bottom bazel area.")
|
||||
LAUNCHER_QUICKSWITCH_RIGHT(572),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in DOWN direction on the bottom bazel area.")
|
||||
LAUNCHER_SWIPEDOWN_NAVBAR(573),
|
||||
|
||||
@UiEvent(doc = "User swipes or fling in UP direction from bottom bazel area.")
|
||||
LAUNCHER_HOME_GESTURE(574),
|
||||
|
||||
@UiEvent(doc = "User's workspace layout information is snapshot in the background.")
|
||||
LAUNCHER_WORKSPACE_SNAPSHOT(579),
|
||||
@@ -184,6 +276,7 @@ public class StatsLogManager implements ResourceBasedOverride {
|
||||
LAUNCHER_SELECT_MODE_ITEM(584);
|
||||
|
||||
// ADD MORE
|
||||
|
||||
private final int mId;
|
||||
|
||||
LauncherEvent(int id) {
|
||||
@@ -301,19 +394,12 @@ public class StatsLogManager implements ResourceBasedOverride {
|
||||
};
|
||||
}
|
||||
|
||||
protected LogStateProvider mStateProvider;
|
||||
|
||||
/**
|
||||
* Creates a new instance of {@link StatsLogManager} based on provided context.
|
||||
*/
|
||||
public static StatsLogManager newInstance(Context context) {
|
||||
return newInstance(context, null);
|
||||
}
|
||||
|
||||
public static StatsLogManager newInstance(Context context, LogStateProvider stateProvider) {
|
||||
StatsLogManager mgr = Overrides.getObject(StatsLogManager.class,
|
||||
context.getApplicationContext(), R.string.stats_log_manager_class);
|
||||
mgr.mStateProvider = stateProvider;
|
||||
return mgr;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,28 +6,13 @@ import android.view.ViewParent;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType.DEFAULT_CONTAINERTYPE;
|
||||
|
||||
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.
|
||||
*/
|
||||
@@ -61,20 +46,4 @@ public class StatsLogUtils {
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public class SpringLoadedState extends LauncherState {
|
||||
| FLAG_HIDE_BACK_BUTTON;
|
||||
|
||||
public SpringLoadedState(int id) {
|
||||
super(id, ContainerType.OVERVIEW, STATE_FLAGS);
|
||||
super(id, ContainerType.WORKSPACE, STATE_FLAGS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -21,6 +21,8 @@ import static com.android.launcher3.LauncherState.NORMAL;
|
||||
import static com.android.launcher3.LauncherState.OVERVIEW;
|
||||
import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity;
|
||||
import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_UNKNOWN_SWIPEDOWN;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_UNKNOWN_SWIPEUP;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.ANIM_ALL_COMPONENTS;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.PLAY_ATOMIC_OVERVIEW_SCALE;
|
||||
import static com.android.launcher3.states.StateAnimationConfig.PLAY_NON_ATOMIC;
|
||||
@@ -42,12 +44,14 @@ import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.anim.AnimationSuccessListener;
|
||||
import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||
import com.android.launcher3.anim.PendingAnimation;
|
||||
import com.android.launcher3.logger.LauncherAtom;
|
||||
import com.android.launcher3.logging.StatsLogManager;
|
||||
import com.android.launcher3.states.StateAnimationConfig;
|
||||
import com.android.launcher3.states.StateAnimationConfig.AnimationFlags;
|
||||
import com.android.launcher3.testing.TestProtocol;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
|
||||
import com.android.launcher3.util.FlingBlockCheck;
|
||||
import com.android.launcher3.util.TouchController;
|
||||
|
||||
@@ -298,11 +302,11 @@ public abstract class AbstractStateChangeTouchController
|
||||
public boolean onDrag(float displacement, MotionEvent ev) {
|
||||
if (!mIsLogContainerSet) {
|
||||
if (mStartState == ALL_APPS) {
|
||||
mStartContainerType = LauncherLogProto.ContainerType.ALLAPPS;
|
||||
mStartContainerType = ContainerType.ALLAPPS;
|
||||
} else if (mStartState == NORMAL) {
|
||||
mStartContainerType = getLogContainerTypeForNormalState(ev);
|
||||
} else if (mStartState == OVERVIEW) {
|
||||
mStartContainerType = LauncherLogProto.ContainerType.TASKSWITCHER;
|
||||
mStartContainerType = ContainerType.TASKSWITCHER;
|
||||
}
|
||||
mIsLogContainerSet = true;
|
||||
}
|
||||
@@ -559,10 +563,22 @@ public abstract class AbstractStateChangeTouchController
|
||||
// Transition complete. log the action
|
||||
mLauncher.getUserEventDispatcher().logStateChangeAction(logAction,
|
||||
getDirectionForLog(), mDetector.getDownX(), mDetector.getDownY(),
|
||||
mStartContainerType,
|
||||
mStartState.containerType,
|
||||
mStartContainerType /* e.g., hotseat */,
|
||||
mStartState.containerType /* e.g., workspace */,
|
||||
targetState.containerType,
|
||||
mLauncher.getWorkspace().getCurrentPage());
|
||||
mLauncher.getStatsLogManager().logger()
|
||||
.withSrcState(StatsLogManager.containerTypeToAtomState(mStartState.containerType))
|
||||
.withDstState(StatsLogManager.containerTypeToAtomState(targetState.containerType))
|
||||
.withContainerInfo(LauncherAtom.ContainerInfo.newBuilder()
|
||||
.setWorkspace(
|
||||
LauncherAtom.WorkspaceContainer.newBuilder()
|
||||
.setPageIndex(mLauncher.getWorkspace().getCurrentPage()))
|
||||
.build())
|
||||
.log(StatsLogManager.getLauncherAtomEvent(mStartState.containerType,
|
||||
targetState.containerType, mToState.ordinal > mFromState.ordinal
|
||||
? LAUNCHER_UNKNOWN_SWIPEUP
|
||||
: LAUNCHER_UNKNOWN_SWIPEDOWN));
|
||||
}
|
||||
|
||||
protected void clearState() {
|
||||
|
||||
Reference in New Issue
Block a user