Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/ISplitScreen.aidl +8 −6 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Intent; import android.content.pm.ShortcutInfo; import android.os.Bundle; import android.os.UserHandle; import com.android.internal.logging.InstanceId; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationTarget; import android.window.RemoteTransition; Loading Loading @@ -67,34 +68,35 @@ interface ISplitScreen { * Starts a shortcut in a stage. */ oneway void startShortcut(String packageName, String shortcutId, int position, in Bundle options, in UserHandle user) = 8; in Bundle options, in UserHandle user, in InstanceId instanceId) = 8; /** * Starts an activity in a stage. */ oneway void startIntent(in PendingIntent intent, in Intent fillInIntent, int position, in Bundle options) = 9; in Bundle options, in InstanceId instanceId) = 9; /** * Starts tasks simultaneously in one transition. */ oneway void startTasks(int mainTaskId, in Bundle mainOptions, int sideTaskId, in Bundle sideOptions, int sidePosition, float splitRatio, in RemoteTransition remoteTransition) = 10; in RemoteTransition remoteTransition, in InstanceId instanceId) = 10; /** * Version of startTasks using legacy transition system. */ oneway void startTasksWithLegacyTransition(int mainTaskId, in Bundle mainOptions, int sideTaskId, in Bundle sideOptions, int sidePosition, float splitRatio, in RemoteAnimationAdapter adapter) = 11; float splitRatio, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 11; /** * Starts a pair of intent and task using legacy transition system. */ oneway void startIntentAndTaskWithLegacyTransition(in PendingIntent pendingIntent, in Intent fillInIntent, int taskId, in Bundle mainOptions,in Bundle sideOptions, int sidePosition, float splitRatio, in RemoteAnimationAdapter adapter) = 12; int sidePosition, float splitRatio, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 12; /** * Blocking call that notifies and gets additional split-screen targets when entering Loading @@ -115,5 +117,5 @@ interface ISplitScreen { */ oneway void startShortcutAndTaskWithLegacyTransition(in ShortcutInfo shortcutInfo, int taskId, in Bundle mainOptions, in Bundle sideOptions, int sidePosition, float splitRatio, in RemoteAnimationAdapter adapter) = 15; in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 15; } libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +38 −14 Original line number Diff line number Diff line Loading @@ -387,6 +387,17 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } } /** * See {@link #startShortcut(String, String, int, Bundle, UserHandle)} * @param instanceId to be used by {@link SplitscreenEventLogger} */ public void startShortcut(String packageName, String shortcutId, @SplitPosition int position, @Nullable Bundle options, UserHandle user, @NonNull InstanceId instanceId) { mStageCoordinator.getLogger().enterRequested(instanceId); startShortcut(packageName, shortcutId, position, options, user); } @Override public void startShortcut(String packageName, String shortcutId, @SplitPosition int position, @Nullable Bundle options, UserHandle user) { IRemoteAnimationRunner wrapper = new IRemoteAnimationRunner.Stub() { Loading Loading @@ -415,7 +426,6 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, 0 /* duration */, 0 /* statusBarTransitionDelay */); ActivityOptions activityOptions = ActivityOptions.fromBundle(options); activityOptions.update(ActivityOptions.makeRemoteAnimation(wrappedAdapter)); try { LauncherApps launcherApps = mContext.getSystemService(LauncherApps.class); launcherApps.startShortcut(packageName, shortcutId, null /* sourceBounds */, Loading @@ -425,6 +435,17 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } } /** * See {@link #startIntent(PendingIntent, Intent, int, Bundle)} * @param instanceId to be used by {@link SplitscreenEventLogger} */ public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent, @SplitPosition int position, @Nullable Bundle options, @NonNull InstanceId instanceId) { mStageCoordinator.getLogger().enterRequested(instanceId); startIntent(intent, fillInIntent, position, options); } @Override public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent, @SplitPosition int position, @Nullable Bundle options) { if (fillInIntent == null) { Loading @@ -446,7 +467,6 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, mStageCoordinator.startIntentLegacy(intent, fillInIntent, position, options); return; } mStageCoordinator.startIntent(intent, fillInIntent, position, options); } Loading Loading @@ -772,60 +792,64 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, @Override public void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startTasks", (controller) -> controller.mStageCoordinator.startTasksWithLegacyTransition( mainTaskId, mainOptions, sideTaskId, sideOptions, sidePosition, splitRatio, adapter)); splitRatio, adapter, instanceId)); } @Override public void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, Intent fillInIntent, int taskId, Bundle mainOptions, Bundle sideOptions, int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { int sidePosition, float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startIntentAndTaskWithLegacyTransition", (controller) -> controller.mStageCoordinator.startIntentAndTaskWithLegacyTransition( pendingIntent, fillInIntent, taskId, mainOptions, sideOptions, sidePosition, splitRatio, adapter)); sidePosition, splitRatio, adapter, instanceId)); } @Override public void startShortcutAndTaskWithLegacyTransition(ShortcutInfo shortcutInfo, int taskId, @Nullable Bundle mainOptions, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startShortcutAndTaskWithLegacyTransition", (controller) -> controller.mStageCoordinator.startShortcutAndTaskWithLegacyTransition( shortcutInfo, taskId, mainOptions, sideOptions, sidePosition, splitRatio, adapter)); splitRatio, adapter, instanceId)); } @Override public void startTasks(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, @Nullable RemoteTransition remoteTransition) { @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startTasks", (controller) -> controller.mStageCoordinator.startTasks(mainTaskId, mainOptions, sideTaskId, sideOptions, sidePosition, splitRatio, remoteTransition)); sideTaskId, sideOptions, sidePosition, splitRatio, remoteTransition, instanceId)); } @Override public void startShortcut(String packageName, String shortcutId, int position, @Nullable Bundle options, UserHandle user) { @Nullable Bundle options, UserHandle user, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startShortcut", (controller) -> { controller.startShortcut(packageName, shortcutId, position, options, user); controller.startShortcut(packageName, shortcutId, position, options, user, instanceId); }); } @Override public void startIntent(PendingIntent intent, Intent fillInIntent, int position, @Nullable Bundle options) { @Nullable Bundle options, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startIntent", (controller) -> { controller.startIntent(intent, fillInIntent, position, options); controller.startIntent(intent, fillInIntent, position, options, instanceId); }); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java +15 −7 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ package com.android.wm.shell.splitscreen; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__OVERVIEW; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER; 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; Loading Loading @@ -59,7 +59,7 @@ public class SplitscreenEventLogger { // Drag info private @SplitPosition int mDragEnterPosition; private InstanceId mDragEnterSessionId; private InstanceId mEnterSessionId; // For deduping async events private int mLastMainStagePosition = -1; Loading @@ -82,9 +82,17 @@ public class SplitscreenEventLogger { /** * May be called before logEnter() to indicate that the session was started from a drag. */ public void enterRequestedByDrag(@SplitPosition int position, InstanceId dragSessionId) { public void enterRequestedByDrag(@SplitPosition int position, InstanceId enterSessionId) { mDragEnterPosition = position; mDragEnterSessionId = dragSessionId; enterRequested(enterSessionId); } /** * 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) { mEnterSessionId = enterSessionId; } /** Loading @@ -97,7 +105,7 @@ public class SplitscreenEventLogger { mLoggerSessionId = mIdSequence.newInstanceId(); int enterReason = mDragEnterPosition != SPLIT_POSITION_UNDEFINED ? getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape) : SPLITSCREEN_UICHANGED__ENTER_REASON__OVERVIEW; : SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER; updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape), mainStageUid); updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape), Loading @@ -112,7 +120,7 @@ public class SplitscreenEventLogger { mLastMainStageUid, mLastSideStagePosition, mLastSideStageUid, mDragEnterSessionId != null ? mDragEnterSessionId.getId() : 0, mEnterSessionId != null ? mEnterSessionId.getId() : 0, mLoggerSessionId.getId()); } Loading Loading @@ -176,7 +184,7 @@ public class SplitscreenEventLogger { // Reset states mLoggerSessionId = null; mDragEnterPosition = SPLIT_POSITION_UNDEFINED; mDragEnterSessionId = null; mEnterSessionId = null; mLastMainStagePosition = -1; mLastMainStageUid = -1; mLastSideStagePosition = -1; Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +31 −8 Original line number Diff line number Diff line Loading @@ -407,6 +407,10 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, return result; } SplitscreenEventLogger getLogger() { return mLogger; } /** Launches an activity into split. */ void startIntent(PendingIntent intent, Intent fillInIntent, @SplitPosition int position, @Nullable Bundle options) { Loading Loading @@ -499,7 +503,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, /** Starts 2 tasks in one transition. */ void startTasks(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, @Nullable RemoteTransition remoteTransition) { @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); mainOptions = mainOptions != null ? mainOptions : new Bundle(); sideOptions = sideOptions != null ? sideOptions : new Bundle(); Loading Loading @@ -528,46 +532,57 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, mSplitTransitions.startEnterTransition( TRANSIT_SPLIT_SCREEN_PAIR_OPEN, wct, remoteTransition, this, null); setEnterInstanceId(instanceId); } /** Starts 2 tasks in one legacy transition. */ void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (sideOptions == null) sideOptions = new Bundle(); addActivityOptions(sideOptions, mSideStage); wct.startTask(sideTaskId, sideOptions); startWithLegacyTransition(wct, mainTaskId, mainOptions, sidePosition, splitRatio, adapter); startWithLegacyTransition(wct, mainTaskId, mainOptions, sidePosition, splitRatio, adapter, instanceId); } /** Start an intent and a task ordered by {@code intentFirst}. */ void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, Intent fillInIntent, int taskId, @Nullable Bundle mainOptions, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (sideOptions == null) sideOptions = new Bundle(); addActivityOptions(sideOptions, mSideStage); wct.sendPendingIntent(pendingIntent, fillInIntent, sideOptions); startWithLegacyTransition(wct, taskId, mainOptions, sidePosition, splitRatio, adapter); startWithLegacyTransition(wct, taskId, mainOptions, sidePosition, splitRatio, adapter, instanceId); } void startShortcutAndTaskWithLegacyTransition(ShortcutInfo shortcutInfo, int taskId, @Nullable Bundle mainOptions, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (sideOptions == null) sideOptions = new Bundle(); addActivityOptions(sideOptions, mSideStage); wct.startShortcut(mContext.getPackageName(), shortcutInfo, sideOptions); startWithLegacyTransition(wct, taskId, mainOptions, sidePosition, splitRatio, adapter); startWithLegacyTransition(wct, taskId, mainOptions, sidePosition, splitRatio, adapter, instanceId); } /** * @param instanceId if {@code null}, will not log. Otherwise it will be used in * {@link SplitscreenEventLogger#logEnter(float, int, int, int, int, boolean)} */ private void startWithLegacyTransition(WindowContainerTransaction wct, int mainTaskId, @Nullable Bundle mainOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { RemoteAnimationAdapter adapter, InstanceId instanceId) { // Init divider first to make divider leash for remote animation target. mSplitLayout.init(); mSplitLayout.setDivideRatio(splitRatio); Loading Loading @@ -643,6 +658,14 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, setDividerVisibility(true, t); updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */); }); setEnterInstanceId(instanceId); } private void setEnterInstanceId(InstanceId instanceId) { if (instanceId != null) { mLogger.enterRequested(instanceId); } } private void onRemoteAnimationFinishedOrCancelled(boolean cancel, Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/ISplitScreen.aidl +8 −6 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Intent; import android.content.pm.ShortcutInfo; import android.os.Bundle; import android.os.UserHandle; import com.android.internal.logging.InstanceId; import android.view.RemoteAnimationAdapter; import android.view.RemoteAnimationTarget; import android.window.RemoteTransition; Loading Loading @@ -67,34 +68,35 @@ interface ISplitScreen { * Starts a shortcut in a stage. */ oneway void startShortcut(String packageName, String shortcutId, int position, in Bundle options, in UserHandle user) = 8; in Bundle options, in UserHandle user, in InstanceId instanceId) = 8; /** * Starts an activity in a stage. */ oneway void startIntent(in PendingIntent intent, in Intent fillInIntent, int position, in Bundle options) = 9; in Bundle options, in InstanceId instanceId) = 9; /** * Starts tasks simultaneously in one transition. */ oneway void startTasks(int mainTaskId, in Bundle mainOptions, int sideTaskId, in Bundle sideOptions, int sidePosition, float splitRatio, in RemoteTransition remoteTransition) = 10; in RemoteTransition remoteTransition, in InstanceId instanceId) = 10; /** * Version of startTasks using legacy transition system. */ oneway void startTasksWithLegacyTransition(int mainTaskId, in Bundle mainOptions, int sideTaskId, in Bundle sideOptions, int sidePosition, float splitRatio, in RemoteAnimationAdapter adapter) = 11; float splitRatio, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 11; /** * Starts a pair of intent and task using legacy transition system. */ oneway void startIntentAndTaskWithLegacyTransition(in PendingIntent pendingIntent, in Intent fillInIntent, int taskId, in Bundle mainOptions,in Bundle sideOptions, int sidePosition, float splitRatio, in RemoteAnimationAdapter adapter) = 12; int sidePosition, float splitRatio, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 12; /** * Blocking call that notifies and gets additional split-screen targets when entering Loading @@ -115,5 +117,5 @@ interface ISplitScreen { */ oneway void startShortcutAndTaskWithLegacyTransition(in ShortcutInfo shortcutInfo, int taskId, in Bundle mainOptions, in Bundle sideOptions, int sidePosition, float splitRatio, in RemoteAnimationAdapter adapter) = 15; in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 15; }
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +38 −14 Original line number Diff line number Diff line Loading @@ -387,6 +387,17 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } } /** * See {@link #startShortcut(String, String, int, Bundle, UserHandle)} * @param instanceId to be used by {@link SplitscreenEventLogger} */ public void startShortcut(String packageName, String shortcutId, @SplitPosition int position, @Nullable Bundle options, UserHandle user, @NonNull InstanceId instanceId) { mStageCoordinator.getLogger().enterRequested(instanceId); startShortcut(packageName, shortcutId, position, options, user); } @Override public void startShortcut(String packageName, String shortcutId, @SplitPosition int position, @Nullable Bundle options, UserHandle user) { IRemoteAnimationRunner wrapper = new IRemoteAnimationRunner.Stub() { Loading Loading @@ -415,7 +426,6 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, 0 /* duration */, 0 /* statusBarTransitionDelay */); ActivityOptions activityOptions = ActivityOptions.fromBundle(options); activityOptions.update(ActivityOptions.makeRemoteAnimation(wrappedAdapter)); try { LauncherApps launcherApps = mContext.getSystemService(LauncherApps.class); launcherApps.startShortcut(packageName, shortcutId, null /* sourceBounds */, Loading @@ -425,6 +435,17 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } } /** * See {@link #startIntent(PendingIntent, Intent, int, Bundle)} * @param instanceId to be used by {@link SplitscreenEventLogger} */ public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent, @SplitPosition int position, @Nullable Bundle options, @NonNull InstanceId instanceId) { mStageCoordinator.getLogger().enterRequested(instanceId); startIntent(intent, fillInIntent, position, options); } @Override public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent, @SplitPosition int position, @Nullable Bundle options) { if (fillInIntent == null) { Loading @@ -446,7 +467,6 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, mStageCoordinator.startIntentLegacy(intent, fillInIntent, position, options); return; } mStageCoordinator.startIntent(intent, fillInIntent, position, options); } Loading Loading @@ -772,60 +792,64 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, @Override public void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startTasks", (controller) -> controller.mStageCoordinator.startTasksWithLegacyTransition( mainTaskId, mainOptions, sideTaskId, sideOptions, sidePosition, splitRatio, adapter)); splitRatio, adapter, instanceId)); } @Override public void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, Intent fillInIntent, int taskId, Bundle mainOptions, Bundle sideOptions, int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { int sidePosition, float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startIntentAndTaskWithLegacyTransition", (controller) -> controller.mStageCoordinator.startIntentAndTaskWithLegacyTransition( pendingIntent, fillInIntent, taskId, mainOptions, sideOptions, sidePosition, splitRatio, adapter)); sidePosition, splitRatio, adapter, instanceId)); } @Override public void startShortcutAndTaskWithLegacyTransition(ShortcutInfo shortcutInfo, int taskId, @Nullable Bundle mainOptions, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startShortcutAndTaskWithLegacyTransition", (controller) -> controller.mStageCoordinator.startShortcutAndTaskWithLegacyTransition( shortcutInfo, taskId, mainOptions, sideOptions, sidePosition, splitRatio, adapter)); splitRatio, adapter, instanceId)); } @Override public void startTasks(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, @Nullable RemoteTransition remoteTransition) { @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startTasks", (controller) -> controller.mStageCoordinator.startTasks(mainTaskId, mainOptions, sideTaskId, sideOptions, sidePosition, splitRatio, remoteTransition)); sideTaskId, sideOptions, sidePosition, splitRatio, remoteTransition, instanceId)); } @Override public void startShortcut(String packageName, String shortcutId, int position, @Nullable Bundle options, UserHandle user) { @Nullable Bundle options, UserHandle user, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startShortcut", (controller) -> { controller.startShortcut(packageName, shortcutId, position, options, user); controller.startShortcut(packageName, shortcutId, position, options, user, instanceId); }); } @Override public void startIntent(PendingIntent intent, Intent fillInIntent, int position, @Nullable Bundle options) { @Nullable Bundle options, InstanceId instanceId) { executeRemoteCallWithTaskPermission(mController, "startIntent", (controller) -> { controller.startIntent(intent, fillInIntent, position, options); controller.startIntent(intent, fillInIntent, position, options, instanceId); }); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java +15 −7 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ package com.android.wm.shell.splitscreen; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__OVERVIEW; import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER; 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; Loading Loading @@ -59,7 +59,7 @@ public class SplitscreenEventLogger { // Drag info private @SplitPosition int mDragEnterPosition; private InstanceId mDragEnterSessionId; private InstanceId mEnterSessionId; // For deduping async events private int mLastMainStagePosition = -1; Loading @@ -82,9 +82,17 @@ public class SplitscreenEventLogger { /** * May be called before logEnter() to indicate that the session was started from a drag. */ public void enterRequestedByDrag(@SplitPosition int position, InstanceId dragSessionId) { public void enterRequestedByDrag(@SplitPosition int position, InstanceId enterSessionId) { mDragEnterPosition = position; mDragEnterSessionId = dragSessionId; enterRequested(enterSessionId); } /** * 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) { mEnterSessionId = enterSessionId; } /** Loading @@ -97,7 +105,7 @@ public class SplitscreenEventLogger { mLoggerSessionId = mIdSequence.newInstanceId(); int enterReason = mDragEnterPosition != SPLIT_POSITION_UNDEFINED ? getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape) : SPLITSCREEN_UICHANGED__ENTER_REASON__OVERVIEW; : SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER; updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape), mainStageUid); updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape), Loading @@ -112,7 +120,7 @@ public class SplitscreenEventLogger { mLastMainStageUid, mLastSideStagePosition, mLastSideStageUid, mDragEnterSessionId != null ? mDragEnterSessionId.getId() : 0, mEnterSessionId != null ? mEnterSessionId.getId() : 0, mLoggerSessionId.getId()); } Loading Loading @@ -176,7 +184,7 @@ public class SplitscreenEventLogger { // Reset states mLoggerSessionId = null; mDragEnterPosition = SPLIT_POSITION_UNDEFINED; mDragEnterSessionId = null; mEnterSessionId = null; mLastMainStagePosition = -1; mLastMainStageUid = -1; mLastSideStagePosition = -1; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +31 −8 Original line number Diff line number Diff line Loading @@ -407,6 +407,10 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, return result; } SplitscreenEventLogger getLogger() { return mLogger; } /** Launches an activity into split. */ void startIntent(PendingIntent intent, Intent fillInIntent, @SplitPosition int position, @Nullable Bundle options) { Loading Loading @@ -499,7 +503,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, /** Starts 2 tasks in one transition. */ void startTasks(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, @Nullable RemoteTransition remoteTransition) { @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); mainOptions = mainOptions != null ? mainOptions : new Bundle(); sideOptions = sideOptions != null ? sideOptions : new Bundle(); Loading Loading @@ -528,46 +532,57 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, mSplitTransitions.startEnterTransition( TRANSIT_SPLIT_SCREEN_PAIR_OPEN, wct, remoteTransition, this, null); setEnterInstanceId(instanceId); } /** Starts 2 tasks in one legacy transition. */ void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (sideOptions == null) sideOptions = new Bundle(); addActivityOptions(sideOptions, mSideStage); wct.startTask(sideTaskId, sideOptions); startWithLegacyTransition(wct, mainTaskId, mainOptions, sidePosition, splitRatio, adapter); startWithLegacyTransition(wct, mainTaskId, mainOptions, sidePosition, splitRatio, adapter, instanceId); } /** Start an intent and a task ordered by {@code intentFirst}. */ void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, Intent fillInIntent, int taskId, @Nullable Bundle mainOptions, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (sideOptions == null) sideOptions = new Bundle(); addActivityOptions(sideOptions, mSideStage); wct.sendPendingIntent(pendingIntent, fillInIntent, sideOptions); startWithLegacyTransition(wct, taskId, mainOptions, sidePosition, splitRatio, adapter); startWithLegacyTransition(wct, taskId, mainOptions, sidePosition, splitRatio, adapter, instanceId); } void startShortcutAndTaskWithLegacyTransition(ShortcutInfo shortcutInfo, int taskId, @Nullable Bundle mainOptions, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter, InstanceId instanceId) { final WindowContainerTransaction wct = new WindowContainerTransaction(); if (sideOptions == null) sideOptions = new Bundle(); addActivityOptions(sideOptions, mSideStage); wct.startShortcut(mContext.getPackageName(), shortcutInfo, sideOptions); startWithLegacyTransition(wct, taskId, mainOptions, sidePosition, splitRatio, adapter); startWithLegacyTransition(wct, taskId, mainOptions, sidePosition, splitRatio, adapter, instanceId); } /** * @param instanceId if {@code null}, will not log. Otherwise it will be used in * {@link SplitscreenEventLogger#logEnter(float, int, int, int, int, boolean)} */ private void startWithLegacyTransition(WindowContainerTransaction wct, int mainTaskId, @Nullable Bundle mainOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { RemoteAnimationAdapter adapter, InstanceId instanceId) { // Init divider first to make divider leash for remote animation target. mSplitLayout.init(); mSplitLayout.setDivideRatio(splitRatio); Loading Loading @@ -643,6 +658,14 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, setDividerVisibility(true, t); updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */); }); setEnterInstanceId(instanceId); } private void setEnterInstanceId(InstanceId instanceId) { if (instanceId != null) { mLogger.enterRequested(instanceId); } } private void onRemoteAnimationFinishedOrCancelled(boolean cancel, Loading