diff --git a/app/src/main/java/com/naviapp/analytics/utils/NaviSDKHelper.kt b/app/src/main/java/com/naviapp/analytics/utils/NaviSDKHelper.kt index 4d8f673fd4..7f573bf168 100644 --- a/app/src/main/java/com/naviapp/analytics/utils/NaviSDKHelper.kt +++ b/app/src/main/java/com/naviapp/analytics/utils/NaviSDKHelper.kt @@ -43,6 +43,7 @@ import com.naviapp.BuildConfig import com.naviapp.R import com.naviapp.analytics.deeplink.DeeplinkManager import com.naviapp.app.NaviApplication +import com.naviapp.common.helper.UpiSdkHelperImpl import com.naviapp.common.navigator.NaviDeepLinkNavigator import com.naviapp.home.activity.NewDashboardActivity import com.naviapp.utils.getAppName @@ -136,6 +137,7 @@ object NaviSDKHelper { CommonLibManager.init( application = naviApplication, listener = NaviDeepLinkNavigator, + upiSdkHelper = UpiSdkHelperImpl(naviApplication.naviPayManager), baseUrl = getBaseUrl(), appVersionName = BuildConfig.VERSION_NAME, appVersionCode = getVersionCode(), diff --git a/app/src/main/java/com/naviapp/common/helper/UpiSdkHelperImpl.kt b/app/src/main/java/com/naviapp/common/helper/UpiSdkHelperImpl.kt new file mode 100644 index 0000000000..aa16960673 --- /dev/null +++ b/app/src/main/java/com/naviapp/common/helper/UpiSdkHelperImpl.kt @@ -0,0 +1,18 @@ +package com.naviapp.common.helper + +import com.navi.common.upi.UpiDataType +import com.navi.common.upi.UpiSdkHelper +import com.navi.pay.common.setup.NaviPayManager +import org.json.JSONObject +import javax.inject.Provider + +class UpiSdkHelperImpl(private val naviPayManagerProvider: Provider) : UpiSdkHelper { + + override fun isUserOnboarded(): Boolean { + return naviPayManagerProvider.get().isUserOnboarded() + } + + override suspend fun getDataByType(type: UpiDataType): JSONObject { + return naviPayManagerProvider.get().getDataByType(type) + } +} \ No newline at end of file diff --git a/navi-common/src/main/java/com/navi/common/CommonLibManager.kt b/navi-common/src/main/java/com/navi/common/CommonLibManager.kt index 0b108e1637..e59e0c0d84 100644 --- a/navi-common/src/main/java/com/navi/common/CommonLibManager.kt +++ b/navi-common/src/main/java/com/navi/common/CommonLibManager.kt @@ -10,6 +10,7 @@ package com.navi.common import android.app.Application import com.navi.base.deeplink.DeepLinkManager import com.navi.base.deeplink.listener.DeepLinkListener +import com.navi.common.upi.UpiSdkHelper import com.navi.common.model.BuildConfigDetails import com.navi.common.model.NetworkInfo import com.navi.common.network.ApiConstants @@ -31,10 +32,12 @@ object CommonLibManager { lateinit var baseUrl: String lateinit var appVersionCode: String lateinit var appVersionName: String + private lateinit var upiSdkHelper: UpiSdkHelper fun init( application: Application, listener: DeepLinkListener, + upiSdkHelper: UpiSdkHelper, baseUrl: String, appVersionName: String, appVersionCode: String, @@ -46,6 +49,7 @@ object CommonLibManager { this.baseUrl = baseUrl this.appVersionCode = appVersionCode this.appVersionName = appVersionName + this.upiSdkHelper = upiSdkHelper CommonLibManager.application = application DeepLinkManager.init(listener) @@ -105,4 +109,8 @@ object CommonLibManager { .build() return retrofitClient.create(AuthenticationRetrofitService::class.java) } + + fun getUpiSdkHelper(): UpiSdkHelper { + return upiSdkHelper + } } diff --git a/navi-common/src/main/java/com/navi/common/upi/UpiSdkConstants.kt b/navi-common/src/main/java/com/navi/common/upi/UpiSdkConstants.kt new file mode 100644 index 0000000000..0a67f0f358 --- /dev/null +++ b/navi-common/src/main/java/com/navi/common/upi/UpiSdkConstants.kt @@ -0,0 +1,43 @@ +package com.navi.common.upi + +enum class UpiDataType { + CONNECTED_BANK_ACCOUNT +} + +const val TYPE = "type" +const val DATA = "data" +const val IS_ONBOARDED = "isOnboarded" +const val CUSTOMER_STATUS = "customerStatus" +const val CONNECTED_ACCOUNTS = "connectedAccounts" +const val ACCOUNT_ID = "accountId" +const val BANK_CODE = "bankCode" +const val BANK_NAME = "bankName" +const val NAME = "name" +const val MASKED_ACCOUNT_NUMBER = "maskedAccountNumber" +const val ORIGINAL_MASKED_ACCOUNT_NUMBER = "originalMaskedAccountNumber" +const val ACCOUNT_TYPE = "accountType" +const val VPA_LIST = "vpaList" +const val IS_MPIN_SET = "isMPinSet" +const val BANK_ICON_IMAGE_URL = "bankIconImageUrl" +const val IS_ACCOUNT_PRIMARY = "isAccountPrimary" +const val AMOUNT = "amount" +const val STATUS = "status" +const val PAYEE_VPA = "payeeVpa" +const val PAYER_VPA = "payerVpa" +const val UPI_REQUEST_ID = "upiRequestId" +const val TXN_REFERENCE = "txnReference" +const val TRANSACTION_TIME_STAMP = "transactionTimestamp" +const val TRANSACTION_EVENT_TYPE = "transactionEventType" +const val NAVI_PAY_TRANSACTION_ID = "naviPayTransactionId" +const val MERCHANT_CUSTOMER_ID = "merchantCustomerId" +const val ORG_MANDATE_ID = "orgMandateId" +const val PAYER_NAME = "payerName" +const val PAYEE_NAME = "payeeName" +const val REMARKS = "remarks" +const val INSTRUMENT_ID = "instrumentId" +const val NAVI_PAY_REQUEST_TYPE = "naviPayRequestType" +const val TXN_REQUEST_TYPE = "txnRequestType" +const val IS_VERIFIED_PAYEE = "isVerifiedPayee" +const val IS_MARKED_SPAM = "isMarkedSpam" +const val CATEGORY = "category" +const val METADATA = "metadata" \ No newline at end of file diff --git a/navi-common/src/main/java/com/navi/common/upi/UpiSdkHelper.kt b/navi-common/src/main/java/com/navi/common/upi/UpiSdkHelper.kt new file mode 100644 index 0000000000..5f47ce5e29 --- /dev/null +++ b/navi-common/src/main/java/com/navi/common/upi/UpiSdkHelper.kt @@ -0,0 +1,10 @@ +package com.navi.common.upi + +import org.json.JSONObject + +interface UpiSdkHelper { + + fun isUserOnboarded(): Boolean + + suspend fun getDataByType(type: UpiDataType): JSONObject +} \ No newline at end of file diff --git a/navi-pay/src/main/kotlin/com/navi/pay/common/setup/NaviPayManager.kt b/navi-pay/src/main/kotlin/com/navi/pay/common/setup/NaviPayManager.kt index 0442c199c2..e69e112a75 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/common/setup/NaviPayManager.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/common/setup/NaviPayManager.kt @@ -11,12 +11,17 @@ import android.app.Activity import android.content.Context import com.navi.base.cache.repository.NaviCacheRepository import com.navi.base.utils.BaseUtils +import com.navi.common.upi.TYPE +import com.navi.common.upi.UpiDataType import com.navi.pay.common.cache.NaviPayCache import com.navi.pay.common.model.view.DeviceData +import com.navi.pay.common.setup.model.NaviPayCustomerStatus import com.navi.pay.common.setup.model.NaviPaySetupFailureReason import com.navi.pay.common.setup.model.NaviPaySetupStatus +import com.navi.pay.common.usecase.LinkedAccountsUseCase import com.navi.pay.common.utils.DeviceInfoProvider import com.navi.pay.common.utils.NaviPayCommonUtils +import com.navi.pay.common.utils.NaviPaySdkUtils import com.navi.pay.db.NaviPayAppDatabase import com.navi.pay.db.NaviPayAppEncryptedDatabase import dagger.hilt.android.qualifiers.ApplicationContext @@ -28,6 +33,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.json.JSONObject import javax.inject.Inject import javax.inject.Provider import javax.inject.Singleton @@ -41,7 +47,8 @@ class NaviPayManager @Inject constructor( private val naviPayCache: Provider, private val naviPayAppDatabase: Provider, private val naviPayAppEncryptedDatabase: Provider, - private val deviceInfoProvider: DeviceInfoProvider, + private val deviceInfoProvider: Provider, + private val linkedAccountsUseCase: Provider, ) { companion object { lateinit var baseUrl: String @@ -184,7 +191,28 @@ class NaviPayManager @Inject constructor( NaviPayCommonUtils.removeScanAndPayShortcut(context = context) } - suspend fun deviceInfoDetails(): DeviceData { - return deviceInfoProvider.getDeviceData() + fun isUserOnboarded(): Boolean { + return naviPayCustomerStatusHandler.get() + .getCustomerStatusOnMainThread() == NaviPayCustomerStatus.LINKED_VPA } -} + + suspend fun getDataByType(type: UpiDataType): JSONObject { + val response = JSONObject() + response.put(TYPE, type.name) + when (type) { + UpiDataType.CONNECTED_BANK_ACCOUNT -> { + NaviPaySdkUtils.buildConnectedBankAccountResponse( + response, + linkedAccountsUseCase.get().execute(), + naviPayCustomerStatusHandler.get().getCustomerStatusOnMainThread().name, + isUserOnboarded() + ) + } + } + return response + } + + suspend fun deviceInfoDetails(): DeviceData { + return deviceInfoProvider.get().getDeviceData() + } +} \ No newline at end of file diff --git a/navi-pay/src/main/kotlin/com/navi/pay/common/utils/NaviPaySdkUtils.kt b/navi-pay/src/main/kotlin/com/navi/pay/common/utils/NaviPaySdkUtils.kt new file mode 100644 index 0000000000..1afb05ca50 --- /dev/null +++ b/navi-pay/src/main/kotlin/com/navi/pay/common/utils/NaviPaySdkUtils.kt @@ -0,0 +1,25 @@ +package com.navi.pay.common.utils + +import com.google.gson.Gson +import com.navi.common.upi.CONNECTED_ACCOUNTS +import com.navi.common.upi.CUSTOMER_STATUS +import com.navi.common.upi.DATA +import com.navi.common.upi.IS_ONBOARDED +import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity +import org.json.JSONArray +import org.json.JSONObject + +object NaviPaySdkUtils { + suspend fun buildConnectedBankAccountResponse( + response: JSONObject, + linkedAccountsEntity: List, + customerStatus: String, + isUserOnboarded: Boolean + ) { + val data = JSONObject() + data.put(CUSTOMER_STATUS, customerStatus) + data.put(IS_ONBOARDED, isUserOnboarded) + data.put(CONNECTED_ACCOUNTS, JSONArray(Gson().toJson(linkedAccountsEntity).toString())) + response.put(DATA, data) + } +} \ No newline at end of file