diff options
| author | 2024-08-22 19:32:32 -0700 | |
|---|---|---|
| committer | 2024-08-22 19:39:48 -0700 | |
| commit | 7b7c943272725f89495ade08b299ec4e431ded36 (patch) | |
| tree | 71ceea2eadf035016444d7ed9e09046b0daca842 /java/src/com | |
| parent | 57bad9d1cf27d0272f18285f4b31ca0e31a6411b (diff) | |
Fix ChooserRequest.sharedText value parsing
readChooserRequest was reading sharedText value from the chooser
intent's extra instead of the target intent's extra.
Additional refactorings:
* sharedTextTitle is added to the ChooserReqeust (read from target
intent's EXTRA_TITLE extra);
* ChooserContentPreviewUi is modified to use ChooserReqeust instead of
extracting values form the target intent.
Fix: 361654855
Test: atest IntentResolver-tests-unit
Test: manual testing various previw variations with the ShareTest app
Flag: EXEMPT bugfix
Change-Id: Ic9e0e200f4b9a84df4830e99dd42cb1bc7258caf
Diffstat (limited to 'java/src/com')
4 files changed, 26 insertions, 19 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index 8871ce3f..3db821c1 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -648,7 +648,7 @@ public class ChooserActivity extends Hilt_ChooserActivity implements mChooserContentPreviewUi = new ChooserContentPreviewUi( getCoroutineScope(getLifecycle()), mViewModel.getPreviewDataProvider(), - mRequest.getTargetIntent(), + mRequest, mViewModel.getImageLoader(), actionFactory, createModifyShareActionFactory(), diff --git a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java index 4b955c49..1128ec5d 100644 --- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java @@ -22,7 +22,6 @@ import static com.android.intentresolver.contentpreview.ContentPreviewType.CONTE import static com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_TEXT; import android.content.ClipData; -import android.content.Intent; import android.content.res.Resources; import android.net.Uri; import android.text.TextUtils; @@ -34,6 +33,7 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.intentresolver.ContentTypeHint; +import com.android.intentresolver.data.model.ChooserRequest; import com.android.intentresolver.widget.ActionRow; import com.android.intentresolver.widget.ImagePreviewView.TransitionElementStatusCallback; @@ -102,7 +102,7 @@ public final class ChooserContentPreviewUi { public ChooserContentPreviewUi( CoroutineScope scope, PreviewDataProvider previewData, - Intent targetIntent, + ChooserRequest chooserRequest, ImageLoader imageLoader, ActionFactory actionFactory, Supplier</*@Nullable*/ActionRow.Action> modifyShareActionFactory, @@ -117,7 +117,7 @@ public final class ChooserContentPreviewUi { mModifyShareActionFactory = modifyShareActionFactory; mContentPreviewUi = createContentPreview( previewData, - targetIntent, + chooserRequest, DefaultMimeTypeClassifier.INSTANCE, imageLoader, actionFactory, @@ -133,7 +133,7 @@ public final class ChooserContentPreviewUi { private ContentPreviewUi createContentPreview( PreviewDataProvider previewData, - Intent targetIntent, + ChooserRequest chooserRequest, MimeTypeClassifier typeClassifier, ImageLoader imageLoader, ActionFactory actionFactory, @@ -146,7 +146,9 @@ public final class ChooserContentPreviewUi { if (previewType == CONTENT_PREVIEW_TEXT) { return createTextPreview( mScope, - targetIntent, + chooserRequest.getTargetIntent().getClipData(), + chooserRequest.getSharedText(), + chooserRequest.getSharedTextTitle(), actionFactory, imageLoader, headlineGenerator, @@ -174,15 +176,14 @@ public final class ChooserContentPreviewUi { boolean isSingleImageShare = previewData.getUriCount() == 1 && typeClassifier.isImageType(previewData.getFirstFileInfo().getMimeType()); - CharSequence text = targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT); - if (!TextUtils.isEmpty(text)) { + if (!TextUtils.isEmpty(chooserRequest.getSharedText())) { FilesPlusTextContentPreviewUi previewUi = new FilesPlusTextContentPreviewUi( mScope, isSingleImageShare, previewData.getUriCount(), - targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT), - targetIntent.getType(), + chooserRequest.getSharedText(), + chooserRequest.getTargetType(), actionFactory, imageLoader, typeClassifier, @@ -201,7 +202,7 @@ public final class ChooserContentPreviewUi { return new UnifiedContentPreviewUi( mScope, isSingleImageShare, - targetIntent.getType(), + chooserRequest.getTargetType(), actionFactory, imageLoader, typeClassifier, @@ -243,16 +244,15 @@ public final class ChooserContentPreviewUi { private static TextContentPreviewUi createTextPreview( CoroutineScope scope, - Intent targetIntent, + ClipData previewData, + @Nullable CharSequence sharingText, + @Nullable CharSequence previewTitle, ChooserContentPreviewUi.ActionFactory actionFactory, ImageLoader imageLoader, HeadlineGenerator headlineGenerator, ContentTypeHint contentTypeHint, @Nullable CharSequence metadata ) { - CharSequence sharingText = targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT); - CharSequence previewTitle = targetIntent.getCharSequenceExtra(Intent.EXTRA_TITLE); - ClipData previewData = targetIntent.getClipData(); Uri previewThumbnail = null; if (previewData != null) { if (previewData.getItemCount() > 0) { diff --git a/java/src/com/android/intentresolver/data/model/ChooserRequest.kt b/java/src/com/android/intentresolver/data/model/ChooserRequest.kt index 045a17f6..c4aa2b98 100644 --- a/java/src/com/android/intentresolver/data/model/ChooserRequest.kt +++ b/java/src/com/android/intentresolver/data/model/ChooserRequest.kt @@ -156,6 +156,8 @@ data class ChooserRequest( * TODO: Constrain length? */ val sharedText: CharSequence? = null, + /** Contains title to the text content to share supplied by the source app. */ + val sharedTextTitle: CharSequence? = null, /** * Supplied to diff --git a/java/src/com/android/intentresolver/ui/viewmodel/ChooserRequestReader.kt b/java/src/com/android/intentresolver/ui/viewmodel/ChooserRequestReader.kt index f0f72489..4a194db9 100644 --- a/java/src/com/android/intentresolver/ui/viewmodel/ChooserRequestReader.kt +++ b/java/src/com/android/intentresolver/ui/viewmodel/ChooserRequestReader.kt @@ -18,7 +18,10 @@ package com.android.intentresolver.ui.viewmodel import android.content.ComponentName import android.content.Intent import android.content.Intent.EXTRA_ALTERNATE_INTENTS +import android.content.Intent.EXTRA_CHOOSER_ADDITIONAL_CONTENT_URI +import android.content.Intent.EXTRA_CHOOSER_CONTENT_TYPE_HINT import android.content.Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS +import android.content.Intent.EXTRA_CHOOSER_FOCUSED_ITEM_POSITION import android.content.Intent.EXTRA_CHOOSER_MODIFY_SHARE_ACTION import android.content.Intent.EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER import android.content.Intent.EXTRA_CHOOSER_RESULT_INTENT_SENDER @@ -114,7 +117,8 @@ fun readChooserRequest( val retainInOnStop = optional(value<Boolean>(ChooserActivity.EXTRA_PRIVATE_RETAIN_IN_ON_STOP)) ?: false - val sharedText = optional(value<CharSequence>(EXTRA_TEXT)) + val sharedTextTitle = targetIntent.getCharSequenceExtra(EXTRA_TITLE) + val sharedText = targetIntent.getCharSequenceExtra(EXTRA_TEXT) val chooserActions = readChooserActions() ?: emptyList() @@ -123,15 +127,15 @@ fun readChooserRequest( val additionalContentUri: Uri? val focusedItemPos: Int if (isSendAction && flags.chooserPayloadToggling()) { - additionalContentUri = optional(value<Uri>(Intent.EXTRA_CHOOSER_ADDITIONAL_CONTENT_URI)) - focusedItemPos = optional(value<Int>(Intent.EXTRA_CHOOSER_FOCUSED_ITEM_POSITION)) ?: 0 + additionalContentUri = optional(value<Uri>(EXTRA_CHOOSER_ADDITIONAL_CONTENT_URI)) + focusedItemPos = optional(value<Int>(EXTRA_CHOOSER_FOCUSED_ITEM_POSITION)) ?: 0 } else { additionalContentUri = null focusedItemPos = 0 } val contentTypeHint = - when (optional(value<Int>(Intent.EXTRA_CHOOSER_CONTENT_TYPE_HINT))) { + when (optional(value<Int>(EXTRA_CHOOSER_CONTENT_TYPE_HINT))) { Intent.CHOOSER_CONTENT_TYPE_ALBUM -> ContentTypeHint.ALBUM else -> ContentTypeHint.NONE } @@ -161,6 +165,7 @@ fun readChooserRequest( chosenComponentSender = chosenComponentSender, refinementIntentSender = refinementIntentSender, sharedText = sharedText, + sharedTextTitle = sharedTextTitle, shareTargetFilter = targetIntent.toShareTargetFilter(), additionalContentUri = additionalContentUri, focusedItemPosition = focusedItemPos, |