NTP-36825 | Kyc SDK Super App Changes (#14914)

This commit is contained in:
Balrambhai Sharma
2025-02-13 19:19:57 +05:30
committed by GitHub
parent 18613d1f9f
commit 806dc1d146
23 changed files with 438 additions and 15 deletions

View File

@@ -40,6 +40,7 @@ import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.PULSE_EVE
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.PULSE_EVENT_INTERVAL_IN_SECS
import com.navi.common.network.ApiConstants.API_CONNECT_TIMEOUT_VALUE
import com.navi.common.utils.CommonUtils
import com.navi.common.utils.CommonUtils.getAppName
import com.navi.common.utils.Constants
import com.navi.common.utils.Constants.DEFAULT_ADVERSE_EVENT_SYNC_BATCH_SIZE
import com.navi.common.utils.Constants.DEFAULT_ADVERSE_EVENT_SYNC_INTERVAL_IN_SECS
@@ -57,7 +58,6 @@ import com.naviapp.app.NaviApplication
import com.naviapp.app.initializers.ApplicationComponent.applicationScope
import com.naviapp.common.helper.UpiSdkHelperImpl
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.utils.getAppName
import com.naviapp.utils.getVersionCode
import io.branch.referral.Branch
import kotlinx.coroutines.launch
@@ -119,6 +119,7 @@ object NaviSDKHelper {
flavor = BuildConfig.FLAVOR,
sslPinningKey = BuildConfig.SSL_PINNING_KEY,
)
CommonLibManager.setPulseUrl(BuildConfig.PULSE_BASE_URL)
setupAnalyticsData(naviApplication)
NaviPayManager.initAppInfo(
appVersionName = BuildConfig.VERSION_NAME,

View File

@@ -56,8 +56,6 @@ object Constants {
const val LOAN_CLOSED = "Loan_Closed"
const val SUCCESS = "Success"
const val DATE_FORMAT_MONTH_YEAR = "MM/yyyy"
const val APP_NAME_PROD = "Navi"
const val APP_NAME_DEBUG = "NaviDebug"
const val ZERO = "0"
const val LOAN_TYPE = "LOAN_TYPE"
const val AMC = "amc"

View File

@@ -24,7 +24,6 @@ import android.os.Looper
import android.os.Parcelable
import android.os.Process
import android.telephony.PhoneNumberUtils
import android.text.TextUtils
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.ImageView
@@ -54,7 +53,6 @@ import com.navi.common.utils.log
import com.navi.insurance.navigator.NaviInsuranceDeeplinkNavigator
import com.navi.insurance.sharedpref.NaviPreferenceManager
import com.navi.payment.juspay.HyperServicesHolder
import com.naviapp.BuildConfig
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.analytics.utils.NaviSDKHelper
@@ -73,11 +71,6 @@ import java.util.UUID
import org.json.JSONException
import org.json.JSONObject
fun getAppName(): String {
return if (TextUtils.equals(BuildConfig.FLAVOR, PROD)) Constants.APP_NAME_PROD
else Constants.APP_NAME_DEBUG
}
fun deleteCacheAndOpenLoginPage(context: Context = NaviApplication.instance) {
try {
if (BaseUtils.isUserLoggedIn()) {

View File

@@ -62,6 +62,7 @@ dependencies {
implementation libs.dagger.hiltAndroid
implementation libs.jayway.jsonPath
implementation libs.mvel2
implementation libs.navi.customerDocumentCollector
implementation libs.raamcosta.composeDestinations.animation.core
androidTestImplementation libs.androidx.test.espresso.core

View File

@@ -0,0 +1,20 @@
/*
*
* * Copyright © 2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.ap.common.customer.doc.collector
import com.navi.common.customer.doc.collector.sdk.DocumentCollectorSdkExitData
interface DocumentCollectionSdkListener {
fun onDocumentCollectionSdkSuccess(data: DocumentCollectorSdkExitData)
fun onDocumentCollectionSdkFailure(data: DocumentCollectorSdkExitData)
fun onDocumentCollectionSdkInitFailure(data: DocumentCollectorSdkExitData)
fun onDocumentCollectionSdkUserCancelled(data: DocumentCollectorSdkExitData)
}

View File

@@ -0,0 +1,60 @@
/*
*
* * Copyright © 2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.ap.common.customer.doc.collector
import com.navi.ap.common.viewmodel.ApplicationPlatformVM
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_EXIT_DATA
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_FAILURE_DATA
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_INIT_FAILURE_DATA
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_SDK_ON_FAILURE_ACTION
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_SDK_ON_INIT_FAILURE_ACTION
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_SDK_ON_SUCCESS_ACTION
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_SDK_ON_USER_CANCELLED_ACTION
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_SUCCESS_DATA
import com.navi.common.customer.doc.collector.sdk.DocumentCollectorSdkExitData
import com.navi.uitron.model.data.UiTronActionData
class DocumentCollectionSdkListenerImpl(private val applicationPlatformVM: ApplicationPlatformVM?) :
DocumentCollectionSdkListener {
override fun onDocumentCollectionSdkSuccess(data: DocumentCollectorSdkExitData) {
applicationPlatformVM?.let {
it.handle[DOCUMENT_COLLECTION_SUCCESS_DATA] = data
val onSuccessAction =
it.handle.get<UiTronActionData>(DOCUMENT_COLLECTION_SDK_ON_SUCCESS_ACTION)
it.handleActions(onSuccessAction)
}
}
override fun onDocumentCollectionSdkFailure(data: DocumentCollectorSdkExitData) {
applicationPlatformVM?.let {
it.handle[DOCUMENT_COLLECTION_FAILURE_DATA] = data
val onErrorAction: UiTronActionData? =
it.handle[DOCUMENT_COLLECTION_SDK_ON_FAILURE_ACTION]
it.handleActions(onErrorAction)
}
}
override fun onDocumentCollectionSdkInitFailure(data: DocumentCollectorSdkExitData) {
applicationPlatformVM?.let {
it.handle[DOCUMENT_COLLECTION_INIT_FAILURE_DATA] = data
val onErrorAction: UiTronActionData? =
it.handle[DOCUMENT_COLLECTION_SDK_ON_INIT_FAILURE_ACTION]
it.handleActions(onErrorAction)
}
}
override fun onDocumentCollectionSdkUserCancelled(data: DocumentCollectorSdkExitData) {
applicationPlatformVM?.let {
it.handle[DOCUMENT_COLLECTION_EXIT_DATA] = data
val onErrorAction: UiTronActionData? =
it.handle[DOCUMENT_COLLECTION_SDK_ON_USER_CANCELLED_ACTION]
it.handleActions(onErrorAction)
}
}
}

View File

@@ -0,0 +1,19 @@
/*
*
* * Copyright © 2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.ap.common.customer.doc.collector
import com.navi.ap.common.viewmodel.ApplicationPlatformVM
class DocumentCollectionSdkListenerStrategy(
private val applicationPlatformVM: ApplicationPlatformVM?
) {
fun getDocumentCollectionSdkListenerStrategy(): DocumentCollectionSdkListener? {
return DocumentCollectionSdkListenerImpl(applicationPlatformVM)
}
}

View File

@@ -12,10 +12,17 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import com.navi.ap.common.customer.doc.collector.DocumentCollectionSdkListenerStrategy
import com.navi.ap.common.ui.ApplicationPlatformActivity
import com.navi.ap.common.viewmodel.ApplicationPlatformVM
import com.navi.ap.utils.constants.DEV_RAZORPAY_START_PAYMENT
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_SDK_ON_FAILURE_ACTION
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_SDK_ON_INIT_FAILURE_ACTION
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_SDK_ON_SUCCESS_ACTION
import com.navi.ap.utils.constants.DOCUMENT_COLLECTION_SDK_ON_USER_CANCELLED_ACTION
import com.navi.ap.utils.logApEvent
import com.navi.common.customer.doc.collector.sdk.DocumentCollectorInitData
import com.navi.common.uitron.model.action.DocumentCollectionSdkAction
import com.navi.common.uitron.model.action.RazorpaySDKAction
import com.navi.common.uitron.model.action.SDKType
import com.navi.common.uitron.model.action.ThirdPartySdkAction
@@ -62,6 +69,36 @@ private fun handleThirdPartySdkAction(
}
}
}
SDKType.DOCUMENT_COLLECTION.name -> {
(action.value as? DocumentCollectionSdkAction)?.let { documentCollectionSdkAction ->
val documentCollectionInitData =
DocumentCollectorInitData(
flow = documentCollectionSdkAction.flow.toString(),
clientReferenceId = documentCollectionSdkAction.clientReferenceId,
settingType = documentCollectionSdkAction.settingType,
documentId = documentCollectionSdkAction.documentId,
accessToken = documentCollectionSdkAction.accessToken,
appLogo = documentCollectionSdkAction.logo,
requestId = documentCollectionSdkAction.requestId,
identifier = documentCollectionSdkAction.identifier,
)
viewModel.handle[DOCUMENT_COLLECTION_SDK_ON_SUCCESS_ACTION] =
documentCollectionSdkAction.onSuccess
viewModel.handle[DOCUMENT_COLLECTION_SDK_ON_FAILURE_ACTION] =
documentCollectionSdkAction.onFailure
viewModel.handle[DOCUMENT_COLLECTION_SDK_ON_INIT_FAILURE_ACTION] =
documentCollectionSdkAction.onInitFailure
viewModel.handle[DOCUMENT_COLLECTION_SDK_ON_USER_CANCELLED_ACTION] =
documentCollectionSdkAction.onExit
activity.sdkHandler.documentCollectorSdkHandler.init(
activity = activity,
data = documentCollectionInitData,
)
activity.setDocumentCollectionListenerStrategy(
DocumentCollectionSdkListenerStrategy(applicationPlatformVM = viewModel)
)
}
}
else -> {}
}
}

View File

@@ -7,7 +7,14 @@
package com.navi.ap.common.sdk.handler
import com.navi.common.customer.doc.collector.sdk.DocumentCollectorSdkHandler
import dagger.hilt.android.scopes.ActivityScoped
import javax.inject.Inject
@ActivityScoped class SdkHandler @Inject constructor(val razorpayHandler: RazorpayHandler)
@ActivityScoped
class SdkHandler
@Inject
constructor(
val razorpayHandler: RazorpayHandler,
val documentCollectorSdkHandler: DocumentCollectorSdkHandler,
)

View File

@@ -7,6 +7,7 @@
package com.navi.ap.common.ui
import com.navi.ap.common.customer.doc.collector.DocumentCollectionSdkListenerStrategy
import com.navi.ap.common.sdk.handler.SdkHandler
import com.navi.ap.common.viewmodel.ApplicationPlatformVM
import com.navi.ap.utils.constants.CODE
@@ -17,21 +18,27 @@ import com.navi.ap.utils.constants.RAZORPAY_DATA
import com.navi.ap.utils.constants.SUCCESS
import com.navi.ap.utils.constants.SUCCESS_CODE
import com.navi.ap.utils.downloader.TaskDownloadManager
import com.navi.common.customer.doc.collector.sdk.DocumentCollectorSdkExitData
import com.navi.common.ui.activity.BaseActivity
import com.razorpay.PaymentData
import com.razorpay.PaymentResultWithDataListener
import document_collector.DocumentCollectorSDKListener
import document_collector.model.DocumentCollectionSdkExitResponse
import document_collector.model.DocumentCollectionSdkInitResponse
import document_collector.network.ResponseState
import java.lang.ref.WeakReference
import javax.inject.Inject
import org.json.JSONObject
abstract class SdkHandlingActivity : BaseActivity(), PaymentResultWithDataListener {
abstract class SdkHandlingActivity :
BaseActivity(), PaymentResultWithDataListener, DocumentCollectorSDKListener {
@Inject lateinit var sdkHandler: SdkHandler
protected var apScreenVM: WeakReference<ApplicationPlatformVM>? = null
@Inject lateinit var taskDownloadManager: TaskDownloadManager
private var documentCollectionSdkListenerStrategy: DocumentCollectionSdkListenerStrategy? = null
abstract var applicationType: Lazy<String>
override fun onPaymentSuccess(description: String?, data: PaymentData?) {
@@ -57,4 +64,81 @@ abstract class SdkHandlingActivity : BaseActivity(), PaymentResultWithDataListen
viewModel = apScreenVM?.get(),
)
}
override fun onSDKExitListener(state: ResponseState<DocumentCollectionSdkExitResponse>) {
when (state) {
is ResponseState.Failure -> {
documentCollectionSdkListenerStrategy
?.getDocumentCollectionSdkListenerStrategy()
?.onDocumentCollectionSdkFailure(
DocumentCollectorSdkExitData(
status = state.error.status,
code = state.error.code,
)
)
}
ResponseState.Idle,
ResponseState.Loading -> Unit
is ResponseState.Success -> {
documentCollectionSdkListenerStrategy
?.getDocumentCollectionSdkListenerStrategy()
?.onDocumentCollectionSdkSuccess(
DocumentCollectorSdkExitData(
status = state.value.status,
code = state.value.code,
)
)
}
is ResponseState.Exit -> {
documentCollectionSdkListenerStrategy
?.getDocumentCollectionSdkListenerStrategy()
?.onDocumentCollectionSdkUserCancelled(
DocumentCollectorSdkExitData(
status = state.value.status,
code = state.value.code,
)
)
}
}
}
override fun onSDKInitListener(state: ResponseState<DocumentCollectionSdkInitResponse>) {
when (state) {
is ResponseState.Failure -> {
documentCollectionSdkListenerStrategy
?.getDocumentCollectionSdkListenerStrategy()
?.onDocumentCollectionSdkInitFailure(
DocumentCollectorSdkExitData(
status = state.error.status,
code = state.error.code,
)
)
}
ResponseState.Idle,
ResponseState.Loading -> Unit
is ResponseState.Success -> {
documentCollectionSdkListenerStrategy
?.getDocumentCollectionSdkListenerStrategy()
?.onDocumentCollectionSdkSuccess(
DocumentCollectorSdkExitData(
status = state.value.status,
code = state.value.code,
)
)
}
is ResponseState.Exit -> Unit
}
}
fun setDocumentCollectionListenerStrategy(
documentCollectionSdkListenerStrategy: DocumentCollectionSdkListenerStrategy
) {
this.documentCollectionSdkListenerStrategy = documentCollectionSdkListenerStrategy
}
}

View File

@@ -15,3 +15,13 @@ const val RAZORPAY_DATA = "razorpayData"
const val CODE = "code"
const val DATA = "data"
const val DESCRIPTION = "description"
const val DOCUMENT_COLLECTION_SDK_ON_SUCCESS_ACTION = "document_collection_sdk_on_success_action"
const val DOCUMENT_COLLECTION_SDK_ON_FAILURE_ACTION = "document_collection_sdk_on_failure_action"
const val DOCUMENT_COLLECTION_SDK_ON_USER_CANCELLED_ACTION =
"document_collection_sdk_on_user_cancelled_action"
const val DOCUMENT_COLLECTION_SDK_ON_INIT_FAILURE_ACTION =
"document_collection_sdk_on_init_failure_action"
const val DOCUMENT_COLLECTION_SUCCESS_DATA = "documentCollectionSuccessData"
const val DOCUMENT_COLLECTION_FAILURE_DATA = "documentCollectionFailureData"
const val DOCUMENT_COLLECTION_EXIT_DATA = "documentCollectionExitData"
const val DOCUMENT_COLLECTION_INIT_FAILURE_DATA = "documentCollectionInitFailureData"

View File

@@ -91,6 +91,7 @@ mockk = "1.13.16"
mvel2 = "2.4.15.Final"
navi-adverse = "1.16.0"
navi-alfred = "2.1.0"
navi-customerDocumentCollector = "1.0.0"
navi-elex = "1.11.1"
navi-guarddog = "3.14.0"
navi-pulse = "1.14.0"
@@ -338,6 +339,7 @@ mvel2 = { module = "org.mvel:mvel2", version.ref = "mvel2" }
navi-adverse = { module = "com.navi.android:adverse", version.ref = "navi-adverse" }
navi-alfred = { module = "com.navi.android:alfred", version.ref = "navi-alfred" }
navi-customerDocumentCollector = { module = "com.navi.android:customer-document-collector", version.ref = "navi-customerDocumentCollector" }
navi-elex = { module = "com.navi.android:elex", version.ref = "navi-elex" }
navi-guarddog = { module = "com.navi.android:guarddog", version.ref = "navi-guarddog" }
navi-pulse = { module = "com.navi.android:pulse", version.ref = "navi-pulse" }

View File

@@ -51,7 +51,6 @@ object NaviTrackEvent {
.setEventBatchSize(analyticsConfiguration.pulseConfig.eventBatchSize)
.setEventInterval(analyticsConfiguration.pulseConfig.eventInterval)
.build()
if (analyticsConfiguration.disableAlfred.not()) {
val alfredConfig =
AlfredConfig(

View File

@@ -91,6 +91,7 @@ dependencies {
implementation libs.dagger.hiltAndroid
implementation libs.juspay.googlePayClientApi
implementation libs.mvel2
implementation libs.navi.customerDocumentCollector
implementation libs.okhttp.tls
implementation libs.pierfrancescosoffritti.androidyoutubeplayer
implementation libs.raamcosta.composeDestinations.animation.core

View File

@@ -25,6 +25,7 @@ import okhttp3.Interceptor
object CommonLibManager {
lateinit var flavor: String
private var pulseUrl: String? = null
private lateinit var upiSdkHelper: UpiSdkHelper
private val reactHeaderMap: Map<String, String> by lazy { commonHttpClient.reactHeaderMapData }
@@ -32,6 +33,14 @@ object CommonLibManager {
commonHttpClient.reactHeaderInterceptor
}
fun getPulseUrl(): String? {
return pulseUrl
}
fun setPulseUrl(url: String?) {
pulseUrl = url
}
val networkInfo by lazy {
NetworkInfo(
baseUrl = baseUrl,

View File

@@ -0,0 +1,26 @@
/*
*
* * Copyright © 2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.common.customer.doc.collector.sdk
import android.os.Parcelable
import com.google.gson.annotations.SerializedName
import document_collector.model.SettingType
import kotlinx.parcelize.Parcelize
@Parcelize
data class DocumentCollectorInitData(
@SerializedName("kycSdkToken") val kycSdkToken: String? = null,
@SerializedName("settingType") val settingType: SettingType? = null,
@SerializedName("requestId") val requestId: String? = null,
@SerializedName("accessToken") val accessToken: String? = null,
@SerializedName("identifier") val identifier: String? = null,
@SerializedName("documentId") val documentId: String? = null,
@SerializedName("appLogo") val appLogo: String? = null,
@SerializedName("flow") val flow: String? = null,
@SerializedName("clientReferenceId") val clientReferenceId: String? = null,
) : Parcelable

View File

@@ -0,0 +1,18 @@
/*
*
* * Copyright © 2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.common.customer.doc.collector.sdk
import android.os.Parcelable
import com.google.gson.annotations.SerializedName
import kotlinx.parcelize.Parcelize
@Parcelize
data class DocumentCollectorSdkExitData(
@SerializedName("code") val code: Int? = null,
@SerializedName("status") val status: String? = null,
) : Parcelable

View File

@@ -0,0 +1,104 @@
/*
*
* * Copyright © 2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.common.customer.doc.collector.sdk
import android.app.Activity
import androidx.appcompat.app.AppCompatActivity
import com.facebook.shimmer.BuildConfig
import com.navi.base.AppServiceManager
import com.navi.base.sharedpref.CommonPrefConstants.USER_EXTERNAL_ID
import com.navi.base.sharedpref.PreferenceManager
import com.navi.base.utils.BaseUtils
import com.navi.base.utils.isNotNullAndNotEmpty
import com.navi.common.CommonLibManager
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.PULSE_EVENT_BATCH_SIZE
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.PULSE_EVENT_INTERVAL_IN_SECS
import com.navi.common.utils.CommonUtils
import document_collector.DocumentCollectorSDK
import document_collector.DocumentCollectorSDKListener
import document_collector.model.DocumentSdkFlow
import document_collector.model.SdkHeaderParams
import document_collector.model.SdkInitRequestParams
import document_collector.model.SdkInitResponse
import document_collector.model.SdkRequestParams
import javax.inject.Inject
class DocumentCollectorSdkHandler @Inject constructor() {
fun init(activity: Activity, data: DocumentCollectorInitData) {
if (data.settingType?.name.isNotNullAndNotEmpty()) {
DocumentCollectorSDK.startDocumentCollectionWithToken(
activity = activity as AppCompatActivity,
sdkInitResponse =
SdkInitResponse(
kycSdkToken = data.kycSdkToken,
settingType = data.settingType,
processPayload =
SdkRequestParams(
requestId = data.requestId,
accessToken = data.accessToken,
identifier = data.identifier,
documentId = data.documentId,
appLogo = data.appLogo,
),
),
listener = activity as DocumentCollectorSDKListener,
sdkHeaderParams =
SdkHeaderParams(
flavor = BuildConfig.FLAVOR,
appVersionCode = AppServiceManager.appVersionCode,
appVersionName = AppServiceManager.appVersionName,
deviceId = BaseUtils.getDeviceId(activity.applicationContext),
sessionToken = BaseUtils.getSessionToken().orEmpty(),
locale = BaseUtils.getDefaultLocale(),
appName = CommonUtils.getAppName(),
pulseBaseUrl = CommonLibManager.getPulseUrl().orEmpty(),
eventBatchSize =
FirebaseRemoteConfigHelper.getLong(PULSE_EVENT_BATCH_SIZE).toInt(),
eventInterval =
FirebaseRemoteConfigHelper.getLong(PULSE_EVENT_INTERVAL_IN_SECS)
.toInt(),
userId = PreferenceManager.getStringPreference(USER_EXTERNAL_ID).orEmpty(),
),
)
} else {
DocumentCollectorSDK.startDocumentCollectionWithoutToken(
activity = activity as AppCompatActivity,
sdkInitRequestParams =
SdkInitRequestParams(
flow =
when (data.flow) {
DocumentSdkFlow.OKYC_APP.name -> DocumentSdkFlow.OKYC_APP
DocumentSdkFlow.E_SIGN_APP.name -> DocumentSdkFlow.E_SIGN_APP
DocumentSdkFlow.DIGILOCKER.name -> DocumentSdkFlow.DIGILOCKER
else -> DocumentSdkFlow.OKYC_APP
},
clientReferenceId = data.clientReferenceId,
),
listener = activity as DocumentCollectorSDKListener,
sdkHeaderParams =
SdkHeaderParams(
flavor = BuildConfig.FLAVOR,
appVersionCode = AppServiceManager.appVersionCode,
appVersionName = AppServiceManager.appVersionName,
deviceId = BaseUtils.getDeviceId(activity.applicationContext),
sessionToken = BaseUtils.getSessionToken().orEmpty(),
locale = BaseUtils.getDefaultLocale(),
appName = CommonUtils.getAppName(),
pulseBaseUrl = CommonLibManager.getPulseUrl().orEmpty(),
eventBatchSize =
FirebaseRemoteConfigHelper.getLong(PULSE_EVENT_BATCH_SIZE).toInt(),
eventInterval =
FirebaseRemoteConfigHelper.getLong(PULSE_EVENT_INTERVAL_IN_SECS)
.toInt(),
userId = PreferenceManager.getStringPreference(USER_EXTERNAL_ID).orEmpty(),
),
)
}
}
}

View File

@@ -10,6 +10,7 @@ package com.navi.common.uitron.deserializer
import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import com.navi.common.uitron.model.action.DocumentCollectionSdkAction
import com.navi.common.uitron.model.action.RazorpaySDKAction
import com.navi.common.uitron.model.action.SDKType
import com.navi.common.uitron.model.action.ThirdPartySdkAction
@@ -27,6 +28,8 @@ class UiTronSDKActionDeserializer : JsonDeserializer<ThirdPartySdkAction> {
return when (type.asString) {
SDKType.RAZORPAY.name ->
context?.deserialize(jsonObject, RazorpaySDKAction::class.java)
SDKType.DOCUMENT_COLLECTION.name ->
context?.deserialize(jsonObject, DocumentCollectionSdkAction::class.java)
else -> null
}
}

View File

@@ -12,6 +12,7 @@ import com.google.gson.annotations.SerializedName
import com.navi.uitron.model.data.ActionDetails
import com.navi.uitron.model.data.UiTronAction
import com.navi.uitron.model.data.UiTronActionData
import document_collector.model.SettingType
import kotlinx.parcelize.Parcelize
@Parcelize
@@ -20,6 +21,9 @@ open class ThirdPartySdkAction(
@SerializedName("onResult") val onResult: UiTronActionData? = null,
@SerializedName("onSuccess") val onSuccess: UiTronActionData? = null,
@SerializedName("onFailure") val onFailure: UiTronActionData? = null,
@SerializedName("onInitFailure") val onInitFailure: UiTronActionData? = null,
@SerializedName("onInitSuccess") val onInitSuccess: UiTronActionData? = null,
@SerializedName("onExit") val onExit: UiTronActionData? = null,
) : UiTronAction(), Parcelable {
override suspend fun manageAction(actionDetails: ActionDetails) {
val action = actionDetails.uiTronAction as ThirdPartySdkAction
@@ -38,6 +42,18 @@ data class RazorpayData(
@SerializedName("recurring") val recurring: Int? = 1, // default value for razorpay mandate
)
class DocumentCollectionSdkAction(
@SerializedName("flow") val flow: String? = null,
@SerializedName("identifier") val identifier: String? = null,
@SerializedName("clientReferenceId") val clientReferenceId: String? = null,
@SerializedName("documentId") val documentId: String? = null,
@SerializedName("accessToken") val accessToken: String? = null,
@SerializedName("logo") val logo: String? = null,
@SerializedName("settingType") val settingType: SettingType? = null,
@SerializedName("requestId") val requestId: String? = null,
) : ThirdPartySdkAction()
enum class SDKType {
RAZORPAY
RAZORPAY,
DOCUMENT_COLLECTION,
}

View File

@@ -10,6 +10,7 @@ package com.navi.common.uitron.serializer
import com.google.gson.JsonElement
import com.google.gson.JsonSerializationContext
import com.google.gson.JsonSerializer
import com.navi.common.uitron.model.action.DocumentCollectionSdkAction
import com.navi.common.uitron.model.action.RazorpaySDKAction
import com.navi.common.uitron.model.action.SDKType
import com.navi.common.uitron.model.action.ThirdPartySdkAction
@@ -24,6 +25,12 @@ class UiTronSDKActionSerializer : JsonSerializer<ThirdPartySdkAction> {
return when (src?.sdkName) {
SDKType.RAZORPAY.name ->
context?.serialize(src as RazorpaySDKAction, RazorpaySDKAction::class.java)
SDKType.DOCUMENT_COLLECTION.name ->
context?.serialize(
src as DocumentCollectionSdkAction,
DocumentCollectionSdkAction::class.java,
)
else -> null
}
}

View File

@@ -34,6 +34,7 @@ import com.navi.base.sharedpref.PreferenceManager
import com.navi.base.utils.BaseUtils
import com.navi.base.utils.EMPTY
import com.navi.base.utils.NetWatchManger
import com.navi.base.utils.PROD
import com.navi.base.utils.orZero
import com.navi.base.utils.toDoubleWithSafe
import com.navi.common.BuildConfig
@@ -104,6 +105,11 @@ import okhttp3.RequestBody.Companion.toRequestBody
import retrofit2.Response
object CommonUtils {
fun getAppName(): String {
return if (TextUtils.equals(com.navi.base.BuildConfig.FLAVOR, PROD)) Constants.APP_NAME_PROD
else Constants.APP_NAME_DEBUG
}
fun getUserLocation(): UserLocation? {
return PreferenceManager.getSecureObject(
CommonPrefConstants.USER_LOCATION_DATA,

View File

@@ -10,6 +10,8 @@ package com.navi.common.utils
import kotlin.time.Duration.Companion.milliseconds
object Constants {
const val APP_NAME_PROD = "Navi"
const val APP_NAME_DEBUG = "NaviDebug"
const val APP = "APP"
const val BUSINESS_VERTICAL_GOLD = "GOLD"
const val PACKAGE = "package:"