Skip to content

Commit 0a57849

Browse files
committed
Add a way to override default homeserver.
1 parent e5ed0a0 commit 0a57849

File tree

14 files changed

+145
-121
lines changed

14 files changed

+145
-121
lines changed

appconfig/src/main/kotlin/io/element/android/appconfig/AuthenticationConfig.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,6 @@ package io.element.android.appconfig
1010
object AuthenticationConfig {
1111
const val MATRIX_ORG_URL = "https://matrix.org"
1212

13-
/**
14-
* Default homeserver url to sign in with, unless the user selects a different one.
15-
*/
16-
const val DEFAULT_HOMESERVER_URL = MATRIX_ORG_URL
17-
1813
/**
1914
* URL with some docs that explain what's sliding sync and how to add it to your home server.
2015
*/

enterprise

features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import io.element.android.libraries.matrix.api.core.SessionId
1313
interface EnterpriseService {
1414
val isEnterpriseBuild: Boolean
1515
suspend fun isEnterpriseUser(sessionId: SessionId): Boolean
16+
fun defaultHomeserver(): String?
1617

1718
fun semanticColorsLight(): SemanticColors
1819
fun semanticColorsDark(): SemanticColors

features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ class DefaultEnterpriseService @Inject constructor() : EnterpriseService {
2222

2323
override suspend fun isEnterpriseUser(sessionId: SessionId) = false
2424

25+
override fun defaultHomeserver() = null
26+
2527
override fun semanticColorsLight(): SemanticColors = compoundColorsLight
2628

2729
override fun semanticColorsDark(): SemanticColors = compoundColorsDark

features/enterprise/impl/src/test/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseServiceTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ class DefaultEnterpriseServiceTest {
1919
assertThat(defaultEnterpriseService.isEnterpriseBuild).isFalse()
2020
}
2121

22+
@Test
23+
fun `defaultHomeserver should return null`() {
24+
val defaultEnterpriseService = DefaultEnterpriseService()
25+
assertThat<String?>(defaultEnterpriseService.defaultHomeserver()).isNull()
26+
}
27+
2228
@Test
2329
fun `isEnterpriseUser always return false`() = runTest {
2430
val defaultEnterpriseService = DefaultEnterpriseService()
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright 2025 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
5+
* Please see LICENSE files in the repository root for full details.
6+
*/
7+
plugins {
8+
id("io.element.android-library")
9+
}
10+
11+
android {
12+
namespace = "io.element.android.features.enterprise.test"
13+
}
14+
15+
dependencies {
16+
api(projects.features.enterprise.api)
17+
implementation(libs.compound)
18+
implementation(projects.libraries.matrix.api)
19+
implementation(projects.tests.testutils)
20+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Copyright 2025 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
5+
* Please see LICENSE files in the repository root for full details.
6+
*/
7+
8+
package io.element.android.features.enterprise.test
9+
10+
import io.element.android.compound.tokens.generated.SemanticColors
11+
import io.element.android.features.enterprise.api.EnterpriseService
12+
import io.element.android.libraries.matrix.api.core.SessionId
13+
import io.element.android.tests.testutils.lambda.lambdaError
14+
import io.element.android.tests.testutils.simulateLongTask
15+
16+
class FakeEnterpriseService(
17+
override val isEnterpriseBuild: Boolean = false,
18+
private val isEnterpriseUserResult: (SessionId) -> Boolean = { lambdaError() },
19+
private val defaultHomeserverResult: () -> String? = { A_FAKE_HOMESERVER },
20+
private val semanticColorsLightResult: () -> SemanticColors = { lambdaError() },
21+
private val semanticColorsDarkResult: () -> SemanticColors = { lambdaError() },
22+
) : EnterpriseService {
23+
override suspend fun isEnterpriseUser(sessionId: SessionId): Boolean = simulateLongTask {
24+
isEnterpriseUserResult(sessionId)
25+
}
26+
27+
override fun defaultHomeserver(): String? {
28+
return defaultHomeserverResult()
29+
}
30+
31+
override fun semanticColorsLight(): SemanticColors {
32+
return semanticColorsLightResult()
33+
}
34+
35+
override fun semanticColorsDark(): SemanticColors {
36+
return semanticColorsDarkResult()
37+
}
38+
39+
companion object {
40+
const val A_FAKE_HOMESERVER = "a_fake_homeserver"
41+
}
42+
}

features/login/impl/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ setupAnvil(componentMergingStrategy = ComponentMergingStrategy.KSP)
2828

2929
dependencies {
3030
implementation(projects.appconfig)
31+
implementation(projects.features.enterprise.api)
3132
implementation(projects.libraries.core)
3233
implementation(projects.libraries.androidutils)
3334
implementation(projects.libraries.architecture)
@@ -55,6 +56,7 @@ dependencies {
5556
testImplementation(libs.test.robolectric)
5657
testImplementation(libs.test.truth)
5758
testImplementation(libs.test.turbine)
59+
testImplementation(projects.features.enterprise.test)
5860
testImplementation(projects.libraries.matrix.test)
5961
testImplementation(projects.libraries.oidc.impl)
6062
testImplementation(projects.libraries.permissions.test)

features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77

88
package io.element.android.features.login.impl.accountprovider
99

10-
import io.element.android.features.login.impl.util.defaultAccountProvider
10+
import io.element.android.appconfig.AuthenticationConfig
11+
import io.element.android.features.enterprise.api.EnterpriseService
1112
import io.element.android.libraries.di.AppScope
1213
import io.element.android.libraries.di.SingleIn
1314
import kotlinx.coroutines.flow.MutableStateFlow
@@ -16,7 +17,18 @@ import kotlinx.coroutines.flow.asStateFlow
1617
import javax.inject.Inject
1718

1819
@SingleIn(AppScope::class)
19-
class AccountProviderDataSource @Inject constructor() {
20+
class AccountProviderDataSource @Inject constructor(
21+
enterpriseService: EnterpriseService,
22+
) {
23+
private val defaultAccountProvider = (enterpriseService.defaultHomeserver() ?: AuthenticationConfig.MATRIX_ORG_URL).let { url ->
24+
AccountProvider(
25+
url = url,
26+
subtitle = null,
27+
isPublic = url == AuthenticationConfig.MATRIX_ORG_URL,
28+
isMatrixOrg = url == AuthenticationConfig.MATRIX_ORG_URL,
29+
)
30+
}
31+
2032
private val accountProvider: MutableStateFlow<AccountProvider> = MutableStateFlow(
2133
defaultAccountProvider
2234
)

features/login/impl/src/main/kotlin/io/element/android/features/login/impl/util/LoginConstants.kt

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)