NTP-36825 | Kyc SDK Super App Changes (#14914)
This commit is contained in:
committed by
GitHub
parent
18613d1f9f
commit
806dc1d146
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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 -> {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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" }
|
||||
|
||||
@@ -51,7 +51,6 @@ object NaviTrackEvent {
|
||||
.setEventBatchSize(analyticsConfiguration.pulseConfig.eventBatchSize)
|
||||
.setEventInterval(analyticsConfiguration.pulseConfig.eventInterval)
|
||||
.build()
|
||||
|
||||
if (analyticsConfiguration.disableAlfred.not()) {
|
||||
val alfredConfig =
|
||||
AlfredConfig(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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(),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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:"
|
||||
|
||||
Reference in New Issue
Block a user