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

Commit 15028e03 authored by Vinit Nayak's avatar Vinit Nayak
Browse files

Handle race between creating and assigning RemoteTargetHandles

* Getting a callback from shell to inform when task is in split
and when it's been removed is asynchronous, and not
coordinated with launcher's swipe up gesture.
* There's a chance that user can quickswitch to single app
and start swipe up before shell could notify
LauncherSplitScreenListener, which would cause mismatched state.

Bug: 199658495
Change-Id: I722eeb26d83e99b2a2f77748984d0d7c390b5fec
parent 60c64ade
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -16,9 +16,8 @@

package com.android.quickstep;

import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;

import android.content.Context;
import android.util.Log;

import androidx.annotation.Nullable;

@@ -34,7 +33,9 @@ import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
 * {@link TaskViewSimulator}
 */
public class RemoteTargetGluer {
    private final RemoteTargetHandle[] mRemoteTargetHandles;
    private static final String TAG = "RemoteTargetGluer";

    private RemoteTargetHandle[] mRemoteTargetHandles;
    private SplitConfigurationOptions.StagedSplitBounds mStagedSplitBounds;

    /**
@@ -93,6 +94,13 @@ public class RemoteTargetGluer {
    public RemoteTargetHandle[] assignTargetsForSplitScreen(RemoteAnimationTargets targets) {
        int[] splitIds = LauncherSplitScreenListener.INSTANCE.getNoCreate()
                .getRunningSplitTaskIds();
        if (splitIds.length == 0 && mRemoteTargetHandles.length > 1) {
            // There's a chance that between the creation of this class and assigning targets,
            // LauncherSplitScreenListener may have received callback that removes split
            mRemoteTargetHandles = new RemoteTargetHandle[]{mRemoteTargetHandles[0]};
            Log.w(TAG, "splitTaskIds changed between creation and assignment");
        }

        RemoteAnimationTargetCompat primaryTaskTarget;
        RemoteAnimationTargetCompat secondaryTaskTarget;
        if (mRemoteTargetHandles.length == 1) {