diff --git a/app/shared/src/commonMain/composeResources/values-ru/strings.xml b/app/shared/src/commonMain/composeResources/values-ru/strings.xml index 58beda6..0cce815 100644 --- a/app/shared/src/commonMain/composeResources/values-ru/strings.xml +++ b/app/shared/src/commonMain/composeResources/values-ru/strings.xml @@ -169,6 +169,7 @@ Не получилось загрузить профиль Профиль не найден Не удалось открыть профиль. Попробуйте снова. + Не удалось открыть ссылку Настройки Написать Скопировать ссылку diff --git a/app/shared/src/commonMain/composeResources/values/strings.xml b/app/shared/src/commonMain/composeResources/values/strings.xml index dcbfebe..9f356c1 100644 --- a/app/shared/src/commonMain/composeResources/values/strings.xml +++ b/app/shared/src/commonMain/composeResources/values/strings.xml @@ -187,6 +187,7 @@ Couldn’t load this profile This profile could not be found Could not open this profile. Please try again. + Couldn’t open the link Settings Chat Copy link diff --git a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/profile/ProfileScreen.kt b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/profile/ProfileScreen.kt index a57b03f..8aa5a2d 100644 --- a/app/shared/src/commonMain/kotlin/ru/fromchat/ui/profile/ProfileScreen.kt +++ b/app/shared/src/commonMain/kotlin/ru/fromchat/ui/profile/ProfileScreen.kt @@ -174,6 +174,7 @@ import ru.fromchat.profile_headline_bio import ru.fromchat.profile_headline_member_since import ru.fromchat.profile_headline_username import ru.fromchat.profile_headline_verification +import ru.fromchat.profile_invalid_link import ru.fromchat.profile_load_failed import ru.fromchat.profile_not_found import ru.fromchat.profile_verified_support @@ -830,6 +831,7 @@ fun ProfileScreen( clipboard = clipboard, navController = navController, scope = scope, + snackbarHostState = snackbarHostState, openContextMenuHaptic = openContextMenuHaptic, onBack = onBack, onProfileUpdated = { updated -> @@ -1045,6 +1047,7 @@ fun PublicChatProfileScreen( labelCopy = labelCopy, clipboard = clipboard, scope = scope, + snackbarHostState = snackbarHostState, ) } } @@ -1084,6 +1087,7 @@ private fun PublicChatProfileLoadedBody( labelCopy: String, clipboard: SupportClipboardManager, scope: CoroutineScope, + snackbarHostState: SnackbarHostState, modifier: Modifier = Modifier, ) { Column( @@ -1130,6 +1134,7 @@ private fun PublicChatProfileLoadedBody( supportingSlot = { ProfileBioMarkdown( content = resolvedProfile.bio.orEmpty(), + snackbarHostState = snackbarHostState, ) }, position = ListItemPosition.START, @@ -1317,6 +1322,7 @@ private fun ProfileLoadedBody( clipboard: SupportClipboardManager, navController: NavController, scope: CoroutineScope, + snackbarHostState: SnackbarHostState, openContextMenuHaptic: () -> Unit, onBack: () -> Unit, onProfileUpdated: (UserProfile) -> Unit, @@ -1498,7 +1504,10 @@ private fun ProfileLoadedBody( headline = headlineBio, supportingSlot = { key(resolvedProfile.id, bioContent) { - ProfileBioMarkdown(content = bioContent) + ProfileBioMarkdown( + content = bioContent, + snackbarHostState = snackbarHostState, + ) } }, divider = true, @@ -1857,14 +1866,27 @@ private fun ProfileLoadedBody( @Composable private fun ProfileBioMarkdown( content: String, + snackbarHostState: SnackbarHostState, modifier: Modifier = Modifier, ) { val uriHandler = LocalUriHandler.current + val scope = rememberCoroutineScope() + val invalidLinkMessage = stringResource(Res.string.profile_invalid_link) MarkdownPlain( content = content, modifier = modifier, - onLinkClick = { uriHandler.openUri(it) }, + onLinkClick = { uri -> + runCatching { uriHandler.openUri(uri) }.onFailure { + scope.launch { + snackbarHostState.showReplacingSnackbar( + message = invalidLinkMessage, + withDismissAction = false, + duration = SnackbarDuration.Short, + ) + } + } + }, ) }