TP-00000 | Initial setup of UPI SDK (#8979)
This commit is contained in:
@@ -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(),
|
||||
|
||||
@@ -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<NaviPayManager>) : UpiSdkHelper {
|
||||
|
||||
override fun isUserOnboarded(): Boolean {
|
||||
return naviPayManagerProvider.get().isUserOnboarded()
|
||||
}
|
||||
|
||||
override suspend fun getDataByType(type: UpiDataType): JSONObject {
|
||||
return naviPayManagerProvider.get().getDataByType(type)
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.navi.common.upi
|
||||
|
||||
import org.json.JSONObject
|
||||
|
||||
interface UpiSdkHelper {
|
||||
|
||||
fun isUserOnboarded(): Boolean
|
||||
|
||||
suspend fun getDataByType(type: UpiDataType): JSONObject
|
||||
}
|
||||
@@ -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<NaviPayCache>,
|
||||
private val naviPayAppDatabase: Provider<NaviPayAppDatabase>,
|
||||
private val naviPayAppEncryptedDatabase: Provider<NaviPayAppEncryptedDatabase>,
|
||||
private val deviceInfoProvider: DeviceInfoProvider,
|
||||
private val deviceInfoProvider: Provider<DeviceInfoProvider>,
|
||||
private val linkedAccountsUseCase: Provider<LinkedAccountsUseCase>,
|
||||
) {
|
||||
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()
|
||||
}
|
||||
}
|
||||
@@ -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<LinkedAccountEntity>,
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user