diff --git a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt
index 6ae01fa11b..945d72f95f 100644
--- a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt
+++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt
@@ -305,7 +305,6 @@ class ConversationInfoActivity : BaseActivity() {
this,
user.baseUrl,
state.conversationToken,
- state.conversation?.name,
CapabilitiesUtil.canGeneratePrettyURL(user)
)
},
diff --git a/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt
index 536996b9f6..8ee2b55f92 100644
--- a/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt
+++ b/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt
@@ -1149,7 +1149,6 @@ class ConversationsListActivity : BaseActivity() {
this,
currentUser?.baseUrl,
conversation.token,
- conversation.name,
canGeneratePrettyURL
)
}
diff --git a/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.kt
index 1031508941..669cd2701a 100644
--- a/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.kt
+++ b/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.kt
@@ -6,24 +6,31 @@
*/
package com.nextcloud.talk.utils
-import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
+import androidx.annotation.VisibleForTesting
import androidx.core.net.toUri
import com.nextcloud.talk.R
object ShareUtils {
- @SuppressLint("StringFormatMatches")
- fun shareConversationLink(
- context: Activity,
- baseUrl: String?,
- roomToken: String?,
- conversationName: String?,
- canGeneratePrettyURL: Boolean
- ) {
- if (baseUrl.isNullOrBlank() || roomToken.isNullOrBlank() || conversationName.isNullOrBlank()) {
- return
+ fun shareConversationLink(context: Activity, baseUrl: String?, roomToken: String?, canGeneratePrettyURL: Boolean) {
+ val conversationLink = buildConversationLink(baseUrl, roomToken, canGeneratePrettyURL) ?: return
+
+ val sendIntent: Intent = Intent().apply {
+ action = Intent.ACTION_SEND
+ putExtra(Intent.EXTRA_TEXT, conversationLink)
+ type = "text/plain"
+ }
+
+ val shareIntent = Intent.createChooser(sendIntent, context.getString(R.string.nc_share_link))
+ context.startActivity(shareIntent)
+ }
+
+ @VisibleForTesting
+ fun buildConversationLink(baseUrl: String?, roomToken: String?, canGeneratePrettyURL: Boolean): String? {
+ if (baseUrl.isNullOrBlank() || roomToken.isNullOrBlank()) {
+ return null
}
val uriBuilder = baseUrl.toUri()
@@ -36,23 +43,6 @@ object ShareUtils {
uriBuilder.appendPath("call")
uriBuilder.appendPath(roomToken)
- val uriToShareConversation = uriBuilder.build()
-
- val shareConversationLink = String.format(
- context.getString(
- R.string.share_link_to_conversation,
- conversationName,
- uriToShareConversation.toString()
- )
- )
-
- val sendIntent: Intent = Intent().apply {
- action = Intent.ACTION_SEND
- putExtra(Intent.EXTRA_TEXT, shareConversationLink)
- type = "text/plain"
- }
-
- val shareIntent = Intent.createChooser(sendIntent, context.getString(R.string.nc_share_link))
- context.startActivity(shareIntent)
+ return uriBuilder.build().toString()
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7df21e1e56..62e38d73fc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -952,7 +952,6 @@ How to translate with transifex:
Edit
Failed to fetch pending invitations
Edited by %1$s
- Join conversation %1$s at %2$s
Conversation settings
Ban participant
Show banned participants
diff --git a/app/src/test/java/com/nextcloud/talk/utils/ShareUtilsTest.kt b/app/src/test/java/com/nextcloud/talk/utils/ShareUtilsTest.kt
new file mode 100644
index 0000000000..cac1d8413b
--- /dev/null
+++ b/app/src/test/java/com/nextcloud/talk/utils/ShareUtilsTest.kt
@@ -0,0 +1,56 @@
+/*
+ * Nextcloud Talk - Android Client
+ *
+ * SPDX-FileCopyrightText: 2026 Nextcloud GmbH
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+package com.nextcloud.talk.utils
+
+import android.app.Application
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+
+@RunWith(RobolectricTestRunner::class)
+@Config(application = Application::class, sdk = [33])
+class ShareUtilsTest {
+
+ @Test
+ fun `builds pretty URL when capability is available`() {
+ val link = ShareUtils.buildConversationLink(BASE_URL, ROOM_TOKEN, canGeneratePrettyURL = true)
+ assertEquals("$BASE_URL/call/$ROOM_TOKEN", link)
+ }
+
+ @Test
+ fun `builds index_php URL when pretty URL capability is missing`() {
+ val link = ShareUtils.buildConversationLink(BASE_URL, ROOM_TOKEN, canGeneratePrettyURL = false)
+ assertEquals("$BASE_URL/index.php/call/$ROOM_TOKEN", link)
+ }
+
+ @Test
+ fun `link is the bare URL with no extra text`() {
+ val link = ShareUtils.buildConversationLink(BASE_URL, ROOM_TOKEN, canGeneratePrettyURL = true)
+ // The shared text must be only the URL — no "Join conversation … at …" wrapper.
+ assertEquals("$BASE_URL/call/$ROOM_TOKEN", link)
+ }
+
+ @Test
+ fun `returns null when baseUrl is blank`() {
+ assertNull(ShareUtils.buildConversationLink("", ROOM_TOKEN, canGeneratePrettyURL = true))
+ assertNull(ShareUtils.buildConversationLink(null, ROOM_TOKEN, canGeneratePrettyURL = true))
+ }
+
+ @Test
+ fun `returns null when roomToken is blank`() {
+ assertNull(ShareUtils.buildConversationLink(BASE_URL, "", canGeneratePrettyURL = true))
+ assertNull(ShareUtils.buildConversationLink(BASE_URL, null, canGeneratePrettyURL = true))
+ }
+
+ companion object {
+ private const val BASE_URL = "https://server.example.com"
+ private const val ROOM_TOKEN = "abc123"
+ }
+}