From 6da8b6492f014a4a63c04c3279bd97d8447f4030 Mon Sep 17 00:00:00 2001 From: Balrambhai Sharma Date: Thu, 5 Dec 2024 14:36:14 +0530 Subject: [PATCH] NTP-5471 | ABHA Prod issues (#13955) --- .../com/navi/insurance/abha/ABHAFragment.kt | 26 ++++++++++++------- .../navi/insurance/abha/ABHAOtpFragment.kt | 11 +++++++- .../navi/insurance/abha/ABHAaadharFragment.kt | 9 ++++++- .../widgets/OTPWidgetComposable.kt | 12 +-------- .../widgets/RedirectionCtaWidgetComposable.kt | 11 ++++++-- 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAFragment.kt b/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAFragment.kt index aa4ea5ba48..b7960ad1f7 100644 --- a/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAFragment.kt +++ b/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAFragment.kt @@ -16,6 +16,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.Scaffold import androidx.compose.material.ScaffoldState import androidx.compose.material.rememberScaffoldState @@ -29,6 +30,7 @@ import com.navi.base.model.CtaData import com.navi.base.model.CtaType import com.navi.base.model.NaviClickAction import com.navi.base.utils.orFalse +import com.navi.base.utils.orZero import com.navi.common.network.models.ErrorMessage import com.navi.common.ui.errorview.FullScreenErrorComposeView import com.navi.common.upi.NAME @@ -96,16 +98,22 @@ class ABHAFragment : GiBaseFragment(), WidgetCallback { } }, content = { it -> - Column(modifier = Modifier.padding(it)) { - (state.value as ABHAFragmentVM.ViewState.Success) - .data - ?.content - ?.forEach { - GenericComposableWidgetFactory( - data = it, - widgetCallback = this@ABHAFragment - ) + LazyColumn(modifier = Modifier.padding(it)) { + val pageResponse = + state.value + as ABHAFragmentVM.ViewState.Success + items( + pageResponse.data?.content?.size.orZero(), + key = { + pageResponse.data?.content?.get(it)?.widgetId.orEmpty() } + ) { index: Int -> + val data = pageResponse.data?.content?.get(index) + GenericComposableWidgetFactory( + data = data, + widgetCallback = this@ABHAFragment + ) + } } }, bottomBar = { diff --git a/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAOtpFragment.kt b/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAOtpFragment.kt index 6c465c92a5..29fd08e32c 100644 --- a/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAOtpFragment.kt +++ b/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAOtpFragment.kt @@ -15,6 +15,7 @@ import androidx.compose.animation.animateContentSize import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.LocalOverscrollConfiguration import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize @@ -26,11 +27,14 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.fragment.app.viewModels import com.navi.analytics.utils.NaviTrackEvent import com.navi.base.model.CtaData @@ -132,8 +136,13 @@ class ABHAOtpFragment : BaseFragment(), WidgetCallback { @Composable fun AbhaOtpContentScreen(data: ABHAPageResponse) { val widgetCallback: WidgetCallback = this + val keyboardController = LocalSoftwareKeyboardController.current + LaunchedEffect(Unit) { keyboardController?.show() } Scaffold( - modifier = Modifier.fillMaxSize().background(color = Color.White), + modifier = + Modifier.fillMaxSize().background(color = Color.White).pointerInput(Unit) { + detectTapGestures(onPress = { keyboardController?.hide() }) + }, topBar = { data.header?.getOrNull(0)?.let { data -> GenericComposableWidgetFactory(data = data, this) diff --git a/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAaadharFragment.kt b/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAaadharFragment.kt index 5ace2f35a5..c8acd2816a 100644 --- a/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAaadharFragment.kt +++ b/android/navi-insurance/src/main/java/com/navi/insurance/abha/ABHAaadharFragment.kt @@ -15,6 +15,7 @@ import androidx.compose.animation.animateContentSize import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.LocalOverscrollConfiguration import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize @@ -30,7 +31,9 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.fragment.app.viewModels import com.navi.analytics.utils.NaviTrackEvent import com.navi.base.model.CtaData @@ -133,8 +136,12 @@ class ABHAaadharFragment : BaseFragment(), WidgetCallback { fun AbhaAadharContentScreen(data: ABHAPageResponse) { val errorIndex = viewModel.errorState.collectAsState() val widgetCallback: WidgetCallback = this + val keyboardController = LocalSoftwareKeyboardController.current Scaffold( - modifier = Modifier.fillMaxSize().background(color = Color.White), + modifier = + Modifier.fillMaxSize().background(color = Color.White).pointerInput(Unit) { + detectTapGestures(onPress = { keyboardController?.hide() }) + }, topBar = { data.header?.getOrNull(0)?.let { data -> GenericComposableWidgetFactory(data = data, this) diff --git a/android/navi-widgets/src/main/java/com/navi/naviwidgets/composewidget/widgets/OTPWidgetComposable.kt b/android/navi-widgets/src/main/java/com/navi/naviwidgets/composewidget/widgets/OTPWidgetComposable.kt index 33e6170e2d..a3f2a39615 100644 --- a/android/navi-widgets/src/main/java/com/navi/naviwidgets/composewidget/widgets/OTPWidgetComposable.kt +++ b/android/navi-widgets/src/main/java/com/navi/naviwidgets/composewidget/widgets/OTPWidgetComposable.kt @@ -35,7 +35,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.TextFieldValue @@ -58,7 +57,6 @@ import com.navi.naviwidgets.extensions.getComposeTextStyling import com.navi.naviwidgets.extensions.setWidgetLayoutParams import com.navi.naviwidgets.models.response.TextFieldData import kotlinx.coroutines.delay -import timber.log.Timber @Composable fun OTPWidgetComposable( @@ -141,15 +139,7 @@ fun OtpTextField( onOtpTextChange: (String, Boolean) -> Unit ) { val focusRequester = remember { FocusRequester() } - val keyboardController = LocalSoftwareKeyboardController.current - LaunchedEffect(Unit) { - if (otpText.length > otpCount) { - Timber.e("OTP length is greater than the limit") - } - focusRequester.requestFocus() - keyboardController?.show() - } - + LaunchedEffect(Unit) { focusRequester.requestFocus() } BasicTextField( modifier = modifier.focusRequester(focusRequester), value = TextFieldValue(otpText, selection = TextRange(otpText.length)), diff --git a/android/navi-widgets/src/main/java/com/navi/naviwidgets/composewidget/widgets/RedirectionCtaWidgetComposable.kt b/android/navi-widgets/src/main/java/com/navi/naviwidgets/composewidget/widgets/RedirectionCtaWidgetComposable.kt index fd6d64aefa..876c3bf7fd 100644 --- a/android/navi-widgets/src/main/java/com/navi/naviwidgets/composewidget/widgets/RedirectionCtaWidgetComposable.kt +++ b/android/navi-widgets/src/main/java/com/navi/naviwidgets/composewidget/widgets/RedirectionCtaWidgetComposable.kt @@ -9,6 +9,8 @@ package com.navi.naviwidgets.composewidget.widgets import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable import com.navi.naviwidgets.callbacks.WidgetCallback import com.navi.naviwidgets.composewidget.model.RedirectionCtaWidgetData @@ -17,9 +19,14 @@ fun RedirectionCtaWidgetComposable( redirectionCtaWidgetComposable: RedirectionCtaWidgetData?, widgetCallback: WidgetCallback? ) { + val shouldDoCallback = + rememberSaveable(redirectionCtaWidgetComposable?.widgetId) { mutableStateOf(true) } LaunchedEffect(key1 = redirectionCtaWidgetComposable) { - redirectionCtaWidgetComposable?.widgetData?.cta?.let { ctaData -> - widgetCallback?.onClick(ctaData) + if (shouldDoCallback.value) { + redirectionCtaWidgetComposable?.widgetData?.cta?.let { ctaData -> + widgetCallback?.onClick(ctaData) + } + shouldDoCallback.value = false } } }