Ntp-28633 | Shiv Natani | alfred masking pms (#14615)

This commit is contained in:
Shiv Natani
2025-01-28 15:21:56 +05:30
committed by GitHub
parent 6a52ec2892
commit 2d5ae7c402
5 changed files with 116 additions and 2 deletions

View File

@@ -176,6 +176,7 @@ import com.navi.pay.utils.noRippleClickable
import com.navi.pay.utils.noRippleClickableWithDebounce
import com.navi.pay.utils.shake
import com.navi.pay.utils.shimmerEffect
import com.navi.uitron.utils.alfredMaskSensitiveComposable
import com.navi.uitron.utils.orValue
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
@@ -3447,8 +3448,15 @@ fun RenderCheckBalanceActionOrResultSection(
@Composable
private fun RenderCheckBalanceSuccessState(balance: String, alpha: Float = 1f) {
val view = LocalView.current
NaviText(
modifier = Modifier.padding(start = 4.dp),
modifier =
Modifier.padding(start = 4.dp)
.alfredMaskSensitiveComposable(
isSensitive = true,
rootView = view,
id = "balance_text",
),
text = balance,
fontFamily = naviFontFamily,
fontWeight = getFontWeight(FontWeightEnum.NAVI_HEADLINE_REGULAR),

View File

@@ -41,6 +41,7 @@ import androidx.compose.material3.Button
import androidx.compose.material3.ButtonColors
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
@@ -74,8 +75,12 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.fragment.app.FragmentActivity
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil.compose.AsyncImage
import com.navi.alfred.AlfredManager
import com.navi.base.utils.EMPTY
import com.navi.common.utils.ClickDebounce
import com.navi.common.utils.get
@@ -145,6 +150,26 @@ fun CardDetailScreenRoot(
val cardFocusRequester = remember { FocusRequester() }
val expiryFocusRequester = remember { FocusRequester() }
val cvvFocusRequester = remember { FocusRequester() }
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(key1 = lifecycleOwner) {
val observer = LifecycleEventObserver { _, event ->
when (event) {
Lifecycle.Event.ON_CREATE,
Lifecycle.Event.ON_RESUME -> {
AlfredManager.setCurrentScreenName(
NaviPaymentAnalyticScreenName.CARD_SCREEN.screenName
)
}
else -> {}
}
}
lifecycleOwner.lifecycle.addObserver(observer)
onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
AlfredManager.setCurrentScreenName(paymentActivity.screenName)
}
}
HandleScanCardResult(resultRecipientScanCardScreen, cardDetailScreenVM::onEvent)
EffectsHandler(
cardDetailScreenVM = cardDetailScreenVM,

View File

@@ -20,6 +20,7 @@ import androidx.compose.material.ModalBottomSheetValue
import androidx.compose.material.Surface
import androidx.compose.material.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
@@ -29,7 +30,10 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.google.gson.Gson
@@ -162,6 +166,27 @@ fun MPSScreen(
skipHalfExpanded = true,
)
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(key1 = lifecycleOwner) {
val observer = LifecycleEventObserver { _, event ->
when (event) {
Lifecycle.Event.ON_CREATE,
Lifecycle.Event.ON_RESUME -> {
AlfredManager.setCurrentScreenName(
NaviPaymentAnalyticScreenName.MINI_PAYMENT_SCREEN.screenName
)
}
else -> {}
}
}
lifecycleOwner.lifecycle.addObserver(observer)
onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
AlfredManager.setCurrentScreenName(naviPaymentActivity.screenName)
}
}
LaunchedEffect(key1 = bottomSheetStateHolder.showBottomSheet) {
when (bottomSheetStateHolder.showBottomSheet) {
true -> coroutineScope.launch { bottomSheetState.show() }

View File

@@ -36,6 +36,7 @@ import androidx.compose.material.ModalBottomSheetValue
import androidx.compose.material.rememberModalBottomSheetState
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
@@ -52,10 +53,14 @@ import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.airbnb.lottie.compose.LottieAnimation
import com.airbnb.lottie.compose.LottieCompositionSpec
import com.airbnb.lottie.compose.rememberLottieComposition
import com.navi.alfred.AlfredManager
import com.navi.base.utils.isNotNull
import com.navi.base.utils.isNotNullAndNotEmpty
import com.navi.base.utils.isNull
@@ -158,6 +163,26 @@ fun NPSScreenRoot(
)
val isKeyboardVisible = WindowInsets.isImeVisible
val npsScreenState by npsViewModel.state.collectAsStateWithLifecycle()
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(key1 = lifecycleOwner) {
val observer = LifecycleEventObserver { _, event ->
when (event) {
Lifecycle.Event.ON_CREATE,
Lifecycle.Event.ON_RESUME -> {
AlfredManager.setCurrentScreenName(
NaviPaymentAnalyticScreenName.FULL_PAYMENT_SCREEN.screenName
)
}
else -> {}
}
}
lifecycleOwner.lifecycle.addObserver(observer)
onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
AlfredManager.setCurrentScreenName(activity.screenName)
}
}
LaunchedEffect(Unit) {
naviPaymentAnalytics.onNPSLanded(npsViewModel.getAnalyticsParams())

View File

@@ -73,6 +73,7 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType.Companion.LongPress
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
@@ -91,6 +92,7 @@ import com.google.accompanist.permissions.MultiplePermissionsState
import com.google.mlkit.vision.common.InputImage
import com.google.mlkit.vision.text.TextRecognition
import com.google.mlkit.vision.text.latin.TextRecognizerOptions
import com.navi.alfred.AlfredManager
import com.navi.base.utils.EMPTY
import com.navi.common.utils.log
import com.navi.design.font.FontWeightEnum
@@ -121,6 +123,7 @@ import com.navi.payment.nativepayment.presentation.reducer.TorchEvent
import com.navi.payment.nativepayment.viewmodel.ScanCardResult
import com.navi.payment.nativepayment.viewmodel.ScanCardVM
import com.navi.payment.utils.Constants.DEFAULT_ZOOM_RATIO
import com.navi.uitron.utils.alfredMaskSensitiveComposable
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultBackNavigator
import kotlinx.coroutines.CoroutineScope
@@ -136,6 +139,7 @@ fun ScanCardScreenRoot(
scanCardVM: ScanCardVM = hiltViewModel(),
resultNavigator: ResultBackNavigator<ScanCardResult>,
paymentAmount: Double = 0.0,
activity: NaviPaymentActivity,
scanCardAnalytics: NaviPaymentAnalytics.ScanCardScreen =
NaviPaymentAnalytics.INSTANCE.ScanCardScreen(),
) {
@@ -162,6 +166,25 @@ fun ScanCardScreenRoot(
BackHandler { onEvent(ScanCardEvent.OnBackPress) }
DisposableEffect(key1 = lifecycleOwner) {
val observer = LifecycleEventObserver { _, event ->
when (event) {
Lifecycle.Event.ON_CREATE,
Lifecycle.Event.ON_RESUME -> {
AlfredManager.setCurrentScreenName(
NaviPaymentAnalyticScreenName.SCAN_CARD_SCREEN.screenName
)
}
else -> {}
}
}
lifecycleOwner.lifecycle.addObserver(observer)
onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
AlfredManager.setCurrentScreenName(activity.screenName)
}
}
EffectsHandler(
scanCardVM = scanCardVM,
resultNavigator = resultNavigator,
@@ -280,13 +303,21 @@ private fun ScanCardMainContent(
modifier =
Modifier.fillMaxWidth().padding(horizontal = 32.dp).align(Alignment.Start)
) {
val view = LocalView.current
CardScannerView(
naviPaymentActivity = naviPaymentActivity,
isFlashEnabled = scanCardVM.isTorchEnabled,
scanCardAnalytics = scanCardAnalytics,
onEvent = onEvent,
modifier =
Modifier.fillMaxWidth().aspectRatio(1f).clip(RoundedCornerShape(4.dp)),
Modifier.fillMaxWidth()
.aspectRatio(1f)
.clip(RoundedCornerShape(4.dp))
.alfredMaskSensitiveComposable(
isSensitive = true,
rootView = view,
id = "card_scan",
),
)
FrameImage()
}