Skip to content

Commit e4bee73

Browse files
committed
Take into account the value of FeatureFlags.SignInWithClassic
1 parent 897c68e commit e4bee73

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

features/login/impl/src/main/kotlin/io/element/android/features/login/impl/classic/ElementClassicConnection.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import io.element.android.libraries.androidutils.service.ServiceBinder
2828
import io.element.android.libraries.core.log.logger.LoggerTag
2929
import io.element.android.libraries.core.uri.ensureProtocol
3030
import io.element.android.libraries.di.annotations.AppCoroutineScope
31+
import io.element.android.libraries.featureflag.api.FeatureFlagService
32+
import io.element.android.libraries.featureflag.api.FeatureFlags
3133
import io.element.android.libraries.matrix.api.auth.ElementClassicSession
3234
import io.element.android.libraries.matrix.api.auth.HomeServerLoginCompatibilityChecker
3335
import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
@@ -69,6 +71,7 @@ class DefaultElementClassicConnection(
6971
private val coroutineScope: CoroutineScope,
7072
private val matrixAuthenticationService: MatrixAuthenticationService,
7173
private val homeServerLoginCompatibilityChecker: HomeServerLoginCompatibilityChecker,
74+
private val featureFlagService: FeatureFlagService,
7275
) : ElementClassicConnection {
7376
// Messenger for communicating with the service.
7477
private var messenger: Messenger? = null
@@ -116,6 +119,10 @@ class DefaultElementClassicConnection(
116119
override fun start() {
117120
Timber.tag(loggerTag.value).d("start()")
118121
coroutineScope.launch {
122+
if (!featureFlagService.isFeatureEnabled(FeatureFlags.SignInWithClassic)) {
123+
Timber.tag(loggerTag.value).d("Login with Element Classic is disabled, not starting connection")
124+
return@launch
125+
}
119126
// Establish a connection with the service. We use an explicit
120127
// class name because there is no reason to be able to let other
121128
// applications replace our component.
@@ -151,6 +158,11 @@ class DefaultElementClassicConnection(
151158
override fun requestSession() {
152159
Timber.tag(loggerTag.value).d("requestSession()")
153160
coroutineScope.launch {
161+
if (!featureFlagService.isFeatureEnabled(FeatureFlags.SignInWithClassic)) {
162+
Timber.tag(loggerTag.value).d("Login with Element Classic is disabled")
163+
emitState(ElementClassicConnectionState.Error("The feature is disabled"))
164+
return@launch
165+
}
154166
val finalMessenger = messenger
155167
if (finalMessenger == null) {
156168
Timber.tag(loggerTag.value).d("The messenger is null, can't request data")

features/login/impl/src/test/kotlin/io/element/android/features/login/impl/classic/DefaultElementClassicConnectionTest.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ import androidx.core.graphics.createBitmap
1515
import app.cash.turbine.test
1616
import com.google.common.truth.Truth.assertThat
1717
import io.element.android.libraries.androidutils.service.ServiceBinder
18+
import io.element.android.libraries.featureflag.api.FeatureFlagService
19+
import io.element.android.libraries.featureflag.api.FeatureFlags
20+
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
1821
import io.element.android.libraries.matrix.api.auth.ElementClassicSession
1922
import io.element.android.libraries.matrix.api.auth.HomeServerLoginCompatibilityChecker
2023
import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
@@ -109,6 +112,21 @@ class DefaultElementClassicConnectionTest {
109112
}
110113
}
111114

115+
@Test
116+
fun `requestSession when the feature is disabled emits an error`() = runTest {
117+
val connection = createDefaultElementClassicConnection(
118+
matrixAuthenticationService = FakeMatrixAuthenticationService(
119+
setElementClassicSessionResult = {},
120+
),
121+
isFeatureEnabled = false,
122+
)
123+
connection.stateFlow.test {
124+
assertThat(awaitItem()).isEqualTo(ElementClassicConnectionState.Idle)
125+
connection.requestSession()
126+
assertThat(awaitItem()).isInstanceOf(ElementClassicConnectionState.Error::class.java)
127+
}
128+
}
129+
112130
@Test
113131
fun `when an error is received, an error is emitted`() = runTest {
114132
val connection = createDefaultElementClassicConnection(
@@ -496,10 +514,17 @@ class DefaultElementClassicConnectionTest {
496514
homeServerLoginCompatibilityChecker: HomeServerLoginCompatibilityChecker = FakeHomeServerLoginCompatibilityChecker(
497515
checkResult = { Result.success(true) }
498516
),
517+
isFeatureEnabled: Boolean = true,
518+
featureFlagService: FeatureFlagService = FakeFeatureFlagService(
519+
initialState = mapOf(
520+
FeatureFlags.SignInWithClassic.key to isFeatureEnabled,
521+
)
522+
),
499523
) = DefaultElementClassicConnection(
500524
serviceBinder = serviceBinder,
501525
coroutineScope = coroutineScope,
502526
matrixAuthenticationService = matrixAuthenticationService,
503527
homeServerLoginCompatibilityChecker = homeServerLoginCompatibilityChecker,
528+
featureFlagService = featureFlagService,
504529
)
505530
}

0 commit comments

Comments
 (0)