summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/values-am/strings.xml4
-rw-r--r--java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt8
-rw-r--r--java/tests/src/com/android/intentresolver/AnnotatedUserHandlesTest.kt4
-rw-r--r--java/tests/src/com/android/intentresolver/ChooserRefinementManagerTest.kt14
-rw-r--r--java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java49
-rw-r--r--java/tests/src/com/android/intentresolver/chooser/ImmutableTargetInfoTest.kt12
-rw-r--r--java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt2
7 files changed, 73 insertions, 20 deletions
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index 3bb092c2..d381cfd1 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -76,8 +76,8 @@
<string name="usb_device_resolve_prompt_warn" msgid="4254493957548169620">"ይህ መተግበሪያ የመቅረጽ ፈቃድ አልተሰጠውም፣ ነገር ግን በዚህ ዩኤስቢ መሣሪያ በኩል ኦዲዮን መቅረጽ ይችላል።"</string>
<string name="resolver_personal_tab" msgid="1381052735324320565">"የግል"</string>
<string name="resolver_work_tab" msgid="3588325717455216412">"ሥራ"</string>
- <string name="resolver_personal_tab_accessibility" msgid="4467784352232582574">"የግል እይታ"</string>
- <string name="resolver_work_tab_accessibility" msgid="7581878836587799920">"የስራ እይታ"</string>
+ <string name="resolver_personal_tab_accessibility" msgid="4467784352232582574">"የግል ዕይታ"</string>
+ <string name="resolver_work_tab_accessibility" msgid="7581878836587799920">"የስራ ዕይታ"</string>
<string name="resolver_cross_profile_blocked" msgid="3515194063758605377">"በእርስዎ የአይቲ አስተዳዳሪ ታግዷል"</string>
<string name="resolver_cant_share_with_work_apps_explanation" msgid="2984105853145456723">"ይህ ይዘት በሥራ መተግበሪያዎች መጋራት አይችልም"</string>
<string name="resolver_cant_access_work_apps_explanation" msgid="1463093773348988122">"ይህ ይዘት በሥራ መተግበሪያዎች መከፈት አይችልም"</string>
diff --git a/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt b/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt
index fd5ce3f8..9f1cc6c1 100644
--- a/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt
+++ b/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt
@@ -72,7 +72,6 @@ private const val TIMEOUT_MS = 1_000L
*/
@OpenForTesting
open class PreviewDataProvider
-@VisibleForTesting
@JvmOverloads
constructor(
private val scope: CoroutineScope,
@@ -128,7 +127,8 @@ constructor(
} else {
try {
runBlocking(scope.coroutineContext) {
- withTimeoutOrNull(TIMEOUT_MS) { loadPreviewType() } ?: CONTENT_PREVIEW_FILE
+ withTimeoutOrNull(TIMEOUT_MS) { scope.async { loadPreviewType() }.await() }
+ ?: CONTENT_PREVIEW_FILE
}
} catch (e: CancellationException) {
Log.w(
@@ -152,7 +152,9 @@ constructor(
val builder = FileInfo.Builder(record.uri)
try {
runBlocking(scope.coroutineContext) {
- withTimeoutOrNull(TIMEOUT_MS) { builder.readFromRecord(record) }
+ withTimeoutOrNull(TIMEOUT_MS) {
+ scope.async { builder.readFromRecord(record) }.await()
+ }
}
} catch (e: CancellationException) {
Log.w(
diff --git a/java/tests/src/com/android/intentresolver/AnnotatedUserHandlesTest.kt b/java/tests/src/com/android/intentresolver/AnnotatedUserHandlesTest.kt
index a17a560c..cd2fbc7a 100644
--- a/java/tests/src/com/android/intentresolver/AnnotatedUserHandlesTest.kt
+++ b/java/tests/src/com/android/intentresolver/AnnotatedUserHandlesTest.kt
@@ -37,8 +37,8 @@ class AnnotatedUserHandlesTest {
assertThat(info.userIdOfCallingApp).isEqualTo(42)
assertThat(info.userHandleSharesheetLaunchedAs.identifier).isEqualTo(116)
assertThat(info.personalProfileUserHandle.identifier).isEqualTo(117)
- assertThat(info.workProfileUserHandle.identifier).isEqualTo(118)
- assertThat(info.cloneProfileUserHandle.identifier).isEqualTo(119)
+ assertThat(info.workProfileUserHandle?.identifier).isEqualTo(118)
+ assertThat(info.cloneProfileUserHandle?.identifier).isEqualTo(119)
}
@Test
diff --git a/java/tests/src/com/android/intentresolver/ChooserRefinementManagerTest.kt b/java/tests/src/com/android/intentresolver/ChooserRefinementManagerTest.kt
index bd355c86..61ac0c21 100644
--- a/java/tests/src/com/android/intentresolver/ChooserRefinementManagerTest.kt
+++ b/java/tests/src/com/android/intentresolver/ChooserRefinementManagerTest.kt
@@ -90,7 +90,7 @@ class ChooserRefinementManagerTest {
exampleTargetInfo,
intentSender,
application,
- FakeHandler(Looper.myLooper())
+ FakeHandler(checkNotNull(Looper.myLooper()))
)
)
.isTrue()
@@ -126,7 +126,7 @@ class ChooserRefinementManagerTest {
exampleTargetInfo,
intentSender,
application,
- FakeHandler(Looper.myLooper())
+ FakeHandler(checkNotNull(Looper.myLooper()))
)
)
.isTrue()
@@ -153,7 +153,7 @@ class ChooserRefinementManagerTest {
ImmutableTargetInfo.newBuilder().build(),
intentSender,
application,
- FakeHandler(Looper.myLooper())
+ FakeHandler(checkNotNull(Looper.myLooper()))
)
)
.isFalse()
@@ -172,7 +172,7 @@ class ChooserRefinementManagerTest {
targetInfo,
intentSender,
application,
- FakeHandler(Looper.myLooper())
+ FakeHandler(checkNotNull(Looper.myLooper()))
)
)
.isFalse()
@@ -185,7 +185,7 @@ class ChooserRefinementManagerTest {
exampleTargetInfo,
/* IntentSender */ null,
application,
- FakeHandler(Looper.myLooper())
+ FakeHandler(checkNotNull(Looper.myLooper()))
)
)
.isFalse()
@@ -198,7 +198,7 @@ class ChooserRefinementManagerTest {
exampleTargetInfo,
intentSender,
application,
- FakeHandler(Looper.myLooper())
+ FakeHandler(checkNotNull(Looper.myLooper()))
)
)
.isTrue()
@@ -216,7 +216,7 @@ class ChooserRefinementManagerTest {
exampleTargetInfo,
intentSender,
application,
- FakeHandler(Looper.myLooper()!!)
+ FakeHandler(checkNotNull(Looper.myLooper())!!)
)
)
.isTrue()
diff --git a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
index 5709c912..b8b57403 100644
--- a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
+++ b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
@@ -1010,6 +1010,55 @@ public class UnbundledChooserActivityTest {
}
@Test
+ public void testSlowUriMetadata_fallbackToFilePreview() throws InterruptedException {
+ Uri uri = createTestContentProviderUri(
+ "application/pdf", "image/png", /*streamTypeTimeout=*/4_000);
+ ArrayList<Uri> uris = new ArrayList<>(1);
+ uris.add(uri);
+ Intent sendIntent = createSendUriIntentWithPreview(uris);
+ ChooserActivityOverrideData.getInstance().imageLoader =
+ createImageLoader(uri, createBitmap());
+
+ List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
+
+ setupResolverControllers(resolvedComponentInfos);
+ assertThat(launchActivityWithTimeout(Intent.createChooser(sendIntent, null), 2_000))
+ .isTrue();
+ waitForIdle();
+
+ onView(withId(R.id.content_preview_filename)).check(matches(isDisplayed()));
+ onView(withId(R.id.content_preview_filename)).check(matches(withText("image.png")));
+ onView(withId(R.id.content_preview_file_icon)).check(matches(isDisplayed()));
+ }
+
+ @Test
+ public void testSendManyFilesWithSmallMetadataDelayAndOneImage_fallbackToFilePreviewUi()
+ throws InterruptedException {
+ Uri fileUri = createTestContentProviderUri(
+ "application/pdf", "application/pdf", /*streamTypeTimeout=*/150);
+ Uri imageUri = createTestContentProviderUri("application/pdf", "image/png");
+ ArrayList<Uri> uris = new ArrayList<>(50);
+ for (int i = 0; i < 49; i++) {
+ uris.add(fileUri);
+ }
+ uris.add(imageUri);
+ Intent sendIntent = createSendUriIntentWithPreview(uris);
+ ChooserActivityOverrideData.getInstance().imageLoader =
+ createImageLoader(imageUri, createBitmap());
+
+ List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
+ setupResolverControllers(resolvedComponentInfos);
+ assertThat(launchActivityWithTimeout(Intent.createChooser(sendIntent, null), 2_000))
+ .isTrue();
+
+ waitForIdle();
+
+ onView(withId(R.id.content_preview_filename)).check(matches(isDisplayed()));
+ onView(withId(R.id.content_preview_filename)).check(matches(withText("image.png")));
+ onView(withId(R.id.content_preview_file_icon)).check(matches(isDisplayed()));
+ }
+
+ @Test
public void testManyVisibleImagePreview_ScrollableImagePreview() {
Uri uri = createTestContentProviderUri("image/png", null);
diff --git a/java/tests/src/com/android/intentresolver/chooser/ImmutableTargetInfoTest.kt b/java/tests/src/com/android/intentresolver/chooser/ImmutableTargetInfoTest.kt
index 504cfd97..f3ca76a9 100644
--- a/java/tests/src/com/android/intentresolver/chooser/ImmutableTargetInfoTest.kt
+++ b/java/tests/src/com/android/intentresolver/chooser/ImmutableTargetInfoTest.kt
@@ -220,7 +220,7 @@ class ImmutableTargetInfoTest {
val originalInfo = ImmutableTargetInfo.newBuilder()
.setResolvedIntent(originalIntent)
.build()
- val info = originalInfo.tryToCloneWithAppliedRefinement(refinementIntent)
+ val info = checkNotNull(originalInfo.tryToCloneWithAppliedRefinement(refinementIntent))
assertThat(info?.baseIntentToSend?.getBooleanExtra("ORIGINAL", false)).isTrue()
assertThat(info?.baseIntentToSend?.getBooleanExtra("REFINEMENT", false)).isTrue()
@@ -243,7 +243,8 @@ class ImmutableTargetInfoTest {
val refinementIntent = Intent("REFINE_ME")
refinementIntent.setPackage("original") // Has to match for refinement.
- val info = infoWithReferrerFillIn.tryToCloneWithAppliedRefinement(refinementIntent)
+ val info =
+ checkNotNull(infoWithReferrerFillIn.tryToCloneWithAppliedRefinement(refinementIntent))
assertThat(info?.baseIntentToSend?.getPackage()).isEqualTo("original") // Set all along.
assertThat(info?.baseIntentToSend?.action).isEqualTo("REFINE_ME") // Refinement wins.
@@ -265,8 +266,9 @@ class ImmutableTargetInfoTest {
.setReferrerFillInIntent(referrerFillInIntent)
.build()
- val refined1 = originalInfo.tryToCloneWithAppliedRefinement(refinementIntent1)
- val refined2 = refined1?.tryToCloneWithAppliedRefinement(refinementIntent2) // Cloned clone.
+ val refined1 = checkNotNull(originalInfo.tryToCloneWithAppliedRefinement(refinementIntent1))
+ // Cloned clone.
+ val refined2 = checkNotNull(refined1.tryToCloneWithAppliedRefinement(refinementIntent2))
// Both clones get the same values filled in from the referrer intent.
assertThat(refined1?.baseIntentToSend?.getStringExtra("TEST")).isEqualTo("REFERRER")
@@ -300,7 +302,7 @@ class ImmutableTargetInfoTest {
val refinement = Intent("REFINE_ME") // First match is `targetAlternate`
refinement.putExtra("refinement", true)
- val refinedResult = originalInfo.tryToCloneWithAppliedRefinement(refinement)
+ val refinedResult = checkNotNull(originalInfo.tryToCloneWithAppliedRefinement(refinement))
assertThat(refinedResult?.baseIntentToSend?.getBooleanExtra("refinement", false)).isTrue()
assertThat(refinedResult?.baseIntentToSend?.getBooleanExtra("targetAlternate", false))
.isTrue()
diff --git a/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt b/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt
index f9d3dd96..78e0c3ee 100644
--- a/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt
+++ b/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt
@@ -232,7 +232,7 @@ class TargetInfoTest {
val refinement = Intent("REFINE_ME") // First match is `targetAlternate`
refinement.putExtra("refinement", true)
- val refinedResult = originalInfo.tryToCloneWithAppliedRefinement(refinement)
+ val refinedResult = checkNotNull(originalInfo.tryToCloneWithAppliedRefinement(refinement))
// Note `DisplayResolveInfo` targets merge refinements directly into their `resolvedIntent`.
assertThat(refinedResult?.resolvedIntent?.getBooleanExtra("refinement", false)).isTrue()
assertThat(refinedResult?.resolvedIntent?.getBooleanExtra("targetAlternate", false))