From 9a979fba2baed4bd901b88f49fce4a5d37819709 Mon Sep 17 00:00:00 2001 From: "Jan C. Borchardt" <925062+jancborchardt@users.noreply.github.com> Date: Mon, 29 Jun 2026 14:53:57 +0200 Subject: [PATCH] fix: Share only the conversation link without extra text Assisted-by: ClaudeCode:claude-opus-4-8 Signed-off-by: Jan C. Borchardt <925062+jancborchardt@users.noreply.github.com> --- .../ConversationInfoActivity.kt | 1 - .../ConversationsListActivity.kt | 1 - .../com/nextcloud/talk/utils/ShareUtils.kt | 48 +++++++--------- app/src/main/res/values/strings.xml | 1 - .../nextcloud/talk/utils/ShareUtilsTest.kt | 56 +++++++++++++++++++ 5 files changed, 75 insertions(+), 32 deletions(-) create mode 100644 app/src/test/java/com/nextcloud/talk/utils/ShareUtilsTest.kt 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 6ae01fa11bf..945d72f95f5 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 536996b9f6c..8ee2b55f929 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 1031508941c..669cd2701a1 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 7df21e1e56c..62e38d73fc2 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 00000000000..cac1d8413bf --- /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" + } +}