From 9fc744e78e836a4f2c5a2a52be47a708910ff2a5 Mon Sep 17 00:00:00 2001 From: Prakhar Saxena Date: Mon, 28 Oct 2024 21:14:08 +0530 Subject: [PATCH] NTP-9377 | PS | fix for scroll issue in tribute payments (#13414) --- .../activity/WebPaymentActivity.kt | 14 +++++++------- .../screens/WebPaymentMainScreen.kt | 17 ++++++++++++++++- .../viewmodel/WebNaviPaymentViewModel.kt | 10 +++++++++- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/activity/WebPaymentActivity.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/activity/WebPaymentActivity.kt index 41603c34bd..8835f97242 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/activity/WebPaymentActivity.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/activity/WebPaymentActivity.kt @@ -12,15 +12,16 @@ import android.content.pm.ActivityInfo import android.os.Build import android.os.Bundle import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.Column -import androidx.compose.ui.graphics.Color import androidx.navigation.NavHostController import androidx.navigation.compose.rememberNavController -import com.google.accompanist.systemuicontroller.rememberSystemUiController +import androidx.navigation.plusAssign import com.navi.common.model.ModuleNameV2 import com.navi.common.ui.activity.BaseActivity import com.navi.pay.common.theme.NaviPayMaterialTheme +import com.navi.pay.utils.rememberBottomSheetNavigator import com.navi.payment.R import com.navi.payment.nativepayment.dataprovider.WebPaymentDataProvider import com.navi.payment.nativepayment.screens.NavGraphs @@ -44,14 +45,13 @@ class WebPaymentActivity : BaseActivity() { requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT } super.onCreate(savedInstanceState) + enableEdgeToEdge() overridePendingTransition(R.anim.fade_in, 0) setContent { NaviPayMaterialTheme(transparentStatusBar = true) { - val systemUiController = rememberSystemUiController() - systemUiController.setStatusBarColor(color = Color.Transparent) - systemUiController.setNavigationBarColor(color = Color.Transparent) - - val navController = rememberNavController() + val bottomSheetNavigator = rememberBottomSheetNavigator() + val navController = + rememberNavController().apply { this.navigatorProvider += bottomSheetNavigator } this.navController = navController Column { diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/WebPaymentMainScreen.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/WebPaymentMainScreen.kt index 76a00f82bf..7ed1c79c2a 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/WebPaymentMainScreen.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/WebPaymentMainScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource @@ -114,7 +115,7 @@ fun WebPaymentMainScreen( val bottomSheetState = rememberModalBottomSheetState( - initialValue = ModalBottomSheetValue.Hidden, + initialValue = ModalBottomSheetValue.Expanded, confirmValueChange = { bottomSheetStateHolder.bottomSheetStateChange }, skipHalfExpanded = true ) @@ -334,6 +335,20 @@ fun WebPaymentMainScreen( BackHandler { onBackClick.invoke() } + LaunchedEffect(Unit) { + snapshotFlow { bottomSheetState.currentValue } + .collect { + if ( + it == ModalBottomSheetValue.Hidden && + bottomSheetStateHolder.bottomSheetUIState is WebPaymentScreenState.Error && + bottomSheetStateHolder.showBottomSheet && + webPaymentViewModel.isDismissAllowed + ) { + onBackClick.invoke() + } + } + } + LaunchedEffect(key1 = Unit) { webPaymentViewModel.sendEvent("navi_pmt_native_screen_render") if (coinEarnBannerDetails.isNotNull()) { diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/WebNaviPaymentViewModel.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/WebNaviPaymentViewModel.kt index 34fd166592..3ff0fc4943 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/WebNaviPaymentViewModel.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/WebNaviPaymentViewModel.kt @@ -126,6 +126,8 @@ constructor( ) val bottomSheetStateHolder = _bottomSheetStateHolder.asStateFlow() + var isDismissAllowed = false + init { initiate() } @@ -214,6 +216,8 @@ constructor( ), bottomSheetStateChange = true ) + delay(500) + isDismissAllowed = true } } else { updateBottomSheetUIState( @@ -224,11 +228,13 @@ constructor( ), bottomSheetStateChange = true ) + delay(500) + isDismissAllowed = true } } } - private fun refreshUI(data: S2sPaymentMethodResponse) { + private suspend fun refreshUI(data: S2sPaymentMethodResponse) { data.methodDetails?.let { methodDetails -> paymentDataProvider.updateAnalyticsParams( "payment_order_id", @@ -238,6 +244,8 @@ constructor( _coinEarnBannerDetails.update { methodDetails.bannerDetails?.coinRewards } methodDetails.availablePaymentInstruments?.let { processAvailablePaymentMethods(it) } } + delay(500) + isDismissAllowed = true } private fun processAvailablePaymentMethods(