Merge "Providing caller's token when starting activity in TaskFragment" into sc-v2-dev
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user