Browse Source

Merge pull request #3118 from element-hq/feature/bma/localeCall

Give locale and theme to Element Call
pull/3119/head
Benoit Marty 3 months ago committed by GitHub
parent
commit
78b6d8fd14
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 17
      features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt
  2. 36
      features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt
  3. 4
      features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/CallWidgetProvider.kt
  4. 7
      features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt
  5. 1
      features/call/impl/src/test/kotlin/io/element/android/features/call/ui/CallScreenPresenterTest.kt
  6. 25
      features/call/impl/src/test/kotlin/io/element/android/features/call/ui/FakeLanguageTagProvider.kt
  7. 4
      libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt

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

@ -30,6 +30,7 @@ import dagger.assisted.Assisted @@ -30,6 +30,7 @@ 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 +69,7 @@ class CallScreenPresenter @AssistedInject constructor( @@ -68,6 +69,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 +87,19 @@ class CallScreenPresenter @AssistedInject constructor( @@ -85,12 +87,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 +187,8 @@ class CallScreenPresenter @AssistedInject constructor( @@ -178,6 +187,8 @@ class CallScreenPresenter @AssistedInject constructor(
inputs: CallType,
urlState: MutableState<AsyncData<String>>,
callWidgetDriver: MutableState<MatrixWidgetDriver?>,
languageTag: String?,
theme: String?,
) {
urlState.runCatchingUpdatingState {
when (inputs) {
@ -189,6 +200,8 @@ class CallScreenPresenter @AssistedInject constructor( @@ -189,6 +200,8 @@ class CallScreenPresenter @AssistedInject constructor(
sessionId = inputs.sessionId,
roomId = inputs.roomId,
clientId = UUID.randomUUID().toString(),
languageTag = languageTag,
theme = theme,
).getOrThrow()
callWidgetDriver.value = result.driver
result.url

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

@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
/*
* 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
import javax.inject.Inject
interface LanguageTagProvider {
@Composable
fun provideLanguageTag(): String?
}
@ContributesBinding(AppScope::class)
class DefaultLanguageTagProvider @Inject constructor() : LanguageTagProvider {
@Composable
override fun provideLanguageTag(): String? {
return LocalConfiguration.current.locales.get(0)?.toLanguageTag()
}
}

4
features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/CallWidgetProvider.kt

@ -25,8 +25,8 @@ interface CallWidgetProvider { @@ -25,8 +25,8 @@ interface CallWidgetProvider {
sessionId: SessionId,
roomId: RoomId,
clientId: String,
languageTag: String? = null,
theme: String? = null,
languageTag: String?,
theme: String?,
): Result<GetWidgetResult>
data class GetWidgetResult(

7
features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt

@ -46,7 +46,12 @@ class DefaultCallWidgetProvider @Inject constructor( @@ -46,7 +46,12 @@ class DefaultCallWidgetProvider @Inject constructor(
?: elementCallBaseUrlProvider.provides(sessionId)
?: ElementCallConfig.DEFAULT_BASE_URL
val widgetSettings = callWidgetSettingsProvider.provide(baseUrl, encrypted = room.isEncrypted)
val callUrl = room.generateWidgetWebViewUrl(widgetSettings, clientId, languageTag, theme).getOrThrow()
val callUrl = room.generateWidgetWebViewUrl(
widgetSettings = widgetSettings,
clientId = clientId,
languageTag = languageTag,
theme = theme,
).getOrThrow()
CallWidgetProvider.GetWidgetResult(
driver = room.getWidgetDriver(widgetSettings).getOrThrow(),
url = callUrl

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
}

4
libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt

@ -308,8 +308,8 @@ interface MatrixRoom : Closeable { @@ -308,8 +308,8 @@ interface MatrixRoom : Closeable {
suspend fun generateWidgetWebViewUrl(
widgetSettings: MatrixWidgetSettings,
clientId: String,
languageTag: String? = null,
theme: String? = null,
languageTag: String?,
theme: String?,
): Result<String>
/**

Loading…
Cancel
Save