From 4d3be0bf0b52a809f42f968c6bf51165300b43c7 Mon Sep 17 00:00:00 2001 From: arangelov Date: Thu, 23 Apr 2020 18:54:15 +0100 Subject: [PATCH] Check whether should auto launch after showing empty state screen Fixes: 154812743 Test: manual Test: atest ChooserActivityTest Test: atest ResolverActivityTest Change-Id: I9f861bb6f7e4b7ff087aa74c554cc4e52f8ce614 --- .../internal/app/ResolverActivity.java | 7 ++++- .../internal/app/ChooserActivityTest.java | 25 ++++++++++++++++++ .../internal/app/ResolverActivityTest.java | 26 +++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 00faa3b3d21eb..837270a8b004f 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -1027,7 +1027,7 @@ public class ResolverActivity extends Activity implements @Override // ResolverListCommunicator public final void onPostListReady(ResolverListAdapter listAdapter, boolean doPostProcessing) { - if (isAutolaunching() || maybeAutolaunchActivity()) { + if (isAutolaunching()) { return; } if (mMultiProfilePagerAdapter.shouldShowEmptyStateScreen(listAdapter)) { @@ -1035,6 +1035,11 @@ public class ResolverActivity extends Activity implements } else { mMultiProfilePagerAdapter.showListView(listAdapter); } + // showEmptyResolverListEmptyState can mark the tab as loaded, + // which is a precondition for auto launching + if (maybeAutolaunchActivity()) { + return; + } if (doPostProcessing) { maybeCreateHeader(listAdapter); resetButtonBar(); diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java index 583c75102d526..c52555b5ed326 100644 --- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java +++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java @@ -1725,6 +1725,31 @@ public class ChooserActivityTest { assertThat(chosen[0], is(personalResolvedComponentInfos.get(0).getResolveInfoAt(0))); } + @Test + public void testWorkTab_onePersonalTarget_emptyStateOnWorkTarget_autolaunch() { + // enable the work tab feature flag + ResolverActivity.ENABLE_TABBED_VIEW = true; + markWorkProfileUserAvailable(); + int workProfileTargets = 4; + List personalResolvedComponentInfos = + createResolvedComponentsForTestWithOtherProfile(2, /* userId */ 10); + List workResolvedComponentInfos = + createResolvedComponentsForTest(workProfileTargets); + sOverrides.hasCrossProfileIntents = false; + setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); + Intent sendIntent = createSendTextIntent(); + ResolveInfo[] chosen = new ResolveInfo[1]; + sOverrides.onSafelyStartCallback = targetInfo -> { + chosen[0] = targetInfo.getResolveInfo(); + return true; + }; + + mActivityRule.launchActivity(sendIntent); + waitForIdle(); + + assertThat(chosen[0], is(personalResolvedComponentInfos.get(1).getResolveInfoAt(0))); + } + private Intent createSendTextIntent() { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java index 07aa654cae1ec..0d5278678bb8a 100644 --- a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java +++ b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java @@ -801,6 +801,32 @@ public class ResolverActivityTest { assertThat(chosen[0], is(personalResolvedComponentInfos.get(0).getResolveInfoAt(0))); } + @Test + public void testWorkTab_onePersonalTarget_emptyStateOnWorkTarget_autolaunch() { + // enable the work tab feature flag + ResolverActivity.ENABLE_TABBED_VIEW = true; + markWorkProfileUserAvailable(); + int workProfileTargets = 4; + List personalResolvedComponentInfos = + createResolvedComponentsForTestWithOtherProfile(2, /* userId */ 10); + List workResolvedComponentInfos = + createResolvedComponentsForTest(workProfileTargets); + sOverrides.hasCrossProfileIntents = false; + setupResolverControllers(personalResolvedComponentInfos, workResolvedComponentInfos); + Intent sendIntent = createSendImageIntent(); + sendIntent.setType("TestType"); + ResolveInfo[] chosen = new ResolveInfo[1]; + sOverrides.onSafelyStartCallback = targetInfo -> { + chosen[0] = targetInfo.getResolveInfo(); + return true; + }; + + mActivityRule.launchActivity(sendIntent); + waitForIdle(); + + assertThat(chosen[0], is(personalResolvedComponentInfos.get(1).getResolveInfoAt(0))); + } + private Intent createSendImageIntent() { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND);