From ffa2468a1b56013b72bd173712f42815cd1f7435 Mon Sep 17 00:00:00 2001 From: Sangaraboina Rishvik Vardhan Date: Thu, 21 Sep 2023 15:16:10 +0530 Subject: [PATCH] Feature ap bank search screen (#7933) Co-authored-by: Aparna Vadlamani --- .../ApUiTronActionDeserializer.kt | 30 +++++++ .../ap/common/handler/ApiActionHandler.kt | 2 +- .../common/handler/LambdaApiActionHandler.kt | 12 ++- .../handler/LaunchIntentActionHandler.kt | 2 +- .../ap/common/handler/SdkActionHandler.kt | 15 +++- .../actions/UpdateDataViaHandleAction.kt | 30 +++++++ .../models/lambdamodels/BankDataResponse.kt | 6 +- .../models/lambdamodels/FinarkeinData.kt | 30 +++---- .../ap/common/renderer/DynamicColumnWidget.kt | 17 ++-- .../ap/common/renderer/DynamicGridWidget.kt | 81 +++++++++---------- .../ap/common/renderer/DynamicRowWidget.kt | 17 ++-- .../ap/common/repository/LambdaRepository.kt | 22 +++-- .../ap/common/sdk/helper/FinarkeinHelper.kt | 18 ++--- .../common/viewmodel/ApplicationPlatformVM.kt | 18 ++++- .../com/navi/ap/common/viewmodel/LambdaVM.kt | 72 +++++++++-------- .../ap/network/retrofit/RetrofitService.kt | 25 +++--- .../src/main/kotlin/com/navi/ap/utils/Ext.kt | 10 +++ .../main/kotlin/com/navi/ap/utils/Utils.kt | 26 +++--- .../navi/ap/utils/constants/EnumsConstant.kt | 5 +- .../ap/utils/constants/LambdaConstants.kt | 5 ++ .../navi/ap/utils/injector/PathInjector.kt | 2 +- .../deserializer/UiTronActionDeserializer.kt | 2 +- .../model/action/ThirdPartySdkAction.kt | 6 +- .../uitron/model/action/TriggerApiActions.kt | 3 +- .../model/action/UpdateStateHandleActionV2.kt | 3 +- .../navi/common/uitron/util/ApActionType.kt | 3 +- 26 files changed, 286 insertions(+), 176 deletions(-) create mode 100644 navi-ap/src/main/kotlin/com/navi/ap/common/deserializer/ApUiTronActionDeserializer.kt create mode 100644 navi-ap/src/main/kotlin/com/navi/ap/common/models/actions/UpdateDataViaHandleAction.kt diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/deserializer/ApUiTronActionDeserializer.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/deserializer/ApUiTronActionDeserializer.kt new file mode 100644 index 0000000000..ef6f44eb17 --- /dev/null +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/deserializer/ApUiTronActionDeserializer.kt @@ -0,0 +1,30 @@ +package com.navi.ap.common.deserializer + +import com.google.gson.JsonDeserializationContext +import com.google.gson.JsonElement +import com.navi.ap.common.models.actions.UpdateDataViaHandleAction +import com.navi.common.uitron.deserializer.UiTronActionDeserializer +import com.navi.common.uitron.util.ApActionType +import com.navi.uitron.model.data.UiTronAction +import java.lang.reflect.Type + +/** AP specific actions which cannot be placed in common module should be added here **/ +class ApUiTronActionDeserializer : UiTronActionDeserializer() { + override fun deserialize( + json: JsonElement?, + typeOfT: Type?, + context: JsonDeserializationContext? + ): UiTronAction? { + json?.let { + val jsonObject = it.asJsonObject + val type = jsonObject["type"] ?: return null + return when (type.asString) { + ApActionType.UpdateDataViaHandleAction.name -> + context?.deserialize(jsonObject, UpdateDataViaHandleAction::class.java) + + else -> super.deserialize(json, typeOfT, context) + } + } + return null + } +} \ No newline at end of file diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/handler/ApiActionHandler.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/handler/ApiActionHandler.kt index eb37204505..b79b997740 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/handler/ApiActionHandler.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/handler/ApiActionHandler.kt @@ -187,7 +187,7 @@ fun getFillApplicationRequestBody( Field(item.name.orEmpty(), output) } SourceType.HANDLE_OBJECT.name -> { - val obj: Any? = viewModel.handle[item.name.orEmpty()] + val obj: Any? = viewModel.handle[item.sourceProperty.orEmpty()] val output = readJsonPath(obj.toJson(), item.jsonPath.orEmpty()) Field(item.name.orEmpty(), output) } diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/handler/LambdaApiActionHandler.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/handler/LambdaApiActionHandler.kt index c407d5e4df..9deaacc893 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/handler/LambdaApiActionHandler.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/handler/LambdaApiActionHandler.kt @@ -21,15 +21,19 @@ fun lambdaApiActionHandler( viewModel.resendTelcoOtp(lambdaApiAction = lambdaApiAction) } LambdaType.LOAN_OFFER_DETAILS.name -> { - val map = getResolvedFieldValue(fields = lambdaApiAction.fields, viewModel = viewModel) + val map = getResolvedFieldValue(fields = lambdaApiAction.fields, handle = viewModel.handle) viewModel.fetchOfferDetails(map) } LambdaType.APPLY_LOAN.name -> { - val map = getResolvedFieldValue(fields = lambdaApiAction.fields, viewModel = viewModel) + val map = getResolvedFieldValue(fields = lambdaApiAction.fields, handle = viewModel.handle) viewModel.applyLoan(map) } - LambdaType.FETCH_FINARKEIN_CONSENT_DATA.name -> { - viewModel.fetchFinarkeinConsentData(lambdaApiAction) + LambdaType.FETCH_CONSENT_DATA.name -> { + viewModel.fetchConsentData(lambdaApiAction) + } + LambdaType.FETCH_BANKS.name -> { + val map = getResolvedFieldValue(fields = lambdaApiAction.fields, handle = viewModel.handle) + viewModel.fetchAllBanks(map) } LambdaType.FETCH_RPD_TOKEN.name -> { viewModel.fetchRpdToken(viewModel, lambdaApiAction) diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/handler/LaunchIntentActionHandler.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/handler/LaunchIntentActionHandler.kt index 21cd4ed423..f47fd22ff3 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/handler/LaunchIntentActionHandler.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/handler/LaunchIntentActionHandler.kt @@ -58,7 +58,7 @@ private fun handleLaunchIntentAction( var uri = launchIntentAction.value.intentUriString?.value launchIntentAction.value.intentUriString?.let { val resolvedValues = - getResolvedFieldValue(fields = listOf(it), viewModel = viewModel) + getResolvedFieldValue(fields = listOf(it), handle = viewModel.handle) uri = resolvedValues[it.name]?.toString() } val intent = diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/handler/SdkActionHandler.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/handler/SdkActionHandler.kt index cc7a8c9244..a68ef6814b 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/handler/SdkActionHandler.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/handler/SdkActionHandler.kt @@ -14,7 +14,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import com.navi.ap.common.models.lambdamodels.FinarkeinConsentResponse +import com.navi.ap.common.models.lambdamodels.ConsentResponse import com.navi.ap.common.sdk.helper.FinarkeinHelper import com.navi.ap.common.ui.ApplicationPlatformActivity import com.navi.ap.common.viewmodel.LambdaVM @@ -69,9 +69,9 @@ private fun handleThirdPartySdkAction( } SDKType.FINARKEIN.name -> { (action.value as? FinarkeinSDKAction)?.let { - val finarkeinHelper = FinarkeinHelper(anubhavSDKResult, viewModel, action.value) + val finarkeinHelper = FinarkeinHelper(anubhavSDKResult) (viewModel.handle.get(FINARKEIN_CONSENT_DATA.getInputId()) - as? FinarkeinConsentResponse) + as? ConsentResponse) ?.let { finarkeinHelper.openFinarkein(it) } } @@ -99,3 +99,12 @@ private fun GetAnubhavResultLauncher( } } } + +fun List.getIncomeVerificationAvailableSDK(): String?{ + forEach { + when(it){ + SDKType.FINARKEIN.name -> return it + } + } + return null +} diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/models/actions/UpdateDataViaHandleAction.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/models/actions/UpdateDataViaHandleAction.kt new file mode 100644 index 0000000000..68f1215972 --- /dev/null +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/models/actions/UpdateDataViaHandleAction.kt @@ -0,0 +1,30 @@ +package com.navi.ap.common.models.actions + +import android.os.Parcelable +import com.navi.ap.utils.getResolvedFieldValue +import com.navi.ap.utils.injector.PathInjector +import com.navi.common.uitron.model.action.FillApiData +import com.navi.uitron.model.data.ActionDetails +import com.navi.uitron.model.data.UiTronAction +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.model.ui.BaseProperty +import kotlinx.parcelize.Parcelize + +@Parcelize +data class UpdateDataViaHandleAction(val dataList: List? = null, val viewDataList: List? = null) : UiTronAction() { + override suspend fun manageAction(actionDetails: ActionDetails) { + val action = actionDetails.uiTronAction as UpdateDataViaHandleAction + val map = getResolvedFieldValue(dataList, actionDetails.handle) + action.viewDataList?.forEach { + val updatedUiTronData = PathInjector>().injectData(it.uiTronData, map) + actionDetails.handle[it.layoutId + BaseProperty.DATA_SUFFIX] = updatedUiTronData + } + } + + + @Parcelize + data class ViewData( + val layoutId: String? = null, + val uiTronData: UiTronData? = null + ) : Parcelable +} diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/models/lambdamodels/BankDataResponse.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/models/lambdamodels/BankDataResponse.kt index 55a3b3fd6d..3e7ddb261a 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/models/lambdamodels/BankDataResponse.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/models/lambdamodels/BankDataResponse.kt @@ -19,11 +19,9 @@ data class BankDataResponse( data class Bank( @SerializedName("name") val name: String? = null, @SerializedName("code") val code: String? = null, - @SerializedName("message") val message: String? = null, - @SerializedName("serviceable") val serviceable: Boolean = true, + @SerializedName("suggested") val suggested: Boolean = true, @SerializedName("title") val title: String? = null, @SerializedName("iconUrl") val iconUrl: String? = null, - @SerializedName("aaFipId") val fipId: String? = null, - @SerializedName("digitapInstitutionId") val digitapInstitutionId: String? = null + @SerializedName("thirdPartyServiceProviders") val thirdPartyServiceProviders: List? = null ) : Parcelable } diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/models/lambdamodels/FinarkeinData.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/models/lambdamodels/FinarkeinData.kt index 45fad3489b..23f2035fe9 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/models/lambdamodels/FinarkeinData.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/models/lambdamodels/FinarkeinData.kt @@ -5,19 +5,21 @@ import com.google.gson.annotations.SerializedName import kotlinx.parcelize.Parcelize @Parcelize -data class FinarkeinConsentResponse( - @SerializedName("consent_handle") val consentHandle: String? = null, - @SerializedName("redirect_url") val webViewBaseUrl: String? = null, - @SerializedName("customer_reference_id") val customerReferenceId: String? = null, - @SerializedName("fip_id") val fipId: String? = null, - @SerializedName("phone_number") val phoneNumber: String? = null -) : Parcelable +data class ConsentResponse( + @SerializedName("fipToken") val fipToken: String? = null, + @SerializedName("consent") val consent: Consent? = null +) : Parcelable { + @Parcelize + data class Consent( + @SerializedName("consent_handle") val consentHandle: String? = null, + @SerializedName("redirect_url") val webViewBaseUrl: String? = null, + @SerializedName("customer_reference_id") val customerReferenceId: String? = null, + @SerializedName("fip_id") val fipId: String? = null, + @SerializedName("phone_number") val phoneNumber: String? = null + ) : Parcelable +} -data class FinarkeinConsentRequest( - @SerializedName("phone_number") val phoneNumber: String? = null, - @SerializedName("fip_id") val fipId: String? = null, - @SerializedName("service_provider") val serviceProvider: String? = "FINARKEIN", - @SerializedName("initiated_by") val initiatedBy: String? +data class ConsentRequest( + @SerializedName("service_provider") val serviceProvider: String? = null, + @SerializedName("bank_name") val bankName: String? = null ) - -data class FinarkeinSessionResponse(@SerializedName("session_id") val sessionId: String? = null) diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicColumnWidget.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicColumnWidget.kt index ca46757316..334caa636a 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicColumnWidget.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicColumnWidget.kt @@ -32,14 +32,15 @@ class DynamicColumnWidget { LaunchedEffect(listData.value) { viewModel.getWidgetList(widget, listData.value, widgetListState) } - - LazyColumn(modifier = Modifier.heightIn(columnWidgetData?.minColumnHeight?.dp ?: MIN_SIZE.dp, columnWidgetData?.maxColumnHeight?.dp ?: MAX_SIZE.dp)) { - items (widgetListState.value.size) { index -> - val widgetView = widgetListState.value[index] - widgetView.widgetData?.parentComposeView?.let { UiTronRenderer(widgetView.widgetData.data, viewModel).Render(composeViews = it) } - columnWidgetData?.dividerProperty?.let { - if (index != widgetListState.value.size - 1) { - DividerRenderer().Render(property = it, null, viewModel, null) + if(listData.value?.isNotEmpty() == true){ + LazyColumn(modifier = Modifier.heightIn(columnWidgetData?.minColumnHeight?.dp ?: MIN_SIZE.dp, columnWidgetData?.maxColumnHeight?.dp ?: MAX_SIZE.dp)) { + items (widgetListState.value.size) { index -> + val widgetView = widgetListState.value[index] + widgetView.widgetData?.parentComposeView?.let { UiTronRenderer(widgetView.widgetData.data, viewModel).Render(composeViews = it) } + columnWidgetData?.dividerProperty?.let { + if (index != widgetListState.value.size - 1) { + DividerRenderer().Render(property = it, null, viewModel, null) + } } } } diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicGridWidget.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicGridWidget.kt index b9a4671764..c3c5b6f3c3 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicGridWidget.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicGridWidget.kt @@ -42,51 +42,48 @@ class DynamicGridWidget { } val modifier = Modifier.setPadding(gridWidgetData?.padding).heightIn(gridWidgetData?.minGridSize?.dp ?: MIN_SIZE.dp, gridWidgetData?.maxGridSize?.dp ?: MAX_SIZE.dp) - if (gridWidgetData?.orientation == LazyGridProperty.ORIENTATION_HORIZONTAL) { - LazyHorizontalGrid( - modifier = modifier, - rows = if (gridWidgetData.gridCell?.gridType == LazyGridProperty.GRID_TYPE_ADAPTIVE) { - GridCells.Adaptive( - (if ((gridWidgetData.gridCell.minSize ?: MIN_GRID_CELL_SIZE) > 0) { - gridWidgetData.gridCell.minSize ?: MIN_GRID_CELL_SIZE - } else { - MIN_GRID_CELL_SIZE - }).dp - ) - } else { - GridCells.Fixed(gridWidgetData.gridCell?.count ?: MIN_GRID_CELL_COUNT) - }, - userScrollEnabled = true, - content = { - getContent(viewModel = viewModel, widgetListState = widgetListState) - }, - horizontalArrangement = Arrangement.setHorizontalArrangement(arrangementData = gridWidgetData.horizontalArrangementData), - verticalArrangement = Arrangement.setVerticalArrangement(arrangementData = gridWidgetData.verticalArrangementData) - ) - } else { - LazyVerticalGrid( - modifier = modifier, - columns = if (gridWidgetData?.gridCell?.gridType == LazyGridProperty.GRID_TYPE_ADAPTIVE) { - GridCells.Adaptive( - (if ((gridWidgetData.gridCell.minSize ?: MIN_GRID_CELL_SIZE) > 0) { - gridWidgetData.gridCell.minSize ?: MIN_GRID_CELL_SIZE - } else { - MIN_GRID_CELL_SIZE - }).dp - ) - } else { - GridCells.Fixed(gridWidgetData?.gridCell?.count ?: MIN_GRID_CELL_COUNT) - }, - userScrollEnabled = true, - content = { - getContent(viewModel = viewModel, widgetListState = widgetListState) - }, - horizontalArrangement = Arrangement.setHorizontalArrangement(arrangementData = gridWidgetData?.horizontalArrangementData), - verticalArrangement = Arrangement.setVerticalArrangement(arrangementData = gridWidgetData?.verticalArrangementData) - ) + if(listData.value?.isNotEmpty() == true){ + if (gridWidgetData?.orientation == LazyGridProperty.ORIENTATION_HORIZONTAL) { + LazyHorizontalGrid( + modifier = modifier, + rows = getGridCells(gridWidgetData), + userScrollEnabled = true, + content = { + getContent(viewModel = viewModel, widgetListState = widgetListState) + }, + horizontalArrangement = Arrangement.setHorizontalArrangement(arrangementData = gridWidgetData.horizontalArrangementData), + verticalArrangement = Arrangement.setVerticalArrangement(arrangementData = gridWidgetData.verticalArrangementData) + ) + } else { + LazyVerticalGrid( + modifier = modifier, + columns = getGridCells(gridWidgetData), + userScrollEnabled = true, + content = { + getContent(viewModel = viewModel, widgetListState = widgetListState) + }, + horizontalArrangement = Arrangement.setHorizontalArrangement(arrangementData = gridWidgetData?.horizontalArrangementData), + verticalArrangement = Arrangement.setVerticalArrangement(arrangementData = gridWidgetData?.verticalArrangementData) + ) + } } } + @Composable + private fun getGridCells( + gridWidgetData: DynamicGridWidgetData? + ) = if (gridWidgetData?.gridCell?.gridType == LazyGridProperty.GRID_TYPE_ADAPTIVE) { + GridCells.Adaptive( + (if ((gridWidgetData.gridCell.minSize ?: MIN_GRID_CELL_SIZE) > 0) { + gridWidgetData.gridCell.minSize ?: MIN_GRID_CELL_SIZE + } else { + MIN_GRID_CELL_SIZE + }).dp + ) + } else { + GridCells.Fixed(gridWidgetData?.gridCell?.count ?: MIN_GRID_CELL_COUNT) + } + fun LazyGridScope.getContent(viewModel: LambdaVM, widgetListState: State>>) { items(widgetListState.value.size) { index -> val widgetView = widgetListState.value[index] diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicRowWidget.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicRowWidget.kt index be10147c24..c3ba7e91ae 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicRowWidget.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/renderer/DynamicRowWidget.kt @@ -27,14 +27,15 @@ class DynamicRowWidget { LaunchedEffect(listData.value) { viewModel.getWidgetList(widget, listData.value, widgetListState) } - - LazyRow { - items(widgetListState.value.size) { index -> - val widgetView = widgetListState.value[index] - widgetView.widgetData?.parentComposeView?.let { UiTronRenderer(widgetView.widgetData.data, viewModel).Render(composeViews = it) } - rowWidgetData?.dividerProperty?.let { - if (index != widgetListState.value.size - 1) { - DividerRenderer().Render(property = it, null, viewModel, null) + if(listData.value?.isNotEmpty() == true){ + LazyRow { + items(widgetListState.value.size) { index -> + val widgetView = widgetListState.value[index] + widgetView.widgetData?.parentComposeView?.let { UiTronRenderer(widgetView.widgetData.data, viewModel).Render(composeViews = it) } + rowWidgetData?.dividerProperty?.let { + if (index != widgetListState.value.size - 1) { + DividerRenderer().Render(property = it, null, viewModel, null) + } } } } diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/repository/LambdaRepository.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/repository/LambdaRepository.kt index 4bec4063f8..ca0e51381f 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/repository/LambdaRepository.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/repository/LambdaRepository.kt @@ -9,9 +9,9 @@ package com.navi.ap.common.repository import com.navi.ap.common.models.TelcoResendOtpRequest import com.navi.ap.common.models.lambdamodels.ApplyLoanResponse -import com.navi.ap.common.models.lambdamodels.FinarkeinConsentRequest -import com.navi.ap.common.models.lambdamodels.FinarkeinConsentResponse -import com.navi.ap.common.models.lambdamodels.FinarkeinSessionResponse +import com.navi.ap.common.models.lambdamodels.BankDataResponse +import com.navi.ap.common.models.lambdamodels.ConsentRequest +import com.navi.ap.common.models.lambdamodels.ConsentResponse import com.navi.ap.common.models.lambdamodels.OfferDetails import com.navi.ap.common.models.lambdamodels.RPDPaymentMethodDetails import com.navi.ap.common.models.lambdamodels.RPDTokenData @@ -93,31 +93,27 @@ open class LambdaRepository(val retrofitService: RetrofitService = retrofitServi return apiResponseCallback(response = response, apiTag = ApiType.LambdaApiAction.name) } - suspend fun fetchFinarkeinConsentData( - finarkeinConsentRequest: FinarkeinConsentRequest - ): ApRepoResult { - val response = - retrofitService() - .fetchFinarkeinConsentData(finarkeinConsentRequest = finarkeinConsentRequest) + suspend fun fetchConsentData(serviceProvider: String, consentRequest: ConsentRequest): ApRepoResult { + val response = retrofitService().fetchConsentData(serviceProvider = serviceProvider, consentRequest = consentRequest) logApEvent( Pair( RESULT, "${response.body()?.errors} | ${response.body()?.genericErrorBottomSheetFields}" ), - Pair(METHOD_NAME, ::fetchFinarkeinConsentData.name), + Pair(METHOD_NAME, ::fetchConsentData.name), Pair(STATUS_CODE, response.code().toString()) ) return apiResponseCallback(response) } - suspend fun fetchFinarkeinAuthToken(): ApRepoResult { - val response = retrofitService().fetchFinarkeinAuthToken() + suspend fun fetchAllBanks(query: String, flowType: String): ApRepoResult { + val response = retrofitService().fetchAllBanks(query, flowType) logApEvent( Pair( RESULT, "${response.body()?.errors} | ${response.body()?.genericErrorBottomSheetFields}" ), - Pair(METHOD_NAME, ::fetchFinarkeinAuthToken.name), + Pair(METHOD_NAME, ::fetchAllBanks.name), Pair(STATUS_CODE, response.code().toString()) ) return apiResponseCallback(response) diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/sdk/helper/FinarkeinHelper.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/sdk/helper/FinarkeinHelper.kt index 8dbf10de2c..0366d4087d 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/sdk/helper/FinarkeinHelper.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/sdk/helper/FinarkeinHelper.kt @@ -8,9 +8,7 @@ package com.navi.ap.common.sdk.helper import androidx.activity.compose.ManagedActivityResultLauncher -import com.navi.ap.common.models.lambdamodels.FinarkeinConsentResponse -import com.navi.ap.common.viewmodel.LambdaVM -import com.navi.common.uitron.model.action.ThirdPartySdkAction +import com.navi.ap.common.models.lambdamodels.ConsentResponse import io.finarkein.anubhav.configuration.AnubhavConfiguration import io.finarkein.anubhav.configuration.Auth import io.finarkein.anubhav.constants.AnubhavConstants @@ -18,33 +16,31 @@ import io.finarkein.anubhav.result.AnubhavResult class FinarkeinHelper( private val resultLauncher: ManagedActivityResultLauncher?, - val lambdaVM: LambdaVM, - finarkeinSDKAction: ThirdPartySdkAction ) { - fun openFinarkein(finarkeinConsentResponse: FinarkeinConsentResponse) { + fun openFinarkein(consentResponse: ConsentResponse) { val extraParams: Map = mapOf( AnubhavConstants.SHOW_EXIT_TRANSITION to AnubhavConstants.TRUE, AnubhavConstants.REDIRECTION_TIME_IN_MILLISECONDS to REDIRECTION_WAITING_TIME_IN_MILLISECONDS.toString() ) - val inputs = getWebViewConfiguration(extraParams, finarkeinConsentResponse) + val inputs = getWebViewConfiguration(extraParams, consentResponse) resultLauncher?.launch(inputs) } private fun getWebViewConfiguration( extraParams: Map, - finarkeinConsentResponse: FinarkeinConsentResponse + consentResponse: ConsentResponse ): AnubhavConfiguration { return AnubhavConfiguration.withWebViewUrl( - finarkeinConsentResponse.webViewBaseUrl.orEmpty() + consentResponse.consent?.webViewBaseUrl.orEmpty() ) - .requestId(finarkeinConsentResponse.consentHandle.orEmpty()) + .requestId(consentResponse.consent?.consentHandle.orEmpty()) .auth( object : Auth { override suspend fun token(): String { - return lambdaVM.fetchFinarkeinAuthToken().orEmpty() + return consentResponse.fipToken.orEmpty() } } ) diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/ApplicationPlatformVM.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/ApplicationPlatformVM.kt index d7d2981549..7d8c497b5f 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/ApplicationPlatformVM.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/ApplicationPlatformVM.kt @@ -9,13 +9,22 @@ package com.navi.ap.common.viewmodel import android.os.Bundle import androidx.lifecycle.viewModelScope -import com.navi.ap.common.models.* +import com.navi.ap.common.models.ApBottomSheetDefinitionState +import com.navi.ap.common.models.ApCtaResponse +import com.navi.ap.common.models.ApGetNextCtaResponse +import com.navi.ap.common.models.ApScreenDefinitionState +import com.navi.ap.common.models.ApScreenDefinitionStructure +import com.navi.ap.common.models.ApplicationIdState +import com.navi.ap.common.models.GetCtaState +import com.navi.ap.common.models.WidgetModelDefinition import com.navi.ap.common.repository.ApplicationPlatformRepository import com.navi.ap.network.model.ApplicationHashRequestBody import com.navi.ap.network.model.ApplicationRequestBody import com.navi.ap.network.model.FillApplicationRequestBody import com.navi.ap.network.model.getBottomSheetStructure import com.navi.ap.network.model.getHideBottomSheetAction +import com.navi.ap.utils.PeriodicTaskScheduler +import com.navi.ap.utils.bundleToMap import com.navi.ap.utils.constants.APP_ACTION import com.navi.ap.utils.constants.APP_PLATFORM_APPLICATION_ID import com.navi.ap.utils.constants.APP_PLATFORM_APPLICATION_TYPE @@ -30,8 +39,6 @@ import com.navi.ap.utils.constants.ApNavigationActions import com.navi.ap.utils.constants.CURRENT_SCREEN_ID import com.navi.ap.utils.constants.DEFAULT_SOURCE_SCREEN import com.navi.ap.utils.constants.NEXT_SCREEN_CTA -import com.navi.ap.utils.PeriodicTaskScheduler -import com.navi.ap.utils.bundleToMap import com.navi.ap.utils.constants.REASON import com.navi.ap.utils.constants.SUBMIT_EVENT_HASH_EVENT import com.navi.ap.utils.toMap @@ -45,7 +52,7 @@ import com.navi.common.constants.API_SUCCESS_CODE import com.navi.common.network.ApiConstants import com.navi.common.network.models.GenericErrorBottomSheetFields import com.navi.common.uitron.model.action.AnalyticsActionV2 -import com.navi.common.uitron.model.action.AnalyticsActionV2.* +import com.navi.common.uitron.model.action.AnalyticsActionV2.PredefinedEventProperty import com.navi.common.utils.Constants.LOGOUT import com.navi.common.viewmodel.BaseVM import com.navi.uitron.model.UiTronResponse @@ -128,6 +135,9 @@ constructor(private val repository: ApplicationPlatformRepository) : BaseVM() { bottomSheetMetaData = bottomSheetDefinitionStructure.screenData?.metaData ?: mapOf() viewModelScope.launch { bottomSheetDefinitionStructure.let { + it.screenData?.screenStructure?.content?.widgets?.forEach { + handleActions(it.widgetRenderActions?.preRenderAction) + } _bottomSheetStructure.emit(ApBottomSheetDefinitionState.Success(it)) } } diff --git a/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/LambdaVM.kt b/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/LambdaVM.kt index 1fdd03d738..92d8b0e668 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/LambdaVM.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/LambdaVM.kt @@ -9,6 +9,7 @@ package com.navi.ap.common.viewmodel import androidx.compose.runtime.MutableState import androidx.lifecycle.viewModelScope +import com.navi.ap.common.handler.getIncomeVerificationAvailableSDK import com.navi.ap.common.models.ApScreenDefinitionState import com.navi.ap.common.models.ApScreenDefinitionStructure import com.navi.ap.common.models.ApplyLoanState @@ -17,11 +18,14 @@ import com.navi.ap.common.models.LambdaState import com.navi.ap.common.models.TelcoResendOtpRequest import com.navi.ap.common.models.WidgetModelDefinition import com.navi.ap.common.models.lambdamodels.BankDataResponse -import com.navi.ap.common.models.lambdamodels.FinarkeinConsentRequest +import com.navi.ap.common.models.lambdamodels.ConsentRequest import com.navi.ap.common.models.lambdamodels.OfferDetails import com.navi.ap.common.repository.LambdaRepository import com.navi.ap.utils.appendIndexToDataKeys import com.navi.ap.utils.appendIndexToWidgetData +import com.navi.ap.utils.constants.ALL_BANKS_LIST +import com.navi.ap.utils.constants.BANKS_FLOW_TYPE +import com.navi.ap.utils.constants.BANK_SEARCH_QUERY import com.navi.ap.utils.constants.FETCH_OFFER_DETAILS_SELECTED_LOAN_AMOUNT import com.navi.ap.utils.constants.FETCH_OFFER_DETAILS_SELECTED_TENURE import com.navi.ap.utils.constants.FINARKEIN_CONSENT_DATA @@ -29,6 +33,7 @@ import com.navi.ap.utils.constants.LAST_SELECTED_TENURE_PILL_INDEX import com.navi.ap.utils.constants.LOAN_APPLICATION_V2 import com.navi.ap.utils.constants.LOAN_SLIDER import com.navi.ap.utils.constants.OFFER_REFERENCE_ID +import com.navi.ap.utils.constants.PREFERRED_BANKS_LIST import com.navi.ap.utils.constants.RPD_PAYMENT_METHOD_ID import com.navi.ap.utils.constants.RPD_PAYMENT_METHOD_TOKEN import com.navi.ap.utils.constants.RPD_PAYMENT_METHOD_UPI_LINK_KEY @@ -39,13 +44,14 @@ import com.navi.ap.utils.constants.SELECTED_TENURE_PILL_INDEX import com.navi.ap.utils.constants.TRUE import com.navi.ap.utils.getGsonBuilders import com.navi.ap.utils.injector.PathInjector +import com.navi.ap.utils.jsonToType import com.navi.ap.utils.toJson import com.navi.base.model.CtaData import com.navi.base.utils.BaseUtils import com.navi.base.utils.isNotNull -import com.navi.common.model.ModuleNameV2 import com.navi.common.uitron.model.action.LambdaApiAction import com.navi.common.utils.deviceId +import com.navi.common.utils.toJsonObject import com.navi.naviwidgets.utils.FORWARD_SLASH import com.navi.uitron.model.UiTronResponse import getInputId @@ -92,7 +98,7 @@ open class LambdaVM constructor(val repository: LambdaRepository) : } } - fun fetchOfferDetails(resolvedValues: MutableMap) { + fun fetchOfferDetails(resolvedValues: MutableMap) { viewModelScope.launch(Dispatchers.IO) { if (_clonedScreenDefinitionState.value == null) { _clonedScreenDefinitionState.value = getScreenStructurePreRenderState() @@ -163,7 +169,7 @@ open class LambdaVM constructor(val repository: LambdaRepository) : } // TODO : Need to remove it when bankDetails will be powered through AP - fun applyLoan(resolvedValues: MutableMap) { + fun applyLoan(resolvedValues: MutableMap) { viewModelScope.launch(Dispatchers.Default) { _lambdaState.value = LambdaState.Loading @@ -212,17 +218,13 @@ open class LambdaVM constructor(val repository: LambdaRepository) : } } - fun fetchFinarkeinConsentData(lambdaApiAction: LambdaApiAction) { + fun fetchConsentData(lambdaApiAction: LambdaApiAction) { viewModelScope.launch(Dispatchers.IO) { _lambdaState.value = LambdaState.Loading - val bank = handle.get(SELECTED_BANK.getInputId()) as? BankDataResponse.Bank - val finarkeinConsentRequest = - FinarkeinConsentRequest( - phoneNumber = BaseUtils.getPhoneNumber(), - fipId = bank?.fipId, - initiatedBy = ModuleNameV2.PL.name - ) - val lambdaResponse = repository.fetchFinarkeinConsentData(finarkeinConsentRequest) + val bank = handle.get(SELECTED_BANK.getInputId()).toJsonObject()?.jsonToType() + val availableServiceProvider = bank?.thirdPartyServiceProviders?.getIncomeVerificationAvailableSDK() + val consentRequest = ConsentRequest(bankName = bank?.name, serviceProvider = availableServiceProvider) + val lambdaResponse = repository.fetchConsentData(availableServiceProvider.orEmpty(), consentRequest) _lambdaState.value = when { lambdaResponse.data.isNotNull() -> { @@ -245,26 +247,32 @@ open class LambdaVM constructor(val repository: LambdaRepository) : } } - suspend fun fetchFinarkeinAuthToken(): String? { - _lambdaState.value = LambdaState.Loading - val lambdaResponse = repository.fetchFinarkeinAuthToken() - _lambdaState.value = - when { - lambdaResponse.data.isNotNull() -> { - LambdaState.Success(LambdaResponseType()) + fun fetchAllBanks(resolvedValues: MutableMap) { + viewModelScope.launch(Dispatchers.IO) { + val query = resolvedValues[BANK_SEARCH_QUERY]?.toString().orEmpty() + val flowType = resolvedValues[BANKS_FLOW_TYPE]?.toString().orEmpty() + val preferredBanksKey = resolvedValues[PREFERRED_BANKS_LIST]?.toString().orEmpty() + val allBanksKey = resolvedValues[ALL_BANKS_LIST]?.toString().orEmpty() + val lambdaResponse = repository.fetchAllBanks(query, flowType) + _lambdaState.value = + when { + lambdaResponse.data.isNotNull() -> { + handle[preferredBanksKey] = lambdaResponse.data?.preferredBanks + handle[allBanksKey] = lambdaResponse.data?.allSupportedBanks + LambdaState.Success(LambdaResponseType()) + } + lambdaResponse.errorBottomSheetStructure.isNotNull() -> { + LambdaState.Error( + lambdaResponse.statusCode, + lambdaResponse.errorBottomSheetStructure, + lambdaResponse.genericErrorBottomSheetFields + ) + } + else -> { + LambdaState.Nothing + } } - lambdaResponse.errorBottomSheetStructure.isNotNull() -> { - LambdaState.Error( - lambdaResponse.statusCode, - lambdaResponse.errorBottomSheetStructure, - lambdaResponse.genericErrorBottomSheetFields - ) - } - else -> { - LambdaState.Nothing - } - } - return lambdaResponse.data?.sessionId + } } fun fetchRpdToken(viewModel: LambdaVM, lambdaApiAction: LambdaApiAction) { diff --git a/navi-ap/src/main/kotlin/com/navi/ap/network/retrofit/RetrofitService.kt b/navi-ap/src/main/kotlin/com/navi/ap/network/retrofit/RetrofitService.kt index f378de9b1c..99836f7e07 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/network/retrofit/RetrofitService.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/network/retrofit/RetrofitService.kt @@ -13,9 +13,9 @@ import com.navi.ap.common.models.ApGetNextCtaResponse import com.navi.ap.common.models.ApScreenDefinitionStructure import com.navi.ap.common.models.TelcoResendOtpRequest import com.navi.ap.common.models.lambdamodels.ApplyLoanResponse -import com.navi.ap.common.models.lambdamodels.FinarkeinConsentRequest -import com.navi.ap.common.models.lambdamodels.FinarkeinConsentResponse -import com.navi.ap.common.models.lambdamodels.FinarkeinSessionResponse +import com.navi.ap.common.models.lambdamodels.BankDataResponse +import com.navi.ap.common.models.lambdamodels.ConsentRequest +import com.navi.ap.common.models.lambdamodels.ConsentResponse import com.navi.ap.common.models.lambdamodels.OfferDetails import com.navi.ap.common.models.lambdamodels.RPDPaymentMethodDetails import com.navi.ap.common.models.lambdamodels.RPDTokenData @@ -111,16 +111,19 @@ interface RetrofitService { @Body offerDetails: OfferDetails? = null, ): Response> - @POST("/financial-profile/account-aggregator/finarkein/consent") - suspend fun fetchFinarkeinConsentData( + @POST("financial-profile/sdk/{serviceProvider}/initiate") + suspend fun fetchConsentData( @Header("X-Target") target: String = ModuleName.LE.name, - @Body finarkeinConsentRequest: FinarkeinConsentRequest - ): Response> + @Path("serviceProvider") serviceProvider: String, + @Body consentRequest: ConsentRequest + ): Response> - @GET("/financial-profile/account-aggregator/finarkein/session") - suspend fun fetchFinarkeinAuthToken( - @Header("X-Target") target: String = ModuleName.LE.name, - ): Response> + @GET("/financial-profile/banks/v2") + suspend fun fetchAllBanks( + @Query("startsWith") query: String, + @Query("flowType") flowType: String, + @Header("X-Target") header: String = ModuleName.LE.name + ): Response> @GET("/loan-origination-manager/reverse-penny-drop/token") suspend fun fetchRpdToken( diff --git a/navi-ap/src/main/kotlin/com/navi/ap/utils/Ext.kt b/navi-ap/src/main/kotlin/com/navi/ap/utils/Ext.kt index 83e124daca..f6a4070b87 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/utils/Ext.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/utils/Ext.kt @@ -7,6 +7,7 @@ package com.navi.ap.utils +import com.google.gson.reflect.TypeToken import com.navi.analytics.utils.NaviTrackEvent import com.navi.ap.network.retrofit.ApRetrofitProvider import com.navi.ap.network.retrofit.RetrofitService @@ -21,6 +22,7 @@ import com.navi.common.utils.log import okhttp3.RequestBody import okio.Buffer import java.io.IOException +import org.json.JSONObject fun CtaData?.toMap() = this?.parameters?.associate { it.key.orEmpty() to it.value.orEmpty() } @@ -61,4 +63,12 @@ fun RequestBody.bodyToString(): String? { e.log() EMPTY } +} + +inline fun JSONObject.jsonToType(): U? { + return try { + getGsonBuilders().fromJson(toString(), object : TypeToken() {}.type) + } catch (e: Exception){ + null + } } \ No newline at end of file diff --git a/navi-ap/src/main/kotlin/com/navi/ap/utils/Utils.kt b/navi-ap/src/main/kotlin/com/navi/ap/utils/Utils.kt index 61894dcd18..742c77d741 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/utils/Utils.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/utils/Utils.kt @@ -13,15 +13,16 @@ import android.view.inputmethod.InputMethodManager import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.platform.SoftwareKeyboardController import androidx.core.content.getSystemService +import androidx.lifecycle.SavedStateHandle import coil.imageLoader import coil.request.CachePolicy import coil.request.ImageRequest import com.google.gson.Gson import com.google.gson.GsonBuilder import com.jayway.jsonpath.JsonPath +import com.navi.ap.common.deserializer.ApUiTronActionDeserializer import com.navi.ap.common.deserializer.CustomUiTronDataDeserializer import com.navi.ap.common.models.ApScreenDefinitionStructure -import com.navi.ap.common.viewmodel.LambdaVM import com.navi.ap.network.di.APNetworkModule.providesDeserializer import com.navi.ap.network.di.APNetworkModule.providesSerializer import com.navi.ap.screens.genericscreen.vm.ApGenericScreenVM @@ -32,6 +33,7 @@ import com.navi.common.uitron.model.action.FillApiData import com.navi.common.uitron.model.action.SourceType import com.navi.common.utils.registerUiTronDeSerializers import com.navi.uitron.model.UiTronResponse +import com.navi.uitron.model.data.UiTronAction import com.navi.uitron.model.data.UiTronData import getInputId import isNull @@ -52,6 +54,7 @@ fun getGsonBuilders(): Gson = providesDeserializer() fun GsonBuilder.registerApUiTronDeSerializers(): GsonBuilder { return registerUiTronDeSerializers().apply { registerTypeAdapter(UiTronData::class.java, CustomUiTronDataDeserializer()) + registerTypeAdapter(UiTronAction::class.java, ApUiTronActionDeserializer()) } } @@ -129,27 +132,32 @@ suspend fun cacheImages(uiTronResponse: UiTronResponse?) = withContext(Dispatche /** Use this to extract value of field and result will be map */ fun getResolvedFieldValue( fields: List?, - viewModel: LambdaVM, -): MutableMap { - val map = mutableMapOf() - + handle: SavedStateHandle +): MutableMap { + val map = mutableMapOf() fields ?.filter { it.name.isNotNull() } ?.forEach { item -> + val name = "${item.name.orEmpty()}${item.keySuffix.orEmpty()}" when (item.source) { SourceType.WIDGET_OUTPUT.name -> { fields.forEach { item -> - val layoutId: String? = viewModel.handle[item.name.orEmpty()] - val output: String? = viewModel.handle[layoutId.getInputId()] + val layoutId: String? = handle[name] + val output: String? = handle[layoutId.getInputId()] map[item.sourceProperty.orEmpty()] = output.orEmpty() } } SourceType.HANDLE.name -> { - val output: String? = viewModel.handle[item.name.orEmpty()] + val output: String? = handle[name] map[item.sourceProperty.orEmpty()] = output.orEmpty() } SourceType.PRE_DEFINED.name -> { - map[item.name.orEmpty()] = item.value.orEmpty() + map[name] = item.value.orEmpty() + } + SourceType.HANDLE_OBJECT.name -> { + val obj: Any? = handle[name] + val output = readJsonPath(obj.toJson(), item.jsonPath.orEmpty()) + map[item.sourceProperty.orEmpty()] = output } else -> Unit } diff --git a/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/EnumsConstant.kt b/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/EnumsConstant.kt index 8c916e6538..b978c1ff33 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/EnumsConstant.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/EnumsConstant.kt @@ -47,7 +47,8 @@ enum class LambdaType { TELCO_RESEND_OTP, LOAN_OFFER_DETAILS, APPLY_LOAN, - FETCH_FINARKEIN_CONSENT_DATA, FETCH_RPD_TOKEN, - FETCH_RPD_PAYMENT_METHOD_DETAILS + FETCH_RPD_PAYMENT_METHOD_DETAILS, + FETCH_CONSENT_DATA, + FETCH_BANKS } diff --git a/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/LambdaConstants.kt b/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/LambdaConstants.kt index 7f0d0c08c0..402d9292c6 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/LambdaConstants.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/LambdaConstants.kt @@ -22,3 +22,8 @@ const val FINARKEIN_CONSENT_DATA = "finarkein_consent_data" const val RPD_PAYMENT_METHOD_TOKEN = "rpdPaymentMethodToken" const val RPD_PAYMENT_METHOD_ID = "rpdPaymentMethodId" const val RPD_PAYMENT_METHOD_UPI_LINK_KEY = "upiLink" +const val ALL_BANKS_LIST = "all_banks_list" +const val PREFERRED_BANKS_LIST = "preferred_banks_list" +const val BANK_SEARCH_QUERY = "bank_search_query" +const val BANKS_FLOW_TYPE = "banks_flow_type" + diff --git a/navi-ap/src/main/kotlin/com/navi/ap/utils/injector/PathInjector.kt b/navi-ap/src/main/kotlin/com/navi/ap/utils/injector/PathInjector.kt index 1d9f77c598..385dc54ce2 100644 --- a/navi-ap/src/main/kotlin/com/navi/ap/utils/injector/PathInjector.kt +++ b/navi-ap/src/main/kotlin/com/navi/ap/utils/injector/PathInjector.kt @@ -45,7 +45,7 @@ class PathInjector() : Injector() { if (placeHolderKeyName.startsWith('$')) { val jsonPath = placeHolderKeyName.trim() val placeHolderValue = readJsonPath(jsonResponse.toString(), jsonPath) - currentObject.put(key, placeHolderValue) + currentObject.put(key, JSONArray(placeHolderValue.toString())) } } JSON_TYPE.JSONObject -> { diff --git a/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronActionDeserializer.kt b/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronActionDeserializer.kt index ff262bd302..5cae805f1d 100644 --- a/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronActionDeserializer.kt +++ b/navi-common/src/main/java/com/navi/common/uitron/deserializer/UiTronActionDeserializer.kt @@ -25,7 +25,7 @@ import com.navi.uitron.model.data.UiTronAction import com.navi.uitron.model.data.UiTronActionType import java.lang.reflect.Type -class UiTronActionDeserializer : BaseUiTronActionDeserializer() { +open class UiTronActionDeserializer : BaseUiTronActionDeserializer() { override fun deserialize( json: JsonElement?, diff --git a/navi-common/src/main/java/com/navi/common/uitron/model/action/ThirdPartySdkAction.kt b/navi-common/src/main/java/com/navi/common/uitron/model/action/ThirdPartySdkAction.kt index 7fa4bea835..56576ebb4d 100644 --- a/navi-common/src/main/java/com/navi/common/uitron/model/action/ThirdPartySdkAction.kt +++ b/navi-common/src/main/java/com/navi/common/uitron/model/action/ThirdPartySdkAction.kt @@ -28,11 +28,9 @@ open class ThirdPartySdkAction( } } -data class FinarkeinSDKAction( - @SerializedName("consentDataInputKey") val consentDataInputKey: String? = null -) : ThirdPartySdkAction() +class FinarkeinSDKAction() : ThirdPartySdkAction() - class FinoramicSDKAction(): ThirdPartySdkAction() +class FinoramicSDKAction(): ThirdPartySdkAction() enum class SDKType { FINORAMIC, diff --git a/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt b/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt index 46748911e4..7dea6bbed7 100644 --- a/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt +++ b/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt @@ -30,7 +30,8 @@ data class FillApiData( @SerializedName("source") val source: String? = null, @SerializedName("sourceProperty") val sourceProperty: String? = null, @SerializedName("value") val value: String? = null, - @SerializedName("jsonPath") val jsonPath: String? = null + @SerializedName("jsonPath") val jsonPath: String? = null, + @SerializedName("keySuffix") val keySuffix: String? = null ) : Parcelable open class LambdaApiAction( diff --git a/navi-common/src/main/java/com/navi/common/uitron/model/action/UpdateStateHandleActionV2.kt b/navi-common/src/main/java/com/navi/common/uitron/model/action/UpdateStateHandleActionV2.kt index fda6e0120c..f3fcab2144 100644 --- a/navi-common/src/main/java/com/navi/common/uitron/model/action/UpdateStateHandleActionV2.kt +++ b/navi-common/src/main/java/com/navi/common/uitron/model/action/UpdateStateHandleActionV2.kt @@ -12,6 +12,7 @@ import com.google.gson.annotations.SerializedName import com.navi.uitron.model.data.ActionDetails import com.navi.uitron.model.data.UiTronAction import kotlinx.parcelize.Parcelize +import kotlinx.parcelize.RawValue @Parcelize data class UpdateStateHandleActionV2( @@ -27,7 +28,7 @@ data class UpdateStateHandleActionV2( @Parcelize data class HandleData( val key: String? = null, - var value: String? = null, + var value: @RawValue Any? = null, val keySuffix: String? = null ) : Parcelable } diff --git a/navi-common/src/main/java/com/navi/common/uitron/util/ApActionType.kt b/navi-common/src/main/java/com/navi/common/uitron/util/ApActionType.kt index c7280eac0a..8f95425d69 100644 --- a/navi-common/src/main/java/com/navi/common/uitron/util/ApActionType.kt +++ b/navi-common/src/main/java/com/navi/common/uitron/util/ApActionType.kt @@ -15,5 +15,6 @@ enum class ApActionType { ValidateMultipleWidgetsAction, ExecuteActionsCorrespondingToKey, AnalyticsActionV2, - LaunchIntentAction + LaunchIntentAction, + UpdateDataViaHandleAction }