Add support for link generated by matrix.to website.
This commit is contained in:
parent
0d294ff171
commit
b156097e1a
5 changed files with 63 additions and 2 deletions
|
|
@ -87,7 +87,7 @@
|
||||||
<data android:host="*.element.io" />
|
<data android:host="*.element.io" />
|
||||||
</intent-filter>
|
</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
|
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
|
https://developer.android.com/training/app-links#web-links
|
||||||
-->
|
-->
|
||||||
|
|
@ -100,6 +100,17 @@
|
||||||
<data android:scheme="https" />
|
<data android:scheme="https" />
|
||||||
<data android:host="matrix.to" />
|
<data android:host="matrix.to" />
|
||||||
</intent-filter>
|
</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>
|
</activity>
|
||||||
|
|
||||||
<provider
|
<provider
|
||||||
|
|
|
||||||
|
|
@ -58,3 +58,15 @@ fun String.ellipsize(length: Int): String {
|
||||||
|
|
||||||
return "${this.take(length)}…"
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ package io.element.android.libraries.matrix.impl.permalink
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.appconfig.MatrixConfiguration
|
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.di.AppScope
|
||||||
import io.element.android.libraries.matrix.api.permalink.MatrixToConverter
|
import io.element.android.libraries.matrix.api.permalink.MatrixToConverter
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
@ -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://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://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
|
* - 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? {
|
override fun convert(uri: Uri): Uri? {
|
||||||
val uriString = uri.toString()
|
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
|
val baseUrl = MatrixConfiguration.MATRIX_TO_PERMALINK_BASE_URL
|
||||||
|
|
||||||
return when {
|
return when {
|
||||||
|
|
@ -54,7 +60,8 @@ class DefaultMatrixToConverter @Inject constructor() : MatrixToConverter {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val SUPPORTED_PATHS = listOf(
|
private const val MATRIX_TO_CUSTOM_SCHEME_BASE_URL = "element://"
|
||||||
|
private val SUPPORTED_PATHS = listOf(
|
||||||
"/#/room/",
|
"/#/room/",
|
||||||
"/#/user/",
|
"/#/user/",
|
||||||
"/#/group/"
|
"/#/group/"
|
||||||
|
|
|
||||||
|
|
@ -53,4 +53,16 @@ class DefaultMatrixToConverterTest {
|
||||||
val url = Uri.parse("https://element.io/")
|
val url = Uri.parse("https://element.io/")
|
||||||
assertThat(DefaultMatrixToConverter().convert(url)).isNull()
|
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
Executable file
19
tools/adb/deeplink_matrixto.sh
Executable file
|
|
@ -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…
Add table
Add a link
Reference in a new issue