diff --git a/CHANGES.md b/CHANGES.md index f1f1d8dcaf..09ee32a127 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,7 +5,7 @@ Features ✨: - Improvements 🙌: - - + - Open image from URL Preview (#2705) Bugfix 🐛: - Duplicate thumbs | Mobile reactions for 👍 and 👎 are not the same as web (#2776) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 2d2059377c..aeb1c30f4b 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -1687,6 +1687,10 @@ class RoomDetailFragment @Inject constructor( roomDetailViewModel.handle(RoomDetailAction.DoNotShowPreviewUrlFor(eventId, url)) } + override fun onPreviewUrlImageClicked(sharedView: View?, mxcUrl: String?, title: String?) { + navigator.openBigImageViewer(requireActivity(), sharedView, mxcUrl, title) + } + private fun onShareActionClicked(action: EventSharedAction.Share) { if (action.messageContent is MessageTextContent) { shareText(requireContext(), action.messageContent.body) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt index ba3ffe3174..1e108a2062 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt @@ -130,6 +130,7 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec interface PreviewUrlCallback { fun onPreviewUrlClicked(url: String) fun onPreviewUrlCloseClicked(eventId: String, url: String) + fun onPreviewUrlImageClicked(sharedView: View?, mxcUrl: String?, title: String?) } // Map eventId to adapter position diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlView.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlView.kt index a36b1281ba..0acf704595 100755 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlView.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlView.kt @@ -80,6 +80,19 @@ class PreviewUrlView @JvmOverloads constructor( } } + private fun onImageClick() { + when (val finalState = state) { + is PreviewUrlUiState.Data -> { + delegate?.onPreviewUrlImageClicked( + sharedView = views.urlPreviewImage, + mxcUrl = finalState.previewUrlData.mxcUrl, + title = finalState.previewUrlData.title + ) + } + else -> Unit + } + } + private fun onCloseClick() { when (val finalState = state) { is PreviewUrlUiState.Data -> delegate?.onPreviewUrlCloseClicked(finalState.eventId, finalState.url) @@ -94,6 +107,7 @@ class PreviewUrlView @JvmOverloads constructor( views = UrlPreviewBinding.bind(this) setOnClickListener(this) + views.urlPreviewImage.setOnClickListener { onImageClick() } views.urlPreviewClose.setOnClickListener { onCloseClick() } } diff --git a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt index c32b5626be..43a3f748a5 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt @@ -73,7 +73,6 @@ import org.matrix.android.sdk.api.session.room.model.thirdparty.RoomDirectoryDat import org.matrix.android.sdk.api.session.terms.TermsService import org.matrix.android.sdk.api.session.widgets.model.Widget import org.matrix.android.sdk.api.session.widgets.model.WidgetType -import org.matrix.android.sdk.api.util.MatrixItem import javax.inject.Inject import javax.inject.Singleton @@ -256,11 +255,11 @@ class DefaultNavigator @Inject constructor( context.startActivity(RoomProfileActivity.newIntent(context, roomId, directAccess)) } - override fun openBigImageViewer(activity: Activity, sharedElement: View?, matrixItem: MatrixItem) { - matrixItem.avatarUrl + override fun openBigImageViewer(activity: Activity, sharedElement: View?, mxcUrl: String?, title: String?) { + mxcUrl ?.takeIf { it.isNotBlank() } ?.let { avatarUrl -> - val intent = BigImageViewerActivity.newIntent(activity, matrixItem.getBestName(), avatarUrl) + val intent = BigImageViewerActivity.newIntent(activity, title, avatarUrl) val options = sharedElement?.let { ActivityOptionsCompat.makeSceneTransitionAnimation(activity, it, ViewCompat.getTransitionName(it) ?: "") } diff --git a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt index 504fccb63a..dda071795b 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt @@ -80,7 +80,11 @@ interface Navigator { fun openRoomProfile(context: Context, roomId: String, directAccess: Int? = null) - fun openBigImageViewer(activity: Activity, sharedElement: View?, matrixItem: MatrixItem) + fun openBigImageViewer(activity: Activity, sharedElement: View?, matrixItem: MatrixItem) { + openBigImageViewer(activity, sharedElement, matrixItem.avatarUrl, matrixItem.getBestName()) + } + + fun openBigImageViewer(activity: Activity, sharedElement: View?, mxcUrl: String?, title: String?) fun openPinCode(context: Context, activityResultLauncher: ActivityResultLauncher,