Browse Source

Add support for link generated by matrix.to website.

pull/2776/head
Benoit Marty 1 month ago
parent
commit
1bcfa6034c
  1. 13
      app/src/main/AndroidManifest.xml
  2. 12
      libraries/core/src/main/kotlin/io/element/android/libraries/core/extensions/BasicExtensions.kt
  3. 9
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt
  4. 12
      libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverterTest.kt
  5. 19
      tools/adb/deeplink_matrixto.sh

13
app/src/main/AndroidManifest.xml

@ -87,7 +87,7 @@ @@ -87,7 +87,7 @@
<data android:host="*.element.io" />
</intent-filter>
<!--
matrix.to links
matrix.to links
Note: On Android 12 and higher clicking a web link (that is not an Android App Link) always shows content in a web browser
https://developer.android.com/training/app-links#web-links
-->
@ -100,6 +100,17 @@ @@ -100,6 +100,17 @@
<data android:scheme="https" />
<data android:host="matrix.to" />
</intent-filter>
<!--
links from matrix.to website
-->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="element" />
<data android:host="user" />
<data android:host="room" />
</intent-filter>
</activity>
<provider

12
libraries/core/src/main/kotlin/io/element/android/libraries/core/extensions/BasicExtensions.kt

@ -58,3 +58,15 @@ fun String.ellipsize(length: Int): String { @@ -58,3 +58,15 @@ fun String.ellipsize(length: Int): String {
return "${this.take(length)}"
}
/**
* Replace the old prefix with the new prefix.
* If the string does not start with the old prefix, the string is returned as is.
*/
fun String.replacePrefix(oldPrefix: String, newPrefix: String): String {
return if (startsWith(oldPrefix)) {
newPrefix + substring(oldPrefix.length)
} else {
this
}
}

9
libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt

@ -19,6 +19,7 @@ package io.element.android.libraries.matrix.impl.permalink @@ -19,6 +19,7 @@ package io.element.android.libraries.matrix.impl.permalink
import android.net.Uri
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.appconfig.MatrixConfiguration
import io.element.android.libraries.core.extensions.replacePrefix
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.matrix.api.permalink.MatrixToConverter
import javax.inject.Inject
@ -35,9 +36,14 @@ class DefaultMatrixToConverter @Inject constructor() : MatrixToConverter { @@ -35,9 +36,14 @@ class DefaultMatrixToConverter @Inject constructor() : MatrixToConverter {
* - https://riot.im/develop/#/room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org
* - https://app.element.io/#/room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org
* - https://www.example.org/#/room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org
* Also convert links coming from the matrix.to website:
* - element://room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org
* - element://user/@alice:matrix.org -> https://matrix.to/#/@alice:matrix.org
*/
override fun convert(uri: Uri): Uri? {
val uriString = uri.toString()
// Handle links coming from the matrix.to website.
.replacePrefix(MATRIX_TO_CUSTOM_SCHEME_BASE_URL, "https://app.element.io/#/")
val baseUrl = MatrixConfiguration.MATRIX_TO_PERMALINK_BASE_URL
return when {
@ -54,7 +60,8 @@ class DefaultMatrixToConverter @Inject constructor() : MatrixToConverter { @@ -54,7 +60,8 @@ class DefaultMatrixToConverter @Inject constructor() : MatrixToConverter {
}
companion object {
val SUPPORTED_PATHS = listOf(
private const val MATRIX_TO_CUSTOM_SCHEME_BASE_URL = "element://"
private val SUPPORTED_PATHS = listOf(
"/#/room/",
"/#/user/",
"/#/group/"

12
libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverterTest.kt

@ -53,4 +53,16 @@ class DefaultMatrixToConverterTest { @@ -53,4 +53,16 @@ class DefaultMatrixToConverterTest {
val url = Uri.parse("https://element.io/")
assertThat(DefaultMatrixToConverter().convert(url)).isNull()
}
@Test
fun `converting url coming from the matrix-to website returns a matrix-to url for room case`() {
val url = Uri.parse("element://room/#element-android:matrix.org")
assertThat(DefaultMatrixToConverter().convert(url)).isEqualTo(Uri.parse("https://matrix.to/#/#element-android:matrix.org"))
}
@Test
fun `converting url coming from the matrix-to website returns a matrix-to url for user case`() {
val url = Uri.parse("element://user/@alice:matrix.org")
assertThat(DefaultMatrixToConverter().convert(url)).isEqualTo(Uri.parse("https://matrix.to/#/@alice:matrix.org"))
}
}

19
tools/adb/deeplink_matrixto.sh

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
#! /bin/bash
#
# Copyright (c) 2024 New Vector Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
adb shell am start -a android.intent.action.VIEW \
-d "element://room/%23element-android%3Amatrix.org"
Loading…
Cancel
Save