summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2023-09-14 01:23:00 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-09-14 01:23:00 +0000
commitcc11500e5dabcf36a875f9e1e321cb2437197879 (patch)
tree1c5b870aeabe70286badc65e2f09e369b2021432 /java
parent585df3df6d2dd7a7b65fa2b164637cad91b0edfb (diff)
parenta7765dc1e6172a4b9a296c9788ebfa3be02ee230 (diff)
Merge "PreviewDataProvider to close content resolver's cursors" into main
Diffstat (limited to 'java')
-rw-r--r--java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt68
-rw-r--r--java/tests/src/com/android/intentresolver/contentpreview/PreviewDataProviderTest.kt22
2 files changed, 55 insertions, 35 deletions
diff --git a/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt b/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt
index 9f1cc6c1..bb303c7b 100644
--- a/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt
+++ b/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt
@@ -264,44 +264,46 @@ constructor(
private val query by lazy { readQueryResult() }
- private fun readQueryResult(): QueryResult {
- val cursor =
- contentResolver.querySafe(uri)?.takeIf { it.moveToFirst() } ?: return QueryResult()
-
- var flagColIdx = -1
- var displayIconUriColIdx = -1
- var nameColIndex = -1
- var titleColIndex = -1
- // TODO: double-check why Cursor#getColumnInded didn't work
- cursor.columnNames.forEachIndexed { i, columnName ->
- when (columnName) {
- DocumentsContract.Document.COLUMN_FLAGS -> flagColIdx = i
- MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI -> displayIconUriColIdx = i
- OpenableColumns.DISPLAY_NAME -> nameColIndex = i
- Downloads.Impl.COLUMN_TITLE -> titleColIndex = i
+ private fun readQueryResult(): QueryResult =
+ contentResolver.querySafe(uri)?.use { cursor ->
+ if (!cursor.moveToFirst()) return@use null
+
+ var flagColIdx = -1
+ var displayIconUriColIdx = -1
+ var nameColIndex = -1
+ var titleColIndex = -1
+ // TODO: double-check why Cursor#getColumnInded didn't work
+ cursor.columnNames.forEachIndexed { i, columnName ->
+ when (columnName) {
+ DocumentsContract.Document.COLUMN_FLAGS -> flagColIdx = i
+ MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI -> displayIconUriColIdx = i
+ OpenableColumns.DISPLAY_NAME -> nameColIndex = i
+ Downloads.Impl.COLUMN_TITLE -> titleColIndex = i
+ }
}
- }
-
- val supportsThumbnail =
- flagColIdx >= 0 && ((cursor.getInt(flagColIdx) and FLAG_SUPPORTS_THUMBNAIL) != 0)
- var title = ""
- if (nameColIndex >= 0) {
- title = cursor.getString(nameColIndex) ?: ""
- }
- if (TextUtils.isEmpty(title) && titleColIndex >= 0) {
- title = cursor.getString(titleColIndex) ?: ""
- }
+ val supportsThumbnail =
+ flagColIdx >= 0 &&
+ ((cursor.getInt(flagColIdx) and FLAG_SUPPORTS_THUMBNAIL) != 0)
- val iconUri =
- if (displayIconUriColIdx >= 0) {
- cursor.getString(displayIconUriColIdx)?.let(Uri::parse)
- } else {
- null
+ var title = ""
+ if (nameColIndex >= 0) {
+ title = cursor.getString(nameColIndex) ?: ""
+ }
+ if (TextUtils.isEmpty(title) && titleColIndex >= 0) {
+ title = cursor.getString(titleColIndex) ?: ""
}
- return QueryResult(supportsThumbnail, title, iconUri)
- }
+ val iconUri =
+ if (displayIconUriColIdx >= 0) {
+ cursor.getString(displayIconUriColIdx)?.let(Uri::parse)
+ } else {
+ null
+ }
+
+ QueryResult(supportsThumbnail, title, iconUri)
+ }
+ ?: QueryResult()
}
private class QueryResult(
diff --git a/java/tests/src/com/android/intentresolver/contentpreview/PreviewDataProviderTest.kt b/java/tests/src/com/android/intentresolver/contentpreview/PreviewDataProviderTest.kt
index 6599baa9..4a8c1392 100644
--- a/java/tests/src/com/android/intentresolver/contentpreview/PreviewDataProviderTest.kt
+++ b/java/tests/src/com/android/intentresolver/contentpreview/PreviewDataProviderTest.kt
@@ -192,8 +192,9 @@ class PreviewDataProviderTest {
val uri = Uri.parse("content://org.pkg.app/test.pdf")
val targetIntent = Intent(Intent.ACTION_SEND).apply { putExtra(Intent.EXTRA_STREAM, uri) }
whenever(contentResolver.getType(uri)).thenReturn("application/pdf")
- whenever(contentResolver.query(uri, METADATA_COLUMNS, null, null))
- .thenReturn(MatrixCursor(columns).apply { addRow(values) })
+ val cursor = MatrixCursor(columns).apply { addRow(values) }
+ whenever(contentResolver.query(uri, METADATA_COLUMNS, null, null)).thenReturn(cursor)
+
val testSubject =
PreviewDataProvider(testScope, targetIntent, contentResolver, mimeTypeClassifier)
@@ -202,6 +203,23 @@ class PreviewDataProviderTest {
assertThat(testSubject.firstFileInfo?.uri).isEqualTo(uri)
assertThat(testSubject.firstFileInfo?.previewUri).isNotNull()
verify(contentResolver, times(1)).getType(any())
+ assertThat(cursor.isClosed).isTrue()
+ }
+
+ @Test
+ fun test_emptyQueryResult_cursorGetsClosed() {
+ val uri = Uri.parse("content://org.pkg.app/test.pdf")
+ val targetIntent = Intent(Intent.ACTION_SEND).apply { putExtra(Intent.EXTRA_STREAM, uri) }
+ whenever(contentResolver.getType(uri)).thenReturn("application/pdf")
+ val cursor = MatrixCursor(emptyArray())
+ whenever(contentResolver.query(uri, METADATA_COLUMNS, null, null)).thenReturn(cursor)
+
+ val testSubject =
+ PreviewDataProvider(testScope, targetIntent, contentResolver, mimeTypeClassifier)
+
+ assertThat(testSubject.previewType).isEqualTo(ContentPreviewType.CONTENT_PREVIEW_FILE)
+ verify(contentResolver, times(1)).query(uri, METADATA_COLUMNS, null, null)
+ assertThat(cursor.isClosed).isTrue()
}
@Test