TP-00000 | Initial setup of UPI SDK (#8979)

This commit is contained in:
shankar yadav
2023-12-15 14:29:40 +05:30
committed by GitHub
parent 07d4c705de
commit ef94f51599
7 changed files with 138 additions and 4 deletions

View File

@@ -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(),

View File

@@ -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)
}
}

View File

@@ -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
}
}

View File

@@ -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"

View File

@@ -0,0 +1,10 @@
package com.navi.common.upi
import org.json.JSONObject
interface UpiSdkHelper {
fun isUserOnboarded(): Boolean
suspend fun getDataByType(type: UpiDataType): JSONObject
}

View File

@@ -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()
}
}

View File

@@ -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)
}
}