Convert TermsService to suspend functions

Signed-off-by: Dominic Fischer <dominicfischer7@gmail.com>
This commit is contained in:
Dominic Fischer 2020-11-13 19:37:21 +00:00
parent 1359c6be1d
commit 27050b911b
4 changed files with 23 additions and 45 deletions

View file

@ -16,22 +16,16 @@
package org.matrix.android.sdk.api.session.terms package org.matrix.android.sdk.api.session.terms
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.util.Cancelable
interface TermsService { interface TermsService {
enum class ServiceType { enum class ServiceType {
IntegrationManager, IntegrationManager,
IdentityService IdentityService
} }
fun getTerms(serviceType: ServiceType, suspend fun getTerms(serviceType: ServiceType, baseUrl: String): GetTermsResponse
baseUrl: String,
callback: MatrixCallback<GetTermsResponse>): Cancelable
fun agreeToTerms(serviceType: ServiceType, suspend fun agreeToTerms(serviceType: ServiceType,
baseUrl: String, baseUrl: String,
agreedUrls: List<String>, agreedUrls: List<String>,
token: String?, token: String?)
callback: MatrixCallback<Unit>): Cancelable
} }

View file

@ -17,11 +17,10 @@
package org.matrix.android.sdk.internal.session.terms package org.matrix.android.sdk.internal.session.terms
import dagger.Lazy import dagger.Lazy
import org.matrix.android.sdk.api.MatrixCallback import kotlinx.coroutines.withContext
import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.api.session.terms.GetTermsResponse import org.matrix.android.sdk.api.session.terms.GetTermsResponse
import org.matrix.android.sdk.api.session.terms.TermsService import org.matrix.android.sdk.api.session.terms.TermsService
import org.matrix.android.sdk.api.util.Cancelable
import org.matrix.android.sdk.internal.di.UnauthenticatedWithCertificate import org.matrix.android.sdk.internal.di.UnauthenticatedWithCertificate
import org.matrix.android.sdk.internal.network.NetworkConstants import org.matrix.android.sdk.internal.network.NetworkConstants
import org.matrix.android.sdk.internal.network.RetrofitFactory import org.matrix.android.sdk.internal.network.RetrofitFactory
@ -33,8 +32,6 @@ import org.matrix.android.sdk.internal.session.sync.model.accountdata.AcceptedTe
import org.matrix.android.sdk.api.session.accountdata.UserAccountDataTypes import org.matrix.android.sdk.api.session.accountdata.UserAccountDataTypes
import org.matrix.android.sdk.internal.session.user.accountdata.AccountDataDataSource import org.matrix.android.sdk.internal.session.user.accountdata.AccountDataDataSource
import org.matrix.android.sdk.internal.session.user.accountdata.UpdateUserAccountDataTask import org.matrix.android.sdk.internal.session.user.accountdata.UpdateUserAccountDataTask
import org.matrix.android.sdk.internal.task.TaskExecutor
import org.matrix.android.sdk.internal.task.launchToCallback
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.util.ensureTrailingSlash import org.matrix.android.sdk.internal.util.ensureTrailingSlash
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
@ -49,13 +46,11 @@ internal class DefaultTermsService @Inject constructor(
private val getOpenIdTokenTask: GetOpenIdTokenTask, private val getOpenIdTokenTask: GetOpenIdTokenTask,
private val identityRegisterTask: IdentityRegisterTask, private val identityRegisterTask: IdentityRegisterTask,
private val updateUserAccountDataTask: UpdateUserAccountDataTask, private val updateUserAccountDataTask: UpdateUserAccountDataTask,
private val coroutineDispatchers: MatrixCoroutineDispatchers, private val coroutineDispatchers: MatrixCoroutineDispatchers
private val taskExecutor: TaskExecutor
) : TermsService { ) : TermsService {
override fun getTerms(serviceType: TermsService.ServiceType, override suspend fun getTerms(serviceType: TermsService.ServiceType,
baseUrl: String, baseUrl: String): GetTermsResponse {
callback: MatrixCallback<GetTermsResponse>): Cancelable { return withContext(coroutineDispatchers.main) {
return taskExecutor.executorScope.launchToCallback(coroutineDispatchers.main, callback) {
val url = buildUrl(baseUrl, serviceType) val url = buildUrl(baseUrl, serviceType)
val termsResponse = executeRequest<TermsResponse>(null) { val termsResponse = executeRequest<TermsResponse>(null) {
apiCall = termsAPI.getTerms("${url}terms") apiCall = termsAPI.getTerms("${url}terms")
@ -64,12 +59,11 @@ internal class DefaultTermsService @Inject constructor(
} }
} }
override fun agreeToTerms(serviceType: TermsService.ServiceType, override suspend fun agreeToTerms(serviceType: TermsService.ServiceType,
baseUrl: String, baseUrl: String,
agreedUrls: List<String>, agreedUrls: List<String>,
token: String?, token: String?) {
callback: MatrixCallback<Unit>): Cancelable { withContext(coroutineDispatchers.main) {
return taskExecutor.executorScope.launchToCallback(coroutineDispatchers.main, callback) {
val url = buildUrl(baseUrl, serviceType) val url = buildUrl(baseUrl, serviceType)
val tokenToUse = token?.takeIf { it.isNotEmpty() } ?: getToken(baseUrl) val tokenToUse = token?.takeIf { it.isNotEmpty() } ?: getToken(baseUrl)

View file

@ -31,7 +31,6 @@ import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.failure.Failure import org.matrix.android.sdk.api.failure.Failure
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.identity.IdentityServiceError import org.matrix.android.sdk.api.session.identity.IdentityServiceError
import org.matrix.android.sdk.api.session.terms.GetTermsResponse
import org.matrix.android.sdk.api.session.terms.TermsService import org.matrix.android.sdk.api.session.terms.TermsService
import org.matrix.android.sdk.internal.util.awaitCallback import org.matrix.android.sdk.internal.util.awaitCallback
import java.net.UnknownHostException import java.net.UnknownHostException
@ -117,9 +116,7 @@ class SetIdentityServerViewModel @AssistedInject constructor(
private suspend fun checkTerms(baseUrl: String) { private suspend fun checkTerms(baseUrl: String) {
try { try {
val data = awaitCallback<GetTermsResponse> { val data = mxSession.getTerms(TermsService.ServiceType.IdentityService, baseUrl)
mxSession.getTerms(TermsService.ServiceType.IdentityService, baseUrl, it)
}
// has all been accepted? // has all been accepted?
val resp = data.serverResponse val resp = data.serverResponse

View file

@ -28,8 +28,6 @@ import im.vector.app.core.extensions.exhaustive
import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.platform.VectorViewModel
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.terms.GetTermsResponse
import org.matrix.android.sdk.internal.util.awaitCallback
import timber.log.Timber import timber.log.Timber
class ReviewTermsViewModel @AssistedInject constructor( class ReviewTermsViewModel @AssistedInject constructor(
@ -94,15 +92,12 @@ class ReviewTermsViewModel @AssistedInject constructor(
viewModelScope.launch { viewModelScope.launch {
try { try {
awaitCallback<Unit> { session.agreeToTerms(
session.agreeToTerms( termsArgs.type,
termsArgs.type, termsArgs.baseURL,
termsArgs.baseURL, agreedUrls,
agreedUrls, termsArgs.token
termsArgs.token, )
it
)
}
_viewEvents.post(ReviewTermsViewEvents.Success) _viewEvents.post(ReviewTermsViewEvents.Success)
} catch (failure: Throwable) { } catch (failure: Throwable) {
Timber.e(failure, "Failed to agree to terms") Timber.e(failure, "Failed to agree to terms")
@ -122,9 +117,7 @@ class ReviewTermsViewModel @AssistedInject constructor(
viewModelScope.launch { viewModelScope.launch {
try { try {
val data = awaitCallback<GetTermsResponse> { val data = session.getTerms(termsArgs.type, termsArgs.baseURL)
session.getTerms(termsArgs.type, termsArgs.baseURL, it)
}
val terms = data.serverResponse.getLocalizedTerms(action.preferredLanguageCode).map { val terms = data.serverResponse.getLocalizedTerms(action.preferredLanguageCode).map {
Term(it.localizedUrl ?: "", Term(it.localizedUrl ?: "",
it.localizedName ?: "", it.localizedName ?: "",