TP-53619 | Master → Development (Release 4.3.1) (#9267)

This commit is contained in:
Shivam Goyal
2024-01-08 22:08:16 +05:30
committed by GitHub
parent babadd8c6a
commit 4f3ac0a004
11 changed files with 42 additions and 69 deletions

View File

@@ -15,8 +15,8 @@ kapt {
correctErrorTypes true
}
def VERSION_CODE = 371
def VERSION_NAME = "4.2.2"
def VERSION_CODE = 373
def VERSION_NAME = "4.3.1"
android {
namespace 'com.naviapp'

View File

@@ -20,7 +20,6 @@
<uses-sdk tools:overrideLibrary="org.npci.upi.security.pinactivitycomponent" />
<uses-feature android:name="android.hardware.camera.any" />
<uses-feature android:name="android.hardware.sensor.light" />
<uses-permission android:name="android.permission.CAMERA" />
<application android:hardwareAccelerated="true">

View File

@@ -768,13 +768,10 @@ class NaviPayAnalytics private constructor() {
)
}
fun onTorchButtonClick(isFlashOn: Boolean, lightSensorValue: Float) {
fun onTorchButtonClick(isFlashOn: Boolean) {
NaviTrackEvent.trackEventOnClickStream(
"NaviPay_QrScanner_TorchButtonClicked", mapOf(
Pair("isFlashOn", isFlashOn.toString()),
Pair(
"lightSensorValue", lightSensorValue.toString()
)
Pair("isFlashOn", isFlashOn.toString())
)
)
}

View File

@@ -70,6 +70,7 @@ fun TransactionDetailSection(
naviPayAnalytics: NaviPayAnalytics.NaviPayTransactionDetailsSectionBase,
onCopyIconClicked: ((String) -> Unit)? = null,
isPayAgainEnabled: Boolean,
isTransactionHistoryCtaEnabled: Boolean = true,
naviPayActivity: NaviPayActivity,
showCopySnackBar: Boolean = false,
updateCopySnackBarState: (Boolean) -> Unit,
@@ -263,18 +264,22 @@ fun TransactionDetailSection(
Spacer(modifier = Modifier.height(24.dp))
KeyValueWithCopySection(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp),
key = stringResource(id = R.string.navi_transaction_id),
value = transactionEntity?.transactionDetailEntity?.metaData?.npTxnId ?: "",
iconId = R.drawable.ic_copy,
onCopyIconClicked = {
naviPayAnalytics.onCopyNaviTransactionIdClicked(source = analyticsSource)
onCopyIconClicked?.invoke(it)
transactionEntity?.transactionDetailEntity?.metaData?.npTxnId?.let {
if (it.isNotBlank()) {
KeyValueWithCopySection(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp),
key = stringResource(id = R.string.navi_transaction_id),
value = it,
iconId = R.drawable.ic_copy,
onCopyIconClicked = {
naviPayAnalytics.onCopyNaviTransactionIdClicked(source = analyticsSource)
onCopyIconClicked?.invoke(it)
}
)
}
)
}
Spacer(modifier = Modifier.height(16.dp))
@@ -283,7 +288,8 @@ fun TransactionDetailSection(
onCheckBalanceCtaClicked = onCheckBalanceCtaClicked,
onShareReceiptCtaClicked = onShareReceiptCtaClicked,
onPayAgainCtaClicked = onPayAgainCtaClicked,
isPayAgainEnabled = isPayAgainEnabled
isPayAgainEnabled = isPayAgainEnabled,
isTransactionHistoryCtaEnabled = isTransactionHistoryCtaEnabled
)
}
},
@@ -622,7 +628,8 @@ fun CtaSection(
onCheckBalanceCtaClicked: () -> Unit,
onShareReceiptCtaClicked: () -> Unit,
onPayAgainCtaClicked: () -> Unit,
isPayAgainEnabled: Boolean
isPayAgainEnabled: Boolean,
isTransactionHistoryCtaEnabled: Boolean
) {
Row(
modifier = Modifier
@@ -653,11 +660,14 @@ fun CtaSection(
) {
onCheckBalanceCtaClicked.invoke()
}
CtaButtonForTransactionDetailsSection(
iconId = R.drawable.ic_transaction_history,
ctaName = stringResource(id = R.string.np_transaction_history),
) {
onTransactionHistoryCtaClicked.invoke()
if (isTransactionHistoryCtaEnabled) {
CtaButtonForTransactionDetailsSection(
iconId = R.drawable.ic_transaction_history,
ctaName = stringResource(id = R.string.np_transaction_history),
) {
onTransactionHistoryCtaClicked.invoke()
}
}
}
}

View File

@@ -190,6 +190,7 @@ private fun RenderPaymentSummaryScreen(
checkBalanceBankAccountUniqueId = checkBalanceBankAccountUniqueId,
helpCtaText = helpCtaText,
onHelpCtaClicked = onHelpCtaClicked,
transactionDetailScreenSource = TransactionDetailSectionSource.PAYMENT_SUMMARY_SCREEN
transactionDetailScreenSource = TransactionDetailSectionSource.PAYMENT_SUMMARY_SCREEN,
isTransactionHistoryCtaEnabled = (!transactionDetailItemProperty.isTransactionStatusNonTerminal)
)
}

View File

@@ -1773,9 +1773,10 @@ class SendMoneyViewModel @Inject constructor(
txnStatus = sendMoneyResponse.status,
txnType = transactionType.name,
txnReqType = sendMoneyResponse.txnRequestType,
amount = paymentAmount.value,
amount = String.format("%.2f", (paymentAmount.value.toDoubleOrNull() ?: 0.0)),
currency = DEFAULT_UPI_CURRENCY,
remarks = payeeEntity.value.note,
remarks = note.value.trim()
.ifBlank { naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks },
txnTimestamp = sendMoneyResponse.transactionTimestamp
?: DateTime.now(DateTimeZone.UTC), // DB always stores in UTC
instrumentId = "",

View File

@@ -519,6 +519,9 @@ class UPILiteViewModel @Inject constructor(
if (liteAccountBalanceFromPreviousScreen.isNotEmpty()) {
updateIsUserOnboarded(isUserOnboarded = true)
updateUPILiteBalance(balance = liteAccountBalanceFromPreviousScreen)
updateEnteredAmount(
amount = getPreFilledTopUpAmount(balance = liteAccountBalanceFromPreviousScreen)
)
updateEnteredAmount(
amount = getPreFilledTopUpAmount(balance = liteAccountBalanceFromPreviousScreen)

View File

@@ -578,5 +578,4 @@ fun MandateEntityItemViewOfPendingCategory(
)
}
}
}
}

View File

@@ -107,7 +107,6 @@ import com.navi.pay.permission.model.view.PermissionState
import com.navi.pay.permission.utils.PermissionKeys
import com.navi.pay.permission.utils.PermissionUtils
import com.navi.pay.utils.DEFAULT_INITIATION_MODE_QR_MANDATE
import com.navi.pay.utils.LIGHT_SENSOR_TIME_INTERVAL
import com.navi.pay.utils.NAVI_PAY_SCAN_AND_PAY_ANALYTICS_EVENT
import com.navi.pay.utils.clearBackStackUpToAndNavigate
import com.navi.pay.utils.clickableDebounce
@@ -211,36 +210,6 @@ fun QrScannerScreen(
}
}
if (FirebaseRemoteConfigHelper.getBoolean(LIGHT_SENSOR_DISABLE).not()) {
DisposableEffect(key1 = lifecycleOwner) {
var lastEventTs = 0L
val sensorListener = object : SensorEventListener {
override fun onSensorChanged(event: SensorEvent?) {
qrScannerViewModel.lightSensorValue = event?.values?.get(0) ?: 0f
if (lastEventTs < System.currentTimeMillis() - LIGHT_SENSOR_TIME_INTERVAL) {
lastEventTs = System.currentTimeMillis()
naviPayAnalytics.onLightSensor(event?.values?.get(0) ?: -1.0f)
}
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
}
}
val sensorManager =
naviPayActivity.getSystemService(Context.SENSOR_SERVICE) as SensorManager?
sensorManager?.getDefaultSensor(Sensor.TYPE_LIGHT)?.also { accelerometer ->
sensorManager.registerListener(
sensorListener,
accelerometer,
SensorManager.SENSOR_DELAY_NORMAL
)
}
onDispose {
sensorManager?.unregisterListener(sensorListener)
}
}
}
resultRecipient.onNavResult { result ->
when (result) {
is NavResult.Canceled -> naviPayActivity.finish()
@@ -438,10 +407,7 @@ fun QrScannerScreen(
TorchButton(
isTorchEnabled = isTorchEnabled,
onTorchToggle = {
naviPayAnalytics.onTorchButtonClick(
isFlashOn = isTorchEnabled,
qrScannerViewModel.lightSensorValue
)
naviPayAnalytics.onTorchButtonClick(isFlashOn = isTorchEnabled)
qrScannerViewModel.toggleTorchStatus()
})

View File

@@ -75,8 +75,6 @@ class QrScannerViewModel @Inject constructor(
var isQrCodeProcessing: AtomicBoolean = AtomicBoolean(false)
var lightSensorValue = 0f
private val _showPopUpPermission = MutableStateFlow(true)
val showPopUpPermission = _showPopUpPermission.asStateFlow()

View File

@@ -151,7 +151,6 @@ const val BANK_NAME_PLACEHOLDER = "{{BANK_NAME}}"
const val RESOURCE_DEFAULT_ID = -1
const val RUPEE_SYMBOL = ""
const val TRANSITION_DURATION = 200
const val LIGHT_SENSOR_TIME_INTERVAL = 5000
const val RUPEE_SYMBOL_CHAR = '₹'
//Deeplink