diff --git a/app/src/main/java/com/anytypeio/anytype/ui/chats/ChatFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/chats/ChatFragment.kt index da01f3b6b1..7ca853a84b 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/chats/ChatFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/chats/ChatFragment.kt @@ -251,6 +251,17 @@ class ChatFragment : BaseComposeFragment() { Timber.e(it, "Error while opening space member card") } } + is ChatViewModel.ViewModelCommand.Browse -> { + runCatching { + proceedWithAction( + SystemAction.OpenUrl( + command.url + ) + ) + }.onFailure { + Timber.e(it, "Error while opening bookmark from chat") + } + } } } } diff --git a/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/presentation/ChatViewModel.kt b/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/presentation/ChatViewModel.kt index d2b7511cb7..02c124480c 100644 --- a/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/presentation/ChatViewModel.kt +++ b/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/presentation/ChatViewModel.kt @@ -5,6 +5,7 @@ import com.anytypeio.anytype.core_models.Block import com.anytypeio.anytype.core_models.Command import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.ObjectType +import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_models.chats.Chat import com.anytypeio.anytype.core_models.primitives.Space import com.anytypeio.anytype.core_models.primitives.SpaceId @@ -622,7 +623,18 @@ class ChatViewModel @Inject constructor( is ChatView.Message.Attachment.Link -> { val wrapper = attachment.wrapper if (wrapper != null) { - navigation.emit(wrapper.navigation()) + if (wrapper.layout == ObjectType.Layout.BOOKMARK) { + val bookmark = ObjectWrapper.Bookmark(wrapper.map) + val url = bookmark.source + if (!url.isNullOrEmpty()) { + commands.emit(ViewModelCommand.Browse(url)) + } else { + // If url not found, open bookmark object instead of browsing. + navigation.emit(wrapper.navigation()) + } + } else { + navigation.emit(wrapper.navigation()) + } } else { Timber.w("Wrapper is not found in attachment") } @@ -761,6 +773,7 @@ class ChatViewModel @Inject constructor( data object Exit : ViewModelCommand() data object OpenWidgets : ViewModelCommand() data class MediaPreview(val url: String) : ViewModelCommand() + data class Browse(val url: String) : ViewModelCommand() data class SelectChatReaction(val msg: Id) : ViewModelCommand() data class ViewChatReaction(val msg: Id, val emoji: String) : ViewModelCommand() data class ViewMemberCard(val member: Id, val space: SpaceId) : ViewModelCommand()