Ensure we do not stage shared element transition view when opening media from a bubble.

This commit is contained in:
Alex Hart
2023-03-17 14:07:33 -03:00
committed by Greyson Parrelli
parent bf611f3a56
commit 5c688289a5
6 changed files with 18 additions and 9 deletions

View File

@@ -2116,7 +2116,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
@Override
public void goToMediaPreview(ConversationItem parent, View sharedElement, MediaIntentFactory.MediaPreviewArgs args) {
if (listener.isInBubble()) {
requireActivity().startActivity(MediaIntentFactory.create(requireActivity(), args));
requireActivity().startActivity(MediaIntentFactory.create(requireActivity(), args.skipSharedElementTransition(true)));
return;
}

View File

@@ -2393,7 +2393,8 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
mediaThumbnailStub.require().getCorners().getTopRight(),
mediaThumbnailStub.require().getCorners().getBottomRight(),
mediaThumbnailStub.require().getCorners().getBottomLeft()
));
),
false);
MediaPreviewCache.INSTANCE.setDrawable(((ThumbnailView) v).getImageDrawable());
eventListener.goToMediaPreview(ConversationItem.this, v, args);
} else if (slide.getUri() != null) {

View File

@@ -261,7 +261,8 @@ public final class MediaOverviewPageFragment extends Fragment
DimensionUnit.DP.toDp(12),
DimensionUnit.DP.toDp(12),
DimensionUnit.DP.toDp(12)
));
),
false);
view.setTransitionName(MediaPreviewV2Activity.SHARED_ELEMENT_TRANSITION_NAME);
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(requireActivity(), view, MediaPreviewV2Activity.SHARED_ELEMENT_TRANSITION_NAME);
context.startActivity(MediaIntentFactory.create(context, args), options.toBundle());

View File

@@ -42,8 +42,13 @@ object MediaIntentFactory {
val allMediaInRail: Boolean = false,
val sorting: MediaTable.Sorting,
val isVideoGif: Boolean,
val sharedElementArgs: SharedElementArgs = SharedElementArgs()
) : Parcelable
val sharedElementArgs: SharedElementArgs = SharedElementArgs(),
val skipSharedElementTransition: Boolean
) : Parcelable {
fun skipSharedElementTransition(skipSharedElementTransition: Boolean): MediaPreviewArgs {
return copy(skipSharedElementTransition = skipSharedElementTransition)
}
}
@JvmStatic
fun requireArguments(bundle: Bundle): MediaPreviewArgs = bundle.getParcelableCompat(ARGS_KEY, MediaPreviewArgs::class.java)!!
@@ -80,7 +85,8 @@ object MediaIntentFactory {
12.dp.toFloat(),
12.dp.toFloat(),
12.dp.toFloat()
)
),
skipSharedElementTransition = false
)
)
}

View File

@@ -40,7 +40,7 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr
}
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
if (MediaPreviewCache.drawable != null) {
if (MediaPreviewCache.drawable != null && !args.skipSharedElementTransition) {
val originalCorners = ShapeAppearanceModel.Builder()
.setTopLeftCornerSize(args.sharedElementArgs.topLeft)
.setTopRightCornerSize(args.sharedElementArgs.topRight)
@@ -90,7 +90,7 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr
transitionImageView = findViewById(R.id.transition_image_view)
val cacheDrawable = MediaPreviewCache.drawable
if (cacheDrawable != null) {
if (cacheDrawable != null && !args.skipSharedElementTransition) {
val bounds = cacheDrawable.bounds
val aspectRatio = bounds.width().toFloat() / bounds.height()
val screenRatio = resources.displayMetrics.widthPixels.toFloat() / resources.displayMetrics.heightPixels

View File

@@ -533,7 +533,8 @@ public class AttachmentManager {
false,
MediaTable.Sorting.Newest,
slide.isVideoGif(),
new MediaIntentFactory.SharedElementArgs());
new MediaIntentFactory.SharedElementArgs(),
false);
context.startActivity(MediaIntentFactory.create(context, args));
}
}