Create a factory for JitsiWidgetProperties

This commit is contained in:
Benoit Marty 2021-02-11 12:56:29 +01:00 committed by Benoit Marty
parent 80a6823af4
commit cbabbf5c1e
3 changed files with 49 additions and 30 deletions

View File

@ -24,7 +24,6 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
import dagger.assisted.AssistedFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.core.resources.StringProvider
import im.vector.app.features.themes.ThemeProvider
import org.jitsi.meet.sdk.JitsiMeetUserInfo
import org.matrix.android.sdk.api.query.QueryStringValue
@ -38,7 +37,7 @@ class JitsiCallViewModel @AssistedInject constructor(
@Assisted initialState: JitsiCallViewState,
@Assisted val args: VectorJitsiActivity.Args,
private val session: Session,
private val stringProvider: StringProvider,
private val jitsiMeetPropertiesFactory: JitsiWidgetPropertiesFactory,
private val themeProvider: ThemeProvider
) : VectorViewModel<JitsiCallViewState, JitsiCallViewActions, JitsiCallViewEvents>(initialState) {
@ -68,7 +67,7 @@ class JitsiCallViewModel @AssistedInject constructor(
val jitsiWidget = it.firstOrNull()
if (jitsiWidget != null) {
val ppt = widgetService.getWidgetComputedUrl(jitsiWidget, themeProvider.isLightTheme())
?.let { url -> JitsiWidgetProperties.fromUrl(url, stringProvider) }
?.let { url -> jitsiMeetPropertiesFactory.create(url) }
setState {
copy(
widget = Success(jitsiWidget),

View File

@ -16,35 +16,9 @@
package im.vector.app.features.call.conference
import android.net.Uri
import im.vector.app.R
import im.vector.app.core.resources.StringProvider
import org.matrix.android.sdk.api.extensions.tryOrNull
import java.net.URLDecoder
data class JitsiWidgetProperties(
val domain: String,
val confId: String?,
val displayName: String?,
val avatarUrl: String?
) {
companion object {
fun fromUrl(url: String, stringProvider: StringProvider): JitsiWidgetProperties {
val configString: String? = tryOrNull { Uri.parse(url) }?.fragment
val configs: Map<String, String?> = configString?.split("&")
?.map { it.split("=") }
?.filter { it.size == 2 }
?.map { (key, value) -> key to URLDecoder.decode(value, "UTF-8") }
?.toMap()
.orEmpty()
return JitsiWidgetProperties(
domain = configs["conferenceDomain"] ?: stringProvider.getString(R.string.preferred_jitsi_domain),
confId = configs["conferenceId"],
displayName = configs["displayName"],
avatarUrl = configs["avatarUrl"]
)
}
}
}

View File

@ -0,0 +1,46 @@
/*
* Copyright (c) 2021 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 im.vector.app.features.call.conference
import android.net.Uri
import im.vector.app.R
import im.vector.app.core.resources.StringProvider
import org.matrix.android.sdk.api.extensions.tryOrNull
import java.net.URLDecoder
import javax.inject.Inject
class JitsiWidgetPropertiesFactory @Inject constructor(
private val stringProvider: StringProvider
) {
fun create(url: String): JitsiWidgetProperties {
val configString = tryOrNull { Uri.parse(url) }?.fragment
val configs = configString?.split("&")
?.map { it.split("=") }
?.filter { it.size == 2 }
?.map { (key, value) -> key to URLDecoder.decode(value, "UTF-8") }
?.toMap()
.orEmpty()
return JitsiWidgetProperties(
domain = configs["conferenceDomain"] ?: stringProvider.getString(R.string.preferred_jitsi_domain),
confId = configs["conferenceId"],
displayName = configs["displayName"],
avatarUrl = configs["avatarUrl"]
)
}
}