TP-39309 | Made polling call sequential post sms sending (#7628)

This commit is contained in:
Ujjwal Kumar
2023-08-27 23:16:56 +05:30
committed by GitHub
parent 32d2297a85
commit 91d6a1a3f6
3 changed files with 11 additions and 82 deletions

View File

@@ -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
}

View File

@@ -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()

View File

@@ -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()
}