summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andrey Yepin <ayepin@google.com> 2024-05-10 19:16:37 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-05-10 19:16:37 +0000
commit6b2802803702740646eb8f07bada2a4d2eec23b8 (patch)
tree4b9eeeb71f9819913498fd149fede5a9ed687509
parentf95a9b5c71a57d6daf9b75c58f543e7bc5debe12 (diff)
parentb5c0bd45601a0d9406a78090c3b56fca3abd30c2 (diff)
Merge "Use preview uri for previews (instead of item uri)" into main
-rw-r--r--java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt11
-rw-r--r--java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractor.kt7
-rw-r--r--java/src/com/android/intentresolver/contentpreview/payloadtoggle/shared/model/PreviewModel.kt6
-rw-r--r--java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModel.kt2
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractorTest.kt22
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractorTest.kt30
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/SelectablePreviewInteractorTest.kt27
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/SelectablePreviewsInteractorTest.kt52
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModelTest.kt23
9 files changed, 125 insertions, 55 deletions
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt
index 9d62ffa2..c7d29a72 100644
--- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt
+++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt
@@ -241,10 +241,13 @@ constructor(
unclaimedRecords: MutableUnclaimedMap,
): PreviewModel =
unclaimedRecords.remove(row.uri)?.second
- ?: PreviewModel(
- uri = row.uri,
- mimeType = uriMetadataReader.getMetadata(row.uri).mimeType,
- )
+ ?: uriMetadataReader.getMetadata(row.uri).let { metadata ->
+ PreviewModel(
+ uri = row.uri,
+ previewUri = metadata.previewUri,
+ mimeType = metadata.mimeType,
+ )
+ }
private fun <M : MutablePreviewMap> M.putAllUnclaimedRight(unclaimed: UnclaimedMap): M =
putAllUnclaimedWhere(unclaimed) { it >= focusedItemIdx }
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractor.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractor.kt
index 927a3a84..c87504e1 100644
--- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractor.kt
+++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractor.kt
@@ -60,7 +60,12 @@ constructor(
// Restrict parallelism so as to not overload the metadata reader; anecdotally, too
// many parallel queries causes failures.
.mapParallel(parallelism = 4) { uri ->
- PreviewModel(uri = uri, mimeType = uriMetadataReader.getMetadata(uri).mimeType)
+ val metadata = uriMetadataReader.getMetadata(uri)
+ PreviewModel(
+ uri = uri,
+ previewUri = metadata.previewUri,
+ mimeType = metadata.mimeType,
+ )
}
.toSet()
}
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/shared/model/PreviewModel.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/shared/model/PreviewModel.kt
index ff96a9f4..6b805391 100644
--- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/shared/model/PreviewModel.kt
+++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/shared/model/PreviewModel.kt
@@ -20,10 +20,10 @@ import android.net.Uri
/** An individual preview presented in Shareousel. */
data class PreviewModel(
- /**
- * Uri for this preview; if this preview is selected, this will be shared with the target app.
- */
+ /** Uri for this item; if this preview is selected, this will be shared with the target app. */
val uri: Uri,
+ /** Uri for the preview image. */
+ val previewUri: Uri? = uri,
/** Mimetype for the data [uri] points to. */
val mimeType: String?,
)
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModel.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModel.kt
index 082581dc..cf118934 100644
--- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModel.kt
+++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModel.kt
@@ -113,7 +113,7 @@ object ShareouselViewModelModule {
keySet.value?.maybeLoad(key)
val previewInteractor = interactor.preview(key)
ShareouselPreviewViewModel(
- bitmap = flow { emit(imageLoader(key.uri)) },
+ bitmap = flow { emit(key.previewUri?.let { imageLoader(it) }) },
contentType = flowOf(ContentType.Image), // TODO: convert from metadata
isSelected = previewInteractor.isSelected,
setSelected = previewInteractor::setSelected,
diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractorTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractorTest.kt
index 81e6b77d..9b786b74 100644
--- a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractorTest.kt
+++ b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractorTest.kt
@@ -53,7 +53,7 @@ class CursorPreviewsInteractorTest {
this.pageSize = pageSize
this.maxLoadedPages = maxLoadedPages
uriMetadataReader = UriMetadataReader {
- FileInfo.Builder(it).withMimeType("image/bitmap").build()
+ FileInfo.Builder(it).withPreviewUri(it).withMimeType("image/bitmap").build()
}
runTest {
block(
@@ -100,10 +100,22 @@ class CursorPreviewsInteractorTest {
assertThat(cursorPreviewsRepository.previewsModel.value!!.loadMoreRight).isNull()
assertThat(cursorPreviewsRepository.previewsModel.value!!.previewModels)
.containsExactly(
- PreviewModel(Uri.fromParts("scheme0", "ssp0", "fragment0"), "image/bitmap"),
- PreviewModel(Uri.fromParts("scheme1", "ssp1", "fragment1"), "image/bitmap"),
- PreviewModel(Uri.fromParts("scheme2", "ssp2", "fragment2"), "image/bitmap"),
- PreviewModel(Uri.fromParts("scheme3", "ssp3", "fragment3"), "image/bitmap"),
+ PreviewModel(
+ uri = Uri.fromParts("scheme0", "ssp0", "fragment0"),
+ mimeType = "image/bitmap"
+ ),
+ PreviewModel(
+ uri = Uri.fromParts("scheme1", "ssp1", "fragment1"),
+ mimeType = "image/bitmap"
+ ),
+ PreviewModel(
+ uri = Uri.fromParts("scheme2", "ssp2", "fragment2"),
+ mimeType = "image/bitmap"
+ ),
+ PreviewModel(
+ uri = Uri.fromParts("scheme3", "ssp3", "fragment3"),
+ mimeType = "image/bitmap"
+ ),
)
.inOrder()
}
diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractorTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractorTest.kt
index da73f4cf..c9f71f49 100644
--- a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractorTest.kt
+++ b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/FetchPreviewsInteractorTest.kt
@@ -62,7 +62,7 @@ class FetchPreviewsInteractorTest {
contentUris = initialSelection.map { uri(it) }
this.focusedItemIndex = focusedItemIndex
uriMetadataReader = UriMetadataReader {
- FileInfo.Builder(it).withMimeType("image/bitmap").build()
+ FileInfo.Builder(it).withPreviewUri(it).withMimeType("image/bitmap").build()
}
this.pageSize = pageSize
this.maxLoadedPages = maxLoadedPages
@@ -104,12 +104,12 @@ class FetchPreviewsInteractorTest {
previewModels =
setOf(
PreviewModel(
- Uri.fromParts("scheme1", "ssp1", "fragment1"),
- "image/bitmap",
+ uri = Uri.fromParts("scheme1", "ssp1", "fragment1"),
+ mimeType = "image/bitmap",
),
PreviewModel(
- Uri.fromParts("scheme2", "ssp2", "fragment2"),
- "image/bitmap",
+ uri = Uri.fromParts("scheme2", "ssp2", "fragment2"),
+ mimeType = "image/bitmap",
),
),
startIdx = 1,
@@ -132,10 +132,22 @@ class FetchPreviewsInteractorTest {
assertThat(previewsModel.value!!.loadMoreRight).isNull()
assertThat(previewsModel.value!!.previewModels)
.containsExactly(
- PreviewModel(Uri.fromParts("scheme0", "ssp0", "fragment0"), "image/bitmap"),
- PreviewModel(Uri.fromParts("scheme1", "ssp1", "fragment1"), "image/bitmap"),
- PreviewModel(Uri.fromParts("scheme2", "ssp2", "fragment2"), "image/bitmap"),
- PreviewModel(Uri.fromParts("scheme3", "ssp3", "fragment3"), "image/bitmap"),
+ PreviewModel(
+ uri = Uri.fromParts("scheme0", "ssp0", "fragment0"),
+ mimeType = "image/bitmap"
+ ),
+ PreviewModel(
+ uri = Uri.fromParts("scheme1", "ssp1", "fragment1"),
+ mimeType = "image/bitmap"
+ ),
+ PreviewModel(
+ uri = Uri.fromParts("scheme2", "ssp2", "fragment2"),
+ mimeType = "image/bitmap"
+ ),
+ PreviewModel(
+ uri = Uri.fromParts("scheme3", "ssp3", "fragment3"),
+ mimeType = "image/bitmap"
+ ),
)
.inOrder()
}
diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/SelectablePreviewInteractorTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/SelectablePreviewInteractorTest.kt
index f8fc4911..a3c65570 100644
--- a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/SelectablePreviewInteractorTest.kt
+++ b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/SelectablePreviewInteractorTest.kt
@@ -39,7 +39,8 @@ class SelectablePreviewInteractorTest {
targetIntentModifier = TargetIntentModifier { error("unexpected invocation") }
val underTest =
SelectablePreviewInteractor(
- key = PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), null),
+ key =
+ PreviewModel(uri = Uri.fromParts("scheme", "ssp", "fragment"), mimeType = null),
selectionInteractor = selectionInteractor,
)
runCurrent()
@@ -52,14 +53,23 @@ class SelectablePreviewInteractorTest {
targetIntentModifier = TargetIntentModifier { error("unexpected invocation") }
val underTest =
SelectablePreviewInteractor(
- key = PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), "image/bitmap"),
+ key =
+ PreviewModel(
+ uri = Uri.fromParts("scheme", "ssp", "fragment"),
+ mimeType = "image/bitmap"
+ ),
selectionInteractor = selectionInteractor,
)
assertThat(underTest.isSelected.first()).isFalse()
previewSelectionsRepository.selections.value =
- setOf(PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), "image/bitmap"))
+ setOf(
+ PreviewModel(
+ uri = Uri.fromParts("scheme", "ssp", "fragment"),
+ mimeType = "image/bitmap"
+ )
+ )
runCurrent()
assertThat(underTest.isSelected.first()).isTrue()
@@ -71,7 +81,11 @@ class SelectablePreviewInteractorTest {
targetIntentModifier = TargetIntentModifier { modifiedIntent }
val underTest =
SelectablePreviewInteractor(
- key = PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), "image/bitmap"),
+ key =
+ PreviewModel(
+ uri = Uri.fromParts("scheme", "ssp", "fragment"),
+ mimeType = "image/bitmap"
+ ),
selectionInteractor = selectionInteractor,
)
@@ -80,7 +94,10 @@ class SelectablePreviewInteractorTest {
assertThat(previewSelectionsRepository.selections.value)
.containsExactly(
- PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), "image/bitmap")
+ PreviewModel(
+ uri = Uri.fromParts("scheme", "ssp", "fragment"),
+ mimeType = "image/bitmap"
+ )
)
assertThat(chooserRequestRepository.chooserRequest.value.targetIntent)
diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/SelectablePreviewsInteractorTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/SelectablePreviewsInteractorTest.kt
index 5fa5cab4..be5ddfe5 100644
--- a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/SelectablePreviewsInteractorTest.kt
+++ b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/SelectablePreviewsInteractorTest.kt
@@ -41,12 +41,12 @@ class SelectablePreviewsInteractorTest {
previewModels =
setOf(
PreviewModel(
- Uri.fromParts("scheme", "ssp", "fragment"),
- "image/bitmap",
+ uri = Uri.fromParts("scheme", "ssp", "fragment"),
+ mimeType = "image/bitmap",
),
PreviewModel(
- Uri.fromParts("scheme2", "ssp2", "fragment2"),
- "image/bitmap",
+ uri = Uri.fromParts("scheme2", "ssp2", "fragment2"),
+ mimeType = "image/bitmap",
),
),
startIdx = 0,
@@ -55,7 +55,7 @@ class SelectablePreviewsInteractorTest {
)
previewSelectionsRepository.selections.value =
setOf(
- PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), null),
+ PreviewModel(uri = Uri.fromParts("scheme", "ssp", "fragment"), mimeType = null),
)
targetIntentModifier = TargetIntentModifier { error("unexpected invocation") }
val underTest = selectablePreviewsInteractor
@@ -64,8 +64,14 @@ class SelectablePreviewsInteractorTest {
assertThat(keySet.value).isNotNull()
assertThat(keySet.value!!.previewModels)
.containsExactly(
- PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), "image/bitmap"),
- PreviewModel(Uri.fromParts("scheme2", "ssp2", "fragment2"), "image/bitmap"),
+ PreviewModel(
+ uri = Uri.fromParts("scheme", "ssp", "fragment"),
+ mimeType = "image/bitmap"
+ ),
+ PreviewModel(
+ uri = Uri.fromParts("scheme2", "ssp2", "fragment2"),
+ mimeType = "image/bitmap"
+ ),
)
.inOrder()
assertThat(keySet.value!!.startIdx).isEqualTo(0)
@@ -73,11 +79,15 @@ class SelectablePreviewsInteractorTest {
assertThat(keySet.value!!.loadMoreRight).isNull()
val firstModel =
- underTest.preview(PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), null))
+ underTest.preview(
+ PreviewModel(uri = Uri.fromParts("scheme", "ssp", "fragment"), mimeType = null)
+ )
assertThat(firstModel.isSelected.first()).isTrue()
val secondModel =
- underTest.preview(PreviewModel(Uri.fromParts("scheme2", "ssp2", "fragment2"), null))
+ underTest.preview(
+ PreviewModel(uri = Uri.fromParts("scheme2", "ssp2", "fragment2"), mimeType = null)
+ )
assertThat(secondModel.isSelected.first()).isFalse()
}
@@ -85,14 +95,16 @@ class SelectablePreviewsInteractorTest {
fun keySet_reflectsRepositoryUpdate() = runKosmosTest {
previewSelectionsRepository.selections.value =
setOf(
- PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), null),
+ PreviewModel(uri = Uri.fromParts("scheme", "ssp", "fragment"), mimeType = null),
)
targetIntentModifier = TargetIntentModifier { error("unexpected invocation") }
val underTest = selectablePreviewsInteractor
val previews = underTest.previews.stateIn(backgroundScope)
val firstModel =
- underTest.preview(PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), null))
+ underTest.preview(
+ PreviewModel(uri = Uri.fromParts("scheme", "ssp", "fragment"), mimeType = null)
+ )
assertThat(previews.value).isNull()
assertThat(firstModel.isSelected.first()).isTrue()
@@ -104,12 +116,12 @@ class SelectablePreviewsInteractorTest {
previewModels =
setOf(
PreviewModel(
- Uri.fromParts("scheme", "ssp", "fragment"),
- "image/bitmap",
+ uri = Uri.fromParts("scheme", "ssp", "fragment"),
+ mimeType = "image/bitmap",
),
PreviewModel(
- Uri.fromParts("scheme2", "ssp2", "fragment2"),
- "image/bitmap",
+ uri = Uri.fromParts("scheme2", "ssp2", "fragment2"),
+ mimeType = "image/bitmap",
),
),
startIdx = 5,
@@ -122,8 +134,14 @@ class SelectablePreviewsInteractorTest {
assertThat(previews.value).isNotNull()
assertThat(previews.value!!.previewModels)
.containsExactly(
- PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), "image/bitmap"),
- PreviewModel(Uri.fromParts("scheme2", "ssp2", "fragment2"), "image/bitmap"),
+ PreviewModel(
+ uri = Uri.fromParts("scheme", "ssp", "fragment"),
+ mimeType = "image/bitmap"
+ ),
+ PreviewModel(
+ uri = Uri.fromParts("scheme2", "ssp2", "fragment2"),
+ mimeType = "image/bitmap"
+ ),
)
.inOrder()
assertThat(previews.value!!.startIdx).isEqualTo(5)
diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModelTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModelTest.kt
index 35ef6613..bd3d88f8 100644
--- a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModelTest.kt
+++ b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/ui/viewmodel/ShareouselViewModelTest.kt
@@ -79,12 +79,12 @@ class ShareouselViewModelTest {
previewSelectionsRepository.selections.value =
setOf(
PreviewModel(
- Uri.fromParts("scheme", "ssp", "fragment"),
- null,
+ uri = Uri.fromParts("scheme", "ssp", "fragment"),
+ mimeType = null,
),
PreviewModel(
- Uri.fromParts("scheme1", "ssp1", "fragment1"),
- null,
+ uri = Uri.fromParts("scheme1", "ssp1", "fragment1"),
+ mimeType = null,
)
)
runCurrent()
@@ -114,12 +114,12 @@ class ShareouselViewModelTest {
previewModels =
setOf(
PreviewModel(
- Uri.fromParts("scheme", "ssp", "fragment"),
- null,
+ uri = Uri.fromParts("scheme", "ssp", "fragment"),
+ mimeType = null,
),
PreviewModel(
- Uri.fromParts("scheme1", "ssp1", "fragment1"),
- null,
+ uri = Uri.fromParts("scheme1", "ssp1", "fragment1"),
+ mimeType = null,
)
),
startIdx = 1,
@@ -141,7 +141,10 @@ class ShareouselViewModelTest {
val previewVm =
shareouselViewModel.preview(
- PreviewModel(Uri.fromParts("scheme1", "ssp1", "fragment1"), null)
+ PreviewModel(
+ uri = Uri.fromParts("scheme1", "ssp1", "fragment1"),
+ mimeType = null
+ )
)
assertWithMessage("preview bitmap is null").that(previewVm.bitmap.first()).isNotNull()
@@ -205,7 +208,7 @@ class ShareouselViewModelTest {
this.pendingIntentSender = pendingIntentSender
this.targetIntentModifier = targetIntentModifier
previewSelectionsRepository.selections.value =
- setOf(PreviewModel(Uri.fromParts("scheme", "ssp", "fragment"), null))
+ setOf(PreviewModel(uri = Uri.fromParts("scheme", "ssp", "fragment"), mimeType = null))
payloadToggleImageLoader =
FakeImageLoader(
initialBitmaps =