diff options
Diffstat (limited to 'java')
8 files changed, 36 insertions, 72 deletions
diff --git a/java/res/layout/chooser_grid_preview_file.xml b/java/res/layout/chooser_grid_preview_file.xml index c9ef952a..40ab2f0b 100644 --- a/java/res/layout/chooser_grid_preview_file.xml +++ b/java/res/layout/chooser_grid_preview_file.xml @@ -39,15 +39,6 @@ android:layout_marginBottom="@dimen/chooser_view_spacing" android:id="@androidprv:id/content_preview_file_layout"> - <com.android.intentresolver.widget.RoundedRectImageView - android:id="@androidprv:id/content_preview_file_thumbnail" - android:layout_width="75dp" - android:layout_height="75dp" - android:layout_marginRight="16dp" - android:adjustViewBounds="true" - android:layout_gravity="center_vertical" - android:gravity="center" - android:scaleType="centerCrop"/> <ImageView android:id="@androidprv:id/content_preview_file_icon" android:layout_width="36dp" @@ -56,8 +47,7 @@ android:adjustViewBounds="true" android:layout_gravity="center_vertical" android:gravity="center" - android:scaleType="fitCenter" - android:visibility="gone"/> + android:scaleType="fitCenter" /> <TextView android:id="@androidprv:id/content_preview_filename" android:layout_width="0dp" diff --git a/java/src/com/android/intentresolver/ChooserActionFactory.java b/java/src/com/android/intentresolver/ChooserActionFactory.java index 8dafae86..23e04560 100644 --- a/java/src/com/android/intentresolver/ChooserActionFactory.java +++ b/java/src/com/android/intentresolver/ChooserActionFactory.java @@ -40,7 +40,6 @@ import android.view.View; import com.android.intentresolver.chooser.DisplayResolveInfo; import com.android.intentresolver.chooser.TargetInfo; import com.android.intentresolver.contentpreview.ChooserContentPreviewUi; -import com.android.intentresolver.flags.FeatureFlagRepository; import com.android.intentresolver.widget.ActionRow; import com.android.internal.annotations.VisibleForTesting; @@ -104,7 +103,6 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio /** * @param context * @param chooserRequest data about the invocation of the current Sharesheet session. - * @param featureFlagRepository feature flags that may control the eligibility of some actions. * @param integratedDeviceComponents info about other components that are available on this * device to implement the supported action types. * @param onUpdateSharedTextIsExcluded a delegate to be invoked when the "exclude shared text" @@ -118,7 +116,6 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio public ChooserActionFactory( Context context, ChooserRequestParameters chooserRequest, - FeatureFlagRepository featureFlagRepository, ChooserIntegratedDeviceComponents integratedDeviceComponents, ChooserActivityLogger logger, Consumer<Boolean> onUpdateSharedTextIsExcluded, diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index 75ee0648..404d6da3 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -92,6 +92,7 @@ import com.android.intentresolver.model.AppPredictionServiceResolverComparator; import com.android.intentresolver.model.ResolverRankerServiceResolverComparator; import com.android.intentresolver.shortcuts.AppPredictorFactory; import com.android.intentresolver.shortcuts.ShortcutLoader; +import com.android.intentresolver.widget.ImagePreviewView; import com.android.intentresolver.widget.ResolverDrawerLayout; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.content.PackageMonitor; @@ -682,8 +683,10 @@ public class ChooserActivity extends ResolverActivity implements @Nullable private View getFirstVisibleImgPreviewView() { - View firstImage = findViewById(com.android.internal.R.id.content_preview_image_1_large); - return firstImage != null && firstImage.isVisibleToUser() ? firstImage : null; + View imagePreview = findViewById(R.id.scrollable_image_preview); + return imagePreview instanceof ImagePreviewView + ? ((ImagePreviewView) imagePreview).getTransitionView() + : null; } /** @@ -1295,7 +1298,6 @@ public class ChooserActivity extends ResolverActivity implements return new ChooserActionFactory( this, mChooserRequest, - mFeatureFlagRepository, mIntegratedDeviceComponents, getChooserActivityLogger(), (isExcluded) -> mExcludeSharedText = isExcluded, diff --git a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java index 318aa627..56027a16 100644 --- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java @@ -155,7 +155,6 @@ public final class ChooserContentPreviewUi { return new FileContentPreviewUi( files, actionFactory, - imageLoader, headlineGenerator); } return new UnifiedContentPreviewUi( diff --git a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java index e814eb12..e9d65eed 100644 --- a/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java +++ b/java/src/com/android/intentresolver/contentpreview/FileContentPreviewUi.java @@ -25,7 +25,6 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import com.android.intentresolver.ImageLoader; import com.android.intentresolver.R; import com.android.intentresolver.widget.ActionRow; @@ -40,17 +39,14 @@ class FileContentPreviewUi extends ContentPreviewUi { private final List<FileInfo> mFiles; private final ChooserContentPreviewUi.ActionFactory mActionFactory; - private final ImageLoader mImageLoader; private final HeadlineGenerator mHeadlineGenerator; FileContentPreviewUi( List<FileInfo> files, ChooserContentPreviewUi.ActionFactory actionFactory, - ImageLoader imageLoader, HeadlineGenerator headlineGenerator) { mFiles = files; mActionFactory = actionFactory; - mImageLoader = imageLoader; mHeadlineGenerator = headlineGenerator; } @@ -82,30 +78,27 @@ class FileContentPreviewUi extends ContentPreviewUi { return contentPreviewLayout; } + FileInfo fileInfo = mFiles.get(0); + final CharSequence fileName; + final int iconId; if (uriCount == 1) { - loadFileUriIntoView(mFiles.get(0), contentPreviewLayout, mImageLoader); + fileName = fileInfo.getName(); + iconId = R.drawable.chooser_file_generic; } else { - FileInfo fileInfo = mFiles.get(0); int remUriCount = uriCount - 1; Map<String, Object> arguments = new HashMap<>(); arguments.put(PLURALS_COUNT, remUriCount); arguments.put(PLURALS_FILE_NAME, fileInfo.getName()); - String fileName = - PluralsMessageFormatter.format(resources, arguments, R.string.file_count); - - TextView fileNameView = contentPreviewLayout.findViewById( - com.android.internal.R.id.content_preview_filename); - fileNameView.setText(fileName); - - View thumbnailView = contentPreviewLayout.findViewById( - com.android.internal.R.id.content_preview_file_thumbnail); - thumbnailView.setVisibility(View.GONE); - - ImageView fileIconView = contentPreviewLayout.findViewById( - com.android.internal.R.id.content_preview_file_icon); - fileIconView.setVisibility(View.VISIBLE); - fileIconView.setImageResource(R.drawable.ic_file_copy); + fileName = PluralsMessageFormatter.format(resources, arguments, R.string.file_count); + iconId = R.drawable.ic_file_copy; } + TextView fileNameView = contentPreviewLayout.findViewById( + com.android.internal.R.id.content_preview_filename); + fileNameView.setText(fileName); + + ImageView fileIconView = contentPreviewLayout.findViewById( + com.android.internal.R.id.content_preview_file_icon); + fileIconView.setImageResource(iconId); final ActionRow actionRow = contentPreviewLayout.findViewById(com.android.internal.R.id.chooser_action_row); @@ -127,31 +120,4 @@ class FileContentPreviewUi extends ContentPreviewUi { } return actions; } - - private static void loadFileUriIntoView( - final FileInfo fileInfo, - final View parent, - final ImageLoader imageLoader) { - TextView fileNameView = parent.findViewById( - com.android.internal.R.id.content_preview_filename); - fileNameView.setText(fileInfo.getName()); - - if (fileInfo.getPreviewUri() != null) { - imageLoader.loadImage( - fileInfo.getPreviewUri(), - (bitmap) -> updateViewWithImage( - parent.findViewById( - com.android.internal.R.id.content_preview_file_thumbnail), - bitmap)); - } else { - View thumbnailView = parent.findViewById( - com.android.internal.R.id.content_preview_file_thumbnail); - thumbnailView.setVisibility(View.GONE); - - ImageView fileIconView = parent.findViewById( - com.android.internal.R.id.content_preview_file_icon); - fileIconView.setVisibility(View.VISIBLE); - fileIconView.setImageResource(R.drawable.chooser_file_generic); - } - } } diff --git a/java/src/com/android/intentresolver/widget/ImagePreviewView.kt b/java/src/com/android/intentresolver/widget/ImagePreviewView.kt index 8813adca..5f92b149 100644 --- a/java/src/com/android/intentresolver/widget/ImagePreviewView.kt +++ b/java/src/com/android/intentresolver/widget/ImagePreviewView.kt @@ -18,11 +18,13 @@ package com.android.intentresolver.widget import android.graphics.Bitmap import android.net.Uri +import android.view.View internal typealias ImageLoader = suspend (Uri) -> Bitmap? interface ImagePreviewView { fun setTransitionElementStatusCallback(callback: TransitionElementStatusCallback?) + fun getTransitionView(): View? /** * [ImagePreviewView] progressively prepares views for shared element transition and reports diff --git a/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt b/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt index 8dcaacb8..7755610d 100644 --- a/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt +++ b/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt @@ -122,6 +122,15 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView { previewAdapter.transitionStatusElementCallback = callback } + override fun getTransitionView(): View? { + for (i in 0 until childCount) { + val child = getChildAt(i) + val vh = getChildViewHolder(child) + if (vh is PreviewViewHolder && vh.image.transitionName != null) return child + } + return null + } + fun setPreviews(previews: List<Preview>, otherItemCount: Int, imageLoader: ImageLoader) { previewAdapter.reset(0, imageLoader) batchLoader?.cancel() @@ -250,7 +259,8 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView { is PreviewViewHolder -> vh.bind( previews[position], imageLoader ?: error("ImageLoader is missing"), - if (position == firstImagePos && transitionStatusElementCallback != null) { + isSharedTransitionElement = position == firstImagePos, + previewReadyCallback = if (position == firstImagePos && transitionStatusElementCallback != null) { this::onTransitionElementReady } else { null @@ -282,7 +292,7 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView { } private class PreviewViewHolder(view: View) : ViewHolder(view) { - private val image = view.requireViewById<ImageView>(R.id.image) + val image = view.requireViewById<ImageView>(R.id.image) private val badgeFrame = view.requireViewById<View>(R.id.badge_frame) private val badge = view.requireViewById<ImageView>(R.id.badge) private var scope: CoroutineScope? = null @@ -290,13 +300,14 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView { fun bind( preview: Preview, imageLoader: ImageLoader, + isSharedTransitionElement: Boolean, previewReadyCallback: ((String) -> Unit)? ) { image.setImageDrawable(null) (image.layoutParams as? ConstraintLayout.LayoutParams)?.let { params -> params.dimensionRatio = preview.aspectRatioString } - image.transitionName = if (previewReadyCallback != null) { + image.transitionName = if (isSharedTransitionElement) { TRANSITION_NAME } else { null diff --git a/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt b/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt index 0a8c22b7..d72c9aa6 100644 --- a/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt +++ b/java/tests/src/com/android/intentresolver/ChooserActionFactoryTest.kt @@ -29,11 +29,9 @@ import android.view.View import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import com.android.intentresolver.flags.FeatureFlagRepository -import com.android.intentresolver.flags.Flags import com.google.common.collect.ImmutableList import com.google.common.truth.Truth.assertThat import org.junit.After -import org.junit.Assert import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test @@ -142,7 +140,6 @@ class ChooserActionFactoryTest { return ChooserActionFactory( context, chooserRequest, - flags, mock<ChooserIntegratedDeviceComponents>(), logger, Consumer<Boolean>{}, |