TP-39309 | Made polling call sequential post sms sending (#7628)
This commit is contained in:
@@ -144,7 +144,6 @@ class NaviPayOnboardingViewModel @Inject constructor(
|
||||
|
||||
private companion object {
|
||||
private const val POLLING_INTERVAL_IN_MILLIS = 2500L
|
||||
private const val AUTO_POLLING_START_MIN_DELAY = 10000L
|
||||
private const val INDIA_COUNTRY_CODE = "91"
|
||||
private const val TAG_CUSTOMER_SETUP_ERROR = "CUSTOMER_SETUP_ERROR"
|
||||
}
|
||||
@@ -272,20 +271,10 @@ class NaviPayOnboardingViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun updateSmsVerificationState(smsVerificationState: SmsVerificationState = SmsVerificationState.None) {
|
||||
private fun updateSmsVerificationState(smsVerificationState: SmsVerificationState = SmsVerificationState.None) {
|
||||
_smsVerificationState.value = smsVerificationState
|
||||
}
|
||||
|
||||
fun startAutoPollingAfterMinDelay() {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
delay(AUTO_POLLING_START_MIN_DELAY)
|
||||
|
||||
if (_smsVerificationState.value == SmsVerificationState.Sending) {
|
||||
updateSmsVerificationState(smsVerificationState = SmsVerificationState.Sent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun showBottomSheet(naviPayOnboardingBottomSheetType: NaviPayOnboardingBottomSheetType) {
|
||||
_bottomSheetType.update { naviPayOnboardingBottomSheetType }
|
||||
_showBottomSheet.emit(value = true)
|
||||
@@ -452,7 +441,6 @@ class NaviPayOnboardingViewModel @Inject constructor(
|
||||
|
||||
private fun isDeviceVerificationOngoing(): Boolean {
|
||||
return _smsVerificationState.value == SmsVerificationState.Sending ||
|
||||
_smsVerificationState.value == SmsVerificationState.Sent ||
|
||||
_smsVerificationState.value == SmsVerificationState.Verifying
|
||||
}
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@ sealed class SmsVerificationState {
|
||||
object None : SmsVerificationState()
|
||||
object Initiated : SmsVerificationState()
|
||||
object Sending : SmsVerificationState()
|
||||
object Sent : SmsVerificationState()
|
||||
object SendingError : SmsVerificationState()
|
||||
object Verifying : SmsVerificationState()
|
||||
object Success : SmsVerificationState()
|
||||
object Failure : SmsVerificationState()
|
||||
|
||||
@@ -2,11 +2,8 @@ package com.navi.pay.onboarding.binding.ui
|
||||
|
||||
import android.app.Activity.RESULT_CANCELED
|
||||
import android.app.Activity.RESULT_OK
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.util.Log
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material.ExperimentalMaterialApi
|
||||
@@ -46,9 +43,6 @@ import com.navi.pay.onboarding.binding.model.view.SmsVerificationState
|
||||
import com.navi.pay.permission.utils.PermissionKeys
|
||||
import com.navi.pay.permission.utils.PermissionUtils
|
||||
import com.navi.pay.utils.CUSTOMER_STATUS_AFTER_ONBOARDING
|
||||
import com.navi.pay.utils.INTENT_ACTION_SMS_DELIVERED
|
||||
import com.navi.pay.utils.INTENT_ACTION_SMS_SENT
|
||||
import com.navi.pay.utils.NAVI_PAY_DEBUG_LOG
|
||||
import com.navi.pay.utils.hideSheet
|
||||
import com.navi.pay.utils.showSheet
|
||||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
@@ -75,7 +69,6 @@ fun NaviPayOnboardingScreen(
|
||||
val isFirstTimeUserExperience =
|
||||
naviPayOnboardingActivity.getSourceScreenUrl() == NaviPayScreenType.NAVI_PAY_FTUE_ONBOARDING.name
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
Log.d(NAVI_PAY_DEBUG_LOG, "NaviPayOnboardingScreen $isFirstTimeUserExperience")
|
||||
|
||||
val multiplePermissionsState = rememberMultiplePermissions(
|
||||
permissions = PermissionUtils.getPermissionListFromPermissionKey(permissionKey = PermissionKeys.FIRST_TIME_SCREEN_PERMISSION_KEY)
|
||||
@@ -182,9 +175,7 @@ fun NaviPayOnboardingScreen(
|
||||
val bottomSheetType by naviPayOnboardingViewModel.bottomSheetType.collectAsStateWithLifecycle()
|
||||
val simInfoList by naviPayOnboardingViewModel.simInfoList.collectAsStateWithLifecycle()
|
||||
|
||||
InitSmsBroadcastReceiver(
|
||||
naviPayOnboardingActivity = naviPayOnboardingActivity,
|
||||
smsVerificationState = smsVerificationState,
|
||||
InitLifecycleListener(
|
||||
naviPayOnboardingViewModel = naviPayOnboardingViewModel
|
||||
)
|
||||
|
||||
@@ -288,55 +279,17 @@ private fun onAllPermissionsGrantedForOnboarding(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun InitSmsBroadcastReceiver(
|
||||
naviPayOnboardingActivity: NaviPayOnboardingActivity,
|
||||
smsVerificationState: SmsVerificationState,
|
||||
private fun InitLifecycleListener(
|
||||
naviPayOnboardingViewModel: NaviPayOnboardingViewModel
|
||||
) {
|
||||
val lifecycleOwner = LocalLifecycleOwner.current
|
||||
DisposableEffect(key1 = lifecycleOwner) {
|
||||
|
||||
val broadcastReceiver = object : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context?, intent: Intent?) {
|
||||
when (resultCode) {
|
||||
RESULT_OK -> {
|
||||
if (intent?.action?.equals(INTENT_ACTION_SMS_SENT) == true) {
|
||||
if (smsVerificationState == SmsVerificationState.Sending) {
|
||||
naviPayOnboardingViewModel.updateSmsVerificationState(
|
||||
SmsVerificationState.Sent
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
if (intent?.action?.equals(INTENT_ACTION_SMS_SENT) == true) {
|
||||
naviPayOnboardingViewModel.updateSmsVerificationState(
|
||||
SmsVerificationState.SendingError
|
||||
)
|
||||
} else if (intent?.action?.equals(INTENT_ACTION_SMS_DELIVERED) == true) {
|
||||
naviPayOnboardingViewModel.updateSmsVerificationState(
|
||||
SmsVerificationState.SendingError
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val observer = LifecycleEventObserver { _, event ->
|
||||
if (event == Lifecycle.Event.ON_START) {
|
||||
naviPayOnboardingViewModel.updateIsAwayFromMainScreenState(isAwayFromMainScreen = false)
|
||||
naviPayOnboardingActivity.registerReceiver(
|
||||
broadcastReceiver,
|
||||
IntentFilter().apply {
|
||||
addAction(INTENT_ACTION_SMS_SENT)
|
||||
addAction(INTENT_ACTION_SMS_DELIVERED)
|
||||
}
|
||||
)
|
||||
} else if (event == Lifecycle.Event.ON_STOP) {
|
||||
naviPayOnboardingViewModel.updateIsAwayFromMainScreenState(isAwayFromMainScreen = true)
|
||||
naviPayOnboardingActivity.unregisterReceiver(broadcastReceiver)
|
||||
naviPayOnboardingViewModel.declineDeviceBinding()
|
||||
}
|
||||
}
|
||||
@@ -357,26 +310,16 @@ private fun ObserverSmsVerificationState(
|
||||
) {
|
||||
when (smsVerificationState) {
|
||||
SmsVerificationState.Sending -> {
|
||||
naviPayOnboardingViewModel.startAutoPollingAfterMinDelay()
|
||||
val serviceProviderNumberList =
|
||||
naviPayOnboardingViewModel.bindDeviceResponse.serviceProviders.map { it.number }
|
||||
NaviPayCommonUtils.sendSMS(
|
||||
destinationNumberList = serviceProviderNumberList,
|
||||
messageContent = naviPayOnboardingViewModel.bindDeviceResponse.smsContent,
|
||||
subscriptionId = selectedSimInfo.subscriptionId.toInt(),
|
||||
activityContext = naviPayOnboardingActivity.baseContext
|
||||
)
|
||||
}
|
||||
|
||||
SmsVerificationState.Sent -> {
|
||||
LaunchedEffect(Unit) {
|
||||
naviPayAnalytics.startSimBinding(selectedSimInfo)
|
||||
naviPayOnboardingViewModel.startStatusPolling()
|
||||
}
|
||||
}
|
||||
val serviceProviderNumberList =
|
||||
naviPayOnboardingViewModel.bindDeviceResponse.serviceProviders.map { it.number }
|
||||
NaviPayCommonUtils.sendSMS(
|
||||
destinationNumberList = serviceProviderNumberList,
|
||||
messageContent = naviPayOnboardingViewModel.bindDeviceResponse.smsContent,
|
||||
subscriptionId = selectedSimInfo.subscriptionId.toInt(),
|
||||
activityContext = naviPayOnboardingActivity.baseContext
|
||||
)
|
||||
|
||||
SmsVerificationState.SendingError -> {
|
||||
LaunchedEffect(Unit) {
|
||||
naviPayAnalytics.startSimBinding(selectedSimInfo)
|
||||
naviPayOnboardingViewModel.startStatusPolling()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user