diff options
Diffstat (limited to 'java')
11 files changed, 374 insertions, 138 deletions
diff --git a/java/res/layout/chooser_grid_preview_files_text.xml b/java/res/layout/chooser_grid_preview_files_text.xml new file mode 100644 index 00000000..d46da2c0 --- /dev/null +++ b/java/res/layout/chooser_grid_preview_files_text.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +* Copyright 2019, 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. +*/ +--> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:background="?android:attr/colorBackground"> + + <include layout="@layout/chooser_headline_row" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_horizontal" + android:layout_marginBottom="@dimen/chooser_view_spacing" + android:paddingStart="@dimen/chooser_edge_margin_normal_half" + android:paddingEnd="@dimen/chooser_edge_margin_normal_half" + android:background="@drawable/chooser_content_preview_rounded"> + + <com.android.intentresolver.widget.RoundedRectImageView + android:id="@+id/image_view" + android:layout_width="100dp" + android:layout_height="100dp" + android:scaleType="centerCrop" + app:radius="@dimen/chooser_corner_radius_small" + /> + + <TextView + android:id="@+id/content_preview_text" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:layout_gravity="center_vertical" + android:layout_marginStart="@dimen/chooser_edge_margin_normal_half" + android:layout_marginEnd="@dimen/chooser_edge_margin_normal_half" + android:maxLines="@integer/text_preview_lines" + android:ellipsize="end" + android:linksClickable="false" + android:textAppearance="@style/TextAppearance.ChooserDefault"/> + </LinearLayout> + + <include layout="@layout/chooser_action_row"/> +</LinearLayout> diff --git a/java/res/layout/chooser_grid_preview_image.xml b/java/res/layout/chooser_grid_preview_image.xml index afb0db2a..12848a50 100644 --- a/java/res/layout/chooser_grid_preview_image.xml +++ b/java/res/layout/chooser_grid_preview_image.xml @@ -18,47 +18,24 @@ --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="?android:attr/colorBackground"> - <include layout="@layout/chooser_headline_row" /> + <include layout="@layout/chooser_headline_row"/> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:gravity="center_horizontal" - android:layout_marginBottom="@dimen/chooser_view_spacing" - android:paddingStart="@dimen/chooser_edge_margin_normal_half" - android:paddingEnd="@dimen/chooser_edge_margin_normal_half"> + <com.android.intentresolver.widget.ScrollableImagePreviewView + android:id="@+id/scrollable_image_preview" + android:layout_width="wrap_content" + android:layout_height="@dimen/chooser_preview_image_height_tall" + android:layout_gravity="center_horizontal" + android:layout_marginBottom="@dimen/chooser_view_spacing" + android:layout_marginHorizontal="@dimen/chooser_edge_margin_normal_half" + android:background="?android:attr/colorBackground" + app:itemInnerSpacing="3dp" + app:itemOuterSpacing="@dimen/chooser_edge_margin_normal_half"/> - <com.android.intentresolver.widget.ScrollableImagePreviewView - android:id="@+id/scrollable_image_preview" - android:layout_width="wrap_content" - android:layout_height="@dimen/chooser_preview_image_height_tall" - android:layout_gravity="center_horizontal" - android:background="?android:attr/colorBackground" - app:itemInnerSpacing="3dp" - app:itemOuterSpacing="@dimen/chooser_edge_margin_normal_half" /> - - <TextView - android:id="@androidprv:id/content_preview_text" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:layout_gravity="center_vertical" - android:layout_marginStart="@dimen/chooser_edge_margin_normal_half" - android:layout_marginEnd="@dimen/chooser_edge_margin_normal_half" - android:maxLines="@integer/text_preview_lines" - android:ellipsize="end" - android:linksClickable="false" - android:visibility="gone" - android:textAppearance="@style/TextAppearance.ChooserDefault" /> - </LinearLayout> - - <include layout="@layout/chooser_action_row" /> + <include layout="@layout/chooser_action_row"/> </LinearLayout> diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml index bbdefa35..62ff1d89 100644 --- a/java/res/values-iw/strings.xml +++ b/java/res/values-iw/strings.xml @@ -16,7 +16,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="whichApplication" msgid="2309561338625872614">"השלמת הפעולה באמצעות"</string> + <string name="whichApplication" msgid="2309561338625872614">"השלמת הפעולה עם"</string> <string name="whichApplicationNamed" msgid="8514249643796783492">"השלמת הפעולה באמצעות <xliff:g id="APP">%1$s</xliff:g>"</string> <string name="whichApplicationLabel" msgid="4312929689807826793">"להשלמת הפעולה"</string> <string name="whichViewApplication" msgid="7660051361612888119">"פתיחה באמצעות"</string> diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml index ce367d0a..1648831c 100644 --- a/java/res/values/strings.xml +++ b/java/res/values/strings.xml @@ -160,12 +160,41 @@ other {Sharing # items} } </string> - <!-- Title atop a sharing UI indicating that an image is being shared with text attached. - [CHAR_LIMIT=50] --> - <string name="sharing_image_with_text">Sharing image with text</string> - <!-- Title atop a sharing UI indicating that an image is being shared with a link (URL) - attached. [CHAR_LIMIT=50] --> - <string name="sharing_image_with_link">Sharing image with link</string> + <string name="sharing_images_with_text">{count, plural, + =1 {Sharing image with text} + other {Sharing # images with text} + } + </string> + + <string name="sharing_images_with_link">{count, plural, + =1 {Sharing image with link} + other {Sharing # images with link} + } + </string> + + <string name="sharing_videos_with_text">{count, plural, + =1 {Sharing video with text} + other {Sharing # videos with text} + } + </string> + + <string name="sharing_videos_with_link">{count, plural, + =1 {Sharing video with link} + other {Sharing # videos with link} + } + </string> + + <string name="sharing_files_with_text">{count, plural, + =1 {Sharing file with text} + other {Sharing # files with text} + } + </string> + + <string name="sharing_files_with_link">{count, plural, + =1 {Sharing file with link} + other {Sharing # files with link} + } + </string> <!-- ChooserActivity - No direct share targets are available. [CHAR LIMIT=NONE] --> <string name="chooser_no_direct_share_targets">No recommended people to share with</string> diff --git a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java index 181fe117..21930fdb 100644 --- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java @@ -150,6 +150,15 @@ public final class ChooserContentPreviewUi { } ArrayList<FileInfo> files = new ArrayList<>(uris.size()); int previewCount = readFileInfo(contentResolver, typeClassifier, uris, files); + CharSequence text = targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT); + if (!TextUtils.isEmpty(text)) { + return new FilesPlusTextContentPreviewUi(files, + targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT), + actionFactory, + imageLoader, + typeClassifier, + headlineGenerator); + } if (previewCount == 0) { return new FileContentPreviewUi( files, @@ -158,7 +167,6 @@ public final class ChooserContentPreviewUi { } return new UnifiedContentPreviewUi( files, - targetIntent.getCharSequenceExtra(Intent.EXTRA_TEXT), actionFactory, imageLoader, typeClassifier, diff --git a/java/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUi.java new file mode 100644 index 00000000..5174234a --- /dev/null +++ b/java/src/com/android/intentresolver/contentpreview/FilesPlusTextContentPreviewUi.java @@ -0,0 +1,193 @@ +/* + * 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 static com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_FILE; +import static com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_IMAGE; + +import android.content.res.Resources; +import android.text.util.Linkify; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.android.intentresolver.R; +import com.android.intentresolver.widget.ActionRow; +import com.android.intentresolver.widget.ScrollableImagePreviewView; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +/** + * FilesPlusTextContentPreviewUi is shown when the user is sending 1 or more files along with + * non-empty EXTRA_TEXT. The text can be toggled with a checkbox. If a single image file is being + * shared, it is shown in a preview (otherwise the headline summary is the sole indication of the + * file content). + */ +class FilesPlusTextContentPreviewUi extends ContentPreviewUi { + private final List<FileInfo> mFiles; + private final CharSequence mText; + private final ChooserContentPreviewUi.ActionFactory mActionFactory; + private final ImageLoader mImageLoader; + private final MimeTypeClassifier mTypeClassifier; + private final HeadlineGenerator mHeadlineGenerator; + private final boolean mAllImages; + private final boolean mAllVideos; + + FilesPlusTextContentPreviewUi( + List<FileInfo> files, + CharSequence text, + ChooserContentPreviewUi.ActionFactory actionFactory, + ImageLoader imageLoader, + MimeTypeClassifier typeClassifier, + HeadlineGenerator headlineGenerator) { + mFiles = files; + mText = text; + mActionFactory = actionFactory; + mImageLoader = imageLoader; + mTypeClassifier = typeClassifier; + mHeadlineGenerator = headlineGenerator; + + boolean allImages = true; + boolean allVideos = true; + for (FileInfo fileInfo : mFiles) { + ScrollableImagePreviewView.PreviewType previewType = + getPreviewType(fileInfo.getMimeType()); + allImages = allImages && previewType == ScrollableImagePreviewView.PreviewType.Image; + allVideos = allVideos && previewType == ScrollableImagePreviewView.PreviewType.Video; + } + mAllImages = allImages; + mAllVideos = allVideos; + } + + @Override + public int getType() { + return shouldShowPreview() ? CONTENT_PREVIEW_IMAGE : CONTENT_PREVIEW_FILE; + } + + @Override + public ViewGroup display(Resources resources, LayoutInflater layoutInflater, ViewGroup parent) { + ViewGroup layout = displayInternal(layoutInflater, parent); + displayModifyShareAction(layout, mActionFactory); + return layout; + } + + private ViewGroup displayInternal(LayoutInflater layoutInflater, ViewGroup parent) { + ViewGroup contentPreviewLayout = (ViewGroup) layoutInflater.inflate( + R.layout.chooser_grid_preview_files_text, parent, false); + ImageView imagePreview = + contentPreviewLayout.findViewById(R.id.image_view); + + final ActionRow actionRow = + contentPreviewLayout.findViewById(com.android.internal.R.id.chooser_action_row); + actionRow.setActions(createActions( + createImagePreviewActions(), + mActionFactory.createCustomActions())); + + if (shouldShowPreview()) { + mImageLoader.loadImage(mFiles.get(0).getPreviewUri(), bitmap -> { + if (bitmap == null) { + imagePreview.setVisibility(View.GONE); + } else { + imagePreview.setImageBitmap(bitmap); + } + }); + } else { + imagePreview.setVisibility(View.GONE); + } + + prepareTextPreview(contentPreviewLayout, mActionFactory); + updateHeadline(contentPreviewLayout); + + return contentPreviewLayout; + } + + private boolean shouldShowPreview() { + return mAllImages && mFiles.size() == 1 && mFiles.get(0).getPreviewUri() != null; + } + + private List<ActionRow.Action> createImagePreviewActions() { + ArrayList<ActionRow.Action> actions = new ArrayList<>(2); + //TODO: add copy action; + if (mFiles.size() == 1 && mAllImages) { + ActionRow.Action action = mActionFactory.createEditButton(); + if (action != null) { + actions.add(action); + } + } + return actions; + } + + private void updateHeadline(ViewGroup contentPreview) { + CheckBox includeText = contentPreview.requireViewById(R.id.include_text_action); + String headline; + if (includeText.getVisibility() == View.VISIBLE && includeText.isChecked()) { + if (mAllImages) { + headline = mHeadlineGenerator.getImagesWithTextHeadline(mText, mFiles.size()); + } else if (mAllVideos) { + headline = mHeadlineGenerator.getVideosWithTextHeadline(mText, mFiles.size()); + } else { + headline = mHeadlineGenerator.getFilesWithTextHeadline(mText, mFiles.size()); + } + } else { + if (mAllImages) { + headline = mHeadlineGenerator.getImagesHeadline(mFiles.size()); + } else if (mAllVideos) { + headline = mHeadlineGenerator.getVideosHeadline(mFiles.size()); + } else { + headline = mHeadlineGenerator.getItemsHeadline(mFiles.size()); + } + } + + displayHeadline(contentPreview, headline); + } + + private void prepareTextPreview( + ViewGroup contentPreview, + ChooserContentPreviewUi.ActionFactory actionFactory) { + final TextView textView = contentPreview.requireViewById(R.id.content_preview_text); + CheckBox includeText = contentPreview.requireViewById(R.id.include_text_action); + boolean isLink = HttpUriMatcher.isHttpUri(mText.toString()); + textView.setAutoLinkMask(isLink ? Linkify.WEB_URLS : 0); + textView.setText(mText); + + final Consumer<Boolean> shareTextAction = actionFactory.getExcludeSharedTextAction(); + includeText.setChecked(true); + includeText.setText(isLink ? R.string.include_link : R.string.include_text); + shareTextAction.accept(false); + includeText.setOnCheckedChangeListener((view, isChecked) -> { + textView.setEnabled(isChecked); + shareTextAction.accept(!isChecked); + updateHeadline(contentPreview); + }); + includeText.setVisibility(View.VISIBLE); + } + + private ScrollableImagePreviewView.PreviewType getPreviewType(String mimeType) { + if (mTypeClassifier.isImageType(mimeType)) { + return ScrollableImagePreviewView.PreviewType.Image; + } + if (mTypeClassifier.isVideoType(mimeType)) { + return ScrollableImagePreviewView.PreviewType.Video; + } + return ScrollableImagePreviewView.PreviewType.File; + } +} diff --git a/java/src/com/android/intentresolver/contentpreview/HeadlineGenerator.kt b/java/src/com/android/intentresolver/contentpreview/HeadlineGenerator.kt index e32bb5c4..ad2a7ada 100644 --- a/java/src/com/android/intentresolver/contentpreview/HeadlineGenerator.kt +++ b/java/src/com/android/intentresolver/contentpreview/HeadlineGenerator.kt @@ -25,7 +25,11 @@ private const val PLURALS_COUNT = "count" interface HeadlineGenerator { fun getTextHeadline(text: CharSequence): String - fun getImageWithTextHeadline(text: CharSequence): String + fun getImagesWithTextHeadline(text: CharSequence, count: Int): String + + fun getVideosWithTextHeadline(text: CharSequence, count: Int): String + + fun getFilesWithTextHeadline(text: CharSequence, count: Int): String fun getImagesHeadline(count: Int): String diff --git a/java/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImpl.kt b/java/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImpl.kt index ae44294c..a6b782ad 100644 --- a/java/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImpl.kt +++ b/java/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImpl.kt @@ -16,6 +16,7 @@ package com.android.intentresolver.contentpreview +import android.annotation.StringRes import android.content.Context import com.android.intentresolver.R import android.util.PluralsMessageFormatter @@ -28,40 +29,49 @@ private const val PLURALS_COUNT = "count" */ 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) + return context.getString( + getTemplateResource(text, R.string.sharing_link, 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 getImagesWithTextHeadline(text: CharSequence, count: Int): String { + return getPluralString(getTemplateResource( + text, R.string.sharing_images_with_link, R.string.sharing_images_with_text), count) + } + + override fun getVideosWithTextHeadline(text: CharSequence, count: Int): String { + return getPluralString(getTemplateResource( + text, R.string.sharing_videos_with_link, R.string.sharing_videos_with_text), count) + } + + override fun getFilesWithTextHeadline(text: CharSequence, count: Int): String { + return getPluralString(getTemplateResource( + text, R.string.sharing_files_with_link, R.string.sharing_files_with_text), count) } override fun getImagesHeadline(count: Int): String { - return PluralsMessageFormatter.format( - context.resources, - mapOf(PLURALS_COUNT to count), - R.string.sharing_images - ) + return getPluralString(R.string.sharing_images, count) } override fun getVideosHeadline(count: Int): String { - return PluralsMessageFormatter.format( - context.resources, - mapOf(PLURALS_COUNT to count), - R.string.sharing_videos - ) + return getPluralString(R.string.sharing_videos, count) } override fun getItemsHeadline(count: Int): String { + return getPluralString(R.string.sharing_items, count) + } + + private fun getPluralString(@StringRes templateResource: Int, count: Int): String { return PluralsMessageFormatter.format( context.resources, mapOf(PLURALS_COUNT to count), - R.string.sharing_items + templateResource ) } + + @StringRes + private fun getTemplateResource( + text: CharSequence, @StringRes linkResource: Int, @StringRes nonLinkResource: Int + ): Int { + return if (text.toString().isHttpUri()) linkResource else nonLinkResource + } } diff --git a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java index 709ec566..6f1be116 100644 --- a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java @@ -19,15 +19,10 @@ package com.android.intentresolver.contentpreview; import static com.android.intentresolver.contentpreview.ContentPreviewType.CONTENT_PREVIEW_IMAGE; import android.content.res.Resources; -import android.text.TextUtils; -import android.text.util.Linkify; -import android.transition.TransitionManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.CheckBox; -import android.widget.TextView; import androidx.annotation.Nullable; @@ -39,12 +34,10 @@ import com.android.intentresolver.widget.ScrollableImagePreviewView; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import java.util.function.Consumer; class UnifiedContentPreviewUi extends ContentPreviewUi { private final List<FileInfo> mFiles; @Nullable - private final CharSequence mText; private final ChooserContentPreviewUi.ActionFactory mActionFactory; private final ImageLoader mImageLoader; private final MimeTypeClassifier mTypeClassifier; @@ -53,14 +46,12 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { UnifiedContentPreviewUi( List<FileInfo> files, - @Nullable CharSequence text, ChooserContentPreviewUi.ActionFactory actionFactory, ImageLoader imageLoader, MimeTypeClassifier typeClassifier, TransitionElementStatusCallback transitionElementStatusCallback, HeadlineGenerator headlineGenerator) { mFiles = files; - mText = text; mActionFactory = actionFactory; mImageLoader = imageLoader; mTypeClassifier = typeClassifier; @@ -131,20 +122,15 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { mFiles.size() - previews.size(), mImageLoader); - if (!TextUtils.isEmpty(mText) && mFiles.size() == 1 && allImages) { - setTextInImagePreviewVisibility(contentPreviewLayout, imagePreview, mActionFactory); - updateTextWithImageHeadline(contentPreviewLayout); + if (allImages) { + displayHeadline( + contentPreviewLayout, mHeadlineGenerator.getImagesHeadline(mFiles.size())); + } else if (allVideos) { + displayHeadline( + contentPreviewLayout, mHeadlineGenerator.getVideosHeadline(mFiles.size())); } 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())); - } + displayHeadline( + contentPreviewLayout, mHeadlineGenerator.getItemsHeadline(mFiles.size())); } return contentPreviewLayout; @@ -166,50 +152,6 @@ class UnifiedContentPreviewUi extends ContentPreviewUi { return actions; } - 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, - ScrollableImagePreviewView imagePreview, - ChooserContentPreviewUi.ActionFactory actionFactory) { - final TextView textView = contentPreview - .requireViewById(com.android.internal.R.id.content_preview_text); - CheckBox actionView = contentPreview - .requireViewById(R.id.include_text_action); - textView.setVisibility(View.VISIBLE); - boolean isLink = HttpUriMatcher.isHttpUri(mText.toString()); - textView.setAutoLinkMask(isLink ? Linkify.WEB_URLS : 0); - textView.setText(mText); - - 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<Boolean> shareTextAction = actionFactory.getExcludeSharedTextAction(); - actionView.setChecked(true); - actionView.setText(actionLabels[1]); - shareTextAction.accept(false); - actionView.setOnCheckedChangeListener((view, isChecked) -> { - view.setText(actionLabels[isChecked ? 1 : 0]); - textView.setEnabled(isChecked); - if (imagePreview.getVisibility() == View.VISIBLE) { - // animate only only if we have preview - 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) { if (mTypeClassifier.isImageType(mimeType)) { return ScrollableImagePreviewView.PreviewType.Image; diff --git a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java index acced89f..385f9fd8 100644 --- a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java +++ b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java @@ -857,9 +857,9 @@ public class UnbundledChooserActivityTest { .perform(click()); waitForIdle(); - onView(withId(R.id.scrollable_image_preview)) + onView(withId(R.id.image_view)) .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); - onView(withId(com.android.internal.R.id.content_preview_text)) + onView(withId(R.id.content_preview_text)) .check(matches(allOf(isDisplayed(), not(isEnabled())))); } @@ -1074,7 +1074,7 @@ public class UnbundledChooserActivityTest { } @Test - public void testNoTextPreviewWhenTextIsSharedWithMultipleImages() { + public void testTextPreviewWhenTextIsSharedWithMultipleImages() { final Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/" + R.drawable.test320x240); final String sharedText = "text-" + System.currentTimeMillis(); @@ -1104,8 +1104,7 @@ public class UnbundledChooserActivityTest { .thenReturn(resolvedComponentInfos); mActivityRule.launchActivity(Intent.createChooser(sendIntent, null)); waitForIdle(); - onView(withId(com.android.internal.R.id.content_preview_text)) - .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.GONE))); + onView(withText(sharedText)).check(matches(isDisplayed())); } @Test diff --git a/java/tests/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImplTest.kt b/java/tests/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImplTest.kt index 9becce99..aac6caa7 100644 --- a/java/tests/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImplTest.kt +++ b/java/tests/src/com/android/intentresolver/contentpreview/HeadlineGeneratorImplTest.kt @@ -28,14 +28,26 @@ class HeadlineGeneratorImplTest { fun testHeadlineGeneration() { val generator = HeadlineGeneratorImpl( InstrumentationRegistry.getInstrumentation().getTargetContext()) - val str = "Some sting" + val str = "Some string" val url = "http://www.google.com" assertThat(generator.getTextHeadline(str)).isEqualTo("Sharing text") assertThat(generator.getTextHeadline(url)).isEqualTo("Sharing link") - assertThat(generator.getImageWithTextHeadline(str)).isEqualTo("Sharing image with text") - assertThat(generator.getImageWithTextHeadline(url)).isEqualTo("Sharing image with link") + assertThat(generator.getImagesWithTextHeadline(str, 1)).isEqualTo("Sharing image with text") + assertThat(generator.getImagesWithTextHeadline(url, 1)).isEqualTo("Sharing image with link") + assertThat(generator.getImagesWithTextHeadline(str, 5)).isEqualTo("Sharing 5 images with text") + assertThat(generator.getImagesWithTextHeadline(url, 5)).isEqualTo("Sharing 5 images with link") + + assertThat(generator.getVideosWithTextHeadline(str, 1)).isEqualTo("Sharing video with text") + assertThat(generator.getVideosWithTextHeadline(url, 1)).isEqualTo("Sharing video with link") + assertThat(generator.getVideosWithTextHeadline(str, 5)).isEqualTo("Sharing 5 videos with text") + assertThat(generator.getVideosWithTextHeadline(url, 5)).isEqualTo("Sharing 5 videos with link") + + assertThat(generator.getFilesWithTextHeadline(str, 1)).isEqualTo("Sharing file with text") + assertThat(generator.getFilesWithTextHeadline(url, 1)).isEqualTo("Sharing file with link") + assertThat(generator.getFilesWithTextHeadline(str, 5)).isEqualTo("Sharing 5 files with text") + assertThat(generator.getFilesWithTextHeadline(url, 5)).isEqualTo("Sharing 5 files with link") assertThat(generator.getImagesHeadline(1)).isEqualTo("Sharing image") assertThat(generator.getImagesHeadline(4)).isEqualTo("Sharing 4 images") |