summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andrey Epin <ayepin@google.com> 2023-05-05 12:06:26 -0700
committer Andrey Epin <ayepin@google.com> 2023-05-05 12:13:01 -0700
commit7e34b05b23683d154f8743fd1b4e64c3c165d46b (patch)
treeb412985fc7e38aacbb053dd823d286ef18a11cd4
parentd572ef6c2ba73880edecd66c86835e78763d9400 (diff)
Add test content provider to mock uri mime types
Add a content provider that returns getType and getStreamTypes based on the URI query parameters. That allows us not to rely on the debug hook to override URI mime types, mock files with previes, and makes our integration tests more integral. Bug: 280237072 Test: tests themselves Change-Id: I70835439e8b8b41f4dc633f218d662c2bc42c3ae
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java3
-rw-r--r--java/tests/AndroidManifest.xml4
-rw-r--r--java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java2
-rw-r--r--java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java5
-rw-r--r--java/tests/src/com/android/intentresolver/TestContentProvider.kt55
-rw-r--r--java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java66
6 files changed, 89 insertions, 46 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java
index 7f55f78f..ecfaf0e2 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -713,8 +713,7 @@ public class ChooserActivity extends ResolverActivity implements
return resolver.query(uri, null, null, null, null);
}
- @VisibleForTesting
- protected boolean isImageType(@Nullable String mimeType) {
+ private boolean isImageType(@Nullable String mimeType) {
return mimeType != null && mimeType.startsWith("image/");
}
diff --git a/java/tests/AndroidManifest.xml b/java/tests/AndroidManifest.xml
index 306eccb9..05830c4c 100644
--- a/java/tests/AndroidManifest.xml
+++ b/java/tests/AndroidManifest.xml
@@ -29,6 +29,10 @@
<uses-library android:name="android.test.runner" />
<activity android:name="com.android.intentresolver.ChooserWrapperActivity" />
<activity android:name="com.android.intentresolver.ResolverWrapperActivity" />
+ <provider
+ android:authorities="com.android.intentresolver.tests"
+ android:name="com.android.intentresolver.TestContentProvider"
+ android:grantUriPermissions="true" />
</application>
<instrumentation android:name="android.testing.TestableInstrumentation"
diff --git a/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java b/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java
index 9ebeb79d..ce96ef63 100644
--- a/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java
+++ b/java/tests/src/com/android/intentresolver/ChooserActivityOverrideData.java
@@ -61,7 +61,6 @@ public class ChooserActivityOverrideData {
public ChooserActivity.ChooserListController resolverListController;
public ChooserActivity.ChooserListController workResolverListController;
public Boolean isVoiceInteraction;
- public boolean isImageType;
public Cursor resolverCursor;
public boolean resolverForceException;
public ImageLoader imageLoader;
@@ -84,7 +83,6 @@ public class ChooserActivityOverrideData {
isVoiceInteraction = null;
createPackageManager = null;
imageLoader = null;
- isImageType = false;
resolverCursor = null;
resolverForceException = false;
resolverListController = mock(ChooserActivity.ChooserListController.class);
diff --git a/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java b/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java
index d23e4a66..82ba8d4d 100644
--- a/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java
+++ b/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java
@@ -201,11 +201,6 @@ public class ChooserWrapperActivity
}
@Override
- protected boolean isImageType(String mimeType) {
- return sOverrides.isImageType;
- }
-
- @Override
public ChooserActivityLogger getChooserActivityLogger() {
return sOverrides.chooserActivityLogger;
}
diff --git a/java/tests/src/com/android/intentresolver/TestContentProvider.kt b/java/tests/src/com/android/intentresolver/TestContentProvider.kt
new file mode 100644
index 00000000..b3b53baa
--- /dev/null
+++ b/java/tests/src/com/android/intentresolver/TestContentProvider.kt
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.intentresolver
+
+import android.content.ContentProvider
+import android.content.ContentValues
+import android.database.Cursor
+import android.net.Uri
+
+class TestContentProvider : ContentProvider() {
+ override fun query(
+ uri: Uri,
+ projection: Array<out String>?,
+ selection: String?,
+ selectionArgs: Array<out String>?,
+ sortOrder: String?
+ ): Cursor? = null
+
+ override fun getType(uri: Uri): String?
+ = runCatching {
+ uri.getQueryParameter("mimeType")
+ }.getOrNull()
+
+ override fun getStreamTypes(uri: Uri, mimeTypeFilter: String): Array<String>?
+ = runCatching {
+ uri.getQueryParameter("streamType")?.let { arrayOf(it) }
+ }.getOrNull()
+
+ override fun insert(uri: Uri, values: ContentValues?): Uri? = null
+
+ override fun delete(uri: Uri, selection: String?, selectionArgs: Array<out String>?): Int = 0
+
+ override fun update(
+ uri: Uri,
+ values: ContentValues?,
+ selection: String?,
+ selectionArgs: Array<out String>?
+ ): Int = 0
+
+ override fun onCreate(): Boolean = true
+} \ No newline at end of file
diff --git a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
index 7c4838a2..5ea0b47d 100644
--- a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
+++ b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
@@ -97,6 +97,7 @@ import android.view.WindowManager;
import androidx.annotation.CallSuper;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.test.espresso.contrib.RecyclerViewActions;
@@ -695,9 +696,7 @@ public class UnbundledChooserActivityTest {
@Test
public void testFilePlusTextSharing_ExcludeText() {
- Uri uri = Uri.parse(
- "android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ Uri uri = createTestContentProviderUri(null, "image/png");
Intent sendIntent = createSendImageIntent(uri);
ChooserActivityOverrideData.getInstance().imageLoader =
createImageLoader(uri, createBitmap());
@@ -738,9 +737,7 @@ public class UnbundledChooserActivityTest {
@Test
public void testFilePlusTextSharing_RemoveAndAddBackText() {
- Uri uri = Uri.parse(
- "android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ Uri uri = createTestContentProviderUri("application/pdf", "image/png");
Intent sendIntent = createSendImageIntent(uri);
ChooserActivityOverrideData.getInstance().imageLoader =
createImageLoader(uri, createBitmap());
@@ -787,9 +784,7 @@ public class UnbundledChooserActivityTest {
@Test
public void testFilePlusTextSharing_TextExclusionDoesNotAffectAlternativeIntent() {
- Uri uri = Uri.parse(
- "android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ Uri uri = createTestContentProviderUri("image/png", null);
Intent sendIntent = createSendImageIntent(uri);
ChooserActivityOverrideData.getInstance().imageLoader =
createImageLoader(uri, createBitmap());
@@ -832,13 +827,10 @@ public class UnbundledChooserActivityTest {
@Test
public void testImagePlusTextSharing_failedThumbnailAndExcludedText_textChanges() {
- Uri uri = Uri.parse(
- "android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ Uri uri = createTestContentProviderUri("image/png", null);
Intent sendIntent = createSendImageIntent(uri);
ChooserActivityOverrideData.getInstance().imageLoader =
new TestPreviewImageLoader(Collections.emptyMap());
- ChooserActivityOverrideData.getInstance().isImageType = true;
sendIntent.putExtra(Intent.EXTRA_TEXT, "https://google.com/search?q=google");
List<ResolvedComponentInfo> resolvedComponentInfos = Arrays.asList(
@@ -863,7 +855,7 @@ public class UnbundledChooserActivityTest {
onView(withId(R.id.image_view))
.check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE)));
onView(withId(R.id.content_preview_text))
- .check(matches(allOf(isDisplayed(), not(isEnabled()), withText("File only"))));
+ .check(matches(allOf(isDisplayed(), not(isEnabled()), withText("Image only"))));
}
@Test
@@ -930,14 +922,11 @@ public class UnbundledChooserActivityTest {
@Test @Ignore
- public void testEditImageLogs() throws Exception {
- Uri uri = Uri.parse(
- "android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ public void testEditImageLogs() {
+ Uri uri = createTestContentProviderUri("image/png", null);
Intent sendIntent = createSendImageIntent(uri);
ChooserActivityOverrideData.getInstance().imageLoader =
createImageLoader(uri, createBitmap());
- ChooserActivityOverrideData.getInstance().isImageType = true;
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
@@ -956,8 +945,7 @@ public class UnbundledChooserActivityTest {
@Test
public void oneVisibleImagePreview() {
- Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ Uri uri = createTestContentProviderUri("image/png", null);
ArrayList<Uri> uris = new ArrayList<>();
uris.add(uri);
@@ -965,7 +953,6 @@ public class UnbundledChooserActivityTest {
Intent sendIntent = createSendUriIntentWithPreview(uris);
ChooserActivityOverrideData.getInstance().imageLoader =
createImageLoader(uri, createWideBitmap());
- ChooserActivityOverrideData.getInstance().isImageType = true;
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
@@ -993,8 +980,7 @@ public class UnbundledChooserActivityTest {
@Test
public void allThumbnailsFailedToLoad_hidePreview() {
- Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ Uri uri = createTestContentProviderUri("image/jpg", null);
ArrayList<Uri> uris = new ArrayList<>();
uris.add(uri);
@@ -1003,7 +989,6 @@ public class UnbundledChooserActivityTest {
Intent sendIntent = createSendUriIntentWithPreview(uris);
ChooserActivityOverrideData.getInstance().imageLoader =
new TestPreviewImageLoader(Collections.emptyMap());
- ChooserActivityOverrideData.getInstance().isImageType = true;
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
@@ -1016,8 +1001,7 @@ public class UnbundledChooserActivityTest {
@Test
public void testManyVisibleImagePreview_ScrollableImagePreview() {
- Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ Uri uri = createTestContentProviderUri("image/png", null);
ArrayList<Uri> uris = new ArrayList<>();
uris.add(uri);
@@ -1034,7 +1018,6 @@ public class UnbundledChooserActivityTest {
Intent sendIntent = createSendUriIntentWithPreview(uris);
ChooserActivityOverrideData.getInstance().imageLoader =
createImageLoader(uri, createBitmap());
- ChooserActivityOverrideData.getInstance().isImageType = true;
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
@@ -1054,8 +1037,7 @@ public class UnbundledChooserActivityTest {
@Test
public void testImageAndTextPreview() {
- final Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ final Uri uri = createTestContentProviderUri("image/png", null);
final String sharedText = "text-" + System.currentTimeMillis();
ArrayList<Uri> uris = new ArrayList<>();
@@ -1065,7 +1047,6 @@ public class UnbundledChooserActivityTest {
sendIntent.putExtra(Intent.EXTRA_TEXT, sharedText);
ChooserActivityOverrideData.getInstance().imageLoader =
createImageLoader(uri, createBitmap());
- ChooserActivityOverrideData.getInstance().isImageType = true;
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
@@ -1078,8 +1059,7 @@ public class UnbundledChooserActivityTest {
@Test
public void testTextPreviewWhenTextIsSharedWithMultipleImages() {
- final Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ final Uri uri = createTestContentProviderUri("image/png", null);
final String sharedText = "text-" + System.currentTimeMillis();
ArrayList<Uri> uris = new ArrayList<>();
@@ -1090,7 +1070,6 @@ public class UnbundledChooserActivityTest {
sendIntent.putExtra(Intent.EXTRA_TEXT, sharedText);
ChooserActivityOverrideData.getInstance().imageLoader =
createImageLoader(uri, createBitmap());
- ChooserActivityOverrideData.getInstance().isImageType = true;
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
@@ -1170,8 +1149,7 @@ public class UnbundledChooserActivityTest {
@Test
public void testImagePreviewLogging() {
- Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
- + R.drawable.test320x240);
+ Uri uri = createTestContentProviderUri("image/png", null);
ArrayList<Uri> uris = new ArrayList<>();
uris.add(uri);
@@ -1179,7 +1157,6 @@ public class UnbundledChooserActivityTest {
Intent sendIntent = createSendUriIntentWithPreview(uris);
ChooserActivityOverrideData.getInstance().imageLoader =
createImageLoader(uri, createBitmap());
- ChooserActivityOverrideData.getInstance().isImageType = true;
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
@@ -2660,6 +2637,21 @@ public class UnbundledChooserActivityTest {
return sendIntent;
}
+ private Uri createTestContentProviderUri(
+ @Nullable String mimeType, @Nullable String streamType) {
+ String packageName =
+ InstrumentationRegistry.getInstrumentation().getContext().getPackageName();
+ Uri.Builder builder = Uri.parse("content://" + packageName + "/image.png")
+ .buildUpon();
+ if (mimeType != null) {
+ builder.appendQueryParameter("mimeType", mimeType);
+ }
+ if (streamType != null) {
+ builder.appendQueryParameter("streamType", streamType);
+ }
+ return builder.build();
+ }
+
private Intent createSendTextIntentWithPreview(String title, Uri imageThumbnail) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);