Convert TermsService to suspend functions
Signed-off-by: Dominic Fischer <dominicfischer7@gmail.com>
This commit is contained in:
parent
1359c6be1d
commit
27050b911b
4 changed files with 23 additions and 45 deletions
|
@ -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
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 ?: "",
|
||||||
|
|
Loading…
Reference in a new issue