From 20270cdffed10da12229a42de66893151ef357fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9C=E5=9D=82=E9=9B=85?= <23130178+ShadowRZ@users.noreply.github.com> Date: Mon, 9 Jun 2025 22:40:45 +0800 Subject: [PATCH] feat: Support matrix: links (#4839) --- app/src/main/AndroidManifest.xml | 11 +++++++++++ .../matrix/api/permalink/PermalinkParser.kt | 1 + .../impl/permalink/DefaultPermalinkParser.kt | 14 ++++++++++---- tools/adb/deeplink_matrix.sh | 9 +++++++++ 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100755 tools/adb/deeplink_matrix.sh diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index adc2b178f8..1fdc07d72c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -122,6 +122,17 @@ + + + + + + + + + diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkParser.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkParser.kt index 6057656091..f51856db33 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkParser.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkParser.kt @@ -12,6 +12,7 @@ package io.element.android.libraries.matrix.api.permalink * element-based domains (e.g. https://app.element.io/#/user/@chagai95:matrix.org) permalinks * or matrix.to permalinks (e.g. https://matrix.to/#/@chagai95:matrix.org) * or client permalinks (e.g. user/@chagai95:matrix.org) + * or matrix: permalinks (e.g. matrix:u/chagai95:matrix.org) */ interface PermalinkParser { /** diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt index 0bf3e908b6..974c88825d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt @@ -29,6 +29,7 @@ import javax.inject.Inject * element-based domains (e.g. https://app.element.io/#/user/@chagai95:matrix.org) permalinks * or matrix.to permalinks (e.g. https://matrix.to/#/@chagai95:matrix.org) * or client permalinks (e.g. user/@chagai95:matrix.org) + * or matrix: permalinks (e.g. matrix:u/chagai95:matrix.org) */ @ContributesBinding(AppScope::class) class DefaultPermalinkParser @Inject constructor( @@ -40,10 +41,15 @@ class DefaultPermalinkParser @Inject constructor( */ override fun parse(uriString: String): PermalinkData { val uri = uriString.toUri() - // the client or element-based domain permalinks (e.g. https://app.element.io/#/user/@chagai95:matrix.org) don't have the - // mxid in the first param (like matrix.to does - https://matrix.to/#/@chagai95:matrix.org) but rather in the second after /user/ so /user/mxid - // so convert URI to matrix.to to simplify parsing process - val matrixToUri = matrixToConverter.convert(uri) ?: return PermalinkData.FallbackLink(uri) + val matrixToUri = if (uri.scheme == "matrix") { + // take matrix: URI as is to [parseMatrixEntityFrom] + uri + } else { + // the client or element-based domain permalinks (e.g. https://app.element.io/#/user/@chagai95:matrix.org) don't have the + // mxid in the first param (like matrix.to does - https://matrix.to/#/@chagai95:matrix.org) but rather in the second after /user/ so /user/mxid + // so convert URI to matrix.to to simplify parsing process + matrixToConverter.convert(uri) ?: return PermalinkData.FallbackLink(uri) + } val result = runCatchingExceptions { parseMatrixEntityFrom(matrixToUri.toString()) diff --git a/tools/adb/deeplink_matrix.sh b/tools/adb/deeplink_matrix.sh new file mode 100755 index 0000000000..f11d810ec9 --- /dev/null +++ b/tools/adb/deeplink_matrix.sh @@ -0,0 +1,9 @@ +#! /bin/bash + +# Copyright 2025 New Vector Ltd. +# +# SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +# Please see LICENSE files in the repository root for full details. + +adb shell am start -a android.intent.action.VIEW \ + -d "matrix:r/element-android:matrix.org"