diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java index 9604f74fe3e..0272b5c6dfa 100644 --- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java +++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java @@ -402,10 +402,14 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle try { final int userId = intent.getIntExtra(Intent.EXTRA_USER_ID, -1); + // b/33117269: Note that launchIntent may launch activity in different task which set + // different launchMode (e.g. Files), using startActivityForesult to set task as + // source task, and set requestCode as 0 means don't care about returnCode currently. if (userId == -1) { - mFragment.startActivity(intent); + mFragment.startActivityForResult(intent, 0 /* requestCode not used */); } else { - mFragment.getActivity().startActivityAsUser(intent, new UserHandle(userId)); + mFragment.getActivity().startActivityForResultAsUser(intent, + 0 /* requestCode not used */, new UserHandle(userId)); } } catch (ActivityNotFoundException e) { Log.w(TAG, "No activity found for " + intent); diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java index a4107f5b186..c8ed42e342c 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java @@ -19,6 +19,7 @@ import static com.android.settings.applications.manageapplications.ManageApplica import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_WORK_ONLY; import static com.android.settings.utils.FileSizeFormatter.MEGABYTE_IN_BYTES; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; @@ -123,7 +124,8 @@ public class StorageItemPreferenceControllerTest { mController.handlePreferenceTreeClick(mPreference); final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(mActivity).startActivityAsUser(argumentCaptor.capture(), nullable(UserHandle.class)); + verify(mActivity).startActivityForResultAsUser(argumentCaptor.capture(), anyInt(), + nullable(UserHandle.class)); final Intent intent = argumentCaptor.getValue(); assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); @@ -140,8 +142,8 @@ public class StorageItemPreferenceControllerTest { mController.handlePreferenceTreeClick(mPreference); final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(mFragment.getActivity()) - .startActivityAsUser(argumentCaptor.capture(), nullable(UserHandle.class)); + verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), + anyInt(), nullable(UserHandle.class)); final Intent intent = argumentCaptor.getValue(); assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); @@ -167,8 +169,8 @@ public class StorageItemPreferenceControllerTest { mController.handlePreferenceTreeClick(mPreference); final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(), - nullable(UserHandle.class)); + verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), + anyInt(), nullable(UserHandle.class)); final Intent intent = argumentCaptor.getValue(); assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); @@ -186,8 +188,8 @@ public class StorageItemPreferenceControllerTest { mController.handlePreferenceTreeClick(mPreference); final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(mFragment.getActivity()) - .startActivityAsUser(argumentCaptor.capture(), nullable(UserHandle.class)); + verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), + anyInt(), nullable(UserHandle.class)); Intent intent = argumentCaptor.getValue(); assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); @@ -223,8 +225,8 @@ public class StorageItemPreferenceControllerTest { .isTrue(); final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(), - nullable(UserHandle.class)); + verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), + anyInt(), nullable(UserHandle.class)); Intent intent = argumentCaptor.getValue(); Intent browseIntent = mVolume.buildBrowseIntent(); @@ -240,8 +242,8 @@ public class StorageItemPreferenceControllerTest { mController.handlePreferenceTreeClick(mPreference); final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(), - nullable(UserHandle.class)); + verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), + anyInt(), nullable(UserHandle.class)); Intent intent = argumentCaptor.getValue(); assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); @@ -258,8 +260,8 @@ public class StorageItemPreferenceControllerTest { mController.handlePreferenceTreeClick(mPreference); final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class); - verify(mFragment.getActivity()).startActivityAsUser(argumentCaptor.capture(), - nullable(UserHandle.class)); + verify(mFragment.getActivity()).startActivityForResultAsUser(argumentCaptor.capture(), + anyInt(), nullable(UserHandle.class)); Intent intent = argumentCaptor.getValue(); assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN);