TP-53619 | Master → Development (Release 4.4.0) (#9355)

This commit is contained in:
Shivam Goyal
2024-01-13 00:50:51 +05:30
committed by GitHub
parent 8eb4149f39
commit ffffce139c
9 changed files with 122 additions and 23 deletions

View File

@@ -2,7 +2,7 @@ name: Android Checkstyle CI
on:
pull_request:
branches: [ development ]
branches: [ master, release-*, development ]
merge_group:
concurrency:

View File

@@ -15,8 +15,8 @@ kapt {
correctErrorTypes true
}
def VERSION_CODE = 373
def VERSION_NAME = "4.3.1"
def VERSION_CODE = 374
def VERSION_NAME = "4.4.0"
android {
namespace 'com.naviapp'

View File

@@ -30,7 +30,6 @@ import com.navi.common.utils.log
import com.navi.common.utils.observeNullable
import com.navi.homeloan.common.customview.HLCommonBottomSheet
import com.navi.homeloan.common.models.HomeLoanGenericBottomSheetData
import com.navi.naviwidgets.base.ui.TitleDescriptionCtaBottomSheet
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.navigator.NaviDeepLinkNavigator
@@ -58,6 +57,8 @@ import com.naviapp.utils.Constants.AUTO_DEBIT_BACK
import com.naviapp.utils.Constants.EMPTY
import com.naviapp.utils.Constants.INCOME_VERIFICATION
import com.naviapp.utils.Constants.JOURNEY_TYPE
import com.naviapp.utils.Constants.TYPE_HOME_LOAN
import com.naviapp.utils.Constants.TYPE_PERSONAL_LOAN
import com.naviapp.utils.Constants.WIDGET_ID
import com.naviapp.utils.LOAN_ACCOUNT_NUMBER
import com.naviapp.utils.getLendingModuleNameFromWidgetId
@@ -183,19 +184,51 @@ class LoanApplicationDetailActivity :
}
private fun addHelpOption(loanType: String?) {
if (loanType == Constants.TYPE_HOME_LOAN) {
binding.topHeaderLay.helpTv.visibility = View.VISIBLE
binding.topHeaderLay.helpTv.setOnClickListener {
openHelpInfo(SCREEN_NAME_HL, loanType)
when (loanType) {
TYPE_HOME_LOAN -> {
showHelpButton(SCREEN_NAME_HL,loanType)
}
TYPE_PERSONAL_LOAN -> {
showHelpButton(LOAN_DETAILS,loanType)
}
else -> {}
}
}
private fun openHelpInfo(keyName: String, loanType: String?) {
if (isDead()) return
helpEventTracker.onHelpButtonClick(screenName, loanType)
val bottomSheet = CustomerSupportFragment.newInstance(keyName, null, loanType)
safelyShowBottomSheet(bottomSheet, CustomerSupportFragment.TAG)
private fun showHelpButton(screenName:String,loanType: String){
binding.topHeaderLay.helpTv.visibility = View.VISIBLE
binding.topHeaderLay.helpTv.setOnClickListener {
openHelpInfo(screenName, loanType)
}
}
private fun openHelpInfo(screenName: String, loanType: String?) {
when (loanType) {
TYPE_HOME_LOAN -> {
if (isDead()) return
helpEventTracker.onHelpButtonClick(screenName, loanType)
val bottomSheet = CustomerSupportFragment.newInstance(screenName, null, loanType)
safelyShowBottomSheet(bottomSheet, CustomerSupportFragment.TAG)
}
TYPE_PERSONAL_LOAN -> {
if (isDead()) return
helpEventTracker.onHelpButtonClick(screenName,loanType)
NaviDeepLinkNavigator.navigate(
activity = this, ctaData = CtaData(
url = Constants.PRODUCT_HELP_PAGE, parameters = listOf(
LineItem(
key = Constants.CRM_HELP_SCREEN_NAME, value = screenName
)
)
)
)
}
else -> {}
}
}
private fun initData(data: LoanApplicationDetails) {
@@ -263,10 +296,10 @@ class LoanApplicationDetailActivity :
if (bundle?.getString(AUTO_DEBIT_BACK).equals(Constants.TRUE)) {
val bankAutoDebitFragment =
supportFragmentManager.findFragmentByTag(BankDetailsAutoDebitFragment.TAG)
as? BankDetailsAutoDebitFragment?
as? BankDetailsAutoDebitFragment?
val bankDetailsFragment =
supportFragmentManager.findFragmentByTag(BankDetailsFragment.TAG)
as? BankDetailsFragment?
as? BankDetailsFragment?
if (bankAutoDebitFragment != null && bankAutoDebitFragment.isVisible) {
showLoader()
bundle?.getString(LOAN_ACCOUNT_NUMBER)?.let {
@@ -381,10 +414,10 @@ class LoanApplicationDetailActivity :
override fun onBackPressed() {
val bankAutoDebitFragment =
supportFragmentManager.findFragmentByTag(BankDetailsAutoDebitFragment.TAG)
as? BankDetailsAutoDebitFragment?
as? BankDetailsAutoDebitFragment?
val bankDetailsFragment =
supportFragmentManager.findFragmentByTag(BankDetailsFragment.TAG)
as? BankDetailsFragment?
as? BankDetailsFragment?
if (bankAutoDebitFragment != null && bankAutoDebitFragment.isVisible) {
supportFragmentManager.beginTransaction().remove(bankAutoDebitFragment).commit()
showLoader()

View File

@@ -10,12 +10,14 @@ package com.naviapp.home.dashboard.models.response
import android.os.Parcelable
import com.google.gson.annotations.SerializedName
import com.navi.base.model.ActionData
import com.navi.common.model.common.Header
import com.navi.naviwidgets.models.NaviWidget
import java.io.Serializable
import kotlinx.parcelize.Parcelize
@Parcelize
data class DashboardContentResponse(
@SerializedName("header") val header:Header? = null,
@SerializedName("contentWidget") val listOfWidgets: List<NaviWidget>? = null,
@SerializedName("metaData") val metaData: DashboardContentMetaData? = null
) : Serializable, Parcelable

View File

@@ -36,6 +36,7 @@ import com.navi.base.utils.isNull
import com.navi.base.utils.orFalse
import com.navi.chat.ui.fragments.NaviChatErrorFragment
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
import com.navi.common.model.common.Header
import com.navi.common.ui.activity.BaseActivity
import com.navi.common.ui.fragment.ActionErrorFragment
import com.navi.common.ui.fragment.FullScreenErrorDialog
@@ -205,6 +206,7 @@ class ProductFragment : PartPrePaymentBaseFragment(), WidgetCallback, DashboardP
productVM.dashboardContentResponse.observeNonNull(viewLifecycleOwner) { dashboardContentResponse ->
hideLoader()
TemporaryStorageHelper.updateApiTs(dashboardTab?.name.orEmpty())
setHeaderData(dashboardContentResponse.header)
binding.flError.isVisible = false
binding.rvProducts.isVisible = true
getFilteredNaviWidgets(dashboardContentResponse.listOfWidgets)?.let { listOfWidgets ->
@@ -244,6 +246,16 @@ class ProductFragment : PartPrePaymentBaseFragment(), WidgetCallback, DashboardP
}
}
private fun setHeaderData(headerData: Header?) {
headerData?.let {header->
binding.tvHelp.isVisible = header.enableHelp.orFalse()
binding.tvHelp.setOnClickListener{
openHelpInfo(screenName)
}
}
}
private fun handlePolices(value: String?) {
val jsonData = Gson().fromJson(value, DashboardPolicyBenefitData::class.java)
jsonData?.listOfPolicyBenefits?.let {
@@ -513,6 +525,21 @@ class ProductFragment : PartPrePaymentBaseFragment(), WidgetCallback, DashboardP
}
}
private fun openHelpInfo(screenName: String) {
NaviDeepLinkNavigator.navigate(
activity = this.requireActivity(), ctaData = CtaData(
url = com.naviapp.utils.Constants.PRODUCT_HELP_PAGE,
parameters = listOf(
LineItem(
key = com.naviapp.utils.Constants.CRM_HELP_SCREEN_NAME,
value = screenName
)
)
)
)
}
private fun toOpenBottomsheet(url: String?): Boolean {
url?.let {
return url.contains(SHOW_BOTTOMSHEET, true)

View File

@@ -11,9 +11,11 @@ import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import com.google.gson.Gson
import com.navi.base.utils.orFalse
import com.navi.base.utils.orZero
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
import com.navi.common.utils.log
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.manager.RetryableUserDataUploadWorker
import com.naviapp.manager.RetryableUserDataUploadWorker.Companion.API_FAILURE_RETRY_REQUIRED
import com.naviapp.manager.RetryableUserDataUploadWorker.Companion.DEFAULT_WORKER_RETRY_COUNT
@@ -30,11 +32,17 @@ import javax.inject.Inject
class UserDataUploadWorkerUseCase @Inject constructor(@ApplicationContext val context: Context) {
fun initDataUploadWorker(screenName: String) {
val dataUploadConfig = getDataUploadConfig()
if (dataUploadConfig != null && isAllowedAppVersion(dataUploadConfig)) {
startRetryDataUploadWorker(dataUploadConfig, screenName)
if (isOneTimeDataUploadDisabled().not()) {
val dataUploadConfig = getDataUploadConfig()
if (dataUploadConfig != null && isAllowedAppVersion(dataUploadConfig)) {
startRetryDataUploadWorker(dataUploadConfig, screenName)
} else {
startOldDataUploadWorker(screenName)
}
} else {
startOldDataUploadWorker(screenName)
NaviAnalytics.naviAnalytics.BaseUserDataUploadWorker(
screenName, APP_LAUNCH_DATA_UPLOAD_WORKER
).onEvent(ONE_TIME_DATA_UPLOAD_DISABLED, null)
}
}
@@ -102,6 +110,12 @@ class UserDataUploadWorkerUseCase @Inject constructor(@ApplicationContext val co
}
}
private fun isOneTimeDataUploadDisabled(): Boolean {
return FirebaseRemoteConfigHelper.getBoolean(
FirebaseRemoteConfigHelper.ONE_TIME_DATA_UPLOAD_DISABLED
).orFalse()
}
private fun getPeriodicDataUploadConfig(): DataUploadFirebaseConfig? {
return try {
Gson().fromJson(
@@ -138,6 +152,8 @@ class UserDataUploadWorkerUseCase @Inject constructor(@ApplicationContext val co
val repeatInterval = if (dataUploadConfig.repeatIntervalInSeconds.orZero() > 0)
dataUploadConfig.repeatIntervalInSeconds.orZero()
else WORKER_INTERVAL_TIME_IN_SECONDS
val initialDelay = dataUploadConfig.initialDelayInSeconds.orZero()
val uploadConstraints =
Constraints.Builder()
.setRequiresCharging(false)
@@ -161,6 +177,7 @@ class UserDataUploadWorkerUseCase @Inject constructor(@ApplicationContext val co
.setConstraints(uploadConstraints)
.setBackoffCriteria(BackoffPolicy.LINEAR, retrySeconds, TimeUnit.SECONDS)
.setConstraints(uploadConstraints)
.setInitialDelay(initialDelay, TimeUnit.SECONDS)
.addTag(PERIODIC_USER_UPLOAD_WORKER_TAG)
.build()
WorkManager.getInstance(context)
@@ -200,6 +217,8 @@ class UserDataUploadWorkerUseCase @Inject constructor(@ApplicationContext val co
const val on_data_upload_acknowledgement_failure =
"on_data_upload_acknowledgement_failure"
const val PL_Ingestion_Task_List_Empty = "PL_Ingestion_Task_List_Empty"
const val ONE_TIME_DATA_UPLOAD_DISABLED = "ONE_TIME_DATA_UPLOAD_DISABLED"
}
}

View File

@@ -8,4 +8,5 @@ data class DataUploadFirebaseConfig(
@SerializedName("retryCount") val retryCount: Int? = null,
@SerializedName("retryDelayInSeconds") val retryDelayInSeconds: Long? = null,
@SerializedName("repeatIntervalInSeconds") val repeatIntervalInSeconds: Long? = null,
@SerializedName("initialDelayInSeconds") val initialDelayInSeconds: Long? = null
)

View File

@@ -16,13 +16,29 @@
android:background="@color/white"
tools:context=".home.dashboard.ui.ProductFragment">
<com.navi.design.textview.NaviTextView
android:id="@+id/tvHelp"
style="@style/ExtraBoldSmallOutrageousOrange"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/layout_dp_16"
android:background="?android:selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:text="@string/help"
android:visibility="gone"
app:layout_goneMarginTop="@dimen/layout_dp_16"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="HELP" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintTop_toBottomOf="@id/tvHelp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvProducts"

View File

@@ -96,6 +96,7 @@ object FirebaseRemoteConfigHelper {
const val NAVI_PAY_TRANSACTION_HISTORY_DYNAMIC_FILTER_ENABLED = "NAVI_PAY_TRANSACTION_HISTORY_DYNAMIC_FILTER_ENABLED"
const val PAN_VERIFICATION_HPC_APPLICATION_NAME = "PAN_VERIFICATION_HPC_APPLICATION_NAME"
const val PAN_VERIFICATION_HPC_PAN_SCREEN_NAME = "PAN_VERIFICATION_HPC_PAN_SCREEN_NAME"
const val ONE_TIME_DATA_UPLOAD_DISABLED = "ONE_TIME_DATA_UPLOAD_DISABLED"
const val NAVI_PAY_MINIMUM_APP_VERSION_ALLOWED_FOR_ONBOARDING = "NAVI_PAY_MINIMUM_APP_VERSION_ALLOWED_FOR_ONBOARDING"
fun init() {