Introduce GetWidgetResult to avoid using Pair with generic String.

This commit is contained in:
Benoit Marty 2024-06-11 15:54:02 +02:00
parent e2aa84804d
commit a2db29316c
4 changed files with 21 additions and 10 deletions

View file

@ -188,13 +188,13 @@ class CallScreenPresenter @AssistedInject constructor(
inputs.url inputs.url
} }
is CallType.RoomCall -> { is CallType.RoomCall -> {
val (driver, url) = callWidgetProvider.getWidget( val result = callWidgetProvider.getWidget(
sessionId = inputs.sessionId, sessionId = inputs.sessionId,
roomId = inputs.roomId, roomId = inputs.roomId,
clientId = UUID.randomUUID().toString(), clientId = UUID.randomUUID().toString(),
).getOrThrow() ).getOrThrow()
callWidgetDriver.value = driver callWidgetDriver.value = result.driver
url result.url
} }
} }
} }

View file

@ -27,5 +27,10 @@ interface CallWidgetProvider {
clientId: String, clientId: String,
languageTag: String? = null, languageTag: String? = null,
theme: String? = null, theme: String? = null,
): Result<Pair<MatrixWidgetDriver, String>> ): Result<GetWidgetResult>
data class GetWidgetResult(
val driver: MatrixWidgetDriver,
val url: String,
)
} }

View file

@ -24,7 +24,6 @@ import io.element.android.libraries.matrix.api.MatrixClientProvider
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.api.widget.CallWidgetSettingsProvider import io.element.android.libraries.matrix.api.widget.CallWidgetSettingsProvider
import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver
import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.firstOrNull
import javax.inject.Inject import javax.inject.Inject
@ -40,11 +39,14 @@ class DefaultCallWidgetProvider @Inject constructor(
clientId: String, clientId: String,
languageTag: String?, languageTag: String?,
theme: String?, theme: String?,
): Result<Pair<MatrixWidgetDriver, String>> = runCatching { ): Result<CallWidgetProvider.GetWidgetResult> = runCatching {
val room = matrixClientsProvider.getOrRestore(sessionId).getOrThrow().getRoom(roomId) ?: error("Room not found") val room = matrixClientsProvider.getOrRestore(sessionId).getOrThrow().getRoom(roomId) ?: error("Room not found")
val baseUrl = appPreferencesStore.getCustomElementCallBaseUrlFlow().firstOrNull() ?: ElementCallConfig.DEFAULT_BASE_URL val baseUrl = appPreferencesStore.getCustomElementCallBaseUrlFlow().firstOrNull() ?: ElementCallConfig.DEFAULT_BASE_URL
val widgetSettings = callWidgetSettingsProvider.provide(baseUrl, encrypted = room.isEncrypted) val widgetSettings = callWidgetSettingsProvider.provide(baseUrl, encrypted = room.isEncrypted)
val callUrl = room.generateWidgetWebViewUrl(widgetSettings, clientId, languageTag, theme).getOrThrow() val callUrl = room.generateWidgetWebViewUrl(widgetSettings, clientId, languageTag, theme).getOrThrow()
room.getWidgetDriver(widgetSettings).getOrThrow() to callUrl CallWidgetProvider.GetWidgetResult(
driver = room.getWidgetDriver(widgetSettings).getOrThrow(),
url = callUrl
)
} }
} }

View file

@ -19,7 +19,6 @@ package io.element.android.features.call.utils
import io.element.android.features.call.impl.utils.CallWidgetProvider import io.element.android.features.call.impl.utils.CallWidgetProvider
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver
import io.element.android.libraries.matrix.test.widget.FakeMatrixWidgetDriver import io.element.android.libraries.matrix.test.widget.FakeMatrixWidgetDriver
class FakeCallWidgetProvider( class FakeCallWidgetProvider(
@ -35,8 +34,13 @@ class FakeCallWidgetProvider(
clientId: String, clientId: String,
languageTag: String?, languageTag: String?,
theme: String? theme: String?
): Result<Pair<MatrixWidgetDriver, String>> { ): Result<CallWidgetProvider.GetWidgetResult> {
getWidgetCalled = true getWidgetCalled = true
return Result.success(widgetDriver to url) return Result.success(
CallWidgetProvider.GetWidgetResult(
driver = widgetDriver,
url = url,
)
)
} }
} }