diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt index d46fb2f931..5cd3efa801 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt @@ -30,8 +30,6 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.featureflag.api.FeatureFlagService -import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.encryption.EncryptionService import io.element.android.libraries.matrix.api.encryption.RecoveryState @@ -67,7 +65,6 @@ class LoggedInPresenter( private val buildMeta: BuildMeta, private val networkMonitor: NetworkMonitor, private val localNetworkPermissionAdvisor: LocalNetworkPermissionAdvisor, - private val featureFlagService: FeatureFlagService, permissionsPresenterFactory: PermissionsPresenter.Factory, ) : Presenter { private val localNetworkPermissionsPresenter: PermissionsPresenter = @@ -124,13 +121,9 @@ class LoggedInPresenter( } LaunchedEffect(Unit) { - // Keep automatic call status (m.call) in sync with the feature flag and homeserver support. - featureFlagService.isFeatureEnabledFlow(FeatureFlags.UserStatus) - .onEach { isUserStatusEnabled -> - val enabled = isUserStatusEnabled && matrixClient.isUserStatusSupported().getOrDefault(false) - matrixClient.enableAutomaticCallStatus(enabled) - } - .launchIn(this) + // Keep automatic call status (m.call) in sync with homeserver support. + val enabled = matrixClient.isUserStatusSupported().getOrDefault(false) + matrixClient.enableAutomaticCallStatus(enabled) } val networkConnectivity by networkMonitor.connectivity.collectAsState() diff --git a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt index cc330c2758..0e2d459d1e 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/loggedin/LoggedInPresenterTest.kt @@ -17,9 +17,6 @@ import im.vector.app.features.analytics.plan.UserProperties import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.features.networkmonitor.test.FakeNetworkMonitor import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.featureflag.api.FeatureFlagService -import io.element.android.libraries.featureflag.api.FeatureFlags -import io.element.android.libraries.featureflag.test.FakeFeatureFlagService import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.encryption.EncryptionService @@ -131,7 +128,6 @@ class LoggedInPresenterTest { buildMeta = buildMeta, networkMonitor = networkMonitor, localNetworkPermissionAdvisor = FakeLocalNetworkPermissionAdvisor(), - featureFlagService = FakeFeatureFlagService(), permissionsPresenterFactory = FakePermissionsPresenterFactory(), ).test { encryptionService.emitRecoveryState(RecoveryState.UNKNOWN) @@ -362,9 +358,6 @@ class LoggedInPresenterTest { } createLoggedInPresenter( matrixClient = matrixClient, - featureFlagService = FakeFeatureFlagService( - initialState = mapOf(FeatureFlags.UserStatus.key to true), - ), ).test { cancelAndConsumeRemainingEvents() assert(enableAutomaticCallStatusLambda) @@ -374,7 +367,7 @@ class LoggedInPresenterTest { } @Test - fun `present - reacts to user status flag being toggled at runtime`() = runTest { + fun `present - enables automatic call status when server supports it`() = runTest { val enableAutomaticCallStatusLambda = lambdaRecorder { } val matrixClient = FakeMatrixClient( accountManagementUrlResult = { Result.success(null) }, @@ -382,23 +375,13 @@ class LoggedInPresenterTest { ).apply { isUserStatusSupportedResult = Result.success(true) } - val featureFlagService = FakeFeatureFlagService( - initialState = mapOf(FeatureFlags.UserStatus.key to false), - ) createLoggedInPresenter( matrixClient = matrixClient, - featureFlagService = featureFlagService, ).test { - awaitItem() - // Turning the flag on at runtime enables it. - featureFlagService.setFeatureEnabled(FeatureFlags.UserStatus, true) cancelAndConsumeRemainingEvents() assert(enableAutomaticCallStatusLambda) - .isCalledExactly(2) - .withSequence( - listOf(value(false)), - listOf(value(true)), - ) + .isCalledOnce() + .with(value(true)) } } @@ -418,7 +401,6 @@ class LoggedInPresenterTest { ), buildMeta: BuildMeta = aBuildMeta(), networkMonitor: FakeNetworkMonitor = FakeNetworkMonitor(), - featureFlagService: FeatureFlagService = FakeFeatureFlagService(), ): LoggedInPresenter { return LoggedInPresenter( matrixClient = matrixClient, @@ -430,7 +412,6 @@ class LoggedInPresenterTest { buildMeta = buildMeta, networkMonitor = networkMonitor, localNetworkPermissionAdvisor = FakeLocalNetworkPermissionAdvisor(), - featureFlagService = featureFlagService, permissionsPresenterFactory = FakePermissionsPresenterFactory(), ) } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt index 679e033d9b..3a720fc7a8 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt @@ -76,10 +76,7 @@ class PreferencesRootPresenter( }.collectAsState(initial = false) val isUserStatusSupported by produceState(false) { - featureFlagService.isFeatureEnabledFlow(FeatureFlags.UserStatus) - .collect { isUserStatusEnabled -> - value = isUserStatusEnabled && matrixClient.isUserStatusSupported().getOrDefault(false) - } + value = matrixClient.isUserStatusSupported().getOrDefault(false) } val userStatusState = if (isUserStatusSupported) userStatusPresenter.present() else null diff --git a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt index 79b63f4455..4a8894e99c 100644 --- a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt +++ b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt @@ -152,13 +152,6 @@ enum class FeatureFlags( defaultValue = { false }, isFinished = false, ), - UserStatus( - key = "feature.user_status", - title = "User status", - description = "Allow users to set a status (e.g. In a meeting, Away) visible to their contacts.", - defaultValue = { false }, - isFinished = false, - ), MessageSearch( key = "feature.message_search", title = "Message search",