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)
|
||||
@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 ShellController mShellController;
|
||||
private final ShellTaskOrganizer mTaskOrganizer;
|
||||
@@ -394,7 +408,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
|
||||
*/
|
||||
public void startShortcut(String packageName, String shortcutId, @SplitPosition int position,
|
||||
@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);
|
||||
}
|
||||
|
||||
@@ -442,7 +456,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
|
||||
*/
|
||||
public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent,
|
||||
@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);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
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__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_FINISHED;
|
||||
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.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.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_FINISHED;
|
||||
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_UNKNOWN;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.util.Slog;
|
||||
|
||||
import com.android.internal.logging.InstanceId;
|
||||
@@ -59,7 +66,7 @@ public class SplitscreenEventLogger {
|
||||
|
||||
// Drag info
|
||||
private @SplitPosition int mDragEnterPosition;
|
||||
private InstanceId mEnterSessionId;
|
||||
private @Nullable InstanceId mEnterSessionId;
|
||||
|
||||
// For deduping async events
|
||||
private int mLastMainStagePosition = -1;
|
||||
@@ -67,6 +74,7 @@ public class SplitscreenEventLogger {
|
||||
private int mLastSideStagePosition = -1;
|
||||
private int mLastSideStageUid = -1;
|
||||
private float mLastSplitRatio = -1f;
|
||||
private @SplitScreenController.SplitEnterReason int mEnterReason = ENTER_REASON_UNKNOWN;
|
||||
|
||||
public SplitscreenEventLogger() {
|
||||
mIdSequence = new InstanceIdSequence(Integer.MAX_VALUE);
|
||||
@@ -84,15 +92,26 @@ public class SplitscreenEventLogger {
|
||||
*/
|
||||
public void enterRequestedByDrag(@SplitPosition int position, InstanceId enterSessionId) {
|
||||
mDragEnterPosition = position;
|
||||
enterRequested(enterSessionId);
|
||||
enterRequested(enterSessionId, ENTER_REASON_DRAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public void enterRequested(InstanceId enterSessionId) {
|
||||
public void enterRequested(@Nullable InstanceId enterSessionId,
|
||||
@SplitScreenController.SplitEnterReason int enterReason) {
|
||||
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,
|
||||
boolean isLandscape) {
|
||||
mLoggerSessionId = mIdSequence.newInstanceId();
|
||||
int enterReason = mDragEnterPosition != SPLIT_POSITION_UNDEFINED
|
||||
? getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape)
|
||||
: SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER;
|
||||
int enterReason = getLoggerEnterReason(isLandscape);
|
||||
updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape),
|
||||
mainStageUid);
|
||||
updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape),
|
||||
@@ -124,6 +141,20 @@ public class SplitscreenEventLogger {
|
||||
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.
|
||||
*/
|
||||
@@ -189,6 +220,7 @@ public class SplitscreenEventLogger {
|
||||
mLastMainStageUid = -1;
|
||||
mLastSideStagePosition = -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_SIDE;
|
||||
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_FINISHED;
|
||||
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) {
|
||||
if (instanceId != null) {
|
||||
mLogger.enterRequested(instanceId);
|
||||
mLogger.enterRequested(instanceId, ENTER_REASON_LAUNCHER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1472,6 +1474,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
updateRecentTasksSplitPair();
|
||||
|
||||
if (!mLogger.hasStartedSession()) {
|
||||
if (!mLogger.hasValidEnterSessionId()) {
|
||||
mLogger.enterRequested(null /*enterSessionId*/, ENTER_REASON_MULTI_INSTANCE);
|
||||
}
|
||||
mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(),
|
||||
getMainStagePosition(), mMainStage.getTopChildTaskUid(),
|
||||
getSideStagePosition(), mSideStage.getTopChildTaskUid(),
|
||||
|
||||
Reference in New Issue
Block a user