diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt index 8b909f951a..5b6540dd21 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt @@ -1398,12 +1398,19 @@ class NaviPayAnalytics private constructor() { ) } - fun onNonUPIQRScanned(qrContent: String, naviPaySessionAttributes: Map) { + fun onNonUPIQRScanned( + qrContent: String, + naviPaySessionAttributes: Map, + qrCount: Int, + qrUri: String, + ) { NaviTrackEvent.trackEventOnClickStream( eventName = "NaviPay_QrScanner_NonUPIQRScanned", eventValues = mapOf( "qrContent" to qrContent, + "qrCount" to qrCount.toString(), + "qrUri" to qrUri, "naviPaySessionId" to naviPaySessionAttributes["naviPaySessionId"].orEmpty(), "naviPayCustomerStatusMap" to diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/ui/QrScannerScreen.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/ui/QrScannerScreen.kt index 26e262c300..9f5b4b8f75 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/ui/QrScannerScreen.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/ui/QrScannerScreen.kt @@ -164,6 +164,7 @@ fun QrScannerScreen( qrScannerViewModel.processQrContent( qrContent = barcodes.first().rawValue.toString(), sendQrFromGallery = true, + barcodes = barcodes, ) naviPayAnalytics.onQRReceived( isFromGallery = true, @@ -585,7 +586,7 @@ fun NavigationIconWithOtherAppsView( private fun QrCamera( isTorchEnabled: LiveData, naviPayActivity: NaviPayActivity, - onScanSuccess: (String) -> Unit, + onScanSuccess: (String, Boolean, List) -> Unit, naviPayAnalytics: NaviPayAnalytics.NaviPayQrScanner, naviPaySessionAttributes: Map, ) { @@ -664,7 +665,9 @@ private fun QrCamera( !barcodeResults.first().rawValue.isNullOrEmpty() ) { onScanSuccess( - barcodeResults.first().rawValue.toString() + barcodeResults.first().rawValue.toString(), + false, + barcodeResults, ) naviPayAnalytics.onQRReceived( isFromGallery = false, diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/util/UpiUriParser.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/util/UpiUriParser.kt index d88a29e4bb..f6c7328de7 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/util/UpiUriParser.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/util/UpiUriParser.kt @@ -8,6 +8,7 @@ package com.navi.pay.management.moneytransfer.scanpay.util import android.net.Uri +import com.google.mlkit.vision.barcode.common.Barcode import com.navi.base.utils.COLON import com.navi.pay.analytics.NaviPayAnalytics import com.navi.pay.management.common.sendmoney.model.network.SplitDetailsItem @@ -203,3 +204,7 @@ fun getQueryParamValueOrDefault(value: String?, default: String): String { fun prepareUpiUri(name: String, vpa: String): String { return "upi://pay?pa=$vpa&pn=$name" } + +fun extractUriFromQR(barcodes: List): String { + return barcodes.joinToString(", ") { "${it.rawValue}" } +} diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/viewmodel/QrScannerViewModel.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/viewmodel/QrScannerViewModel.kt index d0f69bda8f..7ea7f876bb 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/viewmodel/QrScannerViewModel.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/moneytransfer/scanpay/viewmodel/QrScannerViewModel.kt @@ -12,6 +12,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.google.gson.reflect.TypeToken +import com.google.mlkit.vision.barcode.common.Barcode import com.navi.base.utils.ResourceProvider import com.navi.common.di.CoroutineDispatcherProvider import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper @@ -36,6 +37,7 @@ import com.navi.pay.management.moneytransfer.scanpay.model.view.QrScanState import com.navi.pay.management.moneytransfer.scanpay.model.view.QrScannerBottomSheetStateHolder import com.navi.pay.management.moneytransfer.scanpay.model.view.UpiUriResult import com.navi.pay.management.moneytransfer.scanpay.util.UpiUriParser +import com.navi.pay.management.moneytransfer.scanpay.util.extractUriFromQR import com.navi.pay.utils.DEFAULT_CONFIG import com.navi.pay.utils.LITMUS_EXPERIMENT_NAVIPAY_OFFER_EXPERIENCE import com.navi.pay.utils.NAVI_PAY_WIDGET_CLICKED_KEY @@ -237,7 +239,11 @@ constructor( bottomSheetStateHolder.value.bottomSheetUIState is QrScannerBottomSheetUIState.OfferList && bottomSheetStateHolder.value.showBottomSheet - fun processQrContent(qrContent: String, sendQrFromGallery: Boolean = false) { + fun processQrContent( + qrContent: String, + sendQrFromGallery: Boolean = false, + barcodes: List, + ) { if (isQrCodeProcessing.get() || isOffersBottomSheetVisible()) { return } @@ -288,6 +294,8 @@ constructor( naviPayAnalytics.onNonUPIQRScanned( qrContent = qrContent, naviPaySessionAttributes = getNaviPaySessionAttributes(), + qrCount = barcodes.size, + qrUri = extractUriFromQR(barcodes), ) } }