TP-53619 | Master → Development (Release 4.4.0) (#9355)
This commit is contained in:
2
.github/workflows/android_checkstyle.yml
vendored
2
.github/workflows/android_checkstyle.yml
vendored
@@ -2,7 +2,7 @@ name: Android Checkstyle CI
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ development ]
|
||||
branches: [ master, release-*, development ]
|
||||
merge_group:
|
||||
|
||||
concurrency:
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user