Skip to content

Commit 78b6d8f

Browse files
authored
Merge pull request #3118 from element-hq/feature/bma/localeCall
Give locale and theme to Element Call
2 parents 32b1b6e + 4df18ea commit 78b6d8f

File tree

7 files changed

+87
-7
lines changed

7 files changed

+87
-7
lines changed

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import dagger.assisted.Assisted
3030
import dagger.assisted.AssistedFactory
3131
import dagger.assisted.AssistedInject
3232
import im.vector.app.features.analytics.plan.MobileScreen
33+
import io.element.android.compound.theme.ElementTheme
3334
import io.element.android.features.call.api.CallType
3435
import io.element.android.features.call.impl.data.WidgetMessage
3536
import io.element.android.features.call.impl.utils.ActiveCallManager
@@ -68,6 +69,7 @@ class CallScreenPresenter @AssistedInject constructor(
6869
private val screenTracker: ScreenTracker,
6970
private val appCoroutineScope: CoroutineScope,
7071
private val activeCallManager: ActiveCallManager,
72+
private val languageTagProvider: LanguageTagProvider,
7173
) : Presenter<CallScreenState> {
7274
@AssistedFactory
7375
interface Factory {
@@ -85,12 +87,19 @@ class CallScreenPresenter @AssistedInject constructor(
8587
val callWidgetDriver = remember { mutableStateOf<MatrixWidgetDriver?>(null) }
8688
val messageInterceptor = remember { mutableStateOf<WidgetMessageInterceptor?>(null) }
8789
var isJoinedCall by rememberSaveable { mutableStateOf(false) }
88-
90+
val languageTag = languageTagProvider.provideLanguageTag()
91+
val theme = if (ElementTheme.isLightTheme) "light" else "dark"
8992
DisposableEffect(Unit) {
9093
coroutineScope.launch {
9194
// Sets the call as joined
9295
activeCallManager.joinedCall(callType)
93-
loadUrl(callType, urlState, callWidgetDriver)
96+
loadUrl(
97+
inputs = callType,
98+
urlState = urlState,
99+
callWidgetDriver = callWidgetDriver,
100+
languageTag = languageTag,
101+
theme = theme,
102+
)
94103
}
95104
onDispose {
96105
activeCallManager.hungUpCall(callType)
@@ -178,6 +187,8 @@ class CallScreenPresenter @AssistedInject constructor(
178187
inputs: CallType,
179188
urlState: MutableState<AsyncData<String>>,
180189
callWidgetDriver: MutableState<MatrixWidgetDriver?>,
190+
languageTag: String?,
191+
theme: String?,
181192
) {
182193
urlState.runCatchingUpdatingState {
183194
when (inputs) {
@@ -189,6 +200,8 @@ class CallScreenPresenter @AssistedInject constructor(
189200
sessionId = inputs.sessionId,
190201
roomId = inputs.roomId,
191202
clientId = UUID.randomUUID().toString(),
203+
languageTag = languageTag,
204+
theme = theme,
192205
).getOrThrow()
193206
callWidgetDriver.value = result.driver
194207
result.url
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Copyright (c) 2024 New Vector Ltd
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.element.android.features.call.impl.ui
18+
19+
import androidx.compose.runtime.Composable
20+
import androidx.compose.ui.platform.LocalConfiguration
21+
import com.squareup.anvil.annotations.ContributesBinding
22+
import io.element.android.libraries.di.AppScope
23+
import javax.inject.Inject
24+
25+
interface LanguageTagProvider {
26+
@Composable
27+
fun provideLanguageTag(): String?
28+
}
29+
30+
@ContributesBinding(AppScope::class)
31+
class DefaultLanguageTagProvider @Inject constructor() : LanguageTagProvider {
32+
@Composable
33+
override fun provideLanguageTag(): String? {
34+
return LocalConfiguration.current.locales.get(0)?.toLanguageTag()
35+
}
36+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ interface CallWidgetProvider {
2525
sessionId: SessionId,
2626
roomId: RoomId,
2727
clientId: String,
28-
languageTag: String? = null,
29-
theme: String? = null,
28+
languageTag: String?,
29+
theme: String?,
3030
): Result<GetWidgetResult>
3131

3232
data class GetWidgetResult(

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ class DefaultCallWidgetProvider @Inject constructor(
4646
?: elementCallBaseUrlProvider.provides(sessionId)
4747
?: ElementCallConfig.DEFAULT_BASE_URL
4848
val widgetSettings = callWidgetSettingsProvider.provide(baseUrl, encrypted = room.isEncrypted)
49-
val callUrl = room.generateWidgetWebViewUrl(widgetSettings, clientId, languageTag, theme).getOrThrow()
49+
val callUrl = room.generateWidgetWebViewUrl(
50+
widgetSettings = widgetSettings,
51+
clientId = clientId,
52+
languageTag = languageTag,
53+
theme = theme,
54+
).getOrThrow()
5055
CallWidgetProvider.GetWidgetResult(
5156
driver = room.getWidgetDriver(widgetSettings).getOrThrow(),
5257
url = callUrl

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ class CallScreenPresenterTest {
292292
appCoroutineScope = this,
293293
activeCallManager = activeCallManager,
294294
screenTracker = screenTracker,
295+
languageTagProvider = FakeLanguageTagProvider("en-US"),
295296
)
296297
}
297298
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright (c) 2024 New Vector Ltd
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.element.android.features.call.ui
18+
19+
import androidx.compose.runtime.Composable
20+
import io.element.android.features.call.impl.ui.LanguageTagProvider
21+
22+
class FakeLanguageTagProvider(private val languageTag: String?) : LanguageTagProvider {
23+
@Composable
24+
override fun provideLanguageTag() = languageTag
25+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,8 @@ interface MatrixRoom : Closeable {
308308
suspend fun generateWidgetWebViewUrl(
309309
widgetSettings: MatrixWidgetSettings,
310310
clientId: String,
311-
languageTag: String? = null,
312-
theme: String? = null,
311+
languageTag: String?,
312+
theme: String?,
313313
): Result<String>
314314

315315
/**

0 commit comments

Comments
 (0)