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

Commit 692e92bf authored by Louis Chang's avatar Louis Chang Committed by Android (Google) Code Review
Browse files

Merge "Providing caller's token when starting activity in TaskFragment" into sc-v2-dev

parents f1a38d12 ca43bb06
Loading
Loading
Loading
Loading
+9 −2
Original line number Original line Diff line number Diff line
@@ -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).
@@ -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();
@@ -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;
        }
        }
+2 −1
Original line number Original line Diff line number Diff line
@@ -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,
+5 −1
Original line number Original line Diff line number Diff line
@@ -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();
+2 −1
Original line number Original line Diff line number Diff line
@@ -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");
+1 −1
Original line number Original line Diff line number Diff line
@@ -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