diff options
5 files changed, 21 insertions, 12 deletions
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/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>{}, |