Loading core/java/android/window/WindowContainerTransaction.java +9 −2 Original line number Original line Diff line number Diff line Loading @@ -443,6 +443,7 @@ public final class WindowContainerTransaction implements Parcelable { * Starts an activity in the TaskFragment. * Starts an activity in the TaskFragment. * @param fragmentToken client assigned unique token to create TaskFragment with specified in * @param fragmentToken client assigned unique token to create TaskFragment with specified in * {@link TaskFragmentCreationParams#fragmentToken}. * {@link TaskFragmentCreationParams#fragmentToken}. * @param callerToken the activity token that initialized the activity launch. * @param activityIntent intent to start the activity. * @param activityIntent intent to start the activity. * @param activityOptions ActivityOptions to start the activity with. * @param activityOptions ActivityOptions to start the activity with. * @see android.content.Context#startActivity(Intent, Bundle). * @see android.content.Context#startActivity(Intent, Bundle). Loading @@ -450,12 +451,13 @@ public final class WindowContainerTransaction implements Parcelable { */ */ @NonNull @NonNull public WindowContainerTransaction startActivityInTaskFragment( public WindowContainerTransaction startActivityInTaskFragment( @NonNull IBinder fragmentToken, @NonNull Intent activityIntent, @NonNull IBinder fragmentToken, @NonNull IBinder callerToken, @Nullable Bundle activityOptions) { @NonNull Intent activityIntent, @Nullable Bundle activityOptions) { final HierarchyOp hierarchyOp = final HierarchyOp hierarchyOp = new HierarchyOp.Builder( new HierarchyOp.Builder( HierarchyOp.HIERARCHY_OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT) HierarchyOp.HIERARCHY_OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT) .setContainer(fragmentToken) .setContainer(fragmentToken) .setReparentContainer(callerToken) .setActivityIntent(activityIntent) .setActivityIntent(activityIntent) .setLaunchOptions(activityOptions) .setLaunchOptions(activityOptions) .build(); .build(); Loading Loading @@ -1060,6 +1062,11 @@ public final class WindowContainerTransaction implements Parcelable { return mReparent; return mReparent; } } @NonNull public IBinder getCallingActivity() { return mReparent; } public boolean getToTop() { public boolean getToTop() { return mToTop; return mToTop; } } Loading libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/JetpackTaskFragmentOrganizer.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -175,7 +175,8 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { final TaskFragmentCreationParams fragmentOptions = final TaskFragmentCreationParams fragmentOptions = createFragmentOptions(fragmentToken, ownerToken, bounds, windowingMode); createFragmentOptions(fragmentToken, ownerToken, bounds, windowingMode); wct.createTaskFragment(fragmentOptions) wct.createTaskFragment(fragmentOptions) .startActivityInTaskFragment(fragmentToken, activityIntent, activityOptions); .startActivityInTaskFragment(fragmentToken, ownerToken, activityIntent, activityOptions); } } TaskFragmentCreationParams createFragmentOptions(IBinder fragmentToken, IBinder ownerToken, TaskFragmentCreationParams createFragmentOptions(IBinder fragmentToken, IBinder ownerToken, Loading services/core/java/com/android/server/wm/ActivityStartController.java +5 −1 Original line number Original line Diff line number Diff line Loading @@ -495,13 +495,17 @@ public class ActivityStartController { * @param taskFragment TaskFragment {@link TaskFragment} to start the activity in. * @param taskFragment TaskFragment {@link TaskFragment} to start the activity in. * @param activityIntent intent to start the activity. * @param activityIntent intent to start the activity. * @param activityOptions ActivityOptions to start the activity with. * @param activityOptions ActivityOptions to start the activity with. * @param resultTo the caller activity * @return the start result. * @return the start result. */ */ int startActivityInTaskFragment(@NonNull TaskFragment taskFragment, int startActivityInTaskFragment(@NonNull TaskFragment taskFragment, @NonNull Intent activityIntent, @Nullable Bundle activityOptions) { @NonNull Intent activityIntent, @Nullable Bundle activityOptions, @Nullable IBinder resultTo) { return obtainStarter(activityIntent, "startActivityInTaskFragment") return obtainStarter(activityIntent, "startActivityInTaskFragment") .setActivityOptions(activityOptions) .setActivityOptions(activityOptions) .setInTaskFragment(taskFragment) .setInTaskFragment(taskFragment) .setResultTo(resultTo) .setRequestCode(-1) .setCallingUid(Binder.getCallingUid()) .setCallingUid(Binder.getCallingUid()) .setCallingPid(Binder.getCallingPid()) .setCallingPid(Binder.getCallingPid()) .execute(); .execute(); Loading services/core/java/com/android/server/wm/WindowOrganizerController.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -683,7 +683,8 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub final Bundle activityOptions = hop.getLaunchOptions(); final Bundle activityOptions = hop.getLaunchOptions(); final TaskFragment tf = mLaunchTaskFragments.get(fragmentToken); final TaskFragment tf = mLaunchTaskFragments.get(fragmentToken); final int result = mService.getActivityStartController() final int result = mService.getActivityStartController() .startActivityInTaskFragment(tf, activityIntent, activityOptions); .startActivityInTaskFragment(tf, activityIntent, activityOptions, hop.getCallingActivity()); if (!isStartResultSuccessful(result)) { if (!isStartResultSuccessful(result)) { final Throwable exception = final Throwable exception = new ActivityNotFoundException("start activity in taskFragment failed"); new ActivityNotFoundException("start activity in taskFragment failed"); Loading services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -319,7 +319,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { // Allow organizer to create TaskFragment and start/reparent activity to TaskFragment. // Allow organizer to create TaskFragment and start/reparent activity to TaskFragment. mTransaction.createTaskFragment(mock(TaskFragmentCreationParams.class)); mTransaction.createTaskFragment(mock(TaskFragmentCreationParams.class)); mTransaction.startActivityInTaskFragment( mTransaction.startActivityInTaskFragment( mFragmentToken, new Intent(), null /* activityOptions */); mFragmentToken, null /* callerToken */, new Intent(), null /* activityOptions */); mTransaction.reparentActivityToTaskFragment(mFragmentToken, mock(IBinder.class)); mTransaction.reparentActivityToTaskFragment(mFragmentToken, mock(IBinder.class)); // It is expected to fail for the mock TaskFragmentCreationParams. It is ok as we are // It is expected to fail for the mock TaskFragmentCreationParams. It is ok as we are Loading Loading
core/java/android/window/WindowContainerTransaction.java +9 −2 Original line number Original line Diff line number Diff line Loading @@ -443,6 +443,7 @@ public final class WindowContainerTransaction implements Parcelable { * Starts an activity in the TaskFragment. * Starts an activity in the TaskFragment. * @param fragmentToken client assigned unique token to create TaskFragment with specified in * @param fragmentToken client assigned unique token to create TaskFragment with specified in * {@link TaskFragmentCreationParams#fragmentToken}. * {@link TaskFragmentCreationParams#fragmentToken}. * @param callerToken the activity token that initialized the activity launch. * @param activityIntent intent to start the activity. * @param activityIntent intent to start the activity. * @param activityOptions ActivityOptions to start the activity with. * @param activityOptions ActivityOptions to start the activity with. * @see android.content.Context#startActivity(Intent, Bundle). * @see android.content.Context#startActivity(Intent, Bundle). Loading @@ -450,12 +451,13 @@ public final class WindowContainerTransaction implements Parcelable { */ */ @NonNull @NonNull public WindowContainerTransaction startActivityInTaskFragment( public WindowContainerTransaction startActivityInTaskFragment( @NonNull IBinder fragmentToken, @NonNull Intent activityIntent, @NonNull IBinder fragmentToken, @NonNull IBinder callerToken, @Nullable Bundle activityOptions) { @NonNull Intent activityIntent, @Nullable Bundle activityOptions) { final HierarchyOp hierarchyOp = final HierarchyOp hierarchyOp = new HierarchyOp.Builder( new HierarchyOp.Builder( HierarchyOp.HIERARCHY_OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT) HierarchyOp.HIERARCHY_OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT) .setContainer(fragmentToken) .setContainer(fragmentToken) .setReparentContainer(callerToken) .setActivityIntent(activityIntent) .setActivityIntent(activityIntent) .setLaunchOptions(activityOptions) .setLaunchOptions(activityOptions) .build(); .build(); Loading Loading @@ -1060,6 +1062,11 @@ public final class WindowContainerTransaction implements Parcelable { return mReparent; return mReparent; } } @NonNull public IBinder getCallingActivity() { return mReparent; } public boolean getToTop() { public boolean getToTop() { return mToTop; return mToTop; } } Loading
libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/JetpackTaskFragmentOrganizer.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -175,7 +175,8 @@ class JetpackTaskFragmentOrganizer extends TaskFragmentOrganizer { final TaskFragmentCreationParams fragmentOptions = final TaskFragmentCreationParams fragmentOptions = createFragmentOptions(fragmentToken, ownerToken, bounds, windowingMode); createFragmentOptions(fragmentToken, ownerToken, bounds, windowingMode); wct.createTaskFragment(fragmentOptions) wct.createTaskFragment(fragmentOptions) .startActivityInTaskFragment(fragmentToken, activityIntent, activityOptions); .startActivityInTaskFragment(fragmentToken, ownerToken, activityIntent, activityOptions); } } TaskFragmentCreationParams createFragmentOptions(IBinder fragmentToken, IBinder ownerToken, TaskFragmentCreationParams createFragmentOptions(IBinder fragmentToken, IBinder ownerToken, Loading
services/core/java/com/android/server/wm/ActivityStartController.java +5 −1 Original line number Original line Diff line number Diff line Loading @@ -495,13 +495,17 @@ public class ActivityStartController { * @param taskFragment TaskFragment {@link TaskFragment} to start the activity in. * @param taskFragment TaskFragment {@link TaskFragment} to start the activity in. * @param activityIntent intent to start the activity. * @param activityIntent intent to start the activity. * @param activityOptions ActivityOptions to start the activity with. * @param activityOptions ActivityOptions to start the activity with. * @param resultTo the caller activity * @return the start result. * @return the start result. */ */ int startActivityInTaskFragment(@NonNull TaskFragment taskFragment, int startActivityInTaskFragment(@NonNull TaskFragment taskFragment, @NonNull Intent activityIntent, @Nullable Bundle activityOptions) { @NonNull Intent activityIntent, @Nullable Bundle activityOptions, @Nullable IBinder resultTo) { return obtainStarter(activityIntent, "startActivityInTaskFragment") return obtainStarter(activityIntent, "startActivityInTaskFragment") .setActivityOptions(activityOptions) .setActivityOptions(activityOptions) .setInTaskFragment(taskFragment) .setInTaskFragment(taskFragment) .setResultTo(resultTo) .setRequestCode(-1) .setCallingUid(Binder.getCallingUid()) .setCallingUid(Binder.getCallingUid()) .setCallingPid(Binder.getCallingPid()) .setCallingPid(Binder.getCallingPid()) .execute(); .execute(); Loading
services/core/java/com/android/server/wm/WindowOrganizerController.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -683,7 +683,8 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub final Bundle activityOptions = hop.getLaunchOptions(); final Bundle activityOptions = hop.getLaunchOptions(); final TaskFragment tf = mLaunchTaskFragments.get(fragmentToken); final TaskFragment tf = mLaunchTaskFragments.get(fragmentToken); final int result = mService.getActivityStartController() final int result = mService.getActivityStartController() .startActivityInTaskFragment(tf, activityIntent, activityOptions); .startActivityInTaskFragment(tf, activityIntent, activityOptions, hop.getCallingActivity()); if (!isStartResultSuccessful(result)) { if (!isStartResultSuccessful(result)) { final Throwable exception = final Throwable exception = new ActivityNotFoundException("start activity in taskFragment failed"); new ActivityNotFoundException("start activity in taskFragment failed"); Loading
services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -319,7 +319,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase { // Allow organizer to create TaskFragment and start/reparent activity to TaskFragment. // Allow organizer to create TaskFragment and start/reparent activity to TaskFragment. mTransaction.createTaskFragment(mock(TaskFragmentCreationParams.class)); mTransaction.createTaskFragment(mock(TaskFragmentCreationParams.class)); mTransaction.startActivityInTaskFragment( mTransaction.startActivityInTaskFragment( mFragmentToken, new Intent(), null /* activityOptions */); mFragmentToken, null /* callerToken */, new Intent(), null /* activityOptions */); mTransaction.reparentActivityToTaskFragment(mFragmentToken, mock(IBinder.class)); mTransaction.reparentActivityToTaskFragment(mFragmentToken, mock(IBinder.class)); // It is expected to fail for the mock TaskFragmentCreationParams. It is ok as we are // It is expected to fail for the mock TaskFragmentCreationParams. It is ok as we are Loading