Skip to content

Commit ce1c01e

Browse files
authored
Merge pull request #4198 from cbs228/bugfix/full-browser-for-web-links
Open chat links in regular browser tabs
2 parents 5644b0f + ebdd945 commit ce1c01e

File tree

5 files changed

+21
-12
lines changed

5 files changed

+21
-12
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt

+10-2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import io.element.android.features.messages.impl.timeline.di.LocalTimelineItemPr
4040
import io.element.android.features.messages.impl.timeline.di.TimelineItemPresenterFactories
4141
import io.element.android.features.messages.impl.timeline.model.TimelineItem
4242
import io.element.android.libraries.androidutils.browser.openUrlInChromeCustomTab
43+
import io.element.android.libraries.androidutils.system.openUrlInExternalApp
4344
import io.element.android.libraries.androidutils.system.toast
4445
import io.element.android.libraries.architecture.NodeInputs
4546
import io.element.android.libraries.architecture.inputs
@@ -138,6 +139,7 @@ class MessagesNode @AssistedInject constructor(
138139
darkTheme: Boolean,
139140
url: String,
140141
eventSink: (TimelineEvents) -> Unit,
142+
customTab: Boolean
141143
) {
142144
when (val permalink = permalinkParser.parse(url)) {
143145
is PermalinkData.UserLink -> {
@@ -148,7 +150,13 @@ class MessagesNode @AssistedInject constructor(
148150
is PermalinkData.RoomLink -> {
149151
handleRoomLinkClick(activity, permalink, eventSink)
150152
}
151-
is PermalinkData.FallbackLink,
153+
is PermalinkData.FallbackLink -> {
154+
if (customTab) {
155+
activity.openUrlInChromeCustomTab(null, darkTheme, url)
156+
} else {
157+
activity.openUrlInExternalApp(url)
158+
}
159+
}
152160
is PermalinkData.RoomEmailInviteLink -> {
153161
activity.openUrlInChromeCustomTab(null, darkTheme, url)
154162
}
@@ -233,7 +241,7 @@ class MessagesNode @AssistedInject constructor(
233241
onRoomDetailsClick = this::onRoomDetailsClick,
234242
onEventContentClick = this::onEventClick,
235243
onUserDataClick = this::onUserDataClick,
236-
onLinkClick = { url -> onLinkClick(activity, isDark, url, state.timelineState.eventSink) },
244+
onLinkClick = { url, customTab -> onLinkClick(activity, isDark, url, state.timelineState.eventSink, customTab) },
237245
onSendLocationClick = this::onSendLocationClick,
238246
onCreatePollClick = this::onCreatePollClick,
239247
onJoinCallClick = this::onJoinCallClick,

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ fun MessagesView(
111111
onRoomDetailsClick: () -> Unit,
112112
onEventContentClick: (event: TimelineItem.Event) -> Boolean,
113113
onUserDataClick: (UserId) -> Unit,
114-
onLinkClick: (String) -> Unit,
114+
onLinkClick: (String, Boolean) -> Unit,
115115
onSendLocationClick: () -> Unit,
116116
onCreatePollClick: () -> Unit,
117117
onJoinCallClick: () -> Unit,
@@ -273,7 +273,7 @@ private fun MessagesViewContent(
273273
state: MessagesState,
274274
onContentClick: (TimelineItem.Event) -> Unit,
275275
onUserDataClick: (UserId) -> Unit,
276-
onLinkClick: (String) -> Unit,
276+
onLinkClick: (String, Boolean) -> Unit,
277277
onReactionClick: (key: String, TimelineItem.Event) -> Unit,
278278
onReactionLongClick: (key: String, TimelineItem.Event) -> Unit,
279279
onMoreReactionsClick: (TimelineItem.Event) -> Unit,
@@ -347,7 +347,7 @@ private fun MessagesViewContent(
347347
state = state.timelineState,
348348
timelineProtectionState = state.timelineProtectionState,
349349
onUserDataClick = onUserDataClick,
350-
onLinkClick = onLinkClick,
350+
onLinkClick = { url -> onLinkClick(url, false) },
351351
onContentClick = onContentClick,
352352
onMessageLongClick = onMessageLongClick,
353353
onSwipeToReply = onSwipeToReply,
@@ -396,7 +396,7 @@ private fun MessagesViewContent(
396396
private fun MessagesViewComposerBottomSheetContents(
397397
subcomposing: Boolean,
398398
state: MessagesState,
399-
onLinkClick: (String) -> Unit,
399+
onLinkClick: (String, Boolean) -> Unit,
400400
) {
401401
if (state.userEventPermissions.canSendMessage) {
402402
Column(modifier = Modifier.fillMaxWidth()) {
@@ -537,7 +537,7 @@ internal fun MessagesViewPreview(@PreviewParameter(MessagesStateProvider::class)
537537
onRoomDetailsClick = {},
538538
onEventContentClick = { false },
539539
onUserDataClick = {},
540-
onLinkClick = {},
540+
onLinkClick = { _, _ -> },
541541
onSendLocationClick = {},
542542
onCreatePollClick = {},
543543
onJoinCallClick = {},

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/IdentityChangeStateView.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
2626
@Composable
2727
fun IdentityChangeStateView(
2828
state: IdentityChangeState,
29-
onLinkClick: (String) -> Unit,
29+
onLinkClick: (String, Boolean) -> Unit,
3030
modifier: Modifier = Modifier,
3131
) {
3232
// Pick the first identity change to PinViolation
@@ -73,7 +73,7 @@ fun IdentityChangeStateView(
7373
url = LinkAnnotation.Url(
7474
url = LearnMoreConfig.IDENTITY_CHANGE_URL,
7575
linkInteractionListener = {
76-
onLinkClick(LearnMoreConfig.IDENTITY_CHANGE_URL)
76+
onLinkClick(LearnMoreConfig.IDENTITY_CHANGE_URL, true)
7777
}
7878
),
7979
start = learnMoreStartIndex,
@@ -93,6 +93,6 @@ internal fun IdentityChangeStateViewPreview(
9393
) = ElementPreview {
9494
IdentityChangeStateView(
9595
state = state,
96-
onLinkClick = {},
96+
onLinkClick = { _, _ -> },
9797
)
9898
}

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/MessagesViewWithIdentityChangePreview.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ internal fun MessagesViewWithIdentityChangePreview(
3535
onRoomDetailsClick = {},
3636
onEventContentClick = { false },
3737
onUserDataClick = {},
38-
onLinkClick = {},
38+
onLinkClick = { _, _ -> },
3939
onSendLocationClick = {},
4040
onCreatePollClick = {},
4141
onJoinCallClick = {},

features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import io.element.android.tests.testutils.EnsureCalledOnceWithParam
5858
import io.element.android.tests.testutils.EnsureNeverCalled
5959
import io.element.android.tests.testutils.EnsureNeverCalledWithParam
6060
import io.element.android.tests.testutils.EnsureNeverCalledWithParamAndResult
61+
import io.element.android.tests.testutils.EnsureNeverCalledWithTwoParams
6162
import io.element.android.tests.testutils.EventsRecorder
6263
import io.element.android.tests.testutils.clickOn
6364
import io.element.android.tests.testutils.ensureCalledOnce
@@ -514,7 +515,7 @@ private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setMessa
514515
onRoomDetailsClick: () -> Unit = EnsureNeverCalled(),
515516
onEventClick: (event: TimelineItem.Event) -> Boolean = EnsureNeverCalledWithParamAndResult(),
516517
onUserDataClick: (UserId) -> Unit = EnsureNeverCalledWithParam(),
517-
onLinkClick: (String) -> Unit = EnsureNeverCalledWithParam(),
518+
onLinkClick: (String, Boolean) -> Unit = EnsureNeverCalledWithTwoParams(),
518519
onSendLocationClick: () -> Unit = EnsureNeverCalled(),
519520
onCreatePollClick: () -> Unit = EnsureNeverCalled(),
520521
onJoinCallClick: () -> Unit = EnsureNeverCalled(),

0 commit comments

Comments
 (0)