From 0e19f669c3703a6c29baece731b09011e01e1790 Mon Sep 17 00:00:00 2001 From: Anthony Alridge Date: Tue, 2 May 2023 09:30:05 +0000 Subject: Remove auto-launching for single target, multiple tabs This can lead to poor UX when auto-launching across tabs. If the intent picker should be shown (e.g dev calls startActivity), and there is only a single app to handle the intent, then this has no affect. It is handled in either IntentForwarderActivity, or in ResolverActivity (mini-resolver). However, if the dev calls Intent.createChooser/ACTION_CHOOSER, without an ACTION_SEND intent (ChooserActivity), then we show something that looks like an intent picker, which has this incorrect auto-launching logic. For now we simply remove the logic because it doesn't make sesnse in an actual sharing context, and if ACTION_SEND is not used it leads to a security vulnerability and very poor UX (b/270700718). In a future release we can hopefully improve this and treat this case in-line with the intent-picker (e.g., showing the mini-resolver). Bug: 272208024 Bug: 270700718 Test: atest ResolverActivityTest Test: atest UnbundledChoserActivityTest Test: Manually tested, attached screenshots in bug Change-Id: I1a340cab94230cada1e7e805195070b032e7c5ff --- java/tests/src/com/android/intentresolver/ResolverActivityTest.java | 5 +++-- .../src/com/android/intentresolver/UnbundledChooserActivityTest.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'java/tests') diff --git a/java/tests/src/com/android/intentresolver/ResolverActivityTest.java b/java/tests/src/com/android/intentresolver/ResolverActivityTest.java index 5cece092..31c0a498 100644 --- a/java/tests/src/com/android/intentresolver/ResolverActivityTest.java +++ b/java/tests/src/com/android/intentresolver/ResolverActivityTest.java @@ -34,6 +34,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; @@ -741,7 +742,7 @@ public class ResolverActivityTest { } @Test - public void testWorkTab_onePersonalTarget_emptyStateOnWorkTarget_autolaunch() { + public void testWorkTab_onePersonalTarget_emptyStateOnWorkTarget_doesNotAutoLaunch() { markWorkProfileUserAvailable(); int workProfileTargets = 4; List personalResolvedComponentInfos = @@ -763,7 +764,7 @@ public class ResolverActivityTest { mActivityRule.launchActivity(sendIntent); waitForIdle(); - assertThat(chosen[0], is(personalResolvedComponentInfos.get(1).getResolveInfoAt(0))); + assertNull(chosen[0]); } @Test diff --git a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java index 6ba67fa7..c2212bc2 100644 --- a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java +++ b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java @@ -2341,7 +2341,7 @@ public class UnbundledChooserActivityTest { } @Test - public void testWorkTab_onePersonalTarget_emptyStateOnWorkTarget_autolaunch() { + public void testWorkTab_onePersonalTarget_emptyStateOnWorkTarget_doesNotAutoLaunch() { markWorkProfileUserAvailable(); int workProfileTargets = 4; List personalResolvedComponentInfos = @@ -2360,7 +2360,7 @@ public class UnbundledChooserActivityTest { mActivityRule.launchActivity(Intent.createChooser(sendIntent, "Test")); waitForIdle(); - assertThat(chosen[0], is(personalResolvedComponentInfos.get(1).getResolveInfoAt(0))); + assertNull(chosen[0]); } @Test -- cgit v1.2.3-59-g8ed1b