Skip to content

Commit 9a979fb

Browse files
committed
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>
1 parent 340028e commit 9a979fb

5 files changed

Lines changed: 75 additions & 32 deletions

File tree

app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,6 @@ class ConversationInfoActivity : BaseActivity() {
305305
this,
306306
user.baseUrl,
307307
state.conversationToken,
308-
state.conversation?.name,
309308
CapabilitiesUtil.canGeneratePrettyURL(user)
310309
)
311310
},

app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1149,7 +1149,6 @@ class ConversationsListActivity : BaseActivity() {
11491149
this,
11501150
currentUser?.baseUrl,
11511151
conversation.token,
1152-
conversation.name,
11531152
canGeneratePrettyURL
11541153
)
11551154
}

app/src/main/java/com/nextcloud/talk/utils/ShareUtils.kt

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,31 @@
66
*/
77
package com.nextcloud.talk.utils
88

9-
import android.annotation.SuppressLint
109
import android.app.Activity
1110
import android.content.Intent
11+
import androidx.annotation.VisibleForTesting
1212
import androidx.core.net.toUri
1313
import com.nextcloud.talk.R
1414

1515
object ShareUtils {
1616

17-
@SuppressLint("StringFormatMatches")
18-
fun shareConversationLink(
19-
context: Activity,
20-
baseUrl: String?,
21-
roomToken: String?,
22-
conversationName: String?,
23-
canGeneratePrettyURL: Boolean
24-
) {
25-
if (baseUrl.isNullOrBlank() || roomToken.isNullOrBlank() || conversationName.isNullOrBlank()) {
26-
return
17+
fun shareConversationLink(context: Activity, baseUrl: String?, roomToken: String?, canGeneratePrettyURL: Boolean) {
18+
val conversationLink = buildConversationLink(baseUrl, roomToken, canGeneratePrettyURL) ?: return
19+
20+
val sendIntent: Intent = Intent().apply {
21+
action = Intent.ACTION_SEND
22+
putExtra(Intent.EXTRA_TEXT, conversationLink)
23+
type = "text/plain"
24+
}
25+
26+
val shareIntent = Intent.createChooser(sendIntent, context.getString(R.string.nc_share_link))
27+
context.startActivity(shareIntent)
28+
}
29+
30+
@VisibleForTesting
31+
fun buildConversationLink(baseUrl: String?, roomToken: String?, canGeneratePrettyURL: Boolean): String? {
32+
if (baseUrl.isNullOrBlank() || roomToken.isNullOrBlank()) {
33+
return null
2734
}
2835

2936
val uriBuilder = baseUrl.toUri()
@@ -36,23 +43,6 @@ object ShareUtils {
3643
uriBuilder.appendPath("call")
3744
uriBuilder.appendPath(roomToken)
3845

39-
val uriToShareConversation = uriBuilder.build()
40-
41-
val shareConversationLink = String.format(
42-
context.getString(
43-
R.string.share_link_to_conversation,
44-
conversationName,
45-
uriToShareConversation.toString()
46-
)
47-
)
48-
49-
val sendIntent: Intent = Intent().apply {
50-
action = Intent.ACTION_SEND
51-
putExtra(Intent.EXTRA_TEXT, shareConversationLink)
52-
type = "text/plain"
53-
}
54-
55-
val shareIntent = Intent.createChooser(sendIntent, context.getString(R.string.nc_share_link))
56-
context.startActivity(shareIntent)
46+
return uriBuilder.build().toString()
5747
}
5848
}

app/src/main/res/values/strings.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -952,7 +952,6 @@ How to translate with transifex:
952952
<string name="nc_edit_icon">Edit</string>
953953
<string name="get_invitations_error">Failed to fetch pending invitations</string>
954954
<string name="message_last_edited_by">Edited by %1$s</string>
955-
<string name="share_link_to_conversation">Join conversation %1$s at %2$s</string>
956955
<string name="nc_conversation_settings">Conversation settings</string>
957956
<string name="ban_participant">Ban participant</string>
958957
<string name="show_banned_participants">Show banned participants</string>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Nextcloud Talk - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH
5+
* SPDX-License-Identifier: GPL-3.0-or-later
6+
*/
7+
package com.nextcloud.talk.utils
8+
9+
import android.app.Application
10+
import org.junit.Assert.assertEquals
11+
import org.junit.Assert.assertNull
12+
import org.junit.Test
13+
import org.junit.runner.RunWith
14+
import org.robolectric.RobolectricTestRunner
15+
import org.robolectric.annotation.Config
16+
17+
@RunWith(RobolectricTestRunner::class)
18+
@Config(application = Application::class, sdk = [33])
19+
class ShareUtilsTest {
20+
21+
@Test
22+
fun `builds pretty URL when capability is available`() {
23+
val link = ShareUtils.buildConversationLink(BASE_URL, ROOM_TOKEN, canGeneratePrettyURL = true)
24+
assertEquals("$BASE_URL/call/$ROOM_TOKEN", link)
25+
}
26+
27+
@Test
28+
fun `builds index_php URL when pretty URL capability is missing`() {
29+
val link = ShareUtils.buildConversationLink(BASE_URL, ROOM_TOKEN, canGeneratePrettyURL = false)
30+
assertEquals("$BASE_URL/index.php/call/$ROOM_TOKEN", link)
31+
}
32+
33+
@Test
34+
fun `link is the bare URL with no extra text`() {
35+
val link = ShareUtils.buildConversationLink(BASE_URL, ROOM_TOKEN, canGeneratePrettyURL = true)
36+
// The shared text must be only the URL — no "Join conversation … at …" wrapper.
37+
assertEquals("$BASE_URL/call/$ROOM_TOKEN", link)
38+
}
39+
40+
@Test
41+
fun `returns null when baseUrl is blank`() {
42+
assertNull(ShareUtils.buildConversationLink("", ROOM_TOKEN, canGeneratePrettyURL = true))
43+
assertNull(ShareUtils.buildConversationLink(null, ROOM_TOKEN, canGeneratePrettyURL = true))
44+
}
45+
46+
@Test
47+
fun `returns null when roomToken is blank`() {
48+
assertNull(ShareUtils.buildConversationLink(BASE_URL, "", canGeneratePrettyURL = true))
49+
assertNull(ShareUtils.buildConversationLink(BASE_URL, null, canGeneratePrettyURL = true))
50+
}
51+
52+
companion object {
53+
private const val BASE_URL = "https://server.example.com"
54+
private const val ROOM_TOKEN = "abc123"
55+
}
56+
}

0 commit comments

Comments
 (0)