From 03054c3a3bd2f058cde554db3857b45e525683ff Mon Sep 17 00:00:00 2001 From: Shaurya Rehan Date: Mon, 9 Sep 2024 13:51:41 +0530 Subject: [PATCH] TP-82152 | crash fix (#12405) --- .../common/upiid/ui/UPIIdInputScreen.kt | 14 +++++++++----- .../paytocontacts/ui/PayToContactsScreenV2.kt | 18 +++++++++--------- .../ui/SavedBeneficiaryScreen.kt | 18 ++++++++++-------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/upiid/ui/UPIIdInputScreen.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/upiid/ui/UPIIdInputScreen.kt index 22f82ff150..35ec89b533 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/upiid/ui/UPIIdInputScreen.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/upiid/ui/UPIIdInputScreen.kt @@ -37,6 +37,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -85,6 +86,8 @@ import com.navi.pay.utils.customHide import com.navi.pay.utils.initials import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import kotlin.time.Duration.Companion.milliseconds +import kotlinx.coroutines.delay import kotlinx.coroutines.launch @OptIn(ExperimentalMaterialApi::class) @@ -203,11 +206,6 @@ fun RenderUPIIdInputScreen( val context = LocalContext.current val view = LocalView.current - LaunchedEffect(Unit) { - focusRequester.requestFocus() - keyboardController?.show() - } - NaviPayModalBottomSheetLayout( sheetContent = { RenderUPIIdInputScreenBottomSheet() }, sheetState = bottomSheetState @@ -307,6 +305,12 @@ fun RenderUPIIdInputScreen( } else null ) + LaunchedEffect(Unit) { + focusRequester.requestFocus() + delay(100.milliseconds) // Delay to ensure focus is set + keyboardController?.show() + } + if (warningErrorInfoState.isErrorState) { Spacer(modifier = Modifier.height(8.dp)) diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/paytocontacts/ui/PayToContactsScreenV2.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/paytocontacts/ui/PayToContactsScreenV2.kt index 8af7cb2705..6e8478bdc0 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/paytocontacts/ui/PayToContactsScreenV2.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/paytocontacts/ui/PayToContactsScreenV2.kt @@ -38,6 +38,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -109,7 +110,8 @@ import com.navi.pay.utils.customHide import com.navi.pay.utils.launchPermissionSettingsScreen import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator -import kotlinx.coroutines.android.awaitFrame +import kotlin.time.Duration.Companion.milliseconds +import kotlinx.coroutines.delay import kotlinx.coroutines.launch @OptIn(ExperimentalPermissionsApi::class, ExperimentalMaterialApi::class) @@ -457,20 +459,12 @@ fun RenderPayToContactsSearchScreen( onSelfTransferClicked: () -> Unit, contactPermissionDescription: String ) { - val keyboard = LocalSoftwareKeyboardController.current - val scope = rememberCoroutineScope() val context = LocalContext.current val view = LocalView.current val keyboardController = LocalSoftwareKeyboardController.current val focusRequester = remember { FocusRequester() } - LaunchedEffect(Unit) { - awaitFrame() - focusRequester.requestFocus() - keyboard?.show() - } - NaviPayModalBottomSheetLayout( sheetContent = { PayToContactsBottomSheetContent( @@ -513,6 +507,12 @@ fun RenderPayToContactsSearchScreen( warningErrorInfoState = invalidState.isErrorState, ) + LaunchedEffect(Unit) { + focusRequester.requestFocus() + delay(100.milliseconds) // Delay to ensure focus is set + keyboardController?.show() + } + Spacer(modifier = Modifier.height(8.dp)) if (invalidState.isWarningState) { diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/savedbeneficiary/ui/SavedBeneficiaryScreen.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/savedbeneficiary/ui/SavedBeneficiaryScreen.kt index 9335b1387b..7003841e20 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/savedbeneficiary/ui/SavedBeneficiaryScreen.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/savedbeneficiary/ui/SavedBeneficiaryScreen.kt @@ -38,6 +38,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi @@ -108,7 +109,8 @@ import com.navi.pay.utils.isEmpty import com.navi.pay.utils.shimmerEffect import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator -import kotlinx.coroutines.android.awaitFrame +import kotlin.time.Duration.Companion.milliseconds +import kotlinx.coroutines.delay import kotlinx.coroutines.launch @OptIn(ExperimentalMaterialApi::class, ExperimentalComposeUiApi::class) @@ -610,13 +612,7 @@ private fun RenderSavedBeneficiarySearchScreen( onSelfTransferCtaClicked: () -> Unit ) { - val keyboard = LocalSoftwareKeyboardController.current - - LaunchedEffect(Unit) { - awaitFrame() - focusRequester.requestFocus() - keyboard?.show() - } + val keyboardController = LocalSoftwareKeyboardController.current NaviPayModalBottomSheetLayout( sheetContent = { @@ -651,6 +647,12 @@ private fun RenderSavedBeneficiarySearchScreen( trailingIconId = com.navi.naviwidgets.R.drawable.small_cross_purple, ) + LaunchedEffect(Unit) { + focusRequester.requestFocus() + delay(100.milliseconds) // Delay to ensure focus is set + keyboardController?.show() + } + if (warningErrorInfoState.isWarningState) { Spacer(modifier = Modifier.height(8.dp)) NaviText(