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

Commit b9702138 authored by DuanKe's avatar DuanKe Committed by Chris Li
Browse files

Fix parameter usage error



DelayLastActivityRemoval is not set in HierarchyOp.mLaunchOptions, but in TaskFragmentOperation

Bug:418159069
Flag: com.android.window.flags.fix_set_adjacent_task_fragments_with_params
Test: atest WmTests:TaskFragmentOrganizerControllerTest
Signed-off-by: default avatarDuanKe <duanke@xiaomi.corp-partner.google.com>
(cherry picked from https://partner-android-review.googlesource.com/q/commit:4907d9a937d2e8532e3c67e116f440f5ac22d4e2)
Merged-In: Ib8604a3fa42385026048a37a3cb53373bfa7aa8d
Change-Id: Ib8604a3fa42385026048a37a3cb53373bfa7aa8d
parent e96acc16
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -216,3 +216,14 @@ flag {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    namespace: "windowing_sdk"
    name: "fix_set_adjacent_task_fragments_with_params"
    description: "Fix the params set through setAdjacentTaskFragments"
    bug: "418159069"
    is_fixed_read_only: true
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
 No newline at end of file
+3 −1
Original line number Diff line number Diff line
@@ -1769,7 +1769,9 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
                    effects |= TRANSACT_EFFECTS_LIFECYCLE;
                }

                final Bundle bundle = hop.getLaunchOptions();
                final Bundle bundle = Flags.fixSetAdjacentTaskFragmentsWithParams()
                        ? operation.getBundle()
                        : hop.getLaunchOptions();
                final WindowContainerTransaction.TaskFragmentAdjacentParams adjacentParams =
                        bundle != null
                                ? new WindowContainerTransaction.TaskFragmentAdjacentParams(bundle)
+37 −0
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.view.RemoteAnimationDefinition;
import android.view.SurfaceControl;
@@ -109,6 +110,8 @@ import android.window.WindowContainerTransaction;

import androidx.test.filters.SmallTest;

import com.android.window.flags.Flags;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -1948,6 +1951,40 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase {
                SecurityException.class);
    }

    @EnableFlags(Flags.FLAG_FIX_SET_ADJACENT_TASK_FRAGMENTS_WITH_PARAMS)
    @Test
    public void testApplyTransaction_setAdjacentTaskFragments_withParams() {
        final Task task = createTask(mDisplayContent);
        mTaskFragment = new TaskFragmentBuilder(mAtm)
                .setParentTask(task)
                .setFragmentToken(mFragmentToken)
                .setOrganizer(mOrganizer)
                .build();
        mWindowOrganizerController.mLaunchTaskFragments.put(mFragmentToken, mTaskFragment);
        final IBinder fragmentToken2 = new Binder();
        final TaskFragment taskFragment2 = new TaskFragmentBuilder(mAtm)
                .setParentTask(task)
                .setFragmentToken(fragmentToken2)
                .setOrganizer(mOrganizer)
                .build();
        mWindowOrganizerController.mLaunchTaskFragments.put(fragmentToken2, taskFragment2);

        assertFalse(mTaskFragment.isDelayLastActivityRemoval());
        assertFalse(taskFragment2.isDelayLastActivityRemoval());

        final WindowContainerTransaction.TaskFragmentAdjacentParams params =
                new WindowContainerTransaction.TaskFragmentAdjacentParams();
        params.setShouldDelayPrimaryLastActivityRemoval(true);
        params.setShouldDelaySecondaryLastActivityRemoval(true);
        mTransaction.setAdjacentTaskFragments(mFragmentToken, fragmentToken2, params);
        mOrganizer.applyTransaction(mTransaction, TASK_FRAGMENT_TRANSIT_CHANGE,
                false /* shouldApplyIndependently */);

        assertApplyTransactionAllowed(mTransaction);
        assertTrue(mTaskFragment.isDelayLastActivityRemoval());
        assertTrue(taskFragment2.isDelayLastActivityRemoval());
    }

    @NonNull
    private ActivityRecord setupUntrustedEmbeddingPipReparent() {
        final int pid = Binder.getCallingPid();