From f016e5ff5b3d4d1b515aff469e9e0c18531d0de5 Mon Sep 17 00:00:00 2001 From: Matt Casey Date: Wed, 22 Mar 2023 10:49:49 +0000 Subject: Revert "Revert "Add headline to sharesheet."" This reverts commit 6aaafb277958144a39f9ff4c8328a29eb2db6e38. Reason for revert: Fixing test to submit Change-Id: I99e4f091d5f8812d18415993c07c78e739926c40 --- .../android/intentresolver/ChooserActivity.java | 4 +- .../contentpreview/ChooserContentPreviewUi.java | 42 ++++++--- .../contentpreview/ContentPreviewUi.java | 17 +++- .../contentpreview/FileContentPreviewUi.java | 9 +- .../contentpreview/HeadlineGenerator.kt | 35 ++++++++ .../contentpreview/HeadlineGeneratorImpl.kt | 67 ++++++++++++++ .../contentpreview/ImageContentPreviewUi.java | 21 ++++- .../contentpreview/TextContentPreviewUi.java | 9 +- .../contentpreview/UnifiedContentPreviewUi.java | 100 ++++++++++++++------- 9 files changed, 251 insertions(+), 53 deletions(-) create mode 100644 java/src/com/android/intentresolver/contentpreview/HeadlineGenerator.kt create mode 100644 java/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImpl.kt (limited to 'java/src') diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index 341e1d52..1dce3b97 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -84,6 +84,7 @@ import com.android.intentresolver.chooser.DisplayResolveInfo; import com.android.intentresolver.chooser.MultiDisplayResolveInfo; import com.android.intentresolver.chooser.TargetInfo; import com.android.intentresolver.contentpreview.ChooserContentPreviewUi; +import com.android.intentresolver.contentpreview.HeadlineGeneratorImpl; import com.android.intentresolver.flags.FeatureFlagRepository; import com.android.intentresolver.flags.FeatureFlagRepositoryFactory; import com.android.intentresolver.flags.Flags; @@ -291,7 +292,8 @@ public class ChooserActivity extends ResolverActivity implements createPreviewImageLoader(), createChooserActionFactory(), mEnterTransitionAnimationDelegate, - mFeatureFlagRepository); + mFeatureFlagRepository, + new HeadlineGeneratorImpl(this)); setAdditionalTargets(mChooserRequest.getAdditionalTargets()); diff --git a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java index de454cfd..6892b32c 100644 --- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java @@ -103,7 +103,8 @@ public final class ChooserContentPreviewUi { ImageLoader imageLoader, ActionFactory actionFactory, TransitionElementStatusCallback transitionElementStatusCallback, - FeatureFlagRepository featureFlagRepository) { + FeatureFlagRepository featureFlagRepository, + HeadlineGenerator headlineGenerator) { mContentPreviewUi = createContentPreview( targetIntent, @@ -112,7 +113,8 @@ public final class ChooserContentPreviewUi { imageLoader, actionFactory, transitionElementStatusCallback, - featureFlagRepository); + featureFlagRepository, + headlineGenerator); if (mContentPreviewUi.getType() != CONTENT_PREVIEW_IMAGE) { transitionElementStatusCallback.onAllTransitionElementsReady(); } @@ -125,7 +127,8 @@ public final class ChooserContentPreviewUi { ImageLoader imageLoader, ActionFactory actionFactory, TransitionElementStatusCallback transitionElementStatusCallback, - FeatureFlagRepository featureFlagRepository) { + FeatureFlagRepository featureFlagRepository, + HeadlineGenerator headlineGenerator) { /* In {@link android.content.Intent#getType}, the app may specify a very general mime type * that broadly covers all data being shared, such as {@literal *}/* when sending an image @@ -139,12 +142,20 @@ public final class ChooserContentPreviewUi { if (!(isSend || isSendMultiple) || (type != null && ClipDescription.compareMimeTypes(type, "text/*"))) { return createTextPreview( - targetIntent, actionFactory, imageLoader, featureFlagRepository); + targetIntent, + actionFactory, + imageLoader, + featureFlagRepository, + headlineGenerator); } List uris = extractContentUris(targetIntent); if (uris.isEmpty()) { return createTextPreview( - targetIntent, actionFactory, imageLoader, featureFlagRepository); + targetIntent, + actionFactory, + imageLoader, + featureFlagRepository, + headlineGenerator); } ArrayList files = new ArrayList<>(uris.size()); int previewCount = readFileInfo(contentResolver, typeClassifier, uris, files); @@ -153,7 +164,8 @@ public final class ChooserContentPreviewUi { files, actionFactory, imageLoader, - featureFlagRepository); + featureFlagRepository, + headlineGenerator); } if (featureFlagRepository.isEnabled(Flags.SHARESHEET_SCROLLABLE_IMAGE_PREVIEW)) { return new UnifiedContentPreviewUi( @@ -163,14 +175,16 @@ public final class ChooserContentPreviewUi { imageLoader, typeClassifier, transitionElementStatusCallback, - featureFlagRepository); + featureFlagRepository, + headlineGenerator); } if (previewCount < uris.size()) { return new FileContentPreviewUi( files, actionFactory, imageLoader, - featureFlagRepository); + featureFlagRepository, + headlineGenerator); } // The legacy (3-image) image preview is on it's way out and it's unlikely that we'd end up // here. To preserve the legacy behavior, before using it, check that all uris are images. @@ -180,7 +194,8 @@ public final class ChooserContentPreviewUi { files, actionFactory, imageLoader, - featureFlagRepository); + featureFlagRepository, + headlineGenerator); } } return new ImageContentPreviewUi( @@ -192,7 +207,8 @@ public final class ChooserContentPreviewUi { actionFactory, imageLoader, transitionElementStatusCallback, - featureFlagRepository); + featureFlagRepository, + headlineGenerator); } public int getPreferredContentPreview() { @@ -307,7 +323,8 @@ public final class ChooserContentPreviewUi { Intent targetIntent, ChooserContentPreviewUi.ActionFactory actionFactory, ImageLoader imageLoader, - FeatureFlagRepository featureFlagRepository) { + FeatureFlagRepository featureFlagRepository, + HeadlineGenerator headlineGenerator) { CharSequence sharingText = targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT); String previewTitle = targetIntent.getStringExtra(Intent.EXTRA_TITLE); ClipData previewData = targetIntent.getClipData(); @@ -324,7 +341,8 @@ public final class ChooserContentPreviewUi { previewThumbnail, actionFactory, imageLoader, - featureFlagRepository); + featureFlagRepository, + headlineGenerator); } private static List extractContentUris(Intent targetIntent) { diff --git a/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java index 79444b4e..a6bc2164 100644 --- a/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java @@ -24,6 +24,7 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.net.Uri; import android.os.UserHandle; +import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -114,7 +115,21 @@ abstract class ContentPreviewUi { fadeAnim.start(); } - protected static void displayPayloadReselectionAction( + protected static void displayHeadline(ViewGroup layout, String headline) { + if (layout != null) { + TextView titleView = layout.findViewById(R.id.headline); + if (titleView != null) { + if (!TextUtils.isEmpty(headline)) { + titleView.setText(headline); + titleView.setVisibility(View.VISIBLE); + } else { + titleView.setVisibility(View.GONE); + } + } + } + } + + protected static void displayModifyShareAction( ViewGroup layout, ChooserContentPreviewUi.ActionFactory actionFactory, FeatureFlagRepository featureFlagRepository) { diff --git a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java index 2c5def8b..52e20cf0 100644 --- a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java @@ -45,16 +45,19 @@ class FileContentPreviewUi extends ContentPreviewUi { private final ChooserContentPreviewUi.ActionFactory mActionFactory; private final ImageLoader mImageLoader; private final FeatureFlagRepository mFeatureFlagRepository; + private final HeadlineGenerator mHeadlineGenerator; FileContentPreviewUi( List files, ChooserContentPreviewUi.ActionFactory actionFactory, ImageLoader imageLoader, - FeatureFlagRepository featureFlagRepository) { + FeatureFlagRepository featureFlagRepository, + HeadlineGenerator headlineGenerator) { mFiles = files; mActionFactory = actionFactory; mImageLoader = imageLoader; mFeatureFlagRepository = featureFlagRepository; + mHeadlineGenerator = headlineGenerator; } @Override @@ -65,7 +68,7 @@ class FileContentPreviewUi extends ContentPreviewUi { @Override public ViewGroup display(Resources resources, LayoutInflater layoutInflater, ViewGroup parent) { ViewGroup layout = displayInternal(resources, layoutInflater, parent); - displayPayloadReselectionAction(layout, mActionFactory, mFeatureFlagRepository); + displayModifyShareAction(layout, mActionFactory, mFeatureFlagRepository); return layout; } @@ -77,6 +80,8 @@ class FileContentPreviewUi extends ContentPreviewUi { final int uriCount = mFiles.size(); + displayHeadline(contentPreviewLayout, mHeadlineGenerator.getItemsHeadline(mFiles.size())); + if (uriCount == 0) { contentPreviewLayout.setVisibility(View.GONE); Log.i(TAG, "Appears to be no uris available in EXTRA_STREAM," diff --git a/java/src/com/android/intentresolver/contentpreview/HeadlineGenerator.kt b/java/src/com/android/intentresolver/contentpreview/HeadlineGenerator.kt new file mode 100644 index 00000000..e32bb5c4 --- /dev/null +++ b/java/src/com/android/intentresolver/contentpreview/HeadlineGenerator.kt @@ -0,0 +1,35 @@ +/* + * 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.contentpreview + +private const val PLURALS_COUNT = "count" + +/** + * HeadlineGenerator generates the text to show at the top of the sharesheet as a brief + * description of the content being shared. + */ +interface HeadlineGenerator { + fun getTextHeadline(text: CharSequence): String + + fun getImageWithTextHeadline(text: CharSequence): String + + fun getImagesHeadline(count: Int): String + + fun getVideosHeadline(count: Int): String + + fun getItemsHeadline(count: Int): String +} diff --git a/java/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImpl.kt b/java/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImpl.kt new file mode 100644 index 00000000..ae44294c --- /dev/null +++ b/java/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImpl.kt @@ -0,0 +1,67 @@ +/* + * 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.contentpreview + +import android.content.Context +import com.android.intentresolver.R +import android.util.PluralsMessageFormatter + +private const val PLURALS_COUNT = "count" + +/** + * HeadlineGenerator generates the text to show at the top of the sharesheet as a brief + * description of the content being shared. + */ +class HeadlineGeneratorImpl(private val context: Context) : HeadlineGenerator { + override fun getTextHeadline(text: CharSequence): String { + if (text.toString().isHttpUri()) { + return context.getString(R.string.sharing_link) + } + return context.getString(R.string.sharing_text) + } + + override fun getImageWithTextHeadline(text: CharSequence): String { + if (text.toString().isHttpUri()) { + return context.getString(R.string.sharing_image_with_link) + } + return context.getString(R.string.sharing_image_with_text) + } + + override fun getImagesHeadline(count: Int): String { + return PluralsMessageFormatter.format( + context.resources, + mapOf(PLURALS_COUNT to count), + R.string.sharing_images + ) + } + + override fun getVideosHeadline(count: Int): String { + return PluralsMessageFormatter.format( + context.resources, + mapOf(PLURALS_COUNT to count), + R.string.sharing_videos + ) + } + + override fun getItemsHeadline(count: Int): String { + return PluralsMessageFormatter.format( + context.resources, + mapOf(PLURALS_COUNT to count), + R.string.sharing_items + ) + } +} diff --git a/java/src/com/android/intentresolver/contentpreview/ImageContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ImageContentPreviewUi.java index 5f3bdf40..f2c0564a 100644 --- a/java/src/com/android/intentresolver/contentpreview/ImageContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/ImageContentPreviewUi.java @@ -54,6 +54,7 @@ class ImageContentPreviewUi extends ContentPreviewUi { private final ImageLoader mImageLoader; private final TransitionElementStatusCallback mTransitionElementStatusCallback; private final FeatureFlagRepository mFeatureFlagRepository; + private final HeadlineGenerator mHeadlineGenerator; ImageContentPreviewUi( List imageUris, @@ -61,13 +62,15 @@ class ImageContentPreviewUi extends ContentPreviewUi { ChooserContentPreviewUi.ActionFactory actionFactory, ImageLoader imageLoader, TransitionElementStatusCallback transitionElementStatusCallback, - FeatureFlagRepository featureFlagRepository) { + FeatureFlagRepository featureFlagRepository, + HeadlineGenerator headlineGenerator) { mImageUris = imageUris; mText = text; mActionFactory = actionFactory; mImageLoader = imageLoader; mTransitionElementStatusCallback = transitionElementStatusCallback; mFeatureFlagRepository = featureFlagRepository; + mHeadlineGenerator = headlineGenerator; mImageLoader.prePopulate(mImageUris); } @@ -80,7 +83,7 @@ class ImageContentPreviewUi extends ContentPreviewUi { @Override public ViewGroup display(Resources resources, LayoutInflater layoutInflater, ViewGroup parent) { ViewGroup layout = displayInternal(layoutInflater, parent); - displayPayloadReselectionAction(layout, mActionFactory, mFeatureFlagRepository); + displayModifyShareAction(layout, mActionFactory, mFeatureFlagRepository); return layout; } @@ -113,6 +116,8 @@ class ImageContentPreviewUi extends ContentPreviewUi { imagePreview.setTransitionElementStatusCallback(mTransitionElementStatusCallback); imagePreview.setImages(mImageUris, mImageLoader); + updateHeadline(contentPreviewLayout); + return contentPreviewLayout; } @@ -140,6 +145,17 @@ class ImageContentPreviewUi extends ContentPreviewUi { com.android.internal.R.id.content_preview_image_area); } + private void updateHeadline(ViewGroup contentPreview) { + CheckBox includeTextCheckbox = contentPreview.requireViewById(R.id.include_text_action); + if (includeTextCheckbox.getVisibility() == View.VISIBLE + && includeTextCheckbox.isChecked()) { + displayHeadline(contentPreview, mHeadlineGenerator.getImageWithTextHeadline(mText)); + } else { + displayHeadline( + contentPreview, mHeadlineGenerator.getImagesHeadline(mImageUris.size())); + } + } + private void setTextInImagePreviewVisibility( ViewGroup contentPreview, ChooserContentPreviewUi.ActionFactory actionFactory) { int visibility = mFeatureFlagRepository.isEnabled(Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW) @@ -169,6 +185,7 @@ class ImageContentPreviewUi extends ContentPreviewUi { TransitionManager.beginDelayedTransition((ViewGroup) textView.getParent()); textView.setVisibility(isChecked ? View.VISIBLE : View.GONE); shareTextAction.accept(!isChecked); + updateHeadline(contentPreview); }); } actionView.setVisibility(visibility); diff --git a/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java index e143954e..d0cba5bb 100644 --- a/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/TextContentPreviewUi.java @@ -46,6 +46,7 @@ class TextContentPreviewUi extends ContentPreviewUi { private final ImageLoader mImageLoader; private final ChooserContentPreviewUi.ActionFactory mActionFactory; private final FeatureFlagRepository mFeatureFlagRepository; + private final HeadlineGenerator mHeadlineGenerator; TextContentPreviewUi( @Nullable CharSequence sharingText, @@ -53,13 +54,15 @@ class TextContentPreviewUi extends ContentPreviewUi { @Nullable Uri previewThumbnail, ChooserContentPreviewUi.ActionFactory actionFactory, ImageLoader imageLoader, - FeatureFlagRepository featureFlagRepository) { + FeatureFlagRepository featureFlagRepository, + HeadlineGenerator headlineGenerator) { mSharingText = sharingText; mPreviewTitle = previewTitle; mPreviewThumbnail = previewThumbnail; mImageLoader = imageLoader; mActionFactory = actionFactory; mFeatureFlagRepository = featureFlagRepository; + mHeadlineGenerator = headlineGenerator; } @Override @@ -70,7 +73,7 @@ class TextContentPreviewUi extends ContentPreviewUi { @Override public ViewGroup display(Resources resources, LayoutInflater layoutInflater, ViewGroup parent) { ViewGroup layout = displayInternal(layoutInflater, parent); - displayPayloadReselectionAction(layout, mActionFactory, mFeatureFlagRepository); + displayModifyShareAction(layout, mActionFactory, mFeatureFlagRepository); return layout; } @@ -122,6 +125,8 @@ class TextContentPreviewUi extends ContentPreviewUi { bitmap)); } + displayHeadline(contentPreviewLayout, mHeadlineGenerator.getTextHeadline(mSharingText)); + return contentPreviewLayout; } diff --git a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java index c4e6feb7..2d2ae52b 100644 --- a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java @@ -55,6 +55,7 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { private final MimeTypeClassifier mTypeClassifier; private final TransitionElementStatusCallback mTransitionElementStatusCallback; private final FeatureFlagRepository mFeatureFlagRepository; + private final HeadlineGenerator mHeadlineGenerator; UnifiedContentPreviewUi( List files, @@ -63,7 +64,8 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { ImageLoader imageLoader, MimeTypeClassifier typeClassifier, TransitionElementStatusCallback transitionElementStatusCallback, - FeatureFlagRepository featureFlagRepository) { + FeatureFlagRepository featureFlagRepository, + HeadlineGenerator headlineGenerator) { mFiles = files; mText = text; mActionFactory = actionFactory; @@ -71,6 +73,7 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { mTypeClassifier = typeClassifier; mTransitionElementStatusCallback = transitionElementStatusCallback; mFeatureFlagRepository = featureFlagRepository; + mHeadlineGenerator = headlineGenerator; mImageLoader.prePopulate(mFiles.stream() .map(FileInfo::getPreviewUri) @@ -86,7 +89,7 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { @Override public ViewGroup display(Resources resources, LayoutInflater layoutInflater, ViewGroup parent) { ViewGroup layout = displayInternal(layoutInflater, parent); - displayPayloadReselectionAction(layout, mActionFactory, mFeatureFlagRepository); + displayModifyShareAction(layout, mActionFactory, mFeatureFlagRepository); return layout; } @@ -115,20 +118,47 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { return contentPreviewLayout; } - setTextInImagePreviewVisibility(contentPreviewLayout, mActionFactory); imagePreview.setTransitionElementStatusCallback(mTransitionElementStatusCallback); - List previews = mFiles.stream() - .filter(fileInfo -> fileInfo.getPreviewUri() != null) - .map(fileInfo -> - new ScrollableImagePreviewView.Preview( - getPreviewType(fileInfo.getMimeType()), - fileInfo.getPreviewUri())) - .toList(); + + List previews = new ArrayList<>(); + boolean allImages = !mFiles.isEmpty(); + boolean allVideos = !mFiles.isEmpty(); + for (FileInfo fileInfo : mFiles) { + ScrollableImagePreviewView.PreviewType previewType = + getPreviewType(fileInfo.getMimeType()); + allImages = allImages && previewType == ScrollableImagePreviewView.PreviewType.Image; + allVideos = allVideos && previewType == ScrollableImagePreviewView.PreviewType.Video; + + if (fileInfo.getPreviewUri() != null) { + previews.add(new ScrollableImagePreviewView.Preview( + previewType, + fileInfo.getPreviewUri())); + } + } imagePreview.setPreviews( previews, mFiles.size() - previews.size(), mImageLoader); + if (mFeatureFlagRepository.isEnabled(Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW) + && !TextUtils.isEmpty(mText) + && mFiles.size() == 1 + && allImages) { + setTextInImagePreviewVisibility(contentPreviewLayout, mActionFactory); + updateTextWithImageHeadline(contentPreviewLayout); + } else { + if (allImages) { + displayHeadline( + contentPreviewLayout, mHeadlineGenerator.getImagesHeadline(mFiles.size())); + } else if (allVideos) { + displayHeadline( + contentPreviewLayout, mHeadlineGenerator.getVideosHeadline(mFiles.size())); + } else { + displayHeadline( + contentPreviewLayout, mHeadlineGenerator.getItemsHeadline(mFiles.size())); + } + } + return contentPreviewLayout; } @@ -155,38 +185,42 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { return previewLayout.findViewById(R.id.scrollable_image_preview); } + private void updateTextWithImageHeadline(ViewGroup contentPreview) { + CheckBox actionView = contentPreview.requireViewById(R.id.include_text_action); + if (actionView.getVisibility() == View.VISIBLE && actionView.isChecked()) { + displayHeadline(contentPreview, mHeadlineGenerator.getImageWithTextHeadline(mText)); + } else { + displayHeadline( + contentPreview, mHeadlineGenerator.getImagesHeadline(mFiles.size())); + } + } + private void setTextInImagePreviewVisibility( ViewGroup contentPreview, ChooserContentPreviewUi.ActionFactory actionFactory) { - int visibility = mFeatureFlagRepository.isEnabled(Flags.SHARESHEET_IMAGE_AND_TEXT_PREVIEW) - && !TextUtils.isEmpty(mText) - ? View.VISIBLE - : View.GONE; - final TextView textView = contentPreview .requireViewById(com.android.internal.R.id.content_preview_text); CheckBox actionView = contentPreview .requireViewById(R.id.include_text_action); - textView.setVisibility(visibility); - boolean isLink = visibility == View.VISIBLE && HttpUriMatcher.isHttpUri(mText.toString()); + textView.setVisibility(View.VISIBLE); + boolean isLink = HttpUriMatcher.isHttpUri(mText.toString()); textView.setAutoLinkMask(isLink ? Linkify.WEB_URLS : 0); textView.setText(mText); - if (visibility == View.VISIBLE) { - final int[] actionLabels = isLink - ? new int[] { R.string.include_link, R.string.exclude_link } - : new int[] { R.string.include_text, R.string.exclude_text }; - final Consumer shareTextAction = actionFactory.getExcludeSharedTextAction(); - actionView.setChecked(true); - actionView.setText(actionLabels[1]); - shareTextAction.accept(false); - actionView.setOnCheckedChangeListener((view, isChecked) -> { - view.setText(actionLabels[isChecked ? 1 : 0]); - TransitionManager.beginDelayedTransition((ViewGroup) textView.getParent()); - textView.setVisibility(isChecked ? View.VISIBLE : View.GONE); - shareTextAction.accept(!isChecked); - }); - } - actionView.setVisibility(visibility); + final int[] actionLabels = isLink + ? new int[] { R.string.include_link, R.string.exclude_link } + : new int[] { R.string.include_text, R.string.exclude_text }; + final Consumer shareTextAction = actionFactory.getExcludeSharedTextAction(); + actionView.setChecked(true); + actionView.setText(actionLabels[1]); + shareTextAction.accept(false); + actionView.setOnCheckedChangeListener((view, isChecked) -> { + view.setText(actionLabels[isChecked ? 1 : 0]); + TransitionManager.beginDelayedTransition((ViewGroup) textView.getParent()); + textView.setVisibility(isChecked ? View.VISIBLE : View.GONE); + shareTextAction.accept(!isChecked); + updateTextWithImageHeadline(contentPreview); + }); + actionView.setVisibility(View.VISIBLE); } private ScrollableImagePreviewView.PreviewType getPreviewType(String mimeType) { -- cgit v1.2.3-59-g8ed1b