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

Commit b6d79f59 authored by Jeff Chang's avatar Jeff Chang Committed by Automerger Merge Worker
Browse files

Merge "Exit split-screen if one of the splits is empty" into tm-qpr-dev am: e4b7302a

parents 219dce99 e4b7302a
Loading
Loading
Loading
Loading
+29 −7
Original line number Original line Diff line number Diff line
@@ -337,17 +337,39 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
    }
    }


    public void startTask(int taskId, @SplitPosition int position, @Nullable Bundle options) {
    public void startTask(int taskId, @SplitPosition int position, @Nullable Bundle options) {
        options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options,
        final int[] result = new int[1];
                null /* wct */);
        IRemoteAnimationRunner wrapper = new IRemoteAnimationRunner.Stub() {

            @Override
            public void onAnimationStart(@WindowManager.TransitionOldType int transit,
                    RemoteAnimationTarget[] apps,
                    RemoteAnimationTarget[] wallpapers,
                    RemoteAnimationTarget[] nonApps,
                    final IRemoteAnimationFinishedCallback finishedCallback) {
                try {
                try {
                    finishedCallback.onAnimationFinished();
                } catch (RemoteException e) {
                    Slog.e(TAG, "Failed to invoke onAnimationFinished", e);
                }
                if (result[0] == START_SUCCESS || result[0] == START_TASK_TO_FRONT) {
                    final WindowContainerTransaction evictWct = new WindowContainerTransaction();
                    final WindowContainerTransaction evictWct = new WindowContainerTransaction();
            mStageCoordinator.prepareEvictChildTasks(position, evictWct);
                    mStageCoordinator.prepareEvictNonOpeningChildTasks(position, apps, evictWct);
            final int result =
                    ActivityTaskManager.getService().startActivityFromRecents(taskId, options);
            if (result == START_SUCCESS || result == START_TASK_TO_FRONT) {
                    mSyncQueue.queue(evictWct);
                    mSyncQueue.queue(evictWct);
                }
                }
            }
            @Override
            public void onAnimationCancelled(boolean isKeyguardOccluded) {
            }
        };
        options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options,
                null /* wct */);
        RemoteAnimationAdapter wrappedAdapter = new RemoteAnimationAdapter(wrapper,
                0 /* duration */, 0 /* statusBarTransitionDelay */);
        ActivityOptions activityOptions = ActivityOptions.fromBundle(options);
        activityOptions.update(ActivityOptions.makeRemoteAnimation(wrappedAdapter));

        try {
            result[0] = ActivityTaskManager.getService().startActivityFromRecents(taskId,
                    activityOptions.toBundle());
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            Slog.e(TAG, "Failed to launch task", e);
            Slog.e(TAG, "Failed to launch task", e);
        }
        }
+11 −5
Original line number Original line Diff line number Diff line
@@ -452,11 +452,17 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
                    IRemoteAnimationFinishedCallback finishedCallback,
                    IRemoteAnimationFinishedCallback finishedCallback,
                    SurfaceControl.Transaction t) {
                    SurfaceControl.Transaction t) {
                if (apps == null || apps.length == 0) {
                if (apps == null || apps.length == 0) {
                    if (mMainStage.getChildCount() == 0 || mSideStage.getChildCount() == 0) {
                        mMainExecutor.execute(() ->
                                exitSplitScreen(mMainStage.getChildCount() == 0
                                        ? mSideStage : mMainStage, EXIT_REASON_UNKNOWN));
                    } else {
                        // Switch the split position if launching as MULTIPLE_TASK failed.
                        // Switch the split position if launching as MULTIPLE_TASK failed.
                        if ((fillInIntent.getFlags() & FLAG_ACTIVITY_MULTIPLE_TASK) != 0) {
                        if ((fillInIntent.getFlags() & FLAG_ACTIVITY_MULTIPLE_TASK) != 0) {
                            setSideStagePosition(SplitLayout.reversePosition(
                            setSideStagePosition(SplitLayout.reversePosition(
                                    getSideStagePosition()), null);
                                    getSideStagePosition()), null);
                        }
                        }
                    }


                    // Do nothing when the animation was cancelled.
                    // Do nothing when the animation was cancelled.
                    t.apply();
                    t.apply();
@@ -651,7 +657,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        mShouldUpdateRecents = true;
        mShouldUpdateRecents = true;
        // If any stage has no child after animation finished, it means that split will display
        // If any stage has no child after animation finished, it means that split will display
        // nothing, such status will happen if task and intent is same app but not support
        // nothing, such status will happen if task and intent is same app but not support
        // multi-instagce, we should exit split and expand that app as full screen.
        // multi-instance, we should exit split and expand that app as full screen.
        if (!cancel && (mMainStage.getChildCount() == 0 || mSideStage.getChildCount() == 0)) {
        if (!cancel && (mMainStage.getChildCount() == 0 || mSideStage.getChildCount() == 0)) {
            mMainExecutor.execute(() ->
            mMainExecutor.execute(() ->
                    exitSplitScreen(mMainStage.getChildCount() == 0
                    exitSplitScreen(mMainStage.getChildCount() == 0