MoshiProvider is now internal. Create MatrixJsonParser to expose it to the app.

This commit is contained in:
Benoit Marty 2022-04-11 12:44:08 +02:00 committed by Benoit Marty
parent b1f4aa91e2
commit d8eac14294
14 changed files with 60 additions and 30 deletions

View File

@ -35,6 +35,7 @@ import org.matrix.android.sdk.api.session.room.send.SendState
import org.matrix.android.sdk.api.session.threads.ThreadDetails import org.matrix.android.sdk.api.session.threads.ThreadDetails
import org.matrix.android.sdk.api.util.ContentUtils import org.matrix.android.sdk.api.util.ContentUtils
import org.matrix.android.sdk.api.util.JsonDict import org.matrix.android.sdk.api.util.JsonDict
import org.matrix.android.sdk.api.util.MatrixJsonParser
import org.matrix.android.sdk.internal.crypto.algorithms.olm.OlmDecryptionResult import org.matrix.android.sdk.internal.crypto.algorithms.olm.OlmDecryptionResult
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.internal.di.MoshiProvider
import org.matrix.android.sdk.internal.session.presence.model.PresenceContent import org.matrix.android.sdk.internal.session.presence.model.PresenceContent
@ -46,7 +47,7 @@ typealias Content = JsonDict
* This methods is a facility method to map a json content to a model. * This methods is a facility method to map a json content to a model.
*/ */
inline fun <reified T> Content?.toModel(catchError: Boolean = true): T? { inline fun <reified T> Content?.toModel(catchError: Boolean = true): T? {
val moshi = MoshiProvider.providesMoshi() val moshi = MatrixJsonParser.getMoshi()
val moshiAdapter = moshi.adapter(T::class.java) val moshiAdapter = moshi.adapter(T::class.java)
return try { return try {
moshiAdapter.fromJsonValue(this) moshiAdapter.fromJsonValue(this)
@ -65,7 +66,7 @@ inline fun <reified T> Content?.toModel(catchError: Boolean = true): T? {
*/ */
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
inline fun <reified T> T.toContent(): Content { inline fun <reified T> T.toContent(): Content {
val moshi = MoshiProvider.providesMoshi() val moshi = MatrixJsonParser.getMoshi()
val moshiAdapter = moshi.adapter(T::class.java) val moshiAdapter = moshi.adapter(T::class.java)
return moshiAdapter.toJsonValue(this) as Content return moshiAdapter.toJsonValue(this) as Content
} }

View File

@ -0,0 +1,32 @@
/*
* Copyright (c) 2022 The Matrix.org Foundation C.I.C.
*
* 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 org.matrix.android.sdk.api.util
import com.squareup.moshi.Moshi
import org.matrix.android.sdk.internal.di.MoshiProvider
/**
* Entry point to get a Json parser
*/
object MatrixJsonParser {
/**
* @return a Moshi Json parser instance, configured to handle some Matrix Event contents
*/
fun getMoshi(): Moshi {
return MoshiProvider.providesMoshi()
}
}

View File

@ -37,10 +37,7 @@ import org.matrix.android.sdk.internal.network.parsing.TlsVersionMoshiAdapter
import org.matrix.android.sdk.internal.network.parsing.UriMoshiAdapter import org.matrix.android.sdk.internal.network.parsing.UriMoshiAdapter
import org.matrix.android.sdk.internal.session.sync.parsing.DefaultLazyRoomSyncEphemeralJsonAdapter import org.matrix.android.sdk.internal.session.sync.parsing.DefaultLazyRoomSyncEphemeralJsonAdapter
/** internal object MoshiProvider {
* TODO Find a way to keep this internal
*/
object MoshiProvider {
private val moshi: Moshi = Moshi.Builder() private val moshi: Moshi = Moshi.Builder()
.add(UriMoshiAdapter()) .add(UriMoshiAdapter())

View File

@ -33,9 +33,9 @@ import org.matrix.android.sdk.api.raw.RawService
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.widgets.model.Widget import org.matrix.android.sdk.api.session.widgets.model.Widget
import org.matrix.android.sdk.api.session.widgets.model.WidgetType import org.matrix.android.sdk.api.session.widgets.model.WidgetType
import org.matrix.android.sdk.api.util.MatrixJsonParser
import org.matrix.android.sdk.api.util.appendParamToUrl import org.matrix.android.sdk.api.util.appendParamToUrl
import org.matrix.android.sdk.api.util.toMatrixItem import org.matrix.android.sdk.api.util.toMatrixItem
import org.matrix.android.sdk.internal.di.MoshiProvider
import java.net.URL import java.net.URL
import java.util.UUID import java.util.UUID
import javax.inject.Inject import javax.inject.Inject
@ -168,7 +168,7 @@ class JitsiService @Inject constructor(
return tryOrNull { return tryOrNull {
val response = session.getOkHttpClient().newCall(request).await() val response = session.getOkHttpClient().newCall(request).await()
val json = response.body?.string() ?: return null val json = response.body?.string() ?: return null
MoshiProvider.providesMoshi().adapter(JitsiWellKnown::class.java).fromJson(json)?.auth MatrixJsonParser.getMoshi().adapter(JitsiWellKnown::class.java).fromJson(json)?.auth
} }
} }
} }

View File

@ -38,8 +38,8 @@ import org.matrix.android.sdk.api.session.events.model.EventType
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.room.model.message.MessageContent import org.matrix.android.sdk.api.session.room.model.message.MessageContent
import org.matrix.android.sdk.api.util.JsonDict import org.matrix.android.sdk.api.util.JsonDict
import org.matrix.android.sdk.api.util.MatrixJsonParser
import org.matrix.android.sdk.flow.flow import org.matrix.android.sdk.flow.flow
import org.matrix.android.sdk.internal.di.MoshiProvider
class RoomDevToolViewModel @AssistedInject constructor( class RoomDevToolViewModel @AssistedInject constructor(
@Assisted val initialState: RoomDevToolViewState, @Assisted val initialState: RoomDevToolViewState,
@ -75,7 +75,7 @@ class RoomDevToolViewModel @AssistedInject constructor(
} }
} }
is RoomDevToolAction.ShowStateEvent -> { is RoomDevToolAction.ShowStateEvent -> {
val jsonString = MoshiProvider.providesMoshi() val jsonString = MatrixJsonParser.getMoshi()
.adapter(Event::class.java) .adapter(Event::class.java)
.toJson(action.event) .toJson(action.event)
@ -168,7 +168,7 @@ class RoomDevToolViewModel @AssistedInject constructor(
val room = session.getRoom(initialState.roomId) val room = session.getRoom(initialState.roomId)
?: throw IllegalArgumentException(stringProvider.getString(R.string.room_error_not_found)) ?: throw IllegalArgumentException(stringProvider.getString(R.string.room_error_not_found))
val adapter = MoshiProvider.providesMoshi() val adapter = MatrixJsonParser.getMoshi()
.adapter<JsonDict>(Types.newParameterizedType(Map::class.java, String::class.java, Any::class.java)) .adapter<JsonDict>(Types.newParameterizedType(Map::class.java, String::class.java, Any::class.java))
val json = adapter.fromJson(state.editedContent ?: "") val json = adapter.fromJson(state.editedContent ?: "")
?: throw IllegalArgumentException(stringProvider.getString(R.string.dev_tools_error_no_content)) ?: throw IllegalArgumentException(stringProvider.getString(R.string.dev_tools_error_no_content))
@ -202,7 +202,7 @@ class RoomDevToolViewModel @AssistedInject constructor(
val room = session.getRoom(initialState.roomId) val room = session.getRoom(initialState.roomId)
?: throw IllegalArgumentException(stringProvider.getString(R.string.room_error_not_found)) ?: throw IllegalArgumentException(stringProvider.getString(R.string.room_error_not_found))
val adapter = MoshiProvider.providesMoshi() val adapter = MatrixJsonParser.getMoshi()
.adapter<JsonDict>(Types.newParameterizedType(Map::class.java, String::class.java, Any::class.java)) .adapter<JsonDict>(Types.newParameterizedType(Map::class.java, String::class.java, Any::class.java))
val json = adapter.fromJson(state.sendEventDraft?.content ?: "") val json = adapter.fromJson(state.sendEventDraft?.content ?: "")
?: throw IllegalArgumentException(stringProvider.getString(R.string.dev_tools_error_no_content)) ?: throw IllegalArgumentException(stringProvider.getString(R.string.dev_tools_error_no_content))

View File

@ -37,7 +37,7 @@ import im.vector.app.R
import im.vector.app.core.utils.AssetReader import im.vector.app.core.utils.AssetReader
import im.vector.app.databinding.FragmentLoginCaptchaBinding import im.vector.app.databinding.FragmentLoginCaptchaBinding
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.api.util.MatrixJsonParser
import timber.log.Timber import timber.log.Timber
import java.net.URLDecoder import java.net.URLDecoder
import java.util.Formatter import java.util.Formatter
@ -171,7 +171,7 @@ class LoginCaptchaFragment @Inject constructor(
try { try {
// URL decode // URL decode
json = URLDecoder.decode(json, "UTF-8") json = URLDecoder.decode(json, "UTF-8")
javascriptResponse = MoshiProvider.providesMoshi().adapter(JavascriptResponse::class.java).fromJson(json) javascriptResponse = MatrixJsonParser.getMoshi().adapter(JavascriptResponse::class.java).fromJson(json)
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "## shouldOverrideUrlLoading(): failed") Timber.e(e, "## shouldOverrideUrlLoading(): failed")
} }

View File

@ -38,7 +38,7 @@ import im.vector.app.databinding.FragmentLoginWebBinding
import im.vector.app.features.signout.soft.SoftLogoutAction import im.vector.app.features.signout.soft.SoftLogoutAction
import im.vector.app.features.signout.soft.SoftLogoutViewModel import im.vector.app.features.signout.soft.SoftLogoutViewModel
import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.api.auth.data.Credentials
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.api.util.MatrixJsonParser
import timber.log.Timber import timber.log.Timber
import java.net.URLDecoder import java.net.URLDecoder
import javax.inject.Inject import javax.inject.Inject
@ -203,7 +203,7 @@ class LoginWebFragment @Inject constructor(
try { try {
// URL decode // URL decode
json = URLDecoder.decode(json, "UTF-8") json = URLDecoder.decode(json, "UTF-8")
val adapter = MoshiProvider.providesMoshi().adapter(JavascriptResponse::class.java) val adapter = MatrixJsonParser.getMoshi().adapter(JavascriptResponse::class.java)
javascriptResponse = adapter.fromJson(json) javascriptResponse = adapter.fromJson(json)
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "## shouldOverrideUrlLoading() : fromJson failed") Timber.e(e, "## shouldOverrideUrlLoading() : fromJson failed")

View File

@ -37,7 +37,7 @@ import im.vector.app.core.utils.AssetReader
import im.vector.app.databinding.FragmentLoginCaptchaBinding import im.vector.app.databinding.FragmentLoginCaptchaBinding
import im.vector.app.features.login.JavascriptResponse import im.vector.app.features.login.JavascriptResponse
import im.vector.app.features.login.LoginCaptchaFragmentArgument import im.vector.app.features.login.LoginCaptchaFragmentArgument
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.api.util.MatrixJsonParser
import timber.log.Timber import timber.log.Timber
import java.net.URLDecoder import java.net.URLDecoder
import java.util.Formatter import java.util.Formatter
@ -166,7 +166,7 @@ class LoginCaptchaFragment2 @Inject constructor(
try { try {
// URL decode // URL decode
json = URLDecoder.decode(json, "UTF-8") json = URLDecoder.decode(json, "UTF-8")
javascriptResponse = MoshiProvider.providesMoshi().adapter(JavascriptResponse::class.java).fromJson(json) javascriptResponse = MatrixJsonParser.getMoshi().adapter(JavascriptResponse::class.java).fromJson(json)
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "## shouldOverrideUrlLoading(): failed") Timber.e(e, "## shouldOverrideUrlLoading(): failed")
} }

View File

@ -39,7 +39,7 @@ import im.vector.app.features.login.JavascriptResponse
import im.vector.app.features.signout.soft.SoftLogoutAction import im.vector.app.features.signout.soft.SoftLogoutAction
import im.vector.app.features.signout.soft.SoftLogoutViewModel import im.vector.app.features.signout.soft.SoftLogoutViewModel
import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.api.auth.data.Credentials
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.api.util.MatrixJsonParser
import timber.log.Timber import timber.log.Timber
import java.net.URLDecoder import java.net.URLDecoder
import javax.inject.Inject import javax.inject.Inject
@ -204,7 +204,7 @@ class LoginWebFragment2 @Inject constructor(
try { try {
// URL decode // URL decode
json = URLDecoder.decode(json, "UTF-8") json = URLDecoder.decode(json, "UTF-8")
val adapter = MoshiProvider.providesMoshi().adapter(JavascriptResponse::class.java) val adapter = MatrixJsonParser.getMoshi().adapter(JavascriptResponse::class.java)
javascriptResponse = adapter.fromJson(json) javascriptResponse = adapter.fromJson(json)
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "## shouldOverrideUrlLoading() : fromJson failed") Timber.e(e, "## shouldOverrideUrlLoading() : fromJson failed")

View File

@ -41,7 +41,7 @@ import im.vector.app.features.onboarding.OnboardingAction
import im.vector.app.features.onboarding.OnboardingViewState import im.vector.app.features.onboarding.OnboardingViewState
import im.vector.app.features.onboarding.RegisterAction import im.vector.app.features.onboarding.RegisterAction
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.api.util.MatrixJsonParser
import timber.log.Timber import timber.log.Timber
import java.net.URLDecoder import java.net.URLDecoder
import java.util.Formatter import java.util.Formatter
@ -175,7 +175,7 @@ class FtueAuthCaptchaFragment @Inject constructor(
try { try {
// URL decode // URL decode
json = URLDecoder.decode(json, "UTF-8") json = URLDecoder.decode(json, "UTF-8")
javascriptResponse = MoshiProvider.providesMoshi().adapter(JavascriptResponse::class.java).fromJson(json) javascriptResponse = MatrixJsonParser.getMoshi().adapter(JavascriptResponse::class.java).fromJson(json)
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "## shouldOverrideUrlLoading(): failed") Timber.e(e, "## shouldOverrideUrlLoading(): failed")
} }

View File

@ -40,7 +40,7 @@ import im.vector.app.features.onboarding.OnboardingAction
import im.vector.app.features.onboarding.OnboardingViewEvents import im.vector.app.features.onboarding.OnboardingViewEvents
import im.vector.app.features.onboarding.OnboardingViewState import im.vector.app.features.onboarding.OnboardingViewState
import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.api.auth.data.Credentials
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.api.util.MatrixJsonParser
import timber.log.Timber import timber.log.Timber
import java.net.URLDecoder import java.net.URLDecoder
import javax.inject.Inject import javax.inject.Inject
@ -200,7 +200,7 @@ class FtueAuthWebFragment @Inject constructor(
try { try {
// URL decode // URL decode
json = URLDecoder.decode(json, "UTF-8") json = URLDecoder.decode(json, "UTF-8")
val adapter = MoshiProvider.providesMoshi().adapter(JavascriptResponse::class.java) val adapter = MatrixJsonParser.getMoshi().adapter(JavascriptResponse::class.java)
javascriptResponse = adapter.fromJson(json) javascriptResponse = adapter.fromJson(json)
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "## shouldOverrideUrlLoading() : fromJson failed") Timber.e(e, "## shouldOverrideUrlLoading() : fromJson failed")

View File

@ -51,8 +51,8 @@ import org.json.JSONException
import org.json.JSONObject import org.json.JSONObject
import org.matrix.android.sdk.api.Matrix import org.matrix.android.sdk.api.Matrix
import org.matrix.android.sdk.api.util.JsonDict import org.matrix.android.sdk.api.util.JsonDict
import org.matrix.android.sdk.api.util.MatrixJsonParser
import org.matrix.android.sdk.api.util.MimeTypes import org.matrix.android.sdk.api.util.MimeTypes
import org.matrix.android.sdk.internal.di.MoshiProvider
import timber.log.Timber import timber.log.Timber
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
@ -98,7 +98,7 @@ class BugReporter @Inject constructor(
// boolean to cancel the bug report // boolean to cancel the bug report
private val mIsCancelled = false private val mIsCancelled = false
val adapter = MoshiProvider.providesMoshi() val adapter = MatrixJsonParser.getMoshi()
.adapter<JsonDict>(Types.newParameterizedType(Map::class.java, String::class.java, Any::class.java)) .adapter<JsonDict>(Types.newParameterizedType(Map::class.java, String::class.java, Any::class.java))
/** /**

View File

@ -18,11 +18,11 @@ package im.vector.app.features.raw.wellknown
import com.squareup.moshi.JsonAdapter import com.squareup.moshi.JsonAdapter
import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.api.util.MatrixJsonParser
object ElementWellKnownMapper { object ElementWellKnownMapper {
val adapter: JsonAdapter<ElementWellKnown> = MoshiProvider.providesMoshi().adapter(ElementWellKnown::class.java) val adapter: JsonAdapter<ElementWellKnown> = MatrixJsonParser.getMoshi().adapter(ElementWellKnown::class.java)
fun from(value: String): ElementWellKnown? { fun from(value: String): ElementWellKnown? {
return tryOrNull("Unable to parse well-known data") { adapter.fromJson(value) } return tryOrNull("Unable to parse well-known data") { adapter.fromJson(value) }

View File

@ -33,7 +33,7 @@ import im.vector.app.core.utils.createJSonViewerStyleProvider
import im.vector.app.databinding.FragmentGenericRecyclerBinding import im.vector.app.databinding.FragmentGenericRecyclerBinding
import org.billcarsonfr.jsonviewer.JSonViewerDialog import org.billcarsonfr.jsonviewer.JSonViewerDialog
import org.matrix.android.sdk.api.session.accountdata.UserAccountDataEvent import org.matrix.android.sdk.api.session.accountdata.UserAccountDataEvent
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.api.util.MatrixJsonParser
import javax.inject.Inject import javax.inject.Inject
class AccountDataFragment @Inject constructor( class AccountDataFragment @Inject constructor(
@ -70,7 +70,7 @@ class AccountDataFragment @Inject constructor(
} }
override fun didTap(data: UserAccountDataEvent) { override fun didTap(data: UserAccountDataEvent) {
val jsonString = MoshiProvider.providesMoshi() val jsonString = MatrixJsonParser.getMoshi()
.adapter(UserAccountDataEvent::class.java) .adapter(UserAccountDataEvent::class.java)
.toJson(data) .toJson(data)
JSonViewerDialog.newInstance( JSonViewerDialog.newInstance(