NTP-26362 | bbps education category enhancements (#15828)
This commit is contained in:
@@ -63,6 +63,7 @@ const val CATEGORY_ID_LANDLINE = "LANDLINE-POSTPAID"
|
||||
const val CATEGORY_ID_CREDIT_CARD = "CREDIT-CARD"
|
||||
const val CATEGORY_ID_PIPED_GAS = "LPG-GAS"
|
||||
const val CATEGORY_ID_WATER = "WATER"
|
||||
const val CATEGORY_ID_EDUCATION = "EDUCATION"
|
||||
|
||||
const val KEY_DEFAULT = "&DEFAULT"
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ constructor(
|
||||
isAdhoc = bundle.getString("isAdhoc").orEmpty().toBoolean(),
|
||||
isPopular = bundle.getString("isPopular").orEmpty().toBoolean(),
|
||||
state = bundle.getString("state").orEmpty(),
|
||||
region = bundle.getString("region").orEmpty(),
|
||||
)
|
||||
|
||||
val customerParams = jsonToMap(bundle.getString("customerParams").orEmpty()).toStringMap()
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.navi.bbps.common.CATEGORY_ID_BROADBAND
|
||||
import com.navi.bbps.common.CATEGORY_ID_CABLE
|
||||
import com.navi.bbps.common.CATEGORY_ID_CREDIT_CARD
|
||||
import com.navi.bbps.common.CATEGORY_ID_DTH
|
||||
import com.navi.bbps.common.CATEGORY_ID_EDUCATION
|
||||
import com.navi.bbps.common.CATEGORY_ID_ELECTRICITY
|
||||
import com.navi.bbps.common.CATEGORY_ID_FASTAG
|
||||
import com.navi.bbps.common.CATEGORY_ID_MOBILE_PREPAID
|
||||
@@ -132,7 +133,12 @@ object NaviBbpsCommonUtils {
|
||||
|
||||
fun isCategoryOfTypeLocationRequired(categoryId: String): Boolean {
|
||||
return categoryId in
|
||||
listOf(CATEGORY_ID_WATER, CATEGORY_ID_BROADBAND, CATEGORY_ID_ELECTRICITY)
|
||||
listOf(
|
||||
CATEGORY_ID_WATER,
|
||||
CATEGORY_ID_BROADBAND,
|
||||
CATEGORY_ID_ELECTRICITY,
|
||||
CATEGORY_ID_EDUCATION,
|
||||
)
|
||||
}
|
||||
|
||||
fun closeKeyboardOnScroll(
|
||||
|
||||
@@ -44,7 +44,7 @@ import com.navi.bbps.feature.prepaidrecharge.model.view.PrepaidRechargeEntity
|
||||
PrepaidRechargeEntity::class,
|
||||
DetectedBillEntity::class,
|
||||
],
|
||||
version = 9,
|
||||
version = 10,
|
||||
exportSchema = false,
|
||||
)
|
||||
@TypeConverters(
|
||||
@@ -212,3 +212,12 @@ val NAVI_BBPS_DATABASE_MIGRATION_8_9 =
|
||||
db.execSQL("DROP TABLE IF EXISTS $NAVI_BBPS_TABLE_DISMISSED_BILLS")
|
||||
}
|
||||
}
|
||||
|
||||
val NAVI_BBPS_DATABASE_MIGRATION_9_10 =
|
||||
object : Migration(9, 10) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL(
|
||||
"ALTER TABLE $NAVI_BBPS_DATABASE_BILLERS ADD COLUMN region TEXT NOT NULL DEFAULT ''"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.navi.bbps.db.NAVI_BBPS_DATABASE_MIGRATION_5_6
|
||||
import com.navi.bbps.db.NAVI_BBPS_DATABASE_MIGRATION_6_7
|
||||
import com.navi.bbps.db.NAVI_BBPS_DATABASE_MIGRATION_7_8
|
||||
import com.navi.bbps.db.NAVI_BBPS_DATABASE_MIGRATION_8_9
|
||||
import com.navi.bbps.db.NAVI_BBPS_DATABASE_MIGRATION_9_10
|
||||
import com.navi.bbps.db.NaviBbpsAppDatabase
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
@@ -49,6 +50,7 @@ object NaviBbpsDbModule {
|
||||
NAVI_BBPS_DATABASE_MIGRATION_6_7,
|
||||
NAVI_BBPS_DATABASE_MIGRATION_7_8,
|
||||
NAVI_BBPS_DATABASE_MIGRATION_8_9,
|
||||
NAVI_BBPS_DATABASE_MIGRATION_9_10,
|
||||
)
|
||||
.fallbackToDestructiveMigration()
|
||||
.build()
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
package com.navi.bbps.feature.billerlist
|
||||
|
||||
import com.navi.base.utils.orFalse
|
||||
import com.navi.bbps.feature.billerlist.model.network.BillerItemResponse
|
||||
import com.navi.bbps.feature.billerlist.model.view.BillerItemEntity
|
||||
import javax.inject.Inject
|
||||
@@ -15,17 +16,20 @@ class BillerItemResponseToEntityMapper @Inject constructor() {
|
||||
fun mapBillerItemResponseToEntityList(
|
||||
billers: List<BillerItemResponse>
|
||||
): List<BillerItemEntity> {
|
||||
return billers.map { response ->
|
||||
BillerItemEntity(
|
||||
billerId = response.billerId,
|
||||
billerName = response.billerName,
|
||||
billerLogoUrl = response.billerLogoUrl,
|
||||
status = response.status ?: "",
|
||||
isAdhoc = response.isAdhoc ?: false,
|
||||
state = response.state ?: "",
|
||||
categoryId = response.categoryId,
|
||||
isPopular = response.isPopular ?: false,
|
||||
)
|
||||
}
|
||||
return billers.map { response -> toBillerItemEntity(response) }
|
||||
}
|
||||
|
||||
fun toBillerItemEntity(response: BillerItemResponse): BillerItemEntity {
|
||||
return BillerItemEntity(
|
||||
billerId = response.billerId,
|
||||
billerName = response.billerName.trim(),
|
||||
billerLogoUrl = response.billerLogoUrl,
|
||||
status = response.status.orEmpty(),
|
||||
isAdhoc = response.isAdhoc.orFalse(),
|
||||
state = response.state.orEmpty(),
|
||||
region = response.region.orEmpty().trim(),
|
||||
categoryId = response.categoryId,
|
||||
isPopular = response.isPopular.orFalse(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ import com.navi.base.utils.BaseUtils
|
||||
import com.navi.base.utils.EMPTY
|
||||
import com.navi.base.utils.ResourceProvider
|
||||
import com.navi.base.utils.isNotNull
|
||||
import com.navi.base.utils.orFalse
|
||||
import com.navi.bbps.R
|
||||
import com.navi.bbps.common.CATEGORY_ID_FASTAG
|
||||
import com.navi.bbps.common.CATEGORY_ID_MOBILE_POSTPAID
|
||||
@@ -31,7 +30,6 @@ import com.navi.bbps.common.usecase.RewardNudgeUseCase
|
||||
import com.navi.bbps.common.utils.BillDetailsResponseToEntityMapper
|
||||
import com.navi.bbps.common.utils.MyBillEntityToBillDetailsResponseMapper
|
||||
import com.navi.bbps.common.utils.NaviBbpsCommonUtils.getBbpsMetricInfo
|
||||
import com.navi.bbps.common.utils.NaviBbpsDateUtils
|
||||
import com.navi.bbps.common.utils.getDefaultConfig
|
||||
import com.navi.bbps.common.viewmodel.NaviBbpsBaseVM
|
||||
import com.navi.bbps.feature.billerlist.model.network.BillerGroupItemResponse
|
||||
@@ -93,7 +91,6 @@ constructor(
|
||||
private val dispatcherProvider: CoroutineDispatcherProvider,
|
||||
private val billerListRepository: BillerListRepository,
|
||||
private val bbpsCommonRepository: BbpsCommonRepository,
|
||||
private val naviBbpsDateUtils: NaviBbpsDateUtils,
|
||||
private val naviBbpsConfigUseCase: NaviBbpsConfigUseCase,
|
||||
private val deviceLocationProvider: DeviceLocationProvider,
|
||||
private val myBillsSyncJob: MyBillsSyncJob,
|
||||
@@ -102,6 +99,7 @@ constructor(
|
||||
private val myBillEntityToBillDetailsResponseMapper: MyBillEntityToBillDetailsResponseMapper,
|
||||
private val billDetailsResponseToEntityMapper: BillDetailsResponseToEntityMapper,
|
||||
private val resourceProvider: ResourceProvider,
|
||||
private val billerItemResponseToEntityMapper: BillerItemResponseToEntityMapper,
|
||||
) : NaviBbpsBaseVM(naviBbpsVmData = NaviBbpsVmData(screen = NaviBbpsScreen.NAVI_BBPS_BILLER_LIST)) {
|
||||
|
||||
private val naviBbpsAnalytics: NaviBbpsAnalytics.BillerList =
|
||||
@@ -272,6 +270,7 @@ constructor(
|
||||
status = myBillEntity.status,
|
||||
isAdhoc = myBillEntity.isAdhoc,
|
||||
state = "",
|
||||
region = "",
|
||||
categoryId = myBillEntity.categoryId,
|
||||
isPopular = false,
|
||||
),
|
||||
@@ -488,16 +487,7 @@ constructor(
|
||||
}
|
||||
|
||||
private fun BillerItemResponse.toBillerItemEntity(): BillerItemEntity {
|
||||
return BillerItemEntity(
|
||||
billerId = this.billerId,
|
||||
billerName = this.billerName,
|
||||
billerLogoUrl = this.billerLogoUrl ?: "",
|
||||
status = this.status ?: "",
|
||||
isAdhoc = this.isAdhoc == true,
|
||||
state = this.state ?: "",
|
||||
categoryId = this.categoryId,
|
||||
isPopular = this.isPopular.orFalse(),
|
||||
)
|
||||
return billerItemResponseToEntityMapper.toBillerItemEntity(response = this)
|
||||
}
|
||||
|
||||
private var billerListResponse: RepoResult<BillerListResponse> = RepoResult()
|
||||
@@ -629,22 +619,7 @@ constructor(
|
||||
recentBills = recentBillsEntity,
|
||||
billerGroups =
|
||||
fullBillerList.map { group ->
|
||||
BillerGroupItemEntity(
|
||||
title = group.title,
|
||||
billers =
|
||||
group.billers.map {
|
||||
BillerItemEntity(
|
||||
billerId = it.billerId,
|
||||
billerName = it.billerName,
|
||||
billerLogoUrl = it.billerLogoUrl,
|
||||
status = it.status,
|
||||
isAdhoc = it.isAdhoc,
|
||||
state = it.state,
|
||||
categoryId = it.categoryId,
|
||||
isPopular = it.isPopular,
|
||||
)
|
||||
},
|
||||
)
|
||||
BillerGroupItemEntity(title = group.title, billers = group.billers)
|
||||
},
|
||||
popularBillers =
|
||||
fullBillerList.flatMap { it.billers.filter { biller -> biller.isPopular } },
|
||||
|
||||
@@ -46,6 +46,7 @@ data class BillerItemResponse(
|
||||
@SerializedName("status") val status: String?,
|
||||
@SerializedName("isAdhoc") val isAdhoc: Boolean?,
|
||||
@SerializedName("state") val state: String?,
|
||||
@SerializedName("region") val region: String?,
|
||||
@SerializedName("categoryId") val categoryId: String,
|
||||
@SerializedName("isPopular") val isPopular: Boolean?,
|
||||
)
|
||||
|
||||
@@ -11,6 +11,7 @@ import android.os.Parcelable
|
||||
import androidx.annotation.Keep
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import com.navi.bbps.common.CATEGORY_ID_EDUCATION
|
||||
import com.navi.bbps.db.NaviBbpsAppDatabase.Companion.NAVI_BBPS_DATABASE_BILLERS
|
||||
import com.navi.bbps.feature.mybills.model.view.MyBillEntity
|
||||
import kotlinx.parcelize.Parcelize
|
||||
@@ -29,6 +30,11 @@ data class BillerItemEntity(
|
||||
val status: String,
|
||||
val isAdhoc: Boolean,
|
||||
val state: String,
|
||||
val region: String,
|
||||
val categoryId: String,
|
||||
val isPopular: Boolean,
|
||||
) : Parcelable
|
||||
|
||||
fun BillerItemEntity.isRegionWidgetVisible(): Boolean {
|
||||
return categoryId == CATEGORY_ID_EDUCATION && region.isNotBlank()
|
||||
}
|
||||
|
||||
@@ -412,9 +412,9 @@ fun BillerListScreen(
|
||||
) {
|
||||
keyboardController.customHide(context, view)
|
||||
naviBbpsAnalytics.onOfferRolodexClicked(
|
||||
source = source.orEmpty(),
|
||||
source = source,
|
||||
sessionAttribute = billerListViewModel.getNaviBbpsSessionAttributes(),
|
||||
initialSource = initialSource.orEmpty(),
|
||||
initialSource = initialSource,
|
||||
offerDataList = offerData,
|
||||
coinBurnData = coinBurnData,
|
||||
billCategoryEntity = billCategoryEntity,
|
||||
|
||||
@@ -77,6 +77,7 @@ import com.navi.bbps.feature.billerlist.BillerListViewModel
|
||||
import com.navi.bbps.feature.billerlist.model.view.BillerGroupItemEntity
|
||||
import com.navi.bbps.feature.billerlist.model.view.BillerItemEntity
|
||||
import com.navi.bbps.feature.billerlist.model.view.BillerListState
|
||||
import com.navi.bbps.feature.billerlist.model.view.isRegionWidgetVisible
|
||||
import com.navi.bbps.feature.mybills.model.view.MyBillEntity
|
||||
import com.navi.bbps.getBillTitleFromAccountHolderNameOrPrimaryCustomerParams
|
||||
import com.navi.bbps.noRippleClickableWithDebounce
|
||||
@@ -607,14 +608,27 @@ fun BillerItem(billerItemEntity: BillerItemEntity, onItemClicked: () -> Unit) {
|
||||
)
|
||||
Spacer(modifier = Modifier.width(8.dp))
|
||||
|
||||
NaviText(
|
||||
text = billerItemEntity.billerName,
|
||||
fontFamily = naviFontFamily,
|
||||
fontSize = 14.sp,
|
||||
color = NaviBbpsColor.textPrimary,
|
||||
modifier = Modifier.align(Alignment.CenterVertically),
|
||||
lineHeight = 20.sp,
|
||||
)
|
||||
Column(modifier = Modifier.fillMaxWidth().align(Alignment.CenterVertically)) {
|
||||
NaviText(
|
||||
text = billerItemEntity.billerName,
|
||||
fontFamily = naviFontFamily,
|
||||
fontSize = 14.sp,
|
||||
color = NaviBbpsColor.textPrimary,
|
||||
fontWeight = getFontWeight(FontWeightEnum.NAVI_BODY_REGULAR),
|
||||
lineHeight = 22.sp,
|
||||
)
|
||||
if (billerItemEntity.isRegionWidgetVisible()) {
|
||||
Spacer(modifier = Modifier.height(4.dp))
|
||||
NaviText(
|
||||
text = billerItemEntity.region,
|
||||
fontFamily = naviFontFamily,
|
||||
fontSize = 12.sp,
|
||||
color = NaviBbpsColor.textTertiary,
|
||||
fontWeight = getFontWeight(FontWeightEnum.NAVI_BODY_REGULAR),
|
||||
lineHeight = 16.sp,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
}
|
||||
|
||||
@@ -461,6 +461,7 @@ constructor(
|
||||
status = myBillEntity.status,
|
||||
isAdhoc = myBillEntity.isAdhoc,
|
||||
state = "",
|
||||
region = "",
|
||||
categoryId = myBillEntity.categoryId,
|
||||
isPopular = false,
|
||||
),
|
||||
|
||||
@@ -563,6 +563,7 @@ constructor(
|
||||
status = myBillEntity.status,
|
||||
isAdhoc = myBillEntity.isAdhoc,
|
||||
state = "",
|
||||
region = "",
|
||||
categoryId = myBillEntity.categoryId,
|
||||
isPopular = false,
|
||||
),
|
||||
|
||||
@@ -56,8 +56,6 @@ import androidx.compose.ui.text.input.ImeAction
|
||||
import androidx.compose.ui.text.input.OffsetMapping
|
||||
import androidx.compose.ui.text.input.TransformedText
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.text.withStyle
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
@@ -88,6 +86,7 @@ import com.navi.bbps.customHide
|
||||
import com.navi.bbps.entry.NaviBbpsActivity
|
||||
import com.navi.bbps.entry.NaviBbpsRouter
|
||||
import com.navi.bbps.feature.billerlist.model.view.BillerItemEntity
|
||||
import com.navi.bbps.feature.billerlist.model.view.isRegionWidgetVisible
|
||||
import com.navi.bbps.feature.category.model.view.BillCategoryEntity
|
||||
import com.navi.bbps.feature.customerinput.CustomerDataInputViewModel
|
||||
import com.navi.bbps.feature.customerinput.ParamKey
|
||||
@@ -473,22 +472,33 @@ fun RenderBillerDetailStrip(billerItemEntity: BillerItemEntity) {
|
||||
.padding(16.dp),
|
||||
) {
|
||||
BbpsCircleImage(
|
||||
modifier = Modifier.size(40.dp),
|
||||
imageUrl = billerItemEntity.billerLogoUrl,
|
||||
placeholderIconResId = com.navi.common.R.drawable.navi_common_ic_biller_placeholder,
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.width(8.dp))
|
||||
|
||||
NaviText(
|
||||
text = billerItemEntity.billerName,
|
||||
fontSize = 14.sp,
|
||||
fontFamily = naviFontFamily,
|
||||
fontWeight = getFontWeight(FontWeightEnum.NAVI_BODY_REGULAR),
|
||||
color = NaviBbpsColor.textPrimary,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
Column(modifier = Modifier.fillMaxWidth().align(Alignment.CenterVertically)) {
|
||||
NaviText(
|
||||
text = billerItemEntity.billerName,
|
||||
fontFamily = naviFontFamily,
|
||||
fontSize = 14.sp,
|
||||
color = NaviBbpsColor.textPrimary,
|
||||
fontWeight = getFontWeight(FontWeightEnum.NAVI_BODY_REGULAR),
|
||||
lineHeight = 22.sp,
|
||||
)
|
||||
if (billerItemEntity.isRegionWidgetVisible()) {
|
||||
NaviText(
|
||||
text = billerItemEntity.region,
|
||||
fontFamily = naviFontFamily,
|
||||
fontSize = 12.sp,
|
||||
color = NaviBbpsColor.textTertiary,
|
||||
fontWeight = getFontWeight(FontWeightEnum.NAVI_BODY_REGULAR),
|
||||
lineHeight = 16.sp,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
|
||||
@@ -293,6 +293,7 @@ constructor(
|
||||
status = EMPTY,
|
||||
isAdhoc = true,
|
||||
state = EMPTY,
|
||||
region = EMPTY,
|
||||
categoryId = detectedBillEntity.categoryId,
|
||||
isPopular = true,
|
||||
)
|
||||
|
||||
@@ -595,6 +595,7 @@ constructor(
|
||||
status = myBillEntity.status,
|
||||
isAdhoc = myBillEntity.isAdhoc,
|
||||
state = "",
|
||||
region = "",
|
||||
categoryId = myBillEntity.categoryId,
|
||||
isPopular = false,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user