Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e55f94e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use InstanceId in SplitscreenEventLogger for non-drag events" into tm-qpr-dev

parents fd32695a 95a7c73b
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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;
}
+38 −14
Original line number Diff line number Diff line
@@ -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() {
@@ -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 */,
@@ -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) {
@@ -446,7 +467,6 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
            mStageCoordinator.startIntentLegacy(intent, fillInIntent, position, options);
            return;
        }

        mStageCoordinator.startIntent(intent, fillInIntent, position, options);
    }

@@ -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);
                    });
        }

+15 −7
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
    }

    /**
@@ -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),
@@ -112,7 +120,7 @@ public class SplitscreenEventLogger {
                mLastMainStageUid,
                mLastSideStagePosition,
                mLastSideStageUid,
                mDragEnterSessionId != null ? mDragEnterSessionId.getId() : 0,
                mEnterSessionId != null ? mEnterSessionId.getId() : 0,
                mLoggerSessionId.getId());
    }

@@ -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;
+31 −8
Original line number Diff line number Diff line
@@ -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) {
@@ -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();
@@ -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);
@@ -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,