Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.simprints.feature.clientapi.mappers.request.extractors

import com.simprints.core.tools.json.JsonHelper
import com.simprints.feature.clientapi.extensions.extractString
import com.simprints.feature.clientapi.models.ClientApiConstants
import com.simprints.infra.serialization.SimJson
import com.simprints.libsimprints.Constants
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.intOrNull
Expand Down Expand Up @@ -34,7 +34,7 @@ internal abstract class ActionRequestExtractor(

fun getSubjectAge(): Int? = try {
val parsedMetadata =
JsonHelper.json.decodeFromString<Map<String, JsonElement>>(getMetadata())
SimJson.decodeFromString<Map<String, JsonElement>>(getMetadata())
parsedMetadata[Constants.SIMPRINTS_SUBJECT_AGE]
?.jsonPrimitive
?.intOrNull
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.simprints.feature.clientapi.mappers.request.validators

import com.simprints.core.tools.json.JsonHelper
import com.simprints.feature.clientapi.exceptions.InvalidRequestException
import com.simprints.feature.clientapi.mappers.request.extractors.ActionRequestExtractor
import com.simprints.feature.clientapi.models.ClientApiError
import com.simprints.infra.serialization.SimJson

internal abstract class RequestActionValidator(
private val extractor: ActionRequestExtractor,
Expand Down Expand Up @@ -46,7 +46,7 @@ internal abstract class RequestActionValidator(
}

private fun hasValidMetadata(): Boolean = try {
JsonHelper.validateJsonOrThrow(extractor.getMetadata())
SimJson.parseToJsonElement(extractor.getMetadata())
true
} catch (_: Throwable) {
false
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.simprints.feature.clientapi.usecases

import com.simprints.core.tools.json.JsonHelper
import com.simprints.core.tools.utils.EncodingUtils
import com.simprints.infra.config.store.ConfigRepository
import com.simprints.infra.config.store.models.canCoSyncAllData
Expand All @@ -11,13 +10,13 @@ import com.simprints.infra.enrolment.records.repository.domain.models.EnrolmentR
import com.simprints.infra.events.event.cosync.CoSyncEnrolmentRecordEvents
import com.simprints.infra.events.event.domain.models.EnrolmentRecordCreationEvent
import com.simprints.infra.logging.Simber
import com.simprints.infra.serialization.SimJson
import javax.inject.Inject

internal class GetEnrolmentCreationEventForRecordUseCase @Inject constructor(
private val configRepository: ConfigRepository,
private val enrolmentRecordRepository: EnrolmentRecordRepository,
private val encoder: EncodingUtils,
private val jsonHelper: JsonHelper,
) {
suspend operator fun invoke(
projectId: String,
Expand All @@ -41,8 +40,7 @@ internal class GetEnrolmentCreationEventForRecordUseCase @Inject constructor(
)
return null
}

return jsonHelper.json.encodeToString(CoSyncEnrolmentRecordEvents(listOf(recordCreationEvent)))
return SimJson.encodeToString(CoSyncEnrolmentRecordEvents(listOf(recordCreationEvent)))
}

private fun EnrolmentRecord.fromSubjectToEnrolmentCreationEvent() = EnrolmentRecordCreationEvent(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.simprints.feature.clientapi.usecases

import com.google.common.truth.Truth.*
import com.simprints.core.tools.json.JsonHelper
import com.simprints.core.tools.utils.EncodingUtils
import com.simprints.infra.config.store.ConfigRepository
import com.simprints.infra.config.store.models.UpSynchronizationConfiguration
import com.simprints.infra.enrolment.records.repository.EnrolmentRecordRepository
import com.simprints.infra.events.event.cosync.CoSyncEnrolmentRecordEvents
import com.simprints.infra.serialization.SimJson
import com.simprints.testtools.common.coroutines.TestCoroutineRule
import io.mockk.*
import io.mockk.impl.annotations.MockK
Expand All @@ -28,9 +28,6 @@ class GetEnrolmentCreationEventForRecordUseCaseTest {
@MockK
private lateinit var encoder: EncodingUtils

@MockK
private lateinit var jsonHelper: JsonHelper

private lateinit var useCase: GetEnrolmentCreationEventForRecordUseCase

@Before
Expand All @@ -41,7 +38,6 @@ class GetEnrolmentCreationEventForRecordUseCaseTest {
configRepository,
enrolmentRecordRepository,
encoder,
jsonHelper,
)
}

Expand Down Expand Up @@ -84,6 +80,7 @@ class GetEnrolmentCreationEventForRecordUseCaseTest {

@Test
fun `returns event if biometrics coSync enabled`() = runTest {
mockkObject(SimJson)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we do 2-way approach with the helper being injected where possible and a fallback with the direct object access?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would this be for the sole purpose of injecting mocks in those classes instead of mocking objects?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

More for the purpose of maintaining the inversion of control whereever possible.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then I don't really see the benefit if it's hardcoded in half of the classes - it's highly unlikely we decide to use one lib for the injection and another for the hardcoded cases.

coEvery { configRepository.getProjectConfiguration() } returns mockk {
every { synchronization.up.coSync.kind } returns UpSynchronizationConfiguration.UpSynchronizationKind.ONLY_BIOMETRICS
}
Expand All @@ -93,7 +90,7 @@ class GetEnrolmentCreationEventForRecordUseCaseTest {
val result = useCase("projectId", "subjectId")

coVerify { enrolmentRecordRepository.load(any()) }
coVerify { jsonHelper.json.encodeToString(any<CoSyncEnrolmentRecordEvents>()) }
coVerify { SimJson.encodeToString(any<CoSyncEnrolmentRecordEvents>()) }
assertThat(result).isNotNull()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import com.simprints.core.ExternalScope
import com.simprints.core.NonCancellableIO
import com.simprints.core.PackageVersionName
import com.simprints.core.SessionCoroutineScope
import com.simprints.core.tools.json.JsonHelper
import com.simprints.core.tools.time.Ticker
import com.simprints.core.tools.time.TimeHelper
import com.simprints.core.tools.utils.EncodingUtils
Expand Down Expand Up @@ -50,10 +49,6 @@ object FakeCoreModule {
@Singleton
fun provideTicker(): Ticker = mockk(relaxed = true)

@Provides
@Singleton
fun provideJsonHelper(): JsonHelper = mockk()

@DeviceID
@Provides
fun provideDeviceId(): String = DEVICE_ID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import androidx.lifecycle.viewModelScope
import com.simprints.core.DeviceID
import com.simprints.core.livedata.LiveDataEventWithContent
import com.simprints.core.livedata.send
import com.simprints.core.tools.json.JsonHelper
import com.simprints.core.tools.utils.TimeUtils
import com.simprints.feature.login.LoginParams
import com.simprints.feature.login.screens.qrscanner.QrCodeContent
Expand All @@ -18,6 +17,7 @@ import com.simprints.infra.authlogic.model.AuthenticateDataResult
import com.simprints.infra.logging.LoggingConstants.CrashReportTag.LOGIN
import com.simprints.infra.logging.Simber
import com.simprints.infra.network.SimNetwork
import com.simprints.infra.serialization.SimJson
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject
Expand All @@ -27,7 +27,6 @@ internal class LoginFormViewModel @Inject constructor(
@param:DeviceID private val deviceId: String,
private val simNetwork: SimNetwork,
private val authManager: AuthManager,
private val jsonHelper: JsonHelper,
) : ViewModel() {
val isProcessingSignIn: LiveData<Boolean>
get() = _isProcessingSignIn
Expand Down Expand Up @@ -96,7 +95,7 @@ internal class LoginFormViewModel @Inject constructor(
_signInState.send(mapQrError(result.error))
} else if (!result.content.isNullOrEmpty()) {
try {
val qrContent = jsonHelper.json.decodeFromString<QrCodeContent>(result.content)
val qrContent = SimJson.decodeFromString<QrCodeContent>(result.content)
Simber.i("QR scanning successful", tag = LOGIN)

if (projectId != qrContent.projectId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.lifecycle.Observer
import com.google.common.truth.Truth.*
import com.simprints.core.domain.tokenization.asTokenizableRaw
import com.simprints.core.tools.json.JsonHelper
import com.simprints.feature.login.LoginParams
import com.simprints.feature.login.screens.qrscanner.QrScannerResult
import com.simprints.feature.login.screens.qrscanner.QrScannerResult.QrScannerError
Expand Down Expand Up @@ -43,7 +42,6 @@ internal class LoginFormViewModelTest {
DEVICE_ID,
simNetwork,
authManager,
JsonHelper,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,6 @@ enum class StepStatus {
COMPLETED,
}

/**
* This module replaces the Jackson Mixins.
*/
val orchestratorSerializersModule = SerializersModule {

// Register all StepResult subclasses
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
package com.simprints.feature.orchestrator.tools

import com.simprints.feature.orchestrator.steps.orchestratorSerializersModule
import com.simprints.infra.serialization.SimJson
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.plus
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
internal class OrchestrationJsonHelper @Inject constructor() {
private val json: Json by lazy {
Json {
ignoreUnknownKeys = true
explicitNulls = false
encodeDefaults = true
coerceInputValues = true
serializersModule = orchestratorSerializersModule
Json(from = SimJson) {
serializersModule = SimJson.serializersModule + orchestratorSerializersModule
}
}

Expand Down
4 changes: 0 additions & 4 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@ firebase_perfPlugin_version = "2.0.2"

retrofit_version = "3.0.0"
okttp_version = "5.3.2"
# Newer versions of Jackson don't support android apis <=25.Jackson shouldn't be updated as long as SID MIN supported APIs <=25
jackson_version = "2.13.4"
chuck_version = "4.3.0"

sqlCipher_version = "4.13.0"
Expand Down Expand Up @@ -174,8 +172,6 @@ retrofit_kotlin_serialization = { group = "com.squareup.retrofit2", name = "conv
chuck-debug = { module = "com.github.chuckerteam.chucker:library", version.ref = "chuck_version" }
chuck-release = { module = "com.github.chuckerteam.chucker:library-no-op", version.ref = "chuck_version" }

#Jackson
jackson-core = { module = "com.fasterxml.jackson.module:jackson-module-kotlin", version.ref = "jackson_version" }

#Fuzzywuzzy
fuzzywuzzy-core = { module = "me.xdrop:fuzzywuzzy", version.ref = "fuzzywuzzy_version" }
Expand Down
18 changes: 1 addition & 17 deletions id/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -38,23 +38,6 @@
volatile <fields>;
}

# Jackson
# Proguard configuration for Jackson 2.x (fasterxml package instead of codehaus package)
-keep class com.fasterxml.jackson.databind.ObjectMapper {
public <methods>;
protected <methods>;
}
-keep class com.fasterxml.jackson.databind.ObjectWriter {
public ** writeValueAsString(**);
}
-keepnames class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.databind.**

#Keep all TypeReferences to preserve generic types
-keep class * extends com.fasterxml.jackson.core.type.TypeReference {
public <init>(java.lang.reflect.Type);
}

#net.zetetic:android-sqlcipher
-keep class net.zetetic.database.sqlcipher.** { *; }

Expand All @@ -77,3 +60,4 @@
#keep everything for realm
-keep class io.realm.** { *; }
-keepnames class io.realm.** { *; }
-dontwarn lombok.Generated
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ package com.simprints.infra.config.store.local.migrations
import android.content.Context
import androidx.annotation.VisibleForTesting
import androidx.datastore.core.DataMigration
import com.simprints.core.tools.json.JsonHelper
import com.simprints.infra.authstore.AuthStore
import com.simprints.infra.config.store.local.migrations.models.OldProjectConfig
import com.simprints.infra.config.store.local.models.ProtoProjectConfiguration
import com.simprints.infra.config.store.local.models.toProto
import com.simprints.infra.logging.LoggingConstants.CrashReportTag.MIGRATION
import com.simprints.infra.logging.Simber
import com.simprints.infra.serialization.SimJson
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.serialization.SerializationException
import javax.inject.Inject
Expand Down Expand Up @@ -37,7 +37,7 @@ internal class ProjectConfigSharedPrefsMigration @Inject constructor(
if (projectSettingsJson.isNullOrEmpty()) return currentData

return try {
JsonHelper.json
SimJson
.decodeFromString<OldProjectConfig>(projectSettingsJson)
.toDomain(authStore.signedInProjectId)
.toProto()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import com.simprints.core.ExcludedFromGeneratedTestCoverageReports
import com.simprints.core.domain.common.Modality
import com.simprints.core.domain.common.TemplateIdentifier
import com.simprints.core.domain.tokenization.asTokenizableRaw
import com.simprints.core.tools.json.JsonHelper
import com.simprints.infra.config.store.models.ConsentConfiguration
import com.simprints.infra.config.store.models.DecisionPolicy
import com.simprints.infra.config.store.models.DownSynchronizationConfiguration
Expand All @@ -24,6 +23,7 @@ import com.simprints.infra.config.store.models.Vero1Configuration
import com.simprints.infra.config.store.models.Vero2Configuration
import com.simprints.infra.config.store.models.Vero2Configuration.LedsMode.BASIC
import com.simprints.infra.config.store.models.Vero2Configuration.LedsMode.LIVE_QUALITY_FEEDBACK
import com.simprints.infra.serialization.SimJson
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.builtins.MapSerializer
Expand Down Expand Up @@ -168,7 +168,7 @@ internal data class OldProjectConfig(
emptyMap()
} else {
// Construct a JavaType instance for Map<String, Vero2FirmwareVersions>
JsonHelper.json.decodeFromString(
SimJson.decodeFromString(
MapSerializer(
String.serializer(),
Vero2Configuration.Vero2FirmwareVersions.serializer(),
Expand All @@ -185,8 +185,8 @@ internal data class OldProjectConfig(
collectConsent = consentRequired.toBoolean(),
displaySimprintsLogo = logoExists.toBoolean(),
allowParentalConsent = consentParentalExists.toBoolean(),
generalPrompt = JsonHelper.json.decodeFromString<GeneralConsentOptions>(consentGeneralOptions).toDomain(),
parentalPrompt = JsonHelper.json.decodeFromString<ParentalConsentOptions>(consentParentalOptions).toDomain(),
generalPrompt = SimJson.decodeFromString<GeneralConsentOptions>(consentGeneralOptions).toDomain(),
parentalPrompt = SimJson.decodeFromString<ParentalConsentOptions>(consentParentalOptions).toDomain(),
)

private fun identificationConfiguration(): IdentificationConfiguration = IdentificationConfiguration(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.simprints.infra.config.store.local.models

import com.simprints.core.tools.json.JsonHelper
import com.simprints.infra.config.store.models.ProjectConfiguration
import com.simprints.infra.serialization.SimJson

internal fun ProjectConfiguration.toProto(): ProtoProjectConfiguration = ProtoProjectConfiguration
.newBuilder()
Expand All @@ -19,7 +19,7 @@ internal fun ProjectConfiguration.toProto(): ProtoProjectConfiguration = ProtoPr
}.also {
if (custom != null) {
try {
val customJson = JsonHelper.json.encodeToString(custom)
val customJson = SimJson.encodeToString(custom)
it.setCustomJson(customJson)
} catch (_: Exception) {
// It is safer to not have custom config, than broken one
Expand All @@ -41,7 +41,7 @@ internal fun ProtoProjectConfiguration.toDomain(): ProjectConfiguration = Projec
multifactorId = multiFactorId?.toDomain(),
custom = customJson?.takeIf { it.isNotBlank() }?.let {
try {
JsonHelper.json.decodeFromString(it)
SimJson.decodeFromString(it)
} catch (e: Exception) {
// It is safer to not have custom config, than broken one
null
Expand Down
Loading