Merge "Pass in enter reasons into SplitscreenEventLogger" into tm-qpr-dev am: fa3a8fafda
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19980249 Change-Id: I00374b3f8852a69bb5a45662cc84e93174f15206 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -133,6 +133,20 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
|
|||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@interface ExitReason{}
|
@interface ExitReason{}
|
||||||
|
|
||||||
|
public static final int ENTER_REASON_UNKNOWN = 0;
|
||||||
|
public static final int ENTER_REASON_MULTI_INSTANCE = 1;
|
||||||
|
public static final int ENTER_REASON_DRAG = 2;
|
||||||
|
public static final int ENTER_REASON_LAUNCHER = 3;
|
||||||
|
/** Acts as a mapping to the actual EnterReasons as defined in the logging proto */
|
||||||
|
@IntDef(value = {
|
||||||
|
ENTER_REASON_MULTI_INSTANCE,
|
||||||
|
ENTER_REASON_DRAG,
|
||||||
|
ENTER_REASON_LAUNCHER,
|
||||||
|
ENTER_REASON_UNKNOWN
|
||||||
|
})
|
||||||
|
public @interface SplitEnterReason {
|
||||||
|
}
|
||||||
|
|
||||||
private final ShellCommandHandler mShellCommandHandler;
|
private final ShellCommandHandler mShellCommandHandler;
|
||||||
private final ShellController mShellController;
|
private final ShellController mShellController;
|
||||||
private final ShellTaskOrganizer mTaskOrganizer;
|
private final ShellTaskOrganizer mTaskOrganizer;
|
||||||
@@ -394,7 +408,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
|
|||||||
*/
|
*/
|
||||||
public void startShortcut(String packageName, String shortcutId, @SplitPosition int position,
|
public void startShortcut(String packageName, String shortcutId, @SplitPosition int position,
|
||||||
@Nullable Bundle options, UserHandle user, @NonNull InstanceId instanceId) {
|
@Nullable Bundle options, UserHandle user, @NonNull InstanceId instanceId) {
|
||||||
mStageCoordinator.getLogger().enterRequested(instanceId);
|
mStageCoordinator.getLogger().enterRequested(instanceId, ENTER_REASON_LAUNCHER);
|
||||||
startShortcut(packageName, shortcutId, position, options, user);
|
startShortcut(packageName, shortcutId, position, options, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -442,7 +456,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
|
|||||||
*/
|
*/
|
||||||
public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent,
|
public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent,
|
||||||
@SplitPosition int position, @Nullable Bundle options, @NonNull InstanceId instanceId) {
|
@SplitPosition int position, @Nullable Bundle options, @NonNull InstanceId instanceId) {
|
||||||
mStageCoordinator.getLogger().enterRequested(instanceId);
|
mStageCoordinator.getLogger().enterRequested(instanceId, ENTER_REASON_LAUNCHER);
|
||||||
startIntent(intent, fillInIntent, position, options);
|
startIntent(intent, fillInIntent, position, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
package com.android.wm.shell.splitscreen;
|
package com.android.wm.shell.splitscreen;
|
||||||
|
|
||||||
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER;
|
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER;
|
||||||
|
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__MULTI_INSTANCE;
|
||||||
|
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__UNKNOWN_ENTER;
|
||||||
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_DOES_NOT_SUPPORT_MULTIWINDOW;
|
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_DOES_NOT_SUPPORT_MULTIWINDOW;
|
||||||
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_FINISHED;
|
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_FINISHED;
|
||||||
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__DEVICE_FOLDED;
|
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__DEVICE_FOLDED;
|
||||||
@@ -28,6 +30,10 @@ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED_
|
|||||||
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__UNKNOWN_EXIT;
|
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__UNKNOWN_EXIT;
|
||||||
import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
|
import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
|
||||||
import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED;
|
import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED;
|
||||||
|
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_DRAG;
|
||||||
|
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_LAUNCHER;
|
||||||
|
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_MULTI_INSTANCE;
|
||||||
|
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_UNKNOWN;
|
||||||
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW;
|
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW;
|
||||||
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_FINISHED;
|
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_FINISHED;
|
||||||
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_DEVICE_FOLDED;
|
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_DEVICE_FOLDED;
|
||||||
@@ -38,6 +44,7 @@ import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON
|
|||||||
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP;
|
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP;
|
||||||
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_UNKNOWN;
|
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_UNKNOWN;
|
||||||
|
|
||||||
|
import android.annotation.Nullable;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
|
||||||
import com.android.internal.logging.InstanceId;
|
import com.android.internal.logging.InstanceId;
|
||||||
@@ -59,7 +66,7 @@ public class SplitscreenEventLogger {
|
|||||||
|
|
||||||
// Drag info
|
// Drag info
|
||||||
private @SplitPosition int mDragEnterPosition;
|
private @SplitPosition int mDragEnterPosition;
|
||||||
private InstanceId mEnterSessionId;
|
private @Nullable InstanceId mEnterSessionId;
|
||||||
|
|
||||||
// For deduping async events
|
// For deduping async events
|
||||||
private int mLastMainStagePosition = -1;
|
private int mLastMainStagePosition = -1;
|
||||||
@@ -67,6 +74,7 @@ public class SplitscreenEventLogger {
|
|||||||
private int mLastSideStagePosition = -1;
|
private int mLastSideStagePosition = -1;
|
||||||
private int mLastSideStageUid = -1;
|
private int mLastSideStageUid = -1;
|
||||||
private float mLastSplitRatio = -1f;
|
private float mLastSplitRatio = -1f;
|
||||||
|
private @SplitScreenController.SplitEnterReason int mEnterReason = ENTER_REASON_UNKNOWN;
|
||||||
|
|
||||||
public SplitscreenEventLogger() {
|
public SplitscreenEventLogger() {
|
||||||
mIdSequence = new InstanceIdSequence(Integer.MAX_VALUE);
|
mIdSequence = new InstanceIdSequence(Integer.MAX_VALUE);
|
||||||
@@ -84,15 +92,26 @@ public class SplitscreenEventLogger {
|
|||||||
*/
|
*/
|
||||||
public void enterRequestedByDrag(@SplitPosition int position, InstanceId enterSessionId) {
|
public void enterRequestedByDrag(@SplitPosition int position, InstanceId enterSessionId) {
|
||||||
mDragEnterPosition = position;
|
mDragEnterPosition = position;
|
||||||
enterRequested(enterSessionId);
|
enterRequested(enterSessionId, ENTER_REASON_DRAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* May be called before logEnter() to indicate that the session was started from launcher.
|
* May be called before logEnter() to indicate that the session was started from launcher.
|
||||||
* This specifically is for all the scenarios where split started without a drag interaction
|
* This specifically is for all the scenarios where split started without a drag interaction
|
||||||
*/
|
*/
|
||||||
public void enterRequested(InstanceId enterSessionId) {
|
public void enterRequested(@Nullable InstanceId enterSessionId,
|
||||||
|
@SplitScreenController.SplitEnterReason int enterReason) {
|
||||||
mEnterSessionId = enterSessionId;
|
mEnterSessionId = enterSessionId;
|
||||||
|
mEnterReason = enterReason;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return if an enterSessionId has been set via either
|
||||||
|
* {@link #enterRequested(InstanceId, int)} or
|
||||||
|
* {@link #enterRequestedByDrag(int, InstanceId)}
|
||||||
|
*/
|
||||||
|
public boolean hasValidEnterSessionId() {
|
||||||
|
return mEnterSessionId != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,9 +122,7 @@ public class SplitscreenEventLogger {
|
|||||||
@SplitPosition int sideStagePosition, int sideStageUid,
|
@SplitPosition int sideStagePosition, int sideStageUid,
|
||||||
boolean isLandscape) {
|
boolean isLandscape) {
|
||||||
mLoggerSessionId = mIdSequence.newInstanceId();
|
mLoggerSessionId = mIdSequence.newInstanceId();
|
||||||
int enterReason = mDragEnterPosition != SPLIT_POSITION_UNDEFINED
|
int enterReason = getLoggerEnterReason(isLandscape);
|
||||||
? getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape)
|
|
||||||
: SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER;
|
|
||||||
updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape),
|
updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape),
|
||||||
mainStageUid);
|
mainStageUid);
|
||||||
updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape),
|
updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape),
|
||||||
@@ -124,6 +141,20 @@ public class SplitscreenEventLogger {
|
|||||||
mLoggerSessionId.getId());
|
mLoggerSessionId.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getLoggerEnterReason(boolean isLandscape) {
|
||||||
|
switch (mEnterReason) {
|
||||||
|
case ENTER_REASON_MULTI_INSTANCE:
|
||||||
|
return SPLITSCREEN_UICHANGED__ENTER_REASON__MULTI_INSTANCE;
|
||||||
|
case ENTER_REASON_LAUNCHER:
|
||||||
|
return SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER;
|
||||||
|
case ENTER_REASON_DRAG:
|
||||||
|
return getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape);
|
||||||
|
case ENTER_REASON_UNKNOWN:
|
||||||
|
default:
|
||||||
|
return SPLITSCREEN_UICHANGED__ENTER_REASON__UNKNOWN_ENTER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the framework logging constant given a splitscreen exit reason.
|
* Returns the framework logging constant given a splitscreen exit reason.
|
||||||
*/
|
*/
|
||||||
@@ -189,6 +220,7 @@ public class SplitscreenEventLogger {
|
|||||||
mLastMainStageUid = -1;
|
mLastMainStageUid = -1;
|
||||||
mLastSideStagePosition = -1;
|
mLastSideStagePosition = -1;
|
||||||
mLastSideStageUid = -1;
|
mLastSideStageUid = -1;
|
||||||
|
mEnterReason = ENTER_REASON_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSIT
|
|||||||
import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_MAIN;
|
import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_MAIN;
|
||||||
import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_SIDE;
|
import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_SIDE;
|
||||||
import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_UNDEFINED;
|
import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_UNDEFINED;
|
||||||
|
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_LAUNCHER;
|
||||||
|
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_MULTI_INSTANCE;
|
||||||
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW;
|
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW;
|
||||||
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_FINISHED;
|
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_FINISHED;
|
||||||
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_CHILD_TASK_ENTER_PIP;
|
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_CHILD_TASK_ENTER_PIP;
|
||||||
@@ -669,7 +671,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
|
|
||||||
private void setEnterInstanceId(InstanceId instanceId) {
|
private void setEnterInstanceId(InstanceId instanceId) {
|
||||||
if (instanceId != null) {
|
if (instanceId != null) {
|
||||||
mLogger.enterRequested(instanceId);
|
mLogger.enterRequested(instanceId, ENTER_REASON_LAUNCHER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1472,6 +1474,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
updateRecentTasksSplitPair();
|
updateRecentTasksSplitPair();
|
||||||
|
|
||||||
if (!mLogger.hasStartedSession()) {
|
if (!mLogger.hasStartedSession()) {
|
||||||
|
if (!mLogger.hasValidEnterSessionId()) {
|
||||||
|
mLogger.enterRequested(null /*enterSessionId*/, ENTER_REASON_MULTI_INSTANCE);
|
||||||
|
}
|
||||||
mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(),
|
mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(),
|
||||||
getMainStagePosition(), mMainStage.getTopChildTaskUid(),
|
getMainStagePosition(), mMainStage.getTopChildTaskUid(),
|
||||||
getSideStagePosition(), mSideStage.getTopChildTaskUid(),
|
getSideStagePosition(), mSideStage.getTopChildTaskUid(),
|
||||||
|
|||||||
Reference in New Issue
Block a user