Loading core/java/android/window/flags/windowing_sdk.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -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 services/core/java/com/android/server/wm/WindowOrganizerController.java +3 −1 Original line number Diff line number Diff line Loading @@ -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) Loading services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading Loading
core/java/android/window/flags/windowing_sdk.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -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
services/core/java/com/android/server/wm/WindowOrganizerController.java +3 −1 Original line number Diff line number Diff line Loading @@ -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) Loading
services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading