Browse Source

Provide language and theme to Element Call. #3079

pull/3118/head
Benoit Marty 3 months ago
parent
commit
8ef970e3f7
  1. 20
      features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt
  2. 35
      features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt
  3. 1
      features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt
  4. 25
      features/call/impl/src/test/kotlin/io/element/android/features/call/ui/FakeLanguageTagProvider.kt

20
features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt

@ -26,10 +26,12 @@ import androidx.compose.runtime.remember @@ -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( @@ -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<CallScreenState> {
@AssistedFactory
interface Factory {
@ -85,12 +88,19 @@ class CallScreenPresenter @AssistedInject constructor( @@ -85,12 +88,19 @@ class CallScreenPresenter @AssistedInject constructor(
val callWidgetDriver = remember { mutableStateOf<MatrixWidgetDriver?>(null) }
val messageInterceptor = remember { mutableStateOf<WidgetMessageInterceptor?>(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( @@ -178,6 +188,8 @@ class CallScreenPresenter @AssistedInject constructor(
inputs: CallType,
urlState: MutableState<AsyncData<String>>,
callWidgetDriver: MutableState<MatrixWidgetDriver?>,
languageTag: String?,
theme: String?,
) {
urlState.runCatchingUpdatingState {
when (inputs) {
@ -189,8 +201,8 @@ class CallScreenPresenter @AssistedInject constructor( @@ -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

35
features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt

@ -0,0 +1,35 @@ @@ -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()
}
}

1
features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt

@ -292,6 +292,7 @@ class CallScreenPresenterTest { @@ -292,6 +292,7 @@ class CallScreenPresenterTest {
appCoroutineScope = this,
activeCallManager = activeCallManager,
screenTracker = screenTracker,
languageTagProvider = FakeLanguageTagProvider("en-US"),
)
}
}

25
features/call/impl/src/test/kotlin/io/element/android/features/call/ui/FakeLanguageTagProvider.kt

@ -0,0 +1,25 @@ @@ -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
}
Loading…
Cancel
Save