diff options
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); |