TP-76272 | Common deserializers and serializers for home (#11994)
This commit is contained in:
@@ -11,12 +11,13 @@ import com.google.gson.JsonDeserializationContext
|
||||
import com.google.gson.JsonElement
|
||||
import com.navi.common.uitron.deserializer.CustomWidgetUiTronDataDeserializer
|
||||
import com.navi.naviwidgets.utils.VIEW_TYPE
|
||||
import com.navi.uitron.model.data.EmptyData
|
||||
import com.navi.uitron.model.data.UiTronData
|
||||
import com.naviapp.home.compose.model.ProfileHeaderWidgetData
|
||||
import com.naviapp.home.model.HomeScreenCustomWidgetType
|
||||
import com.naviapp.home.model.HomeCustomWidgetType
|
||||
import java.lang.reflect.Type
|
||||
|
||||
class CustomHomeWidgetDataDeSerializer : CustomWidgetUiTronDataDeserializer() {
|
||||
class HomeCustomWidgetDataDeSerializer : CustomWidgetUiTronDataDeserializer() {
|
||||
override fun deserialize(
|
||||
json: JsonElement?,
|
||||
typeOfT: Type?,
|
||||
@@ -26,8 +27,11 @@ class CustomHomeWidgetDataDeSerializer : CustomWidgetUiTronDataDeserializer() {
|
||||
val jsonObject = it.asJsonObject
|
||||
if (jsonObject[VIEW_TYPE] == null) return null
|
||||
return when (jsonObject[VIEW_TYPE].asString) {
|
||||
HomeScreenCustomWidgetType.PROFILE_HEADER_WIDGET.name ->
|
||||
HomeCustomWidgetType.ProfileHeaderWidget.value ->
|
||||
context?.deserialize(json, ProfileHeaderWidgetData::class.java)
|
||||
HomeCustomWidgetType.ScrollFadingWidget.value,
|
||||
HomeCustomWidgetType.RotatingView.value ->
|
||||
context?.deserialize(json, EmptyData::class.java)
|
||||
else -> super.deserialize(json, typeOfT, context)
|
||||
}
|
||||
}
|
||||
@@ -10,23 +10,27 @@ package com.naviapp.common.serializer
|
||||
import com.google.gson.JsonElement
|
||||
import com.google.gson.JsonSerializationContext
|
||||
import com.navi.common.uitron.serializer.CommonUiTronDataSerializer
|
||||
import com.navi.uitron.model.data.EmptyData
|
||||
import com.navi.uitron.model.data.UiTronData
|
||||
import com.naviapp.home.compose.model.ProfileHeaderWidgetData
|
||||
import com.naviapp.home.model.HomeScreenCustomWidgetType
|
||||
import com.naviapp.home.model.HomeCustomWidgetType
|
||||
import java.lang.reflect.Type
|
||||
|
||||
class CustomHomeWidgetDataSerializer : CommonUiTronDataSerializer() {
|
||||
class HomeCustomWidgetDataSerializer : CommonUiTronDataSerializer() {
|
||||
override fun serialize(
|
||||
src: UiTronData?,
|
||||
typeOfSrc: Type?,
|
||||
context: JsonSerializationContext?
|
||||
): JsonElement? {
|
||||
return when (src?.viewType) {
|
||||
HomeScreenCustomWidgetType.PROFILE_HEADER_WIDGET.name ->
|
||||
HomeCustomWidgetType.ProfileHeaderWidget.value ->
|
||||
context?.serialize(
|
||||
src as ProfileHeaderWidgetData,
|
||||
ProfileHeaderWidgetData::class.java
|
||||
)
|
||||
HomeCustomWidgetType.ScrollFadingWidget.value,
|
||||
HomeCustomWidgetType.RotatingView.value ->
|
||||
context?.serialize(src as EmptyData, EmptyData::class.java)
|
||||
else -> super.serialize(src, typeOfSrc, context)
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@ import com.navi.uitron.model.UiTronResponse
|
||||
import com.navi.uitron.render.UiTronRenderer
|
||||
import com.naviapp.forge.model.WidgetModelDefinition
|
||||
import com.naviapp.forge.model.WidgetTypes
|
||||
import com.naviapp.home.model.HomeScreenCustomWidgetType
|
||||
import com.naviapp.home.model.HomeCustomWidgetType
|
||||
import com.naviapp.home.viewmodel.ProfileVM
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@@ -38,9 +38,9 @@ fun ProfileScreenWidgetRenderer(
|
||||
}
|
||||
WidgetTypes.NATIVE_WIDGET.name -> {
|
||||
when (widget.widgetName) {
|
||||
HomeScreenCustomWidgetType.PROFILE_HEADER_WIDGET.name ->
|
||||
HomeCustomWidgetType.ProfileHeaderWidget.value ->
|
||||
AnimatedProfileContent(widget, viewModel, drawerState)
|
||||
HomeScreenCustomWidgetType.UPI_SETTINGS_WIDGET.name -> UPISettingSDK(drawerState)
|
||||
HomeCustomWidgetType.UpiSettingsWidget.value -> UPISettingSDK(drawerState)
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ import com.navi.common.uitron.deserializer.CommonUiTronPropertyDeserializer
|
||||
import com.navi.uitron.model.ui.BaseProperty
|
||||
import com.naviapp.home.compose.uiTron.model.viewProperties.RotatingViewProperty
|
||||
import com.naviapp.home.compose.uiTron.model.viewProperties.ScrollFadingCardProperty
|
||||
import com.naviapp.home.model.HomeScreenCustomWidgetType
|
||||
import com.naviapp.home.model.HomeCustomWidgetType
|
||||
import java.lang.reflect.Type
|
||||
|
||||
class HomeUitronPropertyDeserializer : CommonUiTronPropertyDeserializer() {
|
||||
@@ -27,10 +27,10 @@ class HomeUitronPropertyDeserializer : CommonUiTronPropertyDeserializer() {
|
||||
val jsonObject = it.asJsonObject
|
||||
if (jsonObject["viewType"] == null) return null
|
||||
return when (jsonObject["viewType"].asString) {
|
||||
HomeScreenCustomWidgetType.RotatingView.name -> {
|
||||
HomeCustomWidgetType.RotatingView.value -> {
|
||||
context?.deserialize(jsonObject, RotatingViewProperty::class.java)
|
||||
}
|
||||
HomeScreenCustomWidgetType.ScrollFadingWidget.name -> {
|
||||
HomeCustomWidgetType.ScrollFadingWidget.value -> {
|
||||
context?.deserialize(jsonObject, ScrollFadingCardProperty::class.java)
|
||||
}
|
||||
else -> super.deserialize(json, typeOfT, context)
|
||||
|
||||
@@ -13,7 +13,7 @@ import com.navi.common.uitron.serializer.CommonUiTronPropertySerializer
|
||||
import com.navi.uitron.model.ui.BaseProperty
|
||||
import com.naviapp.home.compose.uiTron.model.viewProperties.RotatingViewProperty
|
||||
import com.naviapp.home.compose.uiTron.model.viewProperties.ScrollFadingCardProperty
|
||||
import com.naviapp.home.model.HomeScreenCustomWidgetType
|
||||
import com.naviapp.home.model.HomeCustomWidgetType
|
||||
import java.lang.reflect.Type
|
||||
|
||||
class HomeUitronPropertySerializer : CommonUiTronPropertySerializer() {
|
||||
@@ -23,10 +23,10 @@ class HomeUitronPropertySerializer : CommonUiTronPropertySerializer() {
|
||||
context: JsonSerializationContext?
|
||||
): JsonElement? {
|
||||
return when (src?.viewType) {
|
||||
HomeScreenCustomWidgetType.RotatingView.name -> {
|
||||
HomeCustomWidgetType.RotatingView.value -> {
|
||||
context?.serialize(src as RotatingViewProperty, RotatingViewProperty::class.java)
|
||||
}
|
||||
HomeScreenCustomWidgetType.ScrollFadingWidget.name -> {
|
||||
HomeCustomWidgetType.ScrollFadingWidget.value -> {
|
||||
context?.serialize(
|
||||
src as ScrollFadingCardProperty,
|
||||
ScrollFadingCardProperty::class.java
|
||||
|
||||
@@ -20,7 +20,7 @@ import com.navi.uitron.render.UiTronRenderer
|
||||
import com.navi.uitron.viewmodel.UiTronViewModel
|
||||
import com.naviapp.home.compose.uiTron.model.viewProperties.RotatingViewProperty
|
||||
import com.naviapp.home.compose.uiTron.model.viewProperties.ScrollFadingCardProperty
|
||||
import com.naviapp.home.model.HomeScreenCustomWidgetType
|
||||
import com.naviapp.home.model.HomeCustomWidgetType
|
||||
|
||||
class HomeCustomUiTronRenderer(private val homeScrollState: () -> ScrollState) :
|
||||
CommonCustomUiTronRenderer() {
|
||||
@@ -33,7 +33,7 @@ class HomeCustomUiTronRenderer(private val homeScrollState: () -> ScrollState) :
|
||||
uiTronViewModel: UiTronViewModel
|
||||
) {
|
||||
when (composeView.property?.viewType) {
|
||||
HomeScreenCustomWidgetType.RotatingView.name -> {
|
||||
HomeCustomWidgetType.RotatingView.value -> {
|
||||
(composeView.property as? RotatingViewProperty)?.let {
|
||||
RotatingViewRenderer(
|
||||
childrenComposeViews = composeView.childrenViews.orEmpty(),
|
||||
@@ -53,7 +53,7 @@ class HomeCustomUiTronRenderer(private val homeScrollState: () -> ScrollState) :
|
||||
)
|
||||
}
|
||||
}
|
||||
HomeScreenCustomWidgetType.ScrollFadingWidget.name -> {
|
||||
HomeCustomWidgetType.ScrollFadingWidget.value -> {
|
||||
(composeView.property as? ScrollFadingCardProperty)?.let {
|
||||
ScrollFadingCardRenderer(
|
||||
childrenComposeViews = composeView.childrenViews.orEmpty(),
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2024 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.naviapp.home.model
|
||||
|
||||
import com.naviapp.utils.Constants.HomeCustomWidgetConstants.PROFILE_HEADER_WIDGET
|
||||
import com.naviapp.utils.Constants.HomeCustomWidgetConstants.ROTATING_VIEW
|
||||
import com.naviapp.utils.Constants.HomeCustomWidgetConstants.SCROLL_FADING_WIDGET
|
||||
import com.naviapp.utils.Constants.HomeCustomWidgetConstants.UPI_SETTINGS_WIDGET
|
||||
|
||||
enum class HomeCustomWidgetType(val value: String) {
|
||||
ProfileHeaderWidget(PROFILE_HEADER_WIDGET),
|
||||
UpiSettingsWidget(UPI_SETTINGS_WIDGET),
|
||||
RotatingView(ROTATING_VIEW),
|
||||
ScrollFadingWidget(SCROLL_FADING_WIDGET)
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2024 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.naviapp.home.model
|
||||
|
||||
enum class HomeScreenCustomWidgetType {
|
||||
PROFILE_HEADER_WIDGET,
|
||||
UPI_SETTINGS_WIDGET,
|
||||
RotatingView,
|
||||
ScrollFadingWidget
|
||||
}
|
||||
@@ -94,7 +94,8 @@ import com.naviapp.home.model.HomeCtaTypes
|
||||
import com.naviapp.home.respository.HomeRepository
|
||||
import com.naviapp.home.ui.state.HomeScreenState
|
||||
import com.naviapp.models.response.HomeFeatureResponse
|
||||
import com.naviapp.network.util.getGsonBuilderForWidgetizedResponse
|
||||
import com.naviapp.network.di.DataDeserializers
|
||||
import com.naviapp.network.di.DataSerializers
|
||||
import com.naviapp.nux.handler.NewUserExperienceHandler
|
||||
import com.naviapp.part_prepayment.PartPrePaymentActivity
|
||||
import com.naviapp.payment.activities.NaviPaymentActivity
|
||||
@@ -109,7 +110,6 @@ import com.naviapp.utils.Constants.Notification.SHOW_NOTIFICATION_COUNT
|
||||
import com.naviapp.utils.Constants.OFFER_VIEWED
|
||||
import com.naviapp.utils.LOAN_ACCOUNT_NUMBER
|
||||
import com.naviapp.utils.NOTIFICATION_PERMISSION_SHOWN
|
||||
import com.naviapp.utils.naviAppSerializerGsonBuilder
|
||||
import dagger.Lazy
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import javax.inject.Inject
|
||||
@@ -135,7 +135,8 @@ class HomeVM
|
||||
constructor(
|
||||
private val repository: HomeRepository,
|
||||
private val lottieRemoteHelper: LottieRemoteHelper,
|
||||
private val gson: Gson,
|
||||
@DataDeserializers private val dataDeserializers: Gson,
|
||||
@DataSerializers private val dataSerializers: Gson,
|
||||
private val naviCacheRepository: NaviCacheRepositoryImpl,
|
||||
private val connectivityObserver: ConnectivityObserver,
|
||||
private val naviPayCustomerStatusHandler: NaviPayCustomerStatusHandler,
|
||||
@@ -402,14 +403,18 @@ constructor(
|
||||
handleActionsFromJson(
|
||||
actionsString = uiTronActionHandler?.actionsString ?: "",
|
||||
variableMap = uiTronActionHandler?.variableMap ?: emptyMap(),
|
||||
gson = gson
|
||||
gson = dataDeserializers
|
||||
)
|
||||
}
|
||||
|
||||
fun triggerOnHiddenUiTronActionList() {
|
||||
try {
|
||||
getHomeScreenData()?.extraData?.onHiddenUiTronActionList?.forEach {
|
||||
handleActionsFromJson(actionsString = it, variableMap = emptyMap(), gson = gson)
|
||||
handleActionsFromJson(
|
||||
actionsString = it,
|
||||
variableMap = emptyMap(),
|
||||
gson = dataDeserializers
|
||||
)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.log()
|
||||
@@ -447,18 +452,21 @@ constructor(
|
||||
version = BuildConfig.VERSION_CODE
|
||||
)
|
||||
)
|
||||
deserializeWidgetResponseString(response = getHomeTabFromDatabase())?.let {
|
||||
responseData ->
|
||||
homePageDataUpdateHandler.updateHomePageData(
|
||||
responseData,
|
||||
::updateHomePageSuccess
|
||||
)
|
||||
_homeScreenExtraData.emit(HomePageExtraData(responseData.extraData))
|
||||
_showFabButton.update {
|
||||
responseData.extraData?.fabButtonData?.isVisible ?: true
|
||||
|
||||
dataDeserializers
|
||||
.fromJson(getHomeTabFromDatabase()?.value, WidgetResponse::class.java)
|
||||
.let { responseData ->
|
||||
homePageDataUpdateHandler.updateHomePageData(
|
||||
responseData,
|
||||
::updateHomePageSuccess
|
||||
)
|
||||
_homeScreenExtraData.emit(HomePageExtraData(responseData.extraData))
|
||||
_showFabButton.update {
|
||||
responseData.extraData?.fabButtonData?.isVisible ?: true
|
||||
}
|
||||
selectiveRefreshHandler.handleSuccessState(this@HomeVM)
|
||||
}
|
||||
selectiveRefreshHandler.handleSuccessState(this@HomeVM)
|
||||
}
|
||||
|
||||
updateApiTsForHomePage()
|
||||
|
||||
getHomeTabFromDatabase()?.updatedAt?.let { timestamp ->
|
||||
@@ -500,41 +508,46 @@ constructor(
|
||||
emitMultipleValues = true,
|
||||
)
|
||||
.collect { response ->
|
||||
deserializeWidgetResponseString(response.data)?.let { widgetResponse ->
|
||||
try {
|
||||
if (
|
||||
showLoader.not() &&
|
||||
getHomeScreenData().isNotNull() &&
|
||||
response.data?.value == homeTabFromDatabase?.value
|
||||
) {
|
||||
updateCachedResponse(true)
|
||||
} else {
|
||||
if (response.isCurrentAndAltDataSame.orFalse().not()) {
|
||||
homePageDataUpdateHandler.updateHomePageData(
|
||||
widgetResponse,
|
||||
::updateHomePageSuccess
|
||||
)
|
||||
_homeScreenExtraData.emit(
|
||||
HomePageExtraData(widgetResponse.extraData)
|
||||
)
|
||||
_showFabButton.update {
|
||||
widgetResponse.extraData?.fabButtonData?.isVisible
|
||||
?: true
|
||||
dataDeserializers
|
||||
.fromJson(response.data?.value, WidgetResponse::class.java)
|
||||
.let { widgetResponse ->
|
||||
try {
|
||||
if (
|
||||
showLoader.not() &&
|
||||
getHomeScreenData().isNotNull() &&
|
||||
response.data?.value == homeTabFromDatabase?.value
|
||||
) {
|
||||
updateCachedResponse(true)
|
||||
} else {
|
||||
if (response.isCurrentAndAltDataSame.orFalse().not()) {
|
||||
homePageDataUpdateHandler.updateHomePageData(
|
||||
widgetResponse,
|
||||
::updateHomePageSuccess
|
||||
)
|
||||
_homeScreenExtraData.emit(
|
||||
HomePageExtraData(widgetResponse.extraData)
|
||||
)
|
||||
_showFabButton.update {
|
||||
widgetResponse.extraData
|
||||
?.fabButtonData
|
||||
?.isVisible ?: true
|
||||
}
|
||||
updateApiTsForHomePage()
|
||||
response.data?.updatedAt?.let { timestamp ->
|
||||
homeTabLastUpdateTimestamp = timestamp
|
||||
}
|
||||
preCacheLottieUrls(widgetResponse)
|
||||
}
|
||||
updateApiTsForHomePage()
|
||||
response.data?.updatedAt?.let { timestamp ->
|
||||
homeTabLastUpdateTimestamp = timestamp
|
||||
if (response.isComingFromAltSource.orFalse()) {
|
||||
selectiveRefreshHandler.handleSuccessState(
|
||||
this@HomeVM
|
||||
)
|
||||
}
|
||||
preCacheLottieUrls(widgetResponse)
|
||||
}
|
||||
if (response.isComingFromAltSource.orFalse()) {
|
||||
selectiveRefreshHandler.handleSuccessState(this@HomeVM)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.log()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.log()
|
||||
}
|
||||
}
|
||||
}
|
||||
Timber.d("Home page refresh job Ended")
|
||||
}
|
||||
@@ -549,9 +562,6 @@ constructor(
|
||||
|
||||
fun getHomeContentList() = homePageDataUpdateHandler.getHomeContentList()
|
||||
|
||||
private fun deserializeWidgetResponseString(response: NaviCacheEntity?): WidgetResponse? =
|
||||
getGsonBuilderForWidgetizedResponse().fromJson(response?.value, WidgetResponse::class.java)
|
||||
|
||||
private suspend fun getHomeTabFromDatabase(): NaviCacheEntity? =
|
||||
naviCacheRepository.get(NaviSharedDbKeys.HOME_TAB.name)
|
||||
|
||||
@@ -646,7 +656,7 @@ constructor(
|
||||
return NaviCacheAltSourceEntity(isSuccess = false)
|
||||
}
|
||||
return NaviCacheAltSourceEntity(
|
||||
value = naviAppSerializerGsonBuilder().toJson(response.data),
|
||||
value = dataSerializers.toJson(response.data),
|
||||
version = BuildConfig.VERSION_CODE,
|
||||
isSuccess = true
|
||||
)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
package com.naviapp.home.viewmodel
|
||||
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.google.gson.Gson
|
||||
import com.navi.base.cache.model.NaviCacheEntity
|
||||
import com.navi.base.cache.repository.NaviCacheRepository
|
||||
import com.navi.base.cache.util.NaviSharedDbKeys
|
||||
@@ -26,8 +27,8 @@ import com.navi.uitron.model.data.UiTronActionData
|
||||
import com.naviapp.forge.model.ScreenDefinition
|
||||
import com.naviapp.home.respository.ProfileRepository
|
||||
import com.naviapp.home.ui.state.ProfileScreenState
|
||||
import com.naviapp.utils.naviAppDeserializerGsonBuilder
|
||||
import com.naviapp.utils.naviAppSerializerGsonBuilder
|
||||
import com.naviapp.network.di.DataDeserializers
|
||||
import com.naviapp.network.di.DataSerializers
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -43,7 +44,9 @@ class ProfileVM
|
||||
@Inject
|
||||
constructor(
|
||||
private val repository: ProfileRepository,
|
||||
private val naviCacheRepository: NaviCacheRepository
|
||||
private val naviCacheRepository: NaviCacheRepository,
|
||||
@DataDeserializers private val dataDeserializers: Gson,
|
||||
@DataSerializers private val dataSerializers: Gson
|
||||
) : BaseVM() {
|
||||
|
||||
private val _profileScreenDataState =
|
||||
@@ -128,7 +131,7 @@ constructor(
|
||||
naviCacheRepository.get(key = NaviSharedDbKeys.NAVI_APP_PROFILE.keyName)
|
||||
if (profilePageResponse?.value != null) {
|
||||
cacheResponse =
|
||||
naviAppDeserializerGsonBuilder.fromJson(
|
||||
dataDeserializers.fromJson(
|
||||
profilePageResponse.value,
|
||||
ScreenDefinition::class.java
|
||||
)
|
||||
@@ -145,7 +148,7 @@ constructor(
|
||||
naviCacheRepository.save(
|
||||
NaviCacheEntity(
|
||||
key = NaviSharedDbKeys.NAVI_APP_PROFILE.keyName,
|
||||
value = naviAppSerializerGsonBuilder().toJson(response.data),
|
||||
value = dataSerializers.toJson(response.data),
|
||||
version = 1
|
||||
)
|
||||
)
|
||||
|
||||
@@ -14,6 +14,10 @@ import com.navi.base.utils.BaseUtils
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.common.network.requestmanager.PriorityRequestManagerFacade
|
||||
import com.navi.common.uitron.model.action.UploadDataConfig
|
||||
import com.navi.common.uitron.serializer.UiTronActionSerializer
|
||||
import com.navi.common.uitron.serializer.UiTronTriggerApiActionSerializer
|
||||
import com.navi.common.uitron.serializer.UiTronUploadDataSerializer
|
||||
import com.navi.naviwidgets.WidgetDataDeserializer
|
||||
import com.navi.naviwidgets.models.GenericWidgetDataInfo
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
@@ -21,17 +25,28 @@ import com.navi.naviwidgets.models.ParameterValue
|
||||
import com.navi.naviwidgets.validations.BaseInputValidation
|
||||
import com.navi.naviwidgets.validations.ValidationJsonDeserializer
|
||||
import com.navi.naviwidgets.widgets.NaviWidgetJsonDeserializer
|
||||
import com.navi.naviwidgets.widgets.NaviWidgetJsonSerializer
|
||||
import com.navi.naviwidgets.widgets.ParameterValueJsonDeserializer
|
||||
import com.navi.pay.common.utils.DateTimeConverterAdapter
|
||||
import com.navi.uitron.deserializer.animationsDeserializers.AnimationSpecDeserializer
|
||||
import com.navi.uitron.deserializer.animationsDeserializers.PropertyAnimatorDeserializer
|
||||
import com.navi.uitron.model.action.TriggerApiAction
|
||||
import com.navi.uitron.model.animations.AnimationSpec
|
||||
import com.navi.uitron.model.animations.PropertyAnimator
|
||||
import com.navi.uitron.model.data.UiTronAction
|
||||
import com.navi.uitron.model.data.UiTronData
|
||||
import com.navi.uitron.model.ui.BaseProperty
|
||||
import com.navi.uitron.model.visualtransformation.VisualTransformationData
|
||||
import com.navi.uitron.serializer.UiTronValidationSerializer
|
||||
import com.navi.uitron.serializer.VisualTransformationDataSerializer
|
||||
import com.navi.uitron.serializer.animationsSerializers.AnimationSpecSerializer
|
||||
import com.navi.uitron.serializer.animationsSerializers.PropertyAnimatorSerializer
|
||||
import com.naviapp.BuildConfig
|
||||
import com.naviapp.app.NaviApplication
|
||||
import com.naviapp.common.deserializer.CustomHomeWidgetDataDeSerializer
|
||||
import com.naviapp.common.deserializer.HomeCustomWidgetDataDeSerializer
|
||||
import com.naviapp.common.serializer.HomeCustomWidgetDataSerializer
|
||||
import com.naviapp.home.compose.uiTron.model.deserializer.HomeUitronPropertyDeserializer
|
||||
import com.naviapp.home.compose.uiTron.model.serializer.HomeUitronPropertySerializer
|
||||
import com.naviapp.models.response.WidgetConfig
|
||||
import com.naviapp.network.retrofit.NaviHttpClient
|
||||
import com.naviapp.network.retrofit.RetrofitService
|
||||
@@ -44,6 +59,7 @@ import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import javax.inject.Singleton
|
||||
import org.joda.time.DateTime
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.gson.GsonConverterFactory
|
||||
|
||||
@@ -81,6 +97,7 @@ object NetworkModule {
|
||||
fun providesOkHttpClientForFeeds(@FeedsRetroFit networkInfo: NetworkInfo): NaviHttpClient =
|
||||
NaviHttpClient(networkInfo, NaviApplication.instance.applicationContext)
|
||||
|
||||
@DataDeserializers
|
||||
@Singleton
|
||||
@Provides
|
||||
fun providesDeserializer(): Gson =
|
||||
@@ -90,18 +107,39 @@ object NetworkModule {
|
||||
.registerTypeAdapter(NaviWidget::class.java, NaviWidgetJsonDeserializer())
|
||||
.registerTypeAdapter(BaseInputValidation::class.java, ValidationJsonDeserializer())
|
||||
.registerTypeAdapter(ParameterValue::class.java, ParameterValueJsonDeserializer())
|
||||
.registerApUiTronDeSerializers()
|
||||
.registerTypeAdapter(UiTronData::class.java, CustomHomeWidgetDataDeSerializer())
|
||||
.registerTypeAdapter(BaseProperty::class.java, HomeUitronPropertyDeserializer())
|
||||
.registerTypeAdapter(DateTime::class.java, DateTimeConverterAdapter())
|
||||
.registerTypeAdapter(AnimationSpec::class.java, AnimationSpecDeserializer())
|
||||
.registerTypeAdapter(PropertyAnimator::class.java, PropertyAnimatorDeserializer())
|
||||
.registerApUiTronDeSerializers()
|
||||
.registerTypeAdapter(UiTronData::class.java, HomeCustomWidgetDataDeSerializer())
|
||||
.registerTypeAdapter(BaseProperty::class.java, HomeUitronPropertyDeserializer())
|
||||
.create()
|
||||
|
||||
@DataSerializers
|
||||
@Singleton
|
||||
@Provides
|
||||
fun providesSerializer(): Gson =
|
||||
GsonBuilder()
|
||||
.registerTypeAdapter(NaviWidget::class.java, NaviWidgetJsonSerializer())
|
||||
.registerTypeAdapter(BaseProperty::class.java, HomeUitronPropertySerializer())
|
||||
.registerTypeAdapter(UiTronData::class.java, HomeCustomWidgetDataSerializer())
|
||||
.registerTypeAdapter(UiTronAction::class.java, UiTronActionSerializer())
|
||||
.registerTypeAdapter(UploadDataConfig::class.java, UiTronUploadDataSerializer())
|
||||
.registerTypeAdapter(BaseInputValidation::class.java, UiTronValidationSerializer())
|
||||
.registerTypeAdapter(TriggerApiAction::class.java, UiTronTriggerApiActionSerializer())
|
||||
.registerTypeAdapter(AnimationSpec::class.java, AnimationSpecSerializer())
|
||||
.registerTypeAdapter(PropertyAnimator::class.java, PropertyAnimatorSerializer())
|
||||
.registerTypeAdapter(
|
||||
VisualTransformationData::class.java,
|
||||
VisualTransformationDataSerializer()
|
||||
)
|
||||
.create()
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
fun provideRetrofit(
|
||||
naviHttpClient: NaviHttpClient,
|
||||
deserializer: Gson,
|
||||
@DataDeserializers deserializer: Gson,
|
||||
priorityRequestManagerFacade: PriorityRequestManagerFacade
|
||||
): Retrofit {
|
||||
val updatedBaseUrl = BaseUtils.getUpdatedBaseUrl()
|
||||
@@ -127,7 +165,7 @@ object NetworkModule {
|
||||
@Provides
|
||||
@SuperAppRetroFit
|
||||
fun provideSuperAppApiService(
|
||||
percentDeserializer: Gson,
|
||||
@DataDeserializers percentDeserializer: Gson,
|
||||
@SuperAppRetroFit naviHttpClient: NaviHttpClient,
|
||||
priorityRequestManagerFacade: PriorityRequestManagerFacade
|
||||
): RetrofitService {
|
||||
@@ -151,7 +189,7 @@ object NetworkModule {
|
||||
@Provides
|
||||
@FeedsRetroFit
|
||||
fun provideFeedsApiService(
|
||||
percentDeserializer: Gson,
|
||||
@DataDeserializers percentDeserializer: Gson,
|
||||
@FeedsRetroFit naviHttpClient: NaviHttpClient,
|
||||
priorityRequestManagerFacade: PriorityRequestManagerFacade
|
||||
): RetrofitService {
|
||||
|
||||
@@ -14,3 +14,7 @@ import javax.inject.Qualifier
|
||||
@Qualifier @Retention(AnnotationRetention.BINARY) annotation class FeedsRetroFit
|
||||
|
||||
@Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class CoroutineScopeIO
|
||||
|
||||
@Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class DataDeserializers
|
||||
|
||||
@Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class DataSerializers
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
package com.naviapp.network.util
|
||||
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.navi.ap.utils.registerApUiTronDeSerializers
|
||||
import com.navi.base.utils.BaseUtils
|
||||
@@ -22,20 +21,12 @@ import com.navi.naviwidgets.validations.BaseInputValidation
|
||||
import com.navi.naviwidgets.validations.ValidationJsonDeserializer
|
||||
import com.navi.naviwidgets.widgets.NaviWidgetJsonDeserializer
|
||||
import com.navi.naviwidgets.widgets.ParameterValueJsonDeserializer
|
||||
import com.navi.pay.common.utils.DateTimeConverterAdapter
|
||||
import com.navi.uitron.deserializer.animationsDeserializers.AnimationSpecDeserializer
|
||||
import com.navi.uitron.deserializer.animationsDeserializers.PropertyAnimatorDeserializer
|
||||
import com.navi.uitron.model.animations.AnimationSpec
|
||||
import com.navi.uitron.model.animations.PropertyAnimator
|
||||
import com.navi.uitron.model.ui.BaseProperty
|
||||
import com.naviapp.BuildConfig
|
||||
import com.naviapp.home.compose.uiTron.model.deserializer.HomeUitronPropertyDeserializer
|
||||
import com.naviapp.models.response.WidgetConfig
|
||||
import com.naviapp.network.ApiConstants
|
||||
import com.naviapp.utils.WidgetConfigDeserializer
|
||||
import com.naviapp.utils.getVersionCode
|
||||
import okhttp3.OkHttpClient
|
||||
import org.joda.time.DateTime
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.gson.GsonConverterFactory
|
||||
import retrofit2.converter.scalars.ScalarsConverterFactory
|
||||
@@ -59,21 +50,6 @@ fun createRetrofitClient(okttpClientBuilder: OkHttpClient.Builder): Retrofit {
|
||||
.build()
|
||||
}
|
||||
|
||||
fun getGsonBuilderForWidgetizedResponse(): Gson {
|
||||
return GsonBuilder()
|
||||
.registerTypeAdapter(GenericWidgetDataInfo::class.java, WidgetDataDeserializer())
|
||||
.registerTypeAdapter(WidgetConfig::class.java, WidgetConfigDeserializer())
|
||||
.registerTypeAdapter(NaviWidget::class.java, NaviWidgetJsonDeserializer())
|
||||
.registerTypeAdapter(BaseInputValidation::class.java, ValidationJsonDeserializer())
|
||||
.registerTypeAdapter(ParameterValue::class.java, ParameterValueJsonDeserializer())
|
||||
.registerTypeAdapter(DateTime::class.java, DateTimeConverterAdapter())
|
||||
.registerTypeAdapter(AnimationSpec::class.java, AnimationSpecDeserializer())
|
||||
.registerTypeAdapter(PropertyAnimator::class.java, PropertyAnimatorDeserializer())
|
||||
.registerApUiTronDeSerializers()
|
||||
.registerTypeAdapter(BaseProperty::class.java, HomeUitronPropertyDeserializer())
|
||||
.create()
|
||||
}
|
||||
|
||||
fun getNetworkInfo(timeOutInSeconds: Long = ApiConstants.API_CONNECT_TIMEOUT_VALUE): NetworkInfo {
|
||||
return NetworkInfo(
|
||||
baseUrl = BaseUtils.getUpdatedBaseUrl() ?: BuildConfig.BASE_URL,
|
||||
|
||||
@@ -37,20 +37,22 @@ import com.naviapp.BuildConfig
|
||||
import com.naviapp.common.navigator.NaviDeepLinkNavigator.HOME
|
||||
import com.naviapp.common.navigator.NaviDeepLinkNavigator.ON_BOARDING
|
||||
import com.naviapp.common.navigator.NaviDeepLinkNavigator.REGISTRATION
|
||||
import com.naviapp.network.util.getGsonBuilderForWidgetizedResponse
|
||||
import com.naviapp.network.di.DataDeserializers
|
||||
import com.naviapp.network.di.DataSerializers
|
||||
import com.naviapp.nux.model.NuxDisplayUserInfo
|
||||
import com.naviapp.nux.model.NuxEligibilityFirebaseConfig
|
||||
import com.naviapp.nux.repository.NuxRepository
|
||||
import com.naviapp.utils.Constants.DEEPLINK
|
||||
import com.naviapp.utils.Constants.SOURCE
|
||||
import com.naviapp.utils.naviAppSerializerGsonBuilder
|
||||
import javax.inject.Inject
|
||||
|
||||
class NewUserExperienceHandler
|
||||
@Inject
|
||||
constructor(
|
||||
private val naviCacheRepository: NaviCacheRepositoryImpl,
|
||||
private val nuxRepository: NuxRepository
|
||||
private val nuxRepository: NuxRepository,
|
||||
@DataDeserializers private val dataDeserializers: Gson,
|
||||
@DataSerializers private val dataSerializers: Gson
|
||||
) {
|
||||
|
||||
private var canRedirectUserToNux = false
|
||||
@@ -91,8 +93,8 @@ constructor(
|
||||
version = BuildConfig.VERSION_CODE.toLong(),
|
||||
getDataFromAltSource = { getNaviCacheAltSourceEntity(screenId) }
|
||||
)
|
||||
|
||||
deserializeWidgetResponseString(cachedResponse)?.let { data ->
|
||||
dataDeserializers.fromJson(cachedResponse?.value, ForgeScreenDefinition::class.java)?.let {
|
||||
data ->
|
||||
onSuccess(data)
|
||||
if (queryMap[SOURCE].orEmpty() in listOf(HOME, REGISTRATION, ON_BOARDING)) {
|
||||
updateNuxDisplayUserInfo(screenId)
|
||||
@@ -115,7 +117,7 @@ constructor(
|
||||
systemBackAction = response.data?.screenStructure?.systemBackCta
|
||||
if (response.data?.screenStructure?.content?.widgets?.isNotEmpty().orFalse()) {
|
||||
return NaviCacheAltSourceEntity(
|
||||
value = naviAppSerializerGsonBuilder().toJson(response.data),
|
||||
value = dataSerializers.toJson(response.data),
|
||||
version = BuildConfig.VERSION_CODE,
|
||||
isSuccess = true
|
||||
)
|
||||
@@ -124,12 +126,6 @@ constructor(
|
||||
return NaviCacheAltSourceEntity(isSuccess = false)
|
||||
}
|
||||
|
||||
private fun deserializeWidgetResponseString(
|
||||
response: NaviCacheEntity?
|
||||
): ForgeScreenDefinition? =
|
||||
getGsonBuilderForWidgetizedResponse()
|
||||
.fromJson(response?.value, ForgeScreenDefinition::class.java)
|
||||
|
||||
fun isUserEligibleForNux(screenId: String): Boolean {
|
||||
val nuxDisplayUserInfo =
|
||||
PreferenceManager.getObjectPrefrences(
|
||||
|
||||
@@ -513,6 +513,14 @@ object Constants {
|
||||
const val SCROLL_FADE = "scroll_fade"
|
||||
}
|
||||
|
||||
// Home Custom Widget Constants
|
||||
object HomeCustomWidgetConstants {
|
||||
const val PROFILE_HEADER_WIDGET = "PROFILE_HEADER_WIDGET"
|
||||
const val UPI_SETTINGS_WIDGET = "UPI_SETTINGS_WIDGET"
|
||||
const val ROTATING_VIEW = "RotatingView"
|
||||
const val SCROLL_FADING_WIDGET = "ScrollFadingWidget"
|
||||
}
|
||||
|
||||
object HomeCustomUitronWidgetConstants {
|
||||
const val ROTATING_VIEW_ANIMATION = "rotating view animation"
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ import com.navi.uitron.model.data.UiTronData
|
||||
import com.navi.uitron.model.ui.BaseProperty
|
||||
import com.naviapp.R
|
||||
import com.naviapp.app.NaviApplication
|
||||
import com.naviapp.common.deserializer.CustomHomeWidgetDataDeSerializer
|
||||
import com.naviapp.common.deserializer.HomeCustomWidgetDataDeSerializer
|
||||
import com.naviapp.home.compose.uiTron.model.deserializer.HomeUitronPropertyDeserializer
|
||||
import com.naviapp.models.response.WidgetConfig
|
||||
import java.lang.reflect.Type
|
||||
@@ -51,7 +51,7 @@ fun <T> mockApiResponse(
|
||||
.registerTypeAdapter(BaseInputValidation::class.java, ValidationJsonDeserializer())
|
||||
.registerTypeAdapter(ParameterValue::class.java, ParameterValueJsonDeserializer())
|
||||
.registerApUiTronDeSerializers()
|
||||
.registerTypeAdapter(UiTronData::class.java, CustomHomeWidgetDataDeSerializer())
|
||||
.registerTypeAdapter(UiTronData::class.java, HomeCustomWidgetDataDeSerializer())
|
||||
.registerTypeAdapter(BaseProperty::class.java, HomeUitronPropertyDeserializer())
|
||||
.registerTypeAdapter(AnimationSpec::class.java, AnimationSpecDeserializer())
|
||||
.registerTypeAdapter(PropertyAnimator::class.java, PropertyAnimatorDeserializer())
|
||||
|
||||
@@ -52,10 +52,8 @@ import com.bumptech.glide.request.RequestListener
|
||||
import com.bumptech.glide.request.target.Target
|
||||
import com.google.android.material.card.MaterialCardView
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.navi.amc.common.taskProcessor.AmcTaskManager
|
||||
import com.navi.amc.navigator.NaviAmcDeeplinkNavigator
|
||||
import com.navi.ap.utils.registerApUiTronDeSerializers
|
||||
import com.navi.base.model.ClickableTextType
|
||||
import com.navi.base.model.CtaData
|
||||
import com.navi.base.model.EmailSubjectBodyResponse
|
||||
@@ -70,10 +68,6 @@ import com.navi.base.utils.orTrue
|
||||
import com.navi.base.utils.orZero
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.network.models.GenericErrorResponse
|
||||
import com.navi.common.uitron.model.action.UploadDataConfig
|
||||
import com.navi.common.uitron.serializer.UiTronActionSerializer
|
||||
import com.navi.common.uitron.serializer.UiTronTriggerApiActionSerializer
|
||||
import com.navi.common.uitron.serializer.UiTronUploadDataSerializer
|
||||
import com.navi.common.utils.CommonNaviAnalytics
|
||||
import com.navi.common.utils.Constants.LOGIN_SOURCE
|
||||
import com.navi.common.utils.EmiCalculator
|
||||
@@ -82,44 +76,20 @@ import com.navi.common.utils.log
|
||||
import com.navi.design.utils.isValidHexColor
|
||||
import com.navi.insurance.navigator.NaviInsuranceDeeplinkNavigator
|
||||
import com.navi.insurance.sharedpref.NaviPreferenceManager
|
||||
import com.navi.naviwidgets.WidgetDataDeserializer
|
||||
import com.navi.naviwidgets.models.GenericWidgetDataInfo
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.models.ParameterValue
|
||||
import com.navi.naviwidgets.models.response.CardProperties
|
||||
import com.navi.naviwidgets.utils.setCardProperties
|
||||
import com.navi.naviwidgets.validations.BaseInputValidation
|
||||
import com.navi.naviwidgets.validations.ValidationJsonDeserializer
|
||||
import com.navi.naviwidgets.widgets.NaviWidgetJsonDeserializer
|
||||
import com.navi.naviwidgets.widgets.NaviWidgetJsonSerializer
|
||||
import com.navi.naviwidgets.widgets.ParameterValueJsonDeserializer
|
||||
import com.navi.pay.common.utils.getExcludeSecureSharedPrefKeys
|
||||
import com.navi.pay.common.utils.getExcludeSharedPrefKeys
|
||||
import com.navi.payment.juspay.HyperServicesHolder
|
||||
import com.navi.uitron.model.action.TriggerApiAction
|
||||
import com.navi.uitron.model.animations.AnimationSpec
|
||||
import com.navi.uitron.model.animations.PropertyAnimator
|
||||
import com.navi.uitron.model.data.UiTronAction
|
||||
import com.navi.uitron.model.data.UiTronData
|
||||
import com.navi.uitron.model.ui.BaseProperty
|
||||
import com.navi.uitron.model.visualtransformation.VisualTransformationData
|
||||
import com.navi.uitron.serializer.UiTronValidationSerializer
|
||||
import com.navi.uitron.serializer.VisualTransformationDataSerializer
|
||||
import com.navi.uitron.serializer.animationsSerializers.AnimationSpecSerializer
|
||||
import com.navi.uitron.serializer.animationsSerializers.PropertyAnimatorSerializer
|
||||
import com.naviapp.BuildConfig
|
||||
import com.naviapp.R
|
||||
import com.naviapp.analytics.utils.NaviAnalytics
|
||||
import com.naviapp.analytics.utils.NaviSDKHelper
|
||||
import com.naviapp.app.NaviApplication
|
||||
import com.naviapp.common.deserializer.CustomHomeWidgetDataDeSerializer
|
||||
import com.naviapp.common.navigator.NaviDeepLinkNavigator
|
||||
import com.naviapp.common.navigator.NaviDeepLinkNavigator.ERROR_V2
|
||||
import com.naviapp.common.navigator.NaviDeepLinkNavigator.getPersonalLoanDynamicModuleIntent
|
||||
import com.naviapp.common.serializer.CustomHomeWidgetDataSerializer
|
||||
import com.naviapp.home.activity.OnBoardingActivity
|
||||
import com.naviapp.home.compose.uiTron.model.deserializer.HomeUitronPropertyDeserializer
|
||||
import com.naviapp.home.compose.uiTron.model.serializer.HomeUitronPropertySerializer
|
||||
import com.naviapp.home.dashboard.models.response.DashboardContentResponse
|
||||
import com.naviapp.manager.usecase.UserDataUploadWorkerUseCase
|
||||
import com.naviapp.models.ColorData
|
||||
@@ -984,36 +954,6 @@ fun navigateToCrmHelpScreen(screenName: String, activity: Activity) {
|
||||
)
|
||||
}
|
||||
|
||||
val naviAppDeserializerGsonBuilder: Gson
|
||||
get() =
|
||||
GsonBuilder()
|
||||
.registerTypeAdapter(GenericWidgetDataInfo::class.java, WidgetDataDeserializer())
|
||||
.registerTypeAdapter(WidgetConfig::class.java, WidgetConfigDeserializer())
|
||||
.registerTypeAdapter(NaviWidget::class.java, NaviWidgetJsonDeserializer())
|
||||
.registerTypeAdapter(BaseInputValidation::class.java, ValidationJsonDeserializer())
|
||||
.registerTypeAdapter(ParameterValue::class.java, ParameterValueJsonDeserializer())
|
||||
.registerApUiTronDeSerializers()
|
||||
.registerTypeAdapter(UiTronData::class.java, CustomHomeWidgetDataDeSerializer())
|
||||
.registerTypeAdapter(BaseProperty::class.java, HomeUitronPropertyDeserializer())
|
||||
.create()
|
||||
|
||||
fun naviAppSerializerGsonBuilder(): Gson =
|
||||
GsonBuilder()
|
||||
.registerTypeAdapter(NaviWidget::class.java, NaviWidgetJsonSerializer())
|
||||
.registerTypeAdapter(BaseProperty::class.java, HomeUitronPropertySerializer())
|
||||
.registerTypeAdapter(UiTronData::class.java, CustomHomeWidgetDataSerializer())
|
||||
.registerTypeAdapter(UiTronAction::class.java, UiTronActionSerializer())
|
||||
.registerTypeAdapter(UploadDataConfig::class.java, UiTronUploadDataSerializer())
|
||||
.registerTypeAdapter(BaseInputValidation::class.java, UiTronValidationSerializer())
|
||||
.registerTypeAdapter(TriggerApiAction::class.java, UiTronTriggerApiActionSerializer())
|
||||
.registerTypeAdapter(AnimationSpec::class.java, AnimationSpecSerializer())
|
||||
.registerTypeAdapter(PropertyAnimator::class.java, PropertyAnimatorSerializer())
|
||||
.registerTypeAdapter(
|
||||
VisualTransformationData::class.java,
|
||||
VisualTransformationDataSerializer()
|
||||
)
|
||||
.create()
|
||||
|
||||
fun buildUrlWithParameters(
|
||||
baseUrl: String,
|
||||
params: Map<String, String>,
|
||||
|
||||
Reference in New Issue
Block a user