From 8ef970e3f7a6c9491bc47822efb61cb732ca96bd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 1 Jul 2024 14:48:18 +0200 Subject: [PATCH] Provide language and theme to Element Call. #3079 --- .../call/impl/ui/CallScreenPresenter.kt | 20 ++++++++--- .../call/impl/ui/LanguageTagProvider.kt | 35 +++++++++++++++++++ .../call/ui/CallScreenPresenterTest.kt | 1 + .../call/ui/FakeLanguageTagProvider.kt | 25 +++++++++++++ 4 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt create mode 100644 features/call/impl/src/test/kotlin/io/element/android/features/call/ui/FakeLanguageTagProvider.kt diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt index 6246ab6466..feb07f0c6b 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt @@ -26,10 +26,12 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import androidx.compose.ui.platform.LocalConfiguration import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import im.vector.app.features.analytics.plan.MobileScreen +import io.element.android.compound.theme.ElementTheme import io.element.android.features.call.api.CallType import io.element.android.features.call.impl.data.WidgetMessage import io.element.android.features.call.impl.utils.ActiveCallManager @@ -68,6 +70,7 @@ class CallScreenPresenter @AssistedInject constructor( private val screenTracker: ScreenTracker, private val appCoroutineScope: CoroutineScope, private val activeCallManager: ActiveCallManager, + private val languageTagProvider: LanguageTagProvider, ) : Presenter { @AssistedFactory interface Factory { @@ -85,12 +88,19 @@ class CallScreenPresenter @AssistedInject constructor( val callWidgetDriver = remember { mutableStateOf(null) } val messageInterceptor = remember { mutableStateOf(null) } var isJoinedCall by rememberSaveable { mutableStateOf(false) } - + val languageTag = languageTagProvider.provideLanguageTag() + val theme = if (ElementTheme.isLightTheme) "light" else "dark" DisposableEffect(Unit) { coroutineScope.launch { // Sets the call as joined activeCallManager.joinedCall(callType) - loadUrl(callType, urlState, callWidgetDriver) + loadUrl( + inputs = callType, + urlState = urlState, + callWidgetDriver = callWidgetDriver, + languageTag = languageTag, + theme = theme, + ) } onDispose { activeCallManager.hungUpCall(callType) @@ -178,6 +188,8 @@ class CallScreenPresenter @AssistedInject constructor( inputs: CallType, urlState: MutableState>, callWidgetDriver: MutableState, + languageTag: String?, + theme: String?, ) { urlState.runCatchingUpdatingState { when (inputs) { @@ -189,8 +201,8 @@ class CallScreenPresenter @AssistedInject constructor( sessionId = inputs.sessionId, roomId = inputs.roomId, clientId = UUID.randomUUID().toString(), - languageTag = null, - theme = null, + languageTag = languageTag, + theme = theme, ).getOrThrow() callWidgetDriver.value = result.driver result.url diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt new file mode 100644 index 0000000000..0835196307 --- /dev/null +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt @@ -0,0 +1,35 @@ +/* + * 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. + */ + +package io.element.android.features.call.impl.ui + +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalConfiguration +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.libraries.di.AppScope + +interface LanguageTagProvider { + @Composable + fun provideLanguageTag(): String? +} + +@ContributesBinding(AppScope::class) +class DefaultLanguageTagProvider : LanguageTagProvider { + @Composable + override fun provideLanguageTag(): String? { + return LocalConfiguration.current.locales.get(0)?.toLanguageTag() + } +} diff --git a/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt b/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt index 182f2a13f6..09e6c86158 100644 --- a/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt +++ b/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt @@ -292,6 +292,7 @@ class CallScreenPresenterTest { appCoroutineScope = this, activeCallManager = activeCallManager, screenTracker = screenTracker, + languageTagProvider = FakeLanguageTagProvider("en-US"), ) } } diff --git a/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/FakeLanguageTagProvider.kt b/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/FakeLanguageTagProvider.kt new file mode 100644 index 0000000000..60c5be23da --- /dev/null +++ b/features/call/impl/src/test/kotlin/io/element/android/features/call/ui/FakeLanguageTagProvider.kt @@ -0,0 +1,25 @@ +/* + * 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. + */ + +package io.element.android.features.call.ui + +import androidx.compose.runtime.Composable +import io.element.android.features.call.impl.ui.LanguageTagProvider + +class FakeLanguageTagProvider(private val languageTag: String?) : LanguageTagProvider { + @Composable + override fun provideLanguageTag() = languageTag +}