diff --git a/.github/workflows/generate_apk.yml b/.github/workflows/generate_apk.yml
index 7bf359e389..7b0bfe1899 100644
--- a/.github/workflows/generate_apk.yml
+++ b/.github/workflows/generate_apk.yml
@@ -87,7 +87,7 @@ jobs:
run: keytool -genkey -v -keystore app/navi-release-key.jks -storepass $KEYSTORE_PASSWORD -alias $KEYSTORE_ALIAS -keypass $KEYSTORE_ALIAS_PASSWORD -keyalg RSA -keysize 2048 -validity 10000 -dname "cn=Android Build CI, ou=Android Team, o=Navi, l=Bengaluru, st=Karnataka, c=IN"
- name: Build - APK - ${{ inputs.environment }}-${{ inputs.type }}
if: inputs.output == 'APK'
- run: ./gradlew assemble${{ inputs.environment }}${{ inputs.type }} --stacktrace -PRELEASE_STORE_PASSWORD=$KEYSTORE_PASSWORD -PRELEASE_KEY_ALIAS=$KEYSTORE_ALIAS -PRELEASE_KEY_PASSWORD=$KEYSTORE_ALIAS_PASSWORD
+ run: ./gradlew package${{ inputs.environment }}${{ inputs.type }}UniversalApk --stacktrace -PRELEASE_STORE_PASSWORD=$KEYSTORE_PASSWORD -PRELEASE_KEY_ALIAS=$KEYSTORE_ALIAS -PRELEASE_KEY_PASSWORD=$KEYSTORE_ALIAS_PASSWORD
- name: Build - AAB - ${{ inputs.environment }}-${{ inputs.type }}
if: inputs.output == 'AAB'
run: ./gradlew :app:bundle${{ inputs.environment }}${{ inputs.type }} --stacktrace -PRELEASE_STORE_PASSWORD=$KEYSTORE_PASSWORD -PRELEASE_KEY_ALIAS=$KEYSTORE_ALIAS -PRELEASE_KEY_PASSWORD=$KEYSTORE_ALIAS_PASSWORD
@@ -96,6 +96,6 @@ jobs:
with:
name: app-${{ inputs.environment }}-${{ inputs.type }}
path: |
- app/build/outputs/apk/
+ app/build/outputs/universal_apk/
app/build/outputs/bundle/
retention-days: 15
diff --git a/app/build.gradle b/app/build.gradle
index 9299839155..9076ad27e3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -18,8 +18,8 @@ kapt {
correctErrorTypes true
}
-def VERSION_CODE = 320
-def VERSION_NAME = "3.3.28"
+def VERSION_CODE = 321
+def VERSION_NAME = "3.4.0"
android {
namespace 'com.naviapp'
@@ -96,7 +96,7 @@ android {
release {
debuggable false
minifyEnabled true
- shrinkResources true
+ shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
manifestPlaceholders = [branchMode: 'false']
@@ -210,6 +210,7 @@ android {
dirs 'libs'
}
}
+ dynamicFeatures = [':navi_pl_dynamic']
}
android.applicationVariants.all { variant ->
@@ -360,7 +361,7 @@ dependencies {
implementation 'com.digitap.sdk:okyc:1.3.4'
// for play store in app review
- implementation playCore.implementation
+ api playCore.implementation
// for Trucaller
implementation "com.truecaller.android.sdk:truecaller-sdk:2.7.0"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9e24188613..3e7843d5d5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -55,11 +55,6 @@
android:name=".dashboard.loanapplicationdetails.documentlist.activity.DocumentListActivity"
android:screenOrientation="portrait"
android:exported="false" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
showLoader()
+ false -> hideLoader()
+ }
+ }
+ }
+ Column(modifier = Modifier.fillMaxSize().background(color = Color.White)) {
+ uiTronResponse?.let { RenderUiTronData(viewModel = viewModel, data = it) }
+ }
+ }
+
+ @Composable
+ private fun RenderUiTronData(viewModel: PromotionVM, data: UiTronResponse) {
+ UiTronRenderer(data.data, viewModel).Render(composeViews = data.parentComposeView.orEmpty())
+ }
+
+ private fun reInitData() {
+ hideLoader()
+ viewModel.fetchPromotionData(isAllMandatoryPermissionGranted(this@PromotionActivity))
+ }
+
+ override val screenName
+ get() = NaviAnalytics.PROMOTION
+ override val moduleName: ModuleNameV2
+ get() = ModuleNameV2.COMMON
+}
diff --git a/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt b/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt
index ad74721596..6abfeddec3 100644
--- a/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt
+++ b/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt
@@ -8,6 +8,7 @@
package com.naviapp.common.navigator
import android.app.Activity
+import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
@@ -30,24 +31,36 @@ import com.navi.base.utils.orFalse
import com.navi.base.utils.orZero
import com.navi.chat.models.NaviChatSystemLocalData
import com.navi.chat.ui.activities.NaviChatActivity
-import com.navi.chat.utils.*
+import com.navi.chat.utils.CHAT_TOUCH_POINT_CLICKED
+import com.navi.chat.utils.DEFAULT_SOURCE_ID_FOR_PL
+import com.navi.chat.utils.NAVI_CHAT_SYSTEM_LOCAL_DATA
+import com.navi.chat.utils.SOURCE
+import com.navi.chat.utils.TIMESTAMP
+import com.navi.chat.utils.TRACKING_UUID
import com.navi.common.BuildConfig
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
import com.navi.common.managers.PermissionsManager
import com.navi.common.model.UserDetail
import com.navi.common.paymenthandler.ui.CommonPaymentHandlerActivity
import com.navi.common.ui.activity.NaviWebViewActivity
+import com.navi.common.utils.isDynamicModuleInstalled
import com.navi.common.utils.log
import com.navi.common.utils.toActionData
import com.navi.common.video.NaviYoutubeActivity
import com.navi.hl.navigator.NaviHLDeeplinkNavigator
import com.navi.insurance.navigator.NaviInsuranceDeeplinkNavigator
import com.navi.insurance.util.VIDEO_ID_EXTRA
-import com.navi.naviwidgets.utils.*
+import com.navi.naviwidgets.utils.CHOOSER_TITLE_PARAM
+import com.navi.naviwidgets.utils.EMAIL_BODY_PARAM
+import com.navi.naviwidgets.utils.EMAIL_ID_PARAM
+import com.navi.naviwidgets.utils.EMAIL_SUBJECT_PARAM
+import com.navi.naviwidgets.utils.NAVI_CHAT_META_DATA
+import com.naviapp.BuildConfig.APPLICATION_ID
import com.naviapp.R
import com.naviapp.account_aggregator.AccountAggregatorActivity
import com.naviapp.analytics.deeplink.DeeplinkManager
import com.naviapp.appupdate.activities.UpdateAppActivity
+import com.naviapp.common.fragment.PromotionActivity
import com.naviapp.crosssell.ui.TaxDocumentsActivity
import com.naviapp.crosssell.ui.TaxSavingsActivity
import com.naviapp.custom_payments.CustomPaymentActivity
@@ -55,6 +68,7 @@ import com.naviapp.dashboard.loanapplicationdetails.activities.LoanApplicationDe
import com.naviapp.dashboard.loanapplicationdetails.activities.TrancheDisbursalActivity
import com.naviapp.dashboard.loanapplicationdetails.bank_account_change.activities.BankChangeActivity
import com.naviapp.dashboard.loanapplicationdetails.documentlist.activity.DocumentListActivity
+import com.naviapp.dashboard.menu.appsettings.activity.AppSettingsActivity
import com.naviapp.dashboard.menu.customersupport.activities.AboutUsActivity
import com.naviapp.dashboard.menu.customersupport.activities.CustomerSupportActivity
import com.naviapp.dashboard.menu.loans.activity.AllLoanDetailsActivity
@@ -62,15 +76,21 @@ import com.naviapp.dashboard.menu.notificationsettings.NotificationSettingsActiv
import com.naviapp.dashboard.menu.utils.INSURANCE
import com.naviapp.dashboard.menu.utils.openCallDialScreen
import com.naviapp.dashboard.menu.utils.openEmailScreenWithSubjectAndBody
-import com.naviapp.dashboard.newloan.NewLoanConsentActivity
import com.naviapp.dashboard.rating.RatingActivity
-import com.naviapp.digitalgold.ui.*
+import com.naviapp.digitalgold.ui.DigitalGoldBuyActivity
+import com.naviapp.digitalgold.ui.DigitalGoldHomeActivity
+import com.naviapp.digitalgold.ui.DigitalGoldInfoActivity
+import com.naviapp.digitalgold.ui.DigitalGoldKycFragment
+import com.naviapp.digitalgold.ui.DigitalGoldSellActivity
+import com.naviapp.digitalgold.ui.DigitalGoldTransactionActivity
+import com.naviapp.digitalgold.ui.IconTitleDescBottomSheet
+import com.naviapp.digitalgold.ui.PortfolioExperienceBottomsheet
+import com.naviapp.dynamicdelivery.activity.DynamicDeliveryActivity
import com.naviapp.email.activity.EmailActivity
import com.naviapp.home.activity.NewDashboardActivity
import com.naviapp.home.activity.StoryActivity
import com.naviapp.home.dashboard.ui.R11PaymentBottomSheet
import com.naviapp.interest_reset.InterestResetActivity
-import com.naviapp.models.SubPageStatusType
import com.naviapp.part_prepayment.PartPrePaymentActivity
import com.naviapp.payment.activities.FeedbackActivity
import com.naviapp.payment.activities.NaviPaymentActivity
@@ -88,11 +108,10 @@ import com.naviapp.personalloan.insurance.activity.InsuranceAddOnActivity
import com.naviapp.personalloan.insurance.activity.InsuranceDetailActivity
import com.naviapp.personalloan.intermediate.activity.IntermediateActivity
import com.naviapp.personalloanrevamp.bankDetailsPostKyc.activity.BankDetailsLoaderPostKycActivity
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.getloanRevamp.activities.*
-import com.naviapp.personalloanrevamp.intermediatev2.IntermediateV2Activity
-import com.naviapp.personalloanrevamp.kyc.activity.PanVerificationLoaderActivity
-import com.naviapp.personalloanrevamp.useridentificationv2.activities.*
+import com.naviapp.personalloanrevamp.getloanRevamp.activities.EnachTutorialV2Activity
+import com.naviapp.personalloanrevamp.getloanRevamp.activities.SkipMandateV2Activity
+import com.naviapp.personalloanrevamp.useridentificationv2.activities.PermissionV2Activity
+import com.naviapp.personalloanrevamp.useridentificationv2.activities.PermissionV2LocExpActivity
import com.naviapp.referral.ui.ReferralHomeActivity
import com.naviapp.registration.RegistrationActivity
import com.naviapp.registration.SplashActivity
@@ -102,16 +121,23 @@ import com.naviapp.rewards.ui.RewardsDashboardActivity
import com.naviapp.status_tracker.StatusTrackerActivity
import com.naviapp.survey.ui.activities.SurveyActivity
import com.naviapp.usernotification.activities.UserNotificationActivity
-import com.naviapp.utils.*
+import com.naviapp.utils.Constants
+import com.naviapp.utils.Constants.ACTIVITY_CLASS_PATH
+import com.naviapp.utils.Constants.EMPTY
import com.naviapp.utils.Constants.FLOW_TYPE
import com.naviapp.utils.Constants.KYC
import com.naviapp.utils.Constants.LOAN_ACCOUNT_NUMBER
+import com.naviapp.utils.Constants.PL_DYNAMIC_MODULE_NAME
import com.naviapp.utils.Constants.S3URL
import com.naviapp.utils.Constants.SKIP_PERMISSION
import com.naviapp.utils.Constants.URL
import com.naviapp.utils.Constants.VERIFICATION_HASH
-import timber.log.Timber
+import com.naviapp.utils.NaviAppUpdateDownloadManager
+import com.naviapp.utils.ShareUtil
+import com.naviapp.utils.openPlayStore
+import com.naviapp.utils.openWhatsAppChatConversation
import java.io.ByteArrayOutputStream
+import timber.log.Timber
object NaviDeepLinkNavigator : DeepLinkListener {
private const val OFFER_GENERATION = "OFFER_GENERATION"
@@ -123,6 +149,7 @@ object NaviDeepLinkNavigator : DeepLinkListener {
const val ERROR_V2 = "ERRORS_V2"
private const val MY_LOANS = "myloans"
private const val NOTIFICATION_SETTINGS = "notificationSettings"
+ private const val APP_SETTINGS = "appSettings"
const val FAQ = "faq"
private const val CALL = "call"
const val PENNY_DROP_DISBURSEMENT_LOADER = "PENNY_DROP_DISBURSEMENT_LOADER"
@@ -148,7 +175,7 @@ object NaviDeepLinkNavigator : DeepLinkListener {
private const val ENACH_TUTORIAL = "ENACH_TUTORIAL"
private const val FAQ_SCREEN = "FAQ_SCREEN"
private const val LOAN_AGREEMENT = "LOAN_AGREEMENT"
- private const val NEW_LOAN = "NEW_LOAN"
+ const val NEW_LOAN = "NEW_LOAN"
private const val INSURANCE_ADD = "INSURANCE_ADD"
private const val AMC = "amc"
private const val HL = "hl"
@@ -182,6 +209,8 @@ object NaviDeepLinkNavigator : DeepLinkListener {
const val OFFER_GENERATION_V2 = "OFFER_GENERATION_V2"
const val PERSONAL_LOAN_TRACKER = "PERSONAL_LOAN_TRACKER"
const val PERMISSION_V2 = "permission_V2"
+ const val PERMISSION_V3 = "permission_V3"
+ const val PERMISSION_V4 = "permission_V4"
private const val POST_OFFER_GENERATION_V2 = "POST_OFFER_GENERATION_V2"
const val INTERMEDIATE_V2 = "intermediate_V2"
const val LOAN_AGREEMENT_V2 = "LOAN_AGREEMENT_V2"
@@ -219,7 +248,30 @@ object NaviDeepLinkNavigator : DeepLinkListener {
const val TRANCHE_DISBURSAL = "trancheDisbursal"
const val ACCOUNT_AGGREGATOR = "ACCOUNT_AGGREGATOR_V2"
const val MANDATE_PERMISSION = "MANDATE_PERMISSION"
+ const val PROMOTION_SCREEN = "promotion"
private const val PAYMENT_ACTIVITY = "PAYMENT_ACTIVITY"
+ private const val DYNAMIC_DELIVERY = "DYNAMIC_DELIVERY"
+ private const val PERSONAL_LOAN_TRACKER_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH =
+ "com.navi.pl.dynamic.activity.PersonalLoanTrackerActivity"
+ private const val ELIGIBILITY_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH =
+ "com.navi.pl.dynamic.activity.UserIdentificationV2Activity"
+ private const val OFFER_GENERATION_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH =
+ "com.navi.pl.dynamic.activity.LoanEligibilityLoaderV2Activity"
+ private const val LOAN_APPLICATION_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH =
+ "com.navi.pl.dynamic.activity.GetLoanV2Activity"
+ private const val PAN_VERIFICATION_LOADER_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH =
+ "com.navi.pl.dynamic.activity.PanVerificationLoaderActivity"
+ private const val INTERMEDIATE_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH =
+ "com.navi.pl.dynamic.activity.IntermediateV2Activity"
+ private const val ERROR_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH =
+ "com.navi.pl.dynamic.activity.ErrorScreenV2Activity"
+ private const val LOAN_AGREEMENT_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH =
+ "com.navi.pl.dynamic.activity.LoanAgreementV2Activity"
+ private const val DISBURSEMENT_STATUS_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH =
+ "com.navi.pl.dynamic.activity.LoanDisbursementLoaderV2Activity"
+ const val HOME_ACTIVITY_CLASS_PATH = "com.naviapp.home.activity.NewDashboardActivity"
+ private const val NEW_LOAN_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH =
+ "com.navi.pl.dynamic.activity.NewLoanConsentActivity"
fun navigate(
activity: Activity?,
@@ -265,29 +317,49 @@ object NaviDeepLinkNavigator : DeepLinkListener {
HOME_SMALL -> {
intent = Intent(activity, NewDashboardActivity::class.java)
}
- PERSONAL_LOAN_TRACKER ->
- intent = Intent(activity, PersonalLoanTrackerActivity::class.java)
-
+ PERSONAL_LOAN_TRACKER -> {
+ intent =
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = PERSONAL_LOAN_TRACKER
+ )
+ }
ELIGIBILITY_V2 -> {
intent =
if (secondIdentifier == PERSONAL_LOAN_TRACKER) {
- Intent(activity, PersonalLoanTrackerActivity::class.java)
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = PERSONAL_LOAN_TRACKER
+ )
} else {
- Intent(activity, UserIdentificationV2Activity::class.java)
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = ELIGIBILITY_V2
+ )
}
}
LOAN_APPLICATION -> {
intent = Intent(activity, GetLoanActivity::class.java)
}
PAN_VERIFICATION_LOADER -> {
- intent = Intent(activity, PanVerificationLoaderActivity::class.java)
+ intent =
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = PAN_VERIFICATION_LOADER
+ )
}
LOAN_APPLICATION_V2 -> {
intent =
if (secondIdentifier == DISBURSEMENT_STATUS_V2) {
- Intent(activity, LoanDisbursementLoaderV2Activity::class.java)
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = DISBURSEMENT_STATUS_V2
+ )
} else {
- Intent(activity, GetLoanV2Activity::class.java)
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = LOAN_APPLICATION_V2
+ )
}
}
OPEN_EMAIL -> {
@@ -299,14 +371,25 @@ object NaviDeepLinkNavigator : DeepLinkListener {
CREDIT_ASSIGNMENT_SCREEN -> {
intent = Intent(activity, CreditAssignmentActivity::class.java)
}
- OFFER_GENERATION_V2 ->
- intent = Intent(activity, LoanEligibilityLoaderV2Activity::class.java)
+ OFFER_GENERATION_V2 -> {
+ intent =
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = OFFER_GENERATION_V2
+ )
+ }
POST_OFFER_GENERATION -> intent = Intent(activity, GetLoanActivity::class.java)
- POST_OFFER_GENERATION_V2 ->
- intent = Intent(activity, GetLoanV2Activity::class.java)
+ POST_OFFER_GENERATION_V2 -> {
+ intent =
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = LOAN_APPLICATION_V2
+ )
+ }
SKIP_MANDATE_V2 -> intent = Intent(activity, SkipMandateV2Activity::class.java)
ERROR_V2 -> {
- intent = Intent(activity, ErrorScreenV2Activity::class.java)
+ intent =
+ getPersonalLoanDynamicModuleIntent(context = activity, url = ERROR_V2)
}
MENU -> {
when (secondIdentifier) {
@@ -329,6 +412,8 @@ object NaviDeepLinkNavigator : DeepLinkListener {
}
NOTIFICATION_SETTINGS ->
intent = Intent(activity, NotificationSettingsActivity::class.java)
+ APP_SETTINGS ->
+ intent = Intent(activity, AppSettingsActivity::class.java)
RATE_US -> activity?.let { it1 -> openPlayStore(it1) }
SHARE_APP -> {
var shareableLink: String? = null
@@ -363,13 +448,20 @@ object NaviDeepLinkNavigator : DeepLinkListener {
INTERMEDIATE -> {
intent =
if (secondIdentifier == TOP_UP_INTRO) {
- Intent(activity, IntermediateV2Activity::class.java)
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = INTERMEDIATE_V2
+ )
} else {
Intent(activity, IntermediateActivity::class.java)
}
}
INTERMEDIATE_V2 -> {
- intent = Intent(activity, IntermediateV2Activity::class.java)
+ intent =
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = INTERMEDIATE_V2
+ )
}
ACCOUNT_AGGREGATOR -> {
intent = Intent(activity, AccountAggregatorActivity::class.java)
@@ -378,50 +470,42 @@ object NaviDeepLinkNavigator : DeepLinkListener {
intent = Intent(activity, LoanApplicationDetailActivity::class.java)
}
REGISTRATION -> {
- intent = if (BaseUtils.isUserLoggedIn()) Intent(
- activity, NewDashboardActivity::class.java
- ) else Intent(activity, RegistrationActivity::class.java)
+ intent =
+ if (BaseUtils.isUserLoggedIn())
+ Intent(activity, NewDashboardActivity::class.java)
+ else Intent(activity, RegistrationActivity::class.java)
}
PERMISSION -> {
intent = Intent(activity, PermissionActivity::class.java)
}
PERMISSION_V2 -> {
- val secondaryCtaUrl = getSecondaryCtaFromParameters(ctaData.parameters)
- if (activity != null && secondaryCtaUrl != null) {
- val permissionsManager = PermissionsManager(activity)
+ var secondaryCta =
+ FirebaseRemoteConfigHelper.getString(
+ FirebaseRemoteConfigHelper.SECONDARY_CTA
+ )
+ if (secondaryCta.isEmpty()) {
+ secondaryCta = OFFER_GENERATION_V2
+ }
+ val cta = CtaData(url = secondaryCta, parameters = ctaData.parameters)
+ activity?.let { act ->
+ val permissionsManager = PermissionsManager(act)
if (!permissionsManager.hasPermissions()) {
- intent = if (FirebaseRemoteConfigHelper.getBoolean(
- FirebaseRemoteConfigHelper.LOCATION_EXPERIMENT
- )
- ) {
- Intent(activity, PermissionV2LocExpActivity::class.java)
- } else {
- Intent(activity, PermissionV2Activity::class.java)
- }
- } else {
- val cta = CtaData(
- url = secondaryCtaUrl,
- parameters = ctaData.parameters
- )
bundle.putString(FLOW_TYPE, SKIP_PERMISSION)
- navigateTo(
- activity = activity,
- ctaData = cta,
- finish = finish,
- bundle = bundle
- )
- return
- }
- } else {
- intent = if (FirebaseRemoteConfigHelper.getBoolean(
- FirebaseRemoteConfigHelper.LOCATION_EXPERIMENT
- )
- ) {
- Intent(activity, PermissionV2LocExpActivity::class.java)
- } else {
- Intent(activity, PermissionV2Activity::class.java)
}
}
+ navigateTo(
+ activity = activity,
+ ctaData = cta,
+ finish = finish,
+ bundle = bundle
+ )
+ return
+ }
+ PERMISSION_V3 -> {
+ intent = Intent(activity, PermissionV2Activity::class.java)
+ }
+ PERMISSION_V4 -> {
+ intent = Intent(activity, PermissionV2LocExpActivity::class.java)
}
BANK_ACCOUNT_VERIFICATION -> {
intent = Intent(activity, BankAccountVerificationLoaderActivity::class.java)
@@ -435,7 +519,8 @@ object NaviDeepLinkNavigator : DeepLinkListener {
APP_UPDATE -> {
intent = Intent(activity, UpdateAppActivity::class.java)
}
- PAYMENT, PAYMENT_ACTIVITY -> {
+ PAYMENT,
+ PAYMENT_ACTIVITY -> {
intent = Intent(activity, NaviPaymentActivity::class.java)
}
RATING -> {
@@ -451,10 +536,15 @@ object NaviDeepLinkNavigator : DeepLinkListener {
intent = Intent(activity, LoanAgreementActivity::class.java)
}
LOAN_AGREEMENT_V2 -> {
- intent = Intent(activity, LoanAgreementV2Activity::class.java)
+ intent =
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = LOAN_AGREEMENT_V2
+ )
}
NEW_LOAN -> {
- intent = Intent(activity, NewLoanConsentActivity::class.java)
+ intent =
+ getPersonalLoanDynamicModuleIntent(context = activity, url = NEW_LOAN)
}
INSURANCE_ADD -> {
intent = Intent(activity, InsuranceAddOnActivity::class.java)
@@ -489,6 +579,9 @@ object NaviDeepLinkNavigator : DeepLinkListener {
MANDATE_PERMISSION -> {
intent = Intent(activity, MandatePermissionActivity::class.java)
}
+ PROMOTION_SCREEN -> {
+ intent = Intent(activity, PromotionActivity::class.java)
+ }
CHAT_ACTIVITY -> {
var shareableLink: String? = null
var sourceId: String? = DEFAULT_SOURCE_ID_FOR_PL
@@ -514,7 +607,6 @@ object NaviDeepLinkNavigator : DeepLinkListener {
SHOULD_SHOW_CSAT -> {
shouldShowCsat = keyValue.value.toBoolean()
}
-
CSAT_CONVERSATION_ID -> {
csatConversationId = keyValue.value.toString()
}
@@ -528,15 +620,15 @@ object NaviDeepLinkNavigator : DeepLinkListener {
source = shareableLink.orEmpty(),
sourceId = sourceId.orEmpty(),
currentUserName =
- PreferenceManager.getObjectPrefrences(
- CURRENT_USER,
- UserDetail::class.java
- )
- ?.name
- .orEmpty(),
+ PreferenceManager.getObjectPrefrences(
+ CURRENT_USER,
+ UserDetail::class.java
+ )
+ ?.name
+ .orEmpty(),
externalCustomerId =
- PreferenceManager.getStringPreference(USER_EXTERNAL_ID)
- .orEmpty(),
+ PreferenceManager.getStringPreference(USER_EXTERNAL_ID)
+ .orEmpty(),
isFromNotification = isFromNotification,
shouldShowCsat = shouldShowCsat,
shouldShowChatResolution = shouldShowChatResolution,
@@ -755,6 +847,9 @@ object NaviDeepLinkNavigator : DeepLinkListener {
TRANCHE_DISBURSAL -> {
intent = Intent(activity, TrancheDisbursalActivity::class.java)
}
+ DYNAMIC_DELIVERY -> {
+ intent = Intent(activity, DynamicDeliveryActivity::class.java)
+ }
}
ctaData.parameters?.forEach { keyValue ->
bundle.putString(keyValue.key, keyValue.value)
@@ -764,11 +859,14 @@ object NaviDeepLinkNavigator : DeepLinkListener {
intent.putExtras(bundle)
intent.putExtra(Constants.REDIRECT_STATUS, secondIdentifier)
intent.putExtra(Constants.SUB_REDIRECT, thirdIdentifier)
+ intent.putExtra(Constants.NEEDS_RESULT, needsResult)
+ intent.putExtra(Constants.CLEAR_TASK, clearTask)
+ intent.putExtra(Constants.REQUEST_CODE, requestCode)
if (clearTask.orFalse()) {
intent.addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK or
- Intent.FLAG_ACTIVITY_CLEAR_TASK or
- Intent.FLAG_ACTIVITY_CLEAR_TOP
+ Intent.FLAG_ACTIVITY_CLEAR_TASK or
+ Intent.FLAG_ACTIVITY_CLEAR_TOP
)
}
if (needsResult.orFalse()) {
@@ -834,16 +932,60 @@ object NaviDeepLinkNavigator : DeepLinkListener {
navigate(activity, ctaData, finish, bundle ?: Bundle(), needsResult, requestCode, clearTask)
}
- override fun fetchBranchSDKData(activity: Activity, deeplink: String, clearTask: Boolean?, finish: Boolean?, onRedirectListener: () -> Unit) {
- DeeplinkManager.fetchBranchSDKData(activity, deeplink, clearTask, finish, onRedirectListener)
+ override fun fetchBranchSDKData(
+ activity: Activity,
+ deeplink: String,
+ clearTask: Boolean?,
+ finish: Boolean?,
+ onRedirectListener: () -> Unit
+ ) {
+ DeeplinkManager.fetchBranchSDKData(
+ activity,
+ deeplink,
+ clearTask,
+ finish,
+ onRedirectListener
+ )
}
private fun getBottomSheet(url: String?): Pair? {
return when (url) {
BOTTOM_SHEET_R11_PAYMENT -> Pair(R11PaymentBottomSheet.TAG, R11PaymentBottomSheet())
- BOTTOM_SHEET_PORTFOLIO_EXPERIENCE -> Pair(PortfolioExperienceBottomsheet.TAG, PortfolioExperienceBottomsheet())
- ICON_TITLE_DESC_BOTTOMSHEET -> Pair(IconTitleDescBottomSheet.TAG, IconTitleDescBottomSheet())
+ BOTTOM_SHEET_PORTFOLIO_EXPERIENCE ->
+ Pair(PortfolioExperienceBottomsheet.TAG, PortfolioExperienceBottomsheet())
+ ICON_TITLE_DESC_BOTTOMSHEET ->
+ Pair(IconTitleDescBottomSheet.TAG, IconTitleDescBottomSheet())
else -> null
}
}
+
+ fun getPersonalLoanDynamicModuleIntent(context: Context?, url: String): Intent {
+ val activityClassPath = getPersonalLoanDynamicModuleActivityClassPath(url)
+ return if (isDynamicModuleInstalled(moduleName = PL_DYNAMIC_MODULE_NAME)) {
+ Intent().apply { setClassName(APPLICATION_ID, activityClassPath) }
+ } else {
+ Intent(context, DynamicDeliveryActivity::class.java).apply {
+ putExtra(ACTIVITY_CLASS_PATH, activityClassPath)
+ }
+ }
+ }
+
+ private fun getPersonalLoanDynamicModuleActivityClassPath(url: String): String {
+ return when (url) {
+ PERSONAL_LOAN_TRACKER ->
+ PERSONAL_LOAN_TRACKER_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH
+ ELIGIBILITY_V2 -> ELIGIBILITY_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH
+ OFFER_GENERATION_V2 -> OFFER_GENERATION_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH
+ LOAN_APPLICATION_V2 -> LOAN_APPLICATION_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH
+ DISBURSEMENT_STATUS_V2 ->
+ DISBURSEMENT_STATUS_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH
+ PAN_VERIFICATION_LOADER ->
+ PAN_VERIFICATION_LOADER_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH
+ INTERMEDIATE_V2 -> INTERMEDIATE_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH
+ LOAN_AGREEMENT_V2 -> LOAN_AGREEMENT_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH
+ ERROR_V2 -> ERROR_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH
+ NEW_LOAN -> NEW_LOAN_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH
+ else -> EMPTY
+ }
+ }
}
diff --git a/app/src/main/java/com/naviapp/common/navigator/ScreenNavigator.kt b/app/src/main/java/com/naviapp/common/navigator/ScreenNavigator.kt
index 6dfa45e5b7..45f5730486 100644
--- a/app/src/main/java/com/naviapp/common/navigator/ScreenNavigator.kt
+++ b/app/src/main/java/com/naviapp/common/navigator/ScreenNavigator.kt
@@ -14,9 +14,15 @@ import android.os.Bundle
import com.navi.base.utils.orFalse
import com.navi.base.utils.orZero
import com.navi.common.ui.activity.NaviWebViewActivity
+import com.naviapp.common.fragment.PromotionActivity
+import com.naviapp.common.navigator.NaviDeepLinkNavigator.DISBURSEMENT_STATUS_V2
+import com.naviapp.common.navigator.NaviDeepLinkNavigator.ERROR_V2
+import com.naviapp.common.navigator.NaviDeepLinkNavigator.INTERMEDIATE_V2
+import com.naviapp.common.navigator.NaviDeepLinkNavigator.LOAN_APPLICATION_V2
+import com.naviapp.common.navigator.NaviDeepLinkNavigator.NEW_LOAN
+import com.naviapp.common.navigator.NaviDeepLinkNavigator.getPersonalLoanDynamicModuleIntent
import com.naviapp.crosssell.ui.CrossSellActivity
import com.naviapp.dashboard.menu.loans.activity.AllLoanDetailsActivity
-import com.naviapp.dashboard.newloan.NewLoanConsentActivity
import com.naviapp.dashboard.rating.RatingActivity
import com.naviapp.email.activity.EmailActivity
import com.naviapp.home.activity.NewDashboardActivity
@@ -28,11 +34,6 @@ import com.naviapp.personalloan.getloan.activities.LoanDisbursementProductPlacem
import com.naviapp.personalloan.getloan.summary.activities.LoanAgreementActivity
import com.naviapp.personalloan.insurance.activity.InsuranceDetailActivity
import com.naviapp.personalloan.intermediate.activity.IntermediateActivity
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.getloanRevamp.activities.GetLoanV2Activity
-import com.naviapp.personalloanrevamp.getloanRevamp.activities.LoanDisbursementLoaderV2Activity
-import com.naviapp.personalloanrevamp.intermediatev2.IntermediateV2Activity
-import com.naviapp.personalloanrevamp.useridentificationv2.activities.LoanEligibilityLoaderV2Activity
import com.naviapp.registration.RegistrationActivity
import com.naviapp.rewards.ui.RewardDelightActivity
import com.naviapp.utils.Constants
@@ -56,16 +57,22 @@ class ScreenNavigator {
FAQS_SCREEN -> Intent(activity, FaqsActivity::class.java)
LOAN_AGREEMENT_SCREEN -> Intent(activity, LoanAgreementActivity::class.java)
PageStatusType.OFFER_GENERATION ->
- Intent(activity, NewLoanConsentActivity::class.java)
+ getPersonalLoanDynamicModuleIntent(context = activity, url = NEW_LOAN)
MY_LOAN_SCREEN -> Intent(activity, AllLoanDetailsActivity::class.java)
PageStatusType.LOAN_APPLICATION -> {
Intent(activity, GetLoanActivity::class.java)
}
- NaviDeepLinkNavigator.LOAN_APPLICATION_V2 -> {
- if (subPage == NaviDeepLinkNavigator.DISBURSEMENT_STATUS_V2) {
- Intent(activity, LoanDisbursementLoaderV2Activity::class.java)
+ LOAN_APPLICATION_V2 -> {
+ if (subPage == DISBURSEMENT_STATUS_V2) {
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = DISBURSEMENT_STATUS_V2
+ )
} else {
- Intent(activity, GetLoanV2Activity::class.java)
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = LOAN_APPLICATION_V2
+ )
}
}
INSURANCE_DETAIL_SCREEN -> Intent(activity, InsuranceDetailActivity::class.java)
@@ -77,6 +84,8 @@ class ScreenNavigator {
}
intent?.let {
it.putExtra(Constants.REDIRECT_STATUS, subPage)
+ it.putExtra(Constants.NEEDS_RESULT, isResultActivity)
+ it.putExtra(Constants.REQUEST_CODE, requestCode)
bundle?.apply { it.putExtras(this) }
when {
isResultActivity.orFalse() -> {
@@ -110,10 +119,14 @@ class ScreenNavigator {
intent = Intent(currentActivity, GetLoanActivity::class.java)
}
ERROR_FULL_PAGE_SCREEN_V2 -> {
- intent = Intent(currentActivity, ErrorScreenV2Activity::class.java)
+ intent = getPersonalLoanDynamicModuleIntent(context = activity, url = ERROR_V2)
}
LOAN_ELIGIBLE_SCREEN_V2 -> {
- intent = Intent(currentActivity, LoanEligibilityLoaderV2Activity::class.java)
+ intent =
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = NaviDeepLinkNavigator.OFFER_GENERATION_V2
+ )
}
DASHBOARD_SCREEN -> {
intent = Intent(activity, NewDashboardActivity::class.java)
@@ -134,21 +147,29 @@ class ScreenNavigator {
INTERMEDIATE_SCREEN ->
intent = Intent(currentActivity, IntermediateActivity::class.java)
INTERMEDIATE_SCREEN_V2 ->
- intent = Intent(currentActivity, IntermediateV2Activity::class.java)
+ intent =
+ getPersonalLoanDynamicModuleIntent(
+ context = activity,
+ url = INTERMEDIATE_V2
+ )
REWARDS_DELIGHT_SCREEN -> {
intent = Intent(currentActivity, RewardDelightActivity::class.java)
}
PERMISSION_SCREEN -> {
intent = Intent(currentActivity, MandatePermissionActivity::class.java)
}
+ PROMOTION_SCREEN -> {
+ intent = Intent(currentActivity, PromotionActivity::class.java)
+ }
}
intent?.let {
bundle?.apply { it.putExtras(this) }
+ it.putExtra(Constants.CLEAR_TASK, clearTask)
if (clearTask) {
it.addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK or
- FLAG_ACTIVITY_CLEAR_TASK or
- Intent.FLAG_ACTIVITY_CLEAR_TOP
+ FLAG_ACTIVITY_CLEAR_TASK or
+ Intent.FLAG_ACTIVITY_CLEAR_TOP
)
}
currentActivity.startActivity(it)
@@ -190,5 +211,6 @@ class ScreenNavigator {
val instance: ScreenNavigator by lazy { Holder.INSTANCE }
const val REWARDS_DELIGHT_SCREEN = "REWARDS_DELIGHT_SCREEN"
const val PERMISSION_SCREEN = "PERMISSION_SCREEN"
+ const val PROMOTION_SCREEN = "promotion"
}
}
diff --git a/app/src/main/java/com/naviapp/common/repository/ConfigRepository.kt b/app/src/main/java/com/naviapp/common/repository/ConfigRepository.kt
index aa812e60fb..688ad80a29 100644
--- a/app/src/main/java/com/naviapp/common/repository/ConfigRepository.kt
+++ b/app/src/main/java/com/naviapp/common/repository/ConfigRepository.kt
@@ -7,10 +7,6 @@
package com.naviapp.common.repository
-import com.navi.base.sharedpref.PreferenceManager
-import com.navi.common.network.models.RepoResult
-import com.navi.naviwidgets.utils.APP_UPDATE_ENABLE
-import com.naviapp.home.model.WidgetResponse
import com.naviapp.network.retrofit.ResponseCallback
import com.naviapp.utils.retrofitService
import com.naviapp.utils.superAppRetrofitService
@@ -20,29 +16,4 @@ class ConfigRepository : ResponseCallback() {
suspend fun fetchFirebaseRefreshAuthToken() =
apiResponseCallback(superAppRetrofitService().refreshFirebaseAuthToken())
-
- suspend fun fetchHomeItems(
- availableAppVersionCode: Int?,
- appVariantAvailable: Boolean
- ): RepoResult =
- apiResponseCallback(
- superAppRetrofitService().fetchHomeItems(
- availableAppVersionCode,
- appVariantAvailable
- )
- )
-
- suspend fun fetchDashboardTabs() =
- apiResponseCallback(superAppRetrofitService().fetchDashboardTabs())
-
- suspend fun fetchDashboardContent(product: String) =
- apiResponseCallback(superAppRetrofitService().fetchDashboardContent(product))
-
- suspend fun fetchProfileData() = apiResponseCallback(
- superAppRetrofitService().fetchProfileItems(
- PreferenceManager.getBooleanPreference(
- APP_UPDATE_ENABLE
- )
- )
- )
}
diff --git a/app/src/main/java/com/naviapp/common/repository/PromotionRepository.kt b/app/src/main/java/com/naviapp/common/repository/PromotionRepository.kt
new file mode 100644
index 0000000000..6e05d157c4
--- /dev/null
+++ b/app/src/main/java/com/naviapp/common/repository/PromotionRepository.kt
@@ -0,0 +1,22 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.naviapp.common.repository
+
+import com.naviapp.network.di.SuperAppRetroFit
+import com.naviapp.network.retrofit.ResponseCallback
+import com.naviapp.network.retrofit.RetrofitService
+import javax.inject.Inject
+
+class PromotionRepository
+@Inject
+constructor(@SuperAppRetroFit private val superAppRetrofitService: RetrofitService) :
+ ResponseCallback() {
+
+ suspend fun fetchAdvertisementData(isPermissionsAvailable: Boolean) =
+ apiResponseCallback(superAppRetrofitService.fetchPromotionData(isPermissionsAvailable))
+}
diff --git a/app/src/main/java/com/naviapp/common/viewmodel/PromotionVM.kt b/app/src/main/java/com/naviapp/common/viewmodel/PromotionVM.kt
new file mode 100644
index 0000000000..2174b3148f
--- /dev/null
+++ b/app/src/main/java/com/naviapp/common/viewmodel/PromotionVM.kt
@@ -0,0 +1,90 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.naviapp.common.viewmodel
+
+import androidx.lifecycle.viewModelScope
+import com.google.firebase.crashlytics.FirebaseCrashlytics
+import com.navi.analytics.utils.NaviTrackEvent
+import com.navi.base.model.CtaData
+import com.navi.base.utils.EMPTY
+import com.navi.common.uitron.model.action.CtaAction
+import com.navi.common.utils.isValidResponse
+import com.navi.common.viewmodel.BaseVM
+import com.navi.uitron.model.UiTronResponse
+import com.navi.uitron.model.action.AnalyticsAction
+import com.navi.uitron.model.data.UiTronAction
+import com.naviapp.common.repository.PromotionRepository
+import com.naviapp.home.model.HomeCtaTypes
+import dagger.hilt.android.lifecycle.HiltViewModel
+import javax.inject.Inject
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.channels.BufferOverflow
+import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asSharedFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.launch
+
+@HiltViewModel
+class PromotionVM @Inject constructor(private val advertisementRepo: PromotionRepository) :
+ BaseVM() {
+
+ private val _uiTronResponse = MutableStateFlow(value = null)
+ val uiTronResponse = _uiTronResponse.asStateFlow()
+ private val _redirectionCta = MutableSharedFlow()
+ val redirectionCta = _redirectionCta.asSharedFlow()
+ private val _isLoading =
+ MutableSharedFlow(replay = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST)
+ val isLoading = _isLoading.asSharedFlow()
+
+ init {
+ viewModelScope.launch { getActionCallback().collect { onActionTriggered(it) } }
+ }
+
+ fun fetchPromotionData(isPermissionsAvailable: Boolean) {
+ coroutineScope.launch(Dispatchers.IO) {
+ _isLoading.emit(true)
+ val response = advertisementRepo.fetchAdvertisementData(isPermissionsAvailable)
+ if (response.isValidResponse()) {
+ _uiTronResponse.value = response.data!!
+ } else {
+ setErrorData(response.errors, response.error)
+ }
+ _isLoading.emit(false)
+ }
+ }
+
+ private fun onActionTriggered(uiTronAction: UiTronAction?) {
+ when (uiTronAction) {
+ is CtaAction -> {
+ handleCtaAction(ctaAction = uiTronAction)
+ }
+ is AnalyticsAction -> {
+ NaviTrackEvent.trackEvent(
+ uiTronAction.eventName ?: EMPTY,
+ uiTronAction.eventProperties
+ )
+ }
+ else -> {
+ FirebaseCrashlytics.getInstance()
+ .log("${uiTronAction?.type} Action not handled now")
+ }
+ }
+ }
+
+ private fun handleCtaAction(ctaAction: CtaAction) {
+ viewModelScope.launch {
+ when (HomeCtaTypes.find(ctaAction.ctaData?.type)) {
+ HomeCtaTypes.REDIRECTION_CTA -> ctaAction.ctaData?.let { _redirectionCta.emit(it) }
+ else -> {
+ FirebaseCrashlytics.getInstance().log("Unknown cta Type clicked")
+ }
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/fragments/BankChangeDetailsFragment.kt b/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/fragments/BankChangeDetailsFragment.kt
index 94d711d4e0..cb7fd9103b 100644
--- a/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/fragments/BankChangeDetailsFragment.kt
+++ b/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/fragments/BankChangeDetailsFragment.kt
@@ -36,10 +36,8 @@ import com.naviapp.part_prepayment.states.GenericWidgetState
import com.naviapp.personalloan.getloan.common.fragment.CustomerSupportFragment
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.TRUE
-import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
-@AndroidEntryPoint
class BankChangeDetailsFragment : BaseFragment(), WidgetCallback {
private val bankChangeDetailsViewModel by lazy {
ViewModelProvider(this)[BankChangeDetailsViewModel::class.java]
diff --git a/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/viewmodels/BankChangeDetailsViewModel.kt b/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/viewmodels/BankChangeDetailsViewModel.kt
index b6c81cd5f5..b955e72582 100644
--- a/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/viewmodels/BankChangeDetailsViewModel.kt
+++ b/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/viewmodels/BankChangeDetailsViewModel.kt
@@ -10,14 +10,13 @@ package com.naviapp.dashboard.loanapplicationdetails.bank_account_change.viewmod
import com.navi.common.viewmodel.BaseVM
import com.naviapp.part_prepayment.states.GenericWidgetState
import com.naviapp.personalloan.getloan.bankdetails.repositories.BankDetailsRepository
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class BankChangeDetailsViewModel @Inject constructor(private val bankDetailsRepository: BankDetailsRepository) : BaseVM() {
+class BankChangeDetailsViewModel(
+ private val bankDetailsRepository: BankDetailsRepository = BankDetailsRepository()
+) : BaseVM() {
private val _widgetDataResponse = MutableStateFlow(GenericWidgetState.Init)
val widgetDataResponse = _widgetDataResponse.asStateFlow()
diff --git a/app/src/main/java/com/naviapp/dashboard/menu/appsettings/activity/AppSettingsActivity.kt b/app/src/main/java/com/naviapp/dashboard/menu/appsettings/activity/AppSettingsActivity.kt
new file mode 100644
index 0000000000..3bb0be61f1
--- /dev/null
+++ b/app/src/main/java/com/naviapp/dashboard/menu/appsettings/activity/AppSettingsActivity.kt
@@ -0,0 +1,131 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.naviapp.dashboard.menu.appsettings.activity
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import androidx.activity.viewModels
+import androidx.databinding.DataBindingUtil
+import com.navi.base.model.ActionData
+import com.navi.common.listeners.HeaderInteractionListener
+import com.navi.common.model.ModuleNameV2
+import com.navi.common.network.models.GenericErrorResponse
+import com.navi.common.ui.activity.BaseActivity
+import com.navi.common.ui.fragment.HorizontalActionErrorFragment
+import com.navi.common.utils.getInstalledDynamicModulesCommaSeparated
+import com.navi.common.utils.observeNonNull
+import com.navi.common.utils.toCtaData
+import com.navi.naviwidgets.utils.BOTTOM_SHEET
+import com.navi.naviwidgets.utils.NaviWidgetIconUtils
+import com.naviapp.R
+import com.naviapp.analytics.utils.NaviAnalytics
+import com.naviapp.common.navigator.NaviDeepLinkNavigator
+import com.naviapp.dashboard.menu.appsettings.model.AppSettingsItem
+import com.naviapp.dashboard.menu.appsettings.viewmodel.AppSettingsVM
+import com.naviapp.databinding.AppSettingsActivityBinding
+import com.naviapp.databinding.AppSettingsItemsBinding
+import dagger.hilt.android.AndroidEntryPoint
+
+@AndroidEntryPoint
+class AppSettingsActivity : BaseActivity(), HeaderInteractionListener {
+ private lateinit var binding: AppSettingsActivityBinding
+ private val viewModel by viewModels()
+ private var isDataNeedsToRefresh = false
+ private val dynamicDeliveryEventTracker by lazy {
+ NaviAnalytics.naviAnalytics.DynamicDelivery(screenName)
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = DataBindingUtil.setContentView(this, R.layout.app_settings_activity)
+ super.setContentView(binding.root)
+ initError(viewModel, showNewDesignSystemFragment = true)
+ initObservers()
+ fetchAppSettings()
+ }
+
+ private fun fetchAppSettings() {
+ showLoader()
+ viewModel.fetchAppSettings(hasPermissions(), getInstalledDynamicModulesCommaSeparated())
+ }
+
+ override fun onResume() {
+ super.onResume()
+ if (isDataNeedsToRefresh) {
+ fetchAppSettings()
+ }
+ }
+
+ private fun initObservers() {
+ viewModel.appSettingsResponse.observeNonNull(this) { response ->
+ hideLoader()
+ binding.headerView.setProperties(response.header, this)
+ binding.headerView.hideDivider()
+ bindItems(response.content?.widgets)
+ }
+ }
+
+ private fun bindItems(widgets: List?) {
+ val inflater = LayoutInflater.from(this)
+ binding.itemContainer.removeAllViews()
+ widgets?.forEach { widget ->
+ val view = inflater.inflate(R.layout.app_settings_items, binding.itemContainer, false)
+ val itemBinding: AppSettingsItemsBinding? = DataBindingUtil.bind(view)
+ itemBinding?.data = widget
+ if (widget.leftIcon != null) {
+ itemBinding?.leftIconIv?.let { NaviWidgetIconUtils.updateIcon(widget.leftIcon, it) }
+ }
+ itemBinding?.rightIv?.setProperties(widget.actionData, null)
+ binding.itemContainer.addView(view)
+ itemBinding?.rightIv?.setOnClickListener {
+ isDataNeedsToRefresh = true
+ if (widget.actionData?.url == BOTTOM_SHEET) {
+ dynamicDeliveryEventTracker.subModuleUninstallClick()
+ openBottomSheet(widget.bottomSheetData)
+ } else {
+ dynamicDeliveryEventTracker.subModuleInstallClick()
+ widget.actionData?.let {
+ NaviDeepLinkNavigator.navigate(activity = this, ctaData = it.toCtaData())
+ }
+ }
+ }
+ }
+ }
+
+ private fun openBottomSheet(exitBottomSheetData: GenericErrorResponse?) {
+ dynamicDeliveryEventTracker.subModuleUninstallPopup()
+ val bottomSheet =
+ HorizontalActionErrorFragment.getInstance(
+ error = exitBottomSheetData,
+ action = null,
+ cancelable = true,
+ sourceScreenName = screenName,
+ moduleName = moduleName.name,
+ hideIcon = true,
+ )
+ safelyShowBottomSheet(bottomSheet, HorizontalActionErrorFragment.TAG)
+ }
+
+ override fun onBackPressed() {
+ super.onBackPressed()
+ }
+
+ override fun onTopPressed(actionData: ActionData?, exitBottomSheetData: GenericErrorResponse?) {
+ super.onBackPressed()
+ }
+
+ override val screenName: String
+ get() = TAG
+
+ override val moduleName: ModuleNameV2
+ get() = ModuleNameV2.COMMON
+
+ companion object {
+ const val TAG = "APP_SETTINGS_ACTIVITY"
+ }
+}
diff --git a/app/src/main/java/com/naviapp/dashboard/menu/appsettings/model/AppSettingsResponse.kt b/app/src/main/java/com/naviapp/dashboard/menu/appsettings/model/AppSettingsResponse.kt
new file mode 100644
index 0000000000..86c381f47a
--- /dev/null
+++ b/app/src/main/java/com/naviapp/dashboard/menu/appsettings/model/AppSettingsResponse.kt
@@ -0,0 +1,30 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.naviapp.dashboard.menu.appsettings.model
+
+import com.google.gson.annotations.SerializedName
+import com.navi.base.model.ActionData
+import com.navi.common.model.Header
+import com.navi.common.network.models.GenericErrorResponse
+import com.navi.design.textview.model.TextWithStyle
+
+data class AppSettingsResponse(
+ @SerializedName("header") val header: Header? = null,
+ @SerializedName("content") val content: AppSettingsContent? = null
+)
+
+data class AppSettingsContent(
+ @SerializedName("widgets") val widgets: List? = null
+)
+
+data class AppSettingsItem(
+ @SerializedName("titleAttribute") val title: TextWithStyle? = null,
+ @SerializedName("leftIcon") val leftIcon: String? = null,
+ @SerializedName("actionData") val actionData: ActionData? = null,
+ @SerializedName("bottomSheetData") var bottomSheetData: GenericErrorResponse? = null,
+)
diff --git a/app/src/main/java/com/naviapp/dashboard/menu/appsettings/repository/AppSettingsRepository.kt b/app/src/main/java/com/naviapp/dashboard/menu/appsettings/repository/AppSettingsRepository.kt
new file mode 100644
index 0000000000..2d597c20f8
--- /dev/null
+++ b/app/src/main/java/com/naviapp/dashboard/menu/appsettings/repository/AppSettingsRepository.kt
@@ -0,0 +1,24 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.naviapp.dashboard.menu.appsettings.repository
+
+import com.naviapp.network.di.SuperAppRetroFit
+import com.naviapp.network.retrofit.ResponseCallback
+import com.naviapp.network.retrofit.RetrofitService
+import javax.inject.Inject
+
+class AppSettingsRepository
+@Inject
+constructor(@SuperAppRetroFit private val superAppRetroFitService: RetrofitService) :
+ ResponseCallback() {
+
+ suspend fun fetchAppSettings(isPermissionGranted: Boolean, installedModules: String) =
+ apiResponseCallback(
+ superAppRetroFitService.fetchAppSettings(isPermissionGranted, installedModules)
+ )
+}
diff --git a/app/src/main/java/com/naviapp/dashboard/menu/appsettings/viewmodel/AppSettingsVM.kt b/app/src/main/java/com/naviapp/dashboard/menu/appsettings/viewmodel/AppSettingsVM.kt
new file mode 100644
index 0000000000..6bd82bdbaa
--- /dev/null
+++ b/app/src/main/java/com/naviapp/dashboard/menu/appsettings/viewmodel/AppSettingsVM.kt
@@ -0,0 +1,36 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.naviapp.dashboard.menu.appsettings.viewmodel
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import com.navi.common.viewmodel.BaseVM
+import com.naviapp.dashboard.menu.appsettings.model.AppSettingsResponse
+import com.naviapp.dashboard.menu.appsettings.repository.AppSettingsRepository
+import dagger.hilt.android.lifecycle.HiltViewModel
+import javax.inject.Inject
+import kotlinx.coroutines.launch
+
+@HiltViewModel
+class AppSettingsVM @Inject constructor(private val repository: AppSettingsRepository) : BaseVM() {
+
+ private val _appSettingsResponse = MutableLiveData()
+ val appSettingsResponse: LiveData
+ get() = _appSettingsResponse
+
+ fun fetchAppSettings(isPermissionGranted: Boolean, installedModules: String) {
+ coroutineScope.launch {
+ val response = repository.fetchAppSettings(isPermissionGranted, installedModules)
+ if (response.error == null && response.errors.isNullOrEmpty()) {
+ _appSettingsResponse.value = response.data
+ } else {
+ setErrorData(response.errors, response.error)
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/naviapp/dynamicdelivery/activity/DynamicDeliveryActivity.kt b/app/src/main/java/com/naviapp/dynamicdelivery/activity/DynamicDeliveryActivity.kt
new file mode 100644
index 0000000000..1ffb947578
--- /dev/null
+++ b/app/src/main/java/com/naviapp/dynamicdelivery/activity/DynamicDeliveryActivity.kt
@@ -0,0 +1,384 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.naviapp.dynamicdelivery.activity
+
+import android.content.Intent
+import android.os.Bundle
+import android.view.View.GONE
+import android.view.View.VISIBLE
+import androidx.activity.viewModels
+import androidx.core.content.ContextCompat
+import androidx.databinding.DataBindingUtil
+import androidx.lifecycle.lifecycleScope
+import com.google.android.play.core.splitinstall.SplitInstallManager
+import com.google.android.play.core.splitinstall.SplitInstallManagerFactory
+import com.navi.analytics.utils.NaviTrackEvent
+import com.navi.base.model.CtaData
+import com.navi.base.utils.orFalse
+import com.navi.base.utils.orZero
+import com.navi.common.lottie.LottieRemoteHelper
+import com.navi.common.model.ModuleNameV2
+import com.navi.common.ui.activity.BaseActivity
+import com.navi.common.utils.TemporaryStorageHelper
+import com.navi.common.utils.isDynamicModuleInstalled
+import com.navi.common.utils.setDynamicModuleDownloadSizeInBytes
+import com.navi.common.utils.setDynamicModuleInstallationStatus
+import com.navi.common.utils.uninstallDynamicModules
+import com.navi.design.font.FontWeightEnum
+import com.navi.design.textview.model.NaviSpan
+import com.navi.design.textview.model.TextWithStyle
+import com.navi.design.utils.setSpannableString
+import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
+import com.navi.naviwidgets.utils.LottieEnums
+import com.naviapp.BuildConfig.APPLICATION_ID
+import com.naviapp.R
+import com.naviapp.analytics.utils.NaviAnalytics
+import com.naviapp.common.navigator.NaviDeepLinkNavigator
+import com.naviapp.common.navigator.NaviDeepLinkNavigator.HOME
+import com.naviapp.common.navigator.NaviDeepLinkNavigator.HOME_ACTIVITY_CLASS_PATH
+import com.naviapp.databinding.ActivityDynamicDeliveryBinding
+import com.naviapp.dynamicdelivery.viewmodel.DynamicDeliveryVM
+import com.naviapp.dynamicdelivery.viewmodel.DynamicDeliveryVMProviderFactory
+import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus
+import com.naviapp.utils.Constants.ACTION
+import com.naviapp.utils.Constants.ACTIVITY_CLASS_PATH
+import com.naviapp.utils.Constants.CLEAR_TASK
+import com.naviapp.utils.Constants.NEEDS_RESULT
+import com.naviapp.utils.Constants.PL_DYNAMIC_MODULE_NAME
+import com.naviapp.utils.Constants.REQUEST_CODE
+import com.naviapp.utils.Constants.UNINSTALL
+import com.naviapp.utils.setVisibilityState
+import kotlin.math.min
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+
+class DynamicDeliveryActivity : BaseActivity() {
+ private lateinit var binding: ActivityDynamicDeliveryBinding
+ private lateinit var lottieRemoteHelper: LottieRemoteHelper
+ private lateinit var splitInstallManager: SplitInstallManager
+ private val dynamicDeliveryVM by
+ viewModels { DynamicDeliveryVMProviderFactory(splitInstallManager) }
+ private val dynamicDeliveryEventTracker by lazy {
+ NaviAnalytics.naviAnalytics.DynamicDelivery(screenName)
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = DataBindingUtil.setContentView(this, R.layout.activity_dynamic_delivery)
+ super.setContentView(binding.root)
+ splitInstallManager = SplitInstallManagerFactory.create(this)
+ NaviTrackEvent.sendScreenTransitionEvent(screenName)
+ lottieRemoteHelper = LottieRemoteHelper(this)
+ initError()
+ initObservers()
+ initUi()
+ TemporaryStorageHelper.updateSingleItem(TemporaryStorageHelper.HOME)
+ }
+
+ private fun initError() {
+ initError(dynamicDeliveryVM, actionErrorV2Enabled = true)
+ }
+
+ private fun initObservers() {
+ observeDynamicDeliveryData()
+ }
+
+ private fun initUi() {
+ if (intent.getStringExtra(ACTION) == UNINSTALL) {
+ initUninstallingUi()
+ } else {
+ initDownloadingUi()
+ dynamicDeliveryVM.installModuleAndLaunchActivity(
+ PL_DYNAMIC_MODULE_NAME,
+ intent.getStringExtra(ACTIVITY_CLASS_PATH) ?: HOME_ACTIVITY_CLASS_PATH
+ )
+ }
+ }
+
+ private fun initUninstallingUi() {
+ dynamicDeliveryEventTracker.loaderShownSubModuleUninstalling()
+
+ binding.apply {
+ rootItem.setBackgroundColor(
+ ContextCompat.getColor(this@DynamicDeliveryActivity, R.color.color_3C0050)
+ )
+
+ bottomIv.setVisibilityState(VISIBLE)
+
+ lottieView.showWhenDataIsAvailable(
+ lottieName = LottieEnums.DYNAMIC_DELIVERY_INSTALLING.name,
+ infiniteRepeat = true
+ )
+
+ titleTv.setSpannableString(
+ TextWithStyle(
+ text = getString(R.string.please_wait_we_are_uninstalling_cash_loan_app),
+ style =
+ listOf(
+ NaviSpan(
+ startSpan = 0,
+ endSpan = 13,
+ fontSize = 16.0,
+ spanColor = getString(R.string.color_white),
+ fontName = FontWeightEnum.TT_MEDIUM.name
+ ),
+ NaviSpan(
+ startSpan = 13,
+ endSpan = 46,
+ fontSize = 14.0,
+ spanColor = getString(R.string.color_white),
+ fontName = FontWeightEnum.TT_MEDIUM.name
+ )
+ )
+ )
+ )
+
+ bottomTv.setSpannableString(
+ TextWithStyle(
+ text = getString(R.string.please_dont_close_or_press_back),
+ style =
+ listOf(
+ NaviSpan(
+ fontSize = 14.0,
+ spanColor = getString(R.string.color_white),
+ fontName = FontWeightEnum.TT_REGULAR.name
+ )
+ )
+ )
+ )
+ }
+
+ uninstallDynamicModules(listOf(PL_DYNAMIC_MODULE_NAME))
+
+ dynamicDeliveryEventTracker.subModuleUninstalled()
+
+ lifecycleScope.launch {
+ delay(DYNAMIC_DELIVERY_UNINSTALL_DELAY)
+ NaviDeepLinkNavigator.navigate(
+ activity = this@DynamicDeliveryActivity,
+ ctaData = CtaData(url = HOME)
+ )
+ }
+ }
+
+ private fun initDownloadingUi() {
+ dynamicDeliveryEventTracker.loaderShownSubModuleDownloading()
+
+ binding.apply {
+ rootItem.setBackgroundColor(
+ ContextCompat.getColor(this@DynamicDeliveryActivity, R.color.color_3C0050)
+ )
+
+ bottomIv.setVisibilityState(VISIBLE)
+
+ lottieView.showWhenDataIsAvailable(
+ lottieName = LottieEnums.DYNAMIC_DELIVERY_DOWNLOADING.name,
+ playAnimation = false,
+ repeatCount = 0
+ )
+
+ downloadProgressLl.setVisibilityState(VISIBLE)
+ downloadPercentTv.text = getString(R.string.progress_percentage, 0)
+ downloadSizeTv.text = getString(R.string.calculating_ellipsis)
+
+ titleTv.setSpannableString(
+ TextWithStyle(
+ text = getString(R.string.downloading_cash_loan_app),
+ style =
+ listOf(
+ NaviSpan(
+ fontSize = 16.0,
+ spanColor = getString(R.string.color_white),
+ fontName = FontWeightEnum.TT_MEDIUM.name
+ )
+ )
+ )
+ )
+
+ bottomTv.setSpannableString(
+ TextWithStyle(
+ text = getString(R.string.please_dont_close_or_press_back),
+ style =
+ listOf(
+ NaviSpan(
+ fontSize = 14.0,
+ spanColor = getString(R.string.color_white),
+ fontName = FontWeightEnum.TT_REGULAR.name
+ )
+ )
+ )
+ )
+ }
+ }
+
+ private fun initInstallingUi() {
+ dynamicDeliveryEventTracker.loaderShownSubModuleInstalling()
+
+ binding.apply {
+ lottieView.showWhenDataIsAvailable(
+ lottieName = LottieEnums.DYNAMIC_DELIVERY_INSTALLING.name,
+ infiniteRepeat = true
+ )
+
+ downloadProgressLl.setVisibilityState(GONE)
+
+ titleTv.setSpannableString(
+ TextWithStyle(
+ text = getString(R.string.please_wait_we_are_installing_cash_loan_app),
+ style =
+ listOf(
+ NaviSpan(
+ startSpan = 0,
+ endSpan = 13,
+ fontSize = 16.0,
+ spanColor = getString(R.string.color_white),
+ fontName = FontWeightEnum.TT_MEDIUM.name
+ ),
+ NaviSpan(
+ startSpan = 13,
+ endSpan = 44,
+ fontSize = 14.0,
+ spanColor = getString(R.string.color_white),
+ fontName = FontWeightEnum.TT_MEDIUM.name
+ )
+ )
+ )
+ )
+ }
+ }
+
+ private fun initInstalledUi(moduleName: String, activityClassPath: String) {
+ dynamicDeliveryEventTracker.subModuleInstalled()
+
+ binding.apply {
+ downloadProgressLl.setVisibilityState(GONE)
+
+ lottieView.showWhenDataIsAvailable(
+ lottieName = LottieEnums.DYNAMIC_DELIVERY_INSTALLED.name,
+ repeatCount = 0
+ )
+
+ titleTv.setSpannableString(
+ TextWithStyle(
+ text = getString(R.string.app_installed_successfully),
+ style =
+ listOf(
+ NaviSpan(
+ fontSize = 16.0,
+ spanColor = getString(R.string.color_white),
+ fontName = FontWeightEnum.TT_MEDIUM.name
+ )
+ )
+ )
+ )
+
+ bottomTv.setVisibilityState(GONE)
+ }
+
+ lifecycleScope.launch {
+ delay(DYNAMIC_DELIVERY_INSTALLED_LOTTIE_DURATION)
+ setDynamicModuleInstallationStatus(isInstalled = true)
+ launchModule(moduleName = moduleName, activityClassPath = activityClassPath)
+ }
+ }
+
+ private fun updateDownloadingProgress(bytesDownloaded: Long, totalBytesToDownload: Long) {
+ dynamicDeliveryEventTracker.subModuleDownloadProgress(
+ bytesDownloaded = bytesDownloaded,
+ totalBytesToDownload = totalBytesToDownload
+ )
+ setDynamicModuleDownloadSizeInBytes(downloadSizeInBytes = totalBytesToDownload)
+
+ val progress = min(bytesDownloaded.toDouble() / totalBytesToDownload.toDouble(), 1.0)
+ val progressPercentage = (progress * 100).toInt()
+ val downloadSizeInKb = (totalBytesToDownload / 1024).toInt()
+
+ binding.apply {
+ lottieView.progress = progress.toFloat()
+ downloadPercentTv.text = getString(R.string.progress_percentage, progressPercentage)
+ if (downloadSizeInKb > 0)
+ downloadSizeTv.text = getString(R.string.download_size_in_kb, downloadSizeInKb)
+ }
+ }
+
+ private fun updateDownloadedProgress() {
+ dynamicDeliveryEventTracker.subModuleDownloaded()
+
+ binding.apply {
+ lottieView.progress = 1.0f
+ downloadPercentTv.text = getString(R.string.progress_percentage, 100)
+ }
+ }
+
+ private fun observeDynamicDeliveryData() {
+ dynamicDeliveryVM.dynamicDeliveryLiveData.observe(this) {
+ when (it) {
+ is ModuleStatus.Downloading ->
+ updateDownloadingProgress(
+ bytesDownloaded = it.bytesDownloaded,
+ totalBytesToDownload = it.totalBytesToDownload
+ )
+ is ModuleStatus.Downloaded -> updateDownloadedProgress()
+ is ModuleStatus.Installing ->
+ lifecycleScope.launch {
+ delay(DYNAMIC_DELIVERY_INSTALLING_DELAY)
+ initInstallingUi()
+ }
+ is ModuleStatus.Installed ->
+ lifecycleScope.launch {
+ delay(DYNAMIC_DELIVERY_INSTALLED_DELAY)
+ initInstalledUi(
+ moduleName = it.moduleName,
+ activityClassPath = it.activityClassPath
+ )
+ }
+ else -> Unit
+ }
+ }
+ }
+
+ private fun launchModule(moduleName: String, activityClassPath: String) {
+ if (isDynamicModuleInstalled(moduleName = moduleName)) {
+ val launchIntent =
+ Intent().apply {
+ setClassName(APPLICATION_ID, activityClassPath)
+ intent.extras?.let { putExtras(it) }
+ }
+ val needsResult = intent.getBooleanExtra(NEEDS_RESULT, false)
+ val clearTask = intent.getBooleanExtra(CLEAR_TASK, false)
+ val requestCode = intent.getIntExtra(REQUEST_CODE, 0)
+ if (clearTask.orFalse()) {
+ launchIntent.addFlags(
+ Intent.FLAG_ACTIVITY_NEW_TASK or
+ Intent.FLAG_ACTIVITY_CLEAR_TASK or
+ Intent.FLAG_ACTIVITY_CLEAR_TOP
+ )
+ }
+ if (needsResult.orFalse()) {
+ startActivityForResult(launchIntent, requestCode.orZero())
+ } else startActivity(launchIntent)
+ finish()
+ }
+ }
+
+ override fun onBackPressed() {}
+
+ override val screenName: String
+ get() = "DYNAMIC_DELIVERY"
+
+ override val moduleName: ModuleNameV2
+ get() = ModuleNameV2.COMMON
+
+ companion object {
+ const val TAG = "DYNAMIC_DELIVERY_LOADER"
+ const val DYNAMIC_DELIVERY_INSTALLING_DELAY = 250L
+ const val DYNAMIC_DELIVERY_INSTALLED_DELAY = 3000L
+ const val DYNAMIC_DELIVERY_UNINSTALL_DELAY = 3000L
+ const val DYNAMIC_DELIVERY_INSTALLED_LOTTIE_DURATION = 1000L
+ }
+}
diff --git a/app/src/main/java/com/naviapp/dynamicdelivery/viewmodel/DynamicDeliveryVM.kt b/app/src/main/java/com/naviapp/dynamicdelivery/viewmodel/DynamicDeliveryVM.kt
new file mode 100644
index 0000000000..bb46bbdccf
--- /dev/null
+++ b/app/src/main/java/com/naviapp/dynamicdelivery/viewmodel/DynamicDeliveryVM.kt
@@ -0,0 +1,137 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.naviapp.dynamicdelivery.viewmodel
+
+import androidx.annotation.Keep
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.viewModelScope
+import com.google.android.play.core.splitinstall.SplitInstallManager
+import com.google.android.play.core.splitinstall.SplitInstallRequest
+import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.DOWNLOADED
+import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.DOWNLOADING
+import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.FAILED
+import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.INSTALLED
+import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.INSTALLING
+import com.navi.common.utils.getDynamicModuleDownloadSizeInBytes
+import com.navi.common.utils.getInstalledDynamicModules
+import com.navi.common.viewmodel.BaseVM
+import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus.Downloaded
+import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus.Downloading
+import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus.Failed
+import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus.Installed
+import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus.Installing
+import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus.Unavailable
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+
+@Keep
+class DynamicDeliveryVM(private val manager: SplitInstallManager) : BaseVM() {
+
+ private var _dynamicDeliveryLiveData = MutableLiveData()
+ val dynamicDeliveryLiveData: LiveData = _dynamicDeliveryLiveData
+
+ fun installModuleAndLaunchActivity(moduleName: String, activityClassPath: String) {
+ viewModelScope.launch {
+ if (getInstalledDynamicModules(manager).contains(moduleName)) {
+ requestModuleReInstallation(
+ moduleName = moduleName,
+ activityClassPath = activityClassPath
+ )
+ } else {
+ requestModuleInstallation(
+ moduleName = moduleName,
+ activityClassPath = activityClassPath
+ )
+ }
+ }
+ }
+
+ private suspend fun requestModuleReInstallation(moduleName: String, activityClassPath: String) {
+ val totalBytesToDownload = getDynamicModuleDownloadSizeInBytes()
+
+ delay(DYNAMIC_DELIVERY_REINSTALLING_TWENTY_PERCENT_DELAY)
+ _dynamicDeliveryLiveData.value =
+ Downloading(
+ bytesDownloaded = totalBytesToDownload / 5,
+ totalBytesToDownload = totalBytesToDownload
+ )
+
+ delay(DYNAMIC_DELIVERY_REINSTALLING_SIXTY_PERCENT_DELAY)
+ _dynamicDeliveryLiveData.value =
+ Downloading(
+ bytesDownloaded = totalBytesToDownload / 5 * 3,
+ totalBytesToDownload = totalBytesToDownload
+ )
+
+ delay(DYNAMIC_DELIVERY_REINSTALLING_HUNDRED_PERCENT_DELAY)
+ _dynamicDeliveryLiveData.value = Downloaded
+
+ _dynamicDeliveryLiveData.value = Installing
+
+ _dynamicDeliveryLiveData.value =
+ Installed(moduleName = moduleName, activityClassPath = activityClassPath)
+ }
+
+ private fun requestModuleInstallation(moduleName: String, activityClassPath: String) {
+ try {
+ val request = SplitInstallRequest.newBuilder().addModule(moduleName).build()
+ manager.startInstall(request).addOnFailureListener {
+ _dynamicDeliveryLiveData.value = Failed
+ }
+ getDynamicModuleStatus(moduleName = moduleName, activityClassPath = activityClassPath)
+ } catch (e: Exception) {
+ _dynamicDeliveryLiveData.value = Failed
+ }
+ }
+
+ private fun getDynamicModuleStatus(moduleName: String, activityClassPath: String) {
+ manager.registerListener {
+ _dynamicDeliveryLiveData.value =
+ when (it.status()) {
+ DOWNLOADING ->
+ Downloading(
+ bytesDownloaded = it.bytesDownloaded(),
+ totalBytesToDownload = it.totalBytesToDownload()
+ )
+ DOWNLOADED -> Downloaded
+ INSTALLING -> Installing
+ INSTALLED ->
+ Installed(moduleName = moduleName, activityClassPath = activityClassPath)
+ FAILED -> Failed
+ else -> Unavailable
+ }
+ }
+ }
+
+ companion object {
+ const val TAG = "DYNAMIC_DELIVERY_LOADER"
+ const val DYNAMIC_DELIVERY_REINSTALLING_TWENTY_PERCENT_DELAY = 250L
+ const val DYNAMIC_DELIVERY_REINSTALLING_SIXTY_PERCENT_DELAY = 1000L
+ const val DYNAMIC_DELIVERY_REINSTALLING_HUNDRED_PERCENT_DELAY = 1000L
+ }
+}
+
+class DynamicDeliveryVMProviderFactory(private val manager: SplitInstallManager) :
+ ViewModelProvider.Factory {
+ override fun create(modelClass: Class): T {
+ return modelClass.getConstructor(SplitInstallManager::class.java).newInstance(manager)
+ }
+}
+
+sealed class ModuleStatus {
+ data class Downloading(val bytesDownloaded: Long, val totalBytesToDownload: Long) :
+ ModuleStatus()
+ object Downloaded : ModuleStatus()
+ object Installing : ModuleStatus()
+ data class Installed(val moduleName: String, val activityClassPath: String) : ModuleStatus()
+ object Failed : ModuleStatus()
+ object Unavailable : ModuleStatus()
+}
diff --git a/app/src/main/java/com/naviapp/home/activity/NewDashboardActivity.kt b/app/src/main/java/com/naviapp/home/activity/NewDashboardActivity.kt
index de2bbe1f39..77ea200df1 100644
--- a/app/src/main/java/com/naviapp/home/activity/NewDashboardActivity.kt
+++ b/app/src/main/java/com/naviapp/home/activity/NewDashboardActivity.kt
@@ -53,6 +53,10 @@ import com.navi.common.utils.*
import com.navi.common.utils.Constants.APP_VERSION_ON_UPDATE
import com.navi.common.utils.Constants.SHOW_INVESTMENT_ON_BOTTOM_NAV
import com.navi.common.utils.Constants.SKIP_PERMISSION_SCREEN
+import com.navi.common.utils.getLogoutData
+import com.navi.common.utils.observeNonNull
+import com.navi.common.utils.observeNullable
+import com.navi.common.utils.setStatusBarColor
import com.navi.design.utils.dpToPxInInt
import com.navi.insurance.common.util.ActionHandler
import com.navi.insurance.health.activity.JusPayUtil
@@ -97,13 +101,11 @@ import com.naviapp.personalloan.getloan.loandetails.fragments.DailyOfferBottomSh
import com.naviapp.personalloanrevamp.customview.DailyOfferBottomSheetV2
import com.naviapp.registration.viewmodel.ConfigVM
import com.naviapp.registration.viewmodel.RegistrationVM
+import com.naviapp.utils.*
import com.naviapp.utils.BottomBarUtils.fetchDefaultTabTitle
import com.naviapp.utils.BottomBarUtils.getLottieDrawable
import com.naviapp.utils.BottomBarUtils.setTabIcon
import com.naviapp.utils.Constants
-import com.naviapp.utils.IntentConstants
-import com.naviapp.utils.deleteCacheAndOpenLoginPage
-import com.naviapp.utils.removeBadgeCount
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -169,25 +171,6 @@ class NewDashboardActivity :
}
}
- private fun checkForPermissions() {
- if (PreferenceManager.getBooleanPreference(SKIP_PERMISSION_SCREEN, false)) {
- return
- }
- val listOfPermissions = PreferenceManager.getHashSet(com.navi.common.utils.Constants.LIST_OF_PERMISSION)
- if (listOfPermissions.isNullOrEmpty().not() &&
- !permissionsManager.hasPermissions(listOfPermissions?.toTypedArray()!!)
- ) {
- val bundle = Bundle()
- bundle.putBoolean(NORMAL_PERMISSION_FLOW, true)
- NaviDeepLinkNavigator.navigate(
- activity = this,
- ctaData = CtaData(url = NaviDeepLinkNavigator.MANDATE_PERMISSION),
- finish = true,
- bundle = bundle
- )
- }
- }
-
private fun initThirdPartySDKs() {
if (FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.APP_PERFORMANCE_V2_DISABLE)) {
if (!HyperServicesHolder.isSDKInitialized()) {
@@ -233,7 +216,14 @@ class NewDashboardActivity :
updateTab(HomeFragment.TAG, intent.extras)
}
TempStorageHelper.clear()
- checkForPermissions()
+ if (isAllMandatoryPermissionGranted(permissionsManager).not() && PreferenceManager.getBooleanPreference(SKIP_PERMISSION_SCREEN, false).not()) {
+ launchPermissionActivity(
+ activity = this,
+ addIntentFlags = false,
+ finish = true,
+ normalFlow = true
+ )
+ }
}
fun navigateToNextScreen(currentScreenTag: String, bundle: Bundle?) {
@@ -461,11 +451,20 @@ class NewDashboardActivity :
}
R.id.dashboard -> {
- handleTabClick(
- BottomBarTabType.DASHBOARD,
- DashboardFragment.TAG,
- NaviAnalytics.NEW_DASHBOARD_CLICKED
- )
+ if (isAllMandatoryPermissionGranted(permissionsManager)) {
+ handleTabClick(
+ BottomBarTabType.DASHBOARD,
+ DashboardFragment.TAG,
+ NaviAnalytics.NEW_DASHBOARD_CLICKED
+ )
+ } else {
+ launchPermissionActivity(
+ activity = this,
+ addIntentFlags = false,
+ finish = false,
+ normalFlow = false
+ )
+ }
}
R.id.profile -> {
@@ -477,12 +476,21 @@ class NewDashboardActivity :
)
}
R.id.investment -> {
- removeBadgeCount(binding.bottomNavigationView.getBadge(R.id.investment))
- handleTabClick(
- BottomBarTabType.INVESTMENT,
- FundListingFragmentV2.TAG,
- NaviAnalytics.NAV_INVESTMENT_CLICKED
- )
+ if (isAllMandatoryPermissionGranted(permissionsManager)) {
+ removeBadgeCount(binding.bottomNavigationView.getBadge(R.id.investment))
+ handleTabClick(
+ BottomBarTabType.INVESTMENT,
+ FundListingFragmentV2.TAG,
+ NaviAnalytics.NAV_INVESTMENT_CLICKED
+ )
+ } else {
+ launchPermissionActivity(
+ activity = this,
+ addIntentFlags = false,
+ finish = false,
+ normalFlow = false
+ )
+ }
}
R.id.loan -> {
handleTabClick(
diff --git a/app/src/main/java/com/naviapp/home/fragment/HomeFragment.kt b/app/src/main/java/com/naviapp/home/fragment/HomeFragment.kt
index 05a37edf74..194f21577a 100644
--- a/app/src/main/java/com/naviapp/home/fragment/HomeFragment.kt
+++ b/app/src/main/java/com/naviapp/home/fragment/HomeFragment.kt
@@ -59,6 +59,7 @@ import com.navi.common.model.PreviousScreenNameRequest
import com.navi.common.ui.activity.BaseActivity
import com.navi.common.ui.fragment.NewCommonBottomSheet
import com.navi.common.utils.*
+import com.navi.common.utils.Constants.KEY_UPCOMING_LOAN
import com.navi.design.utils.*
import com.navi.insurance.navigator.NaviInsuranceDeeplinkNavigator
import com.navi.naviwidgets.actions.ShowInfoBottomSheetV3Action
@@ -91,7 +92,6 @@ import com.naviapp.common.navigator.ScreenNavigator
import com.naviapp.common.viewmodel.InAppUpdateVM
import com.naviapp.dashboard.listeners.PlayStoreActionListener
import com.naviapp.dashboard.listeners.ShareAppListener
-import com.naviapp.dashboard.newloan.NewLoanConsentActivity
import com.naviapp.dashboard.rating.PlayStoreInAppRatingHelper
import com.naviapp.dashboard.viewmodels.DashboardSharedVM
import com.naviapp.dashboard.viewmodels.RatingVM
@@ -128,6 +128,10 @@ import com.naviapp.utils.Constants.LOAN_TYPE
import com.naviapp.utils.Constants.PAYMENT_TYPE
import com.naviapp.utils.Constants.RATING_COUNT
import com.naviapp.utils.Constants.SHOW_SCROLL_FEEDBACK_IN_HOME_SCREEN
+import com.naviapp.utils.getIntentPackageNameForFpsMigration
+import com.naviapp.utils.giDeeplink
+import com.naviapp.utils.isAllMandatoryPermissionGranted
+import com.naviapp.utils.isAppInstalled
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@@ -181,12 +185,12 @@ class HomeFragment : PaymentBaseFragment(), WidgetCallback, PlayStoreActionListe
analyticsStartTs = System.currentTimeMillis()
totalRenderTs = System.currentTimeMillis()
naviAnalyticsEventTracker.onHomePageCreated()
+ activity?.run { permissionsManager = PermissionsManager(this) }
initUI()
initListener()
initObservers()
fetchHomeItems()
fetchHomeFeature()
- activity?.run { permissionsManager = PermissionsManager(this) }
fetchStories()
initializationPaymentDetail(isHomePageNeededToRelaunch = true)
return binding.root
@@ -234,7 +238,9 @@ class HomeFragment : PaymentBaseFragment(), WidgetCallback, PlayStoreActionListe
viewModel.checkForLoanDetailWVPrefetch()
TemporaryStorageHelper.clearResponse(TemporaryStorageHelper.HOME)
} else if (TemporaryStorageHelper.isHomePageApiInProgress.not()) {
- if (PreferenceManager.getSecureString(com.navi.common.utils.Constants.OFFER_VALUE)
+ if (
+ BaseUtils.isUserLoggedIn().not() &&
+ PreferenceManager.getSecureString(com.navi.common.utils.Constants.OFFER_VALUE)
.isNullOrEmpty()
.not() &&
PreferenceManager.getBooleanPreference(Constants.OFFER_VIEWED).not()
@@ -260,7 +266,11 @@ class HomeFragment : PaymentBaseFragment(), WidgetCallback, PlayStoreActionListe
}
private fun fetchStories() {
- context?.let { viewModel.fetchStories(getDensityName(it).orEmpty()) }
+ if (isAllMandatoryPermissionGranted(permissionsManager)) {
+ context?.let { viewModel.fetchStories(getDensityName(it).orEmpty()) }
+ } else {
+ binding.header.progressIcon.isVisible = false
+ }
}
private fun fetchHomeFeature() {
@@ -305,7 +315,9 @@ class HomeFragment : PaymentBaseFragment(), WidgetCallback, PlayStoreActionListe
PreferenceManager.getIntPreferenceApp(
CURRENT_VERSION_IN_STORE
),
- isSecondaryAppAvailable
+ isSecondaryAppAvailable,
+ isAllMandatoryPermissionGranted(permissionsManager),
+ getInstalledDynamicModulesCommaSeparated()
)
}
@@ -412,18 +424,18 @@ class HomeFragment : PaymentBaseFragment(), WidgetCallback, PlayStoreActionListe
}
response?.extraData?.rewardsIntroPopup?.let { readRewardsAnnouncementData(it) }
response?.extraData?.uitronData?.let { showUiTronDialog(it.uiTronDialog) }
- response?.extraData?.appUpdateData?.let {
- if (NaviApplication.instance.getEnableAppUpdate()) {
- toShowAppUpdate(it)
- }
- } ?: kotlin.run {
- binding.appUpdateLayout.root.isVisible = false
+ if (response?.extraData?.bottomStickyNudge != null) {
+ showBottomStickyNudge(response.extraData.bottomStickyNudge)
+ } else if (response?.extraData?.appUpdateData != null && NaviApplication.instance.getEnableAppUpdate()) {
+ showBottomStickyNudge(response.extraData.appUpdateData)
+ } else {
+ binding.bottomStickyNudgeLayout.root.isVisible = false
}
if (!paymentVM.isPaymentLoaderShowing()) {
hideLoader()
}
inAppUpdateVM.showAppUpdateStrip.observeNonNull(viewLifecycleOwner) {
- binding.appUpdateLayout.root.isVisible = it
+ binding.bottomStickyNudgeLayout.root.isVisible = it
}
response?.extraData?.bottomSheetData?.let {
val commonBottomSheet = NewCommonBottomSheet.getInstance(it)
@@ -633,9 +645,9 @@ class HomeFragment : PaymentBaseFragment(), WidgetCallback, PlayStoreActionListe
}
}
- private fun toShowAppUpdate(appUpdateData: AppUpdateData) {
- binding.appUpdateLayout.root.isVisible = true
- binding.appUpdateLayout.apply {
+ private fun showBottomStickyNudge(appUpdateData: AppUpdateData) {
+ binding.bottomStickyNudgeLayout.root.isVisible = true
+ binding.bottomStickyNudgeLayout.apply {
appUpdateData.bgColor?.let { bgColor ->
root.background = getNaviDrawable(
radii = CornerRadius(
@@ -1067,7 +1079,7 @@ class HomeFragment : PaymentBaseFragment(), WidgetCallback, PlayStoreActionListe
)
bundle.putBoolean(GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY, true)
} else {
- bundle.putParcelable(NewLoanConsentActivity.KEY_UPCOMING_LOAN, data)
+ bundle.putParcelable(KEY_UPCOMING_LOAN, data)
}
ScreenNavigator.instance.startActivity(
activity,
diff --git a/app/src/main/java/com/naviapp/home/model/WidgetResponse.kt b/app/src/main/java/com/naviapp/home/model/WidgetResponse.kt
index 99211947e9..08b47413d0 100644
--- a/app/src/main/java/com/naviapp/home/model/WidgetResponse.kt
+++ b/app/src/main/java/com/naviapp/home/model/WidgetResponse.kt
@@ -78,6 +78,8 @@ data class ExtraDataDetails(
val redirectionCta: CtaData? = null,
@SerializedName("appUpdateData")
val appUpdateData: AppUpdateData? = null,
+ @SerializedName("bottomStickyNudge")
+ val bottomStickyNudge: AppUpdateData? = null,
@SerializedName("rewardNudgeData")
val rewardNudgeData: RewardNudgeData? = null,
@SerializedName("lottieUrls")
diff --git a/app/src/main/java/com/naviapp/home/respository/GlobalRepo.kt b/app/src/main/java/com/naviapp/home/respository/GlobalRepo.kt
index 0887a5cdaa..7c7c2212e0 100644
--- a/app/src/main/java/com/naviapp/home/respository/GlobalRepo.kt
+++ b/app/src/main/java/com/naviapp/home/respository/GlobalRepo.kt
@@ -39,6 +39,8 @@ class GlobalRepo @Inject constructor(@SuperAppRetroFit private val superAppRetro
connectivityType: String?,
availableAppVersionCode: Int?,
appVariantAvailable: Boolean,
+ isPermissionsGranted: Boolean,
+ installedModules: String
) {
TemporaryStorageHelper.isHomePageApiInProgress = true
GlobalScope.launch(Dispatchers.IO) {
@@ -46,6 +48,8 @@ class GlobalRepo @Inject constructor(@SuperAppRetroFit private val superAppRetro
apiResponseCallback(
superAppRetrofitService.fetchHomeItems(
availableAppVersionCode,
+ isPermissionsGranted,
+ installedModules,
appVariantAvailable
)
)
@@ -56,6 +60,8 @@ class GlobalRepo @Inject constructor(@SuperAppRetroFit private val superAppRetro
density.orEmpty(),
connectivityType.orEmpty(),
availableAppVersionCode,
+ isPermissionsGranted,
+ installedModules,
appVariantAvailable
)
)
diff --git a/app/src/main/java/com/naviapp/home/respository/HomeRepository.kt b/app/src/main/java/com/naviapp/home/respository/HomeRepository.kt
index 1594bd18b7..6082f706f1 100644
--- a/app/src/main/java/com/naviapp/home/respository/HomeRepository.kt
+++ b/app/src/main/java/com/naviapp/home/respository/HomeRepository.kt
@@ -25,11 +25,15 @@ class HomeRepository @Inject constructor(@SuperAppRetroFit private val superAppR
connectivityType: String?,
availableAppVersionCode: Int?,
appVariantAvailable: Boolean,
+ isPermissionsGranted: Boolean,
+ installedModules: String
): RepoResult {
return if (queryMap.isNullOrEmpty())
apiResponseCallback(
superAppRetrofitService.fetchHomeItems(
availableAppVersionCode,
+ isPermissionsGranted,
+ installedModules,
appVariantAvailable
)
)
@@ -40,6 +44,8 @@ class HomeRepository @Inject constructor(@SuperAppRetroFit private val superAppR
density.orEmpty(),
connectivityType.orEmpty(),
availableAppVersionCode,
+ isPermissionsGranted,
+ installedModules,
appVariantAvailable
)
)
diff --git a/app/src/main/java/com/naviapp/home/viewmodel/HomeVM.kt b/app/src/main/java/com/naviapp/home/viewmodel/HomeVM.kt
index c04667a77d..206e3abf8f 100644
--- a/app/src/main/java/com/naviapp/home/viewmodel/HomeVM.kt
+++ b/app/src/main/java/com/naviapp/home/viewmodel/HomeVM.kt
@@ -129,6 +129,8 @@ class HomeVM @Inject constructor(
callLoanDetailWVCacheApi: Boolean = false,
availableAppVersionCode: Int?,
appVariantAvailable: Boolean,
+ isPermissionGranted: Boolean,
+ installedModules: String
) {
coroutineScope.launch(Dispatchers.IO) {
val response = repository.fetchHomeItems(
@@ -136,7 +138,9 @@ class HomeVM @Inject constructor(
density,
connectivityType,
availableAppVersionCode,
- appVariantAvailable
+ appVariantAvailable,
+ isPermissionGranted,
+ installedModules,
)
if (response.error == null && response.errors.isNullOrEmpty()) {
isUiTronScreenEnabled = response.data?.extraData?.showUiTronScreen == true
diff --git a/app/src/main/java/com/naviapp/models/LoginSettings.kt b/app/src/main/java/com/naviapp/models/LoginSettings.kt
index d119a793e8..6bd8fbf5a0 100644
--- a/app/src/main/java/com/naviapp/models/LoginSettings.kt
+++ b/app/src/main/java/com/naviapp/models/LoginSettings.kt
@@ -21,7 +21,8 @@ data class LoginSettings(
@SerializedName("redirectToOtherApp") val redirectToOtherApp: Boolean? = null,
@SerializedName("showReferralLottie") val showReferralLottie: Boolean? = null,
@SerializedName("mandatoryLoginConfig") val loginExperimentSettings: LoginExperimentSettings? = null,
- @SerializedName("whatsappLoginConfig") val whatsappLoginConfig: WhatsappLoginConfig? = null
+ @SerializedName("whatsappLoginConfig") val whatsappLoginConfig: WhatsappLoginConfig? = null,
+ @SerializedName("requiredPermissions") val requiredPermissions: List? = null
)
data class LoginExperimentSettings(
diff --git a/app/src/main/java/com/naviapp/models/response/BankStatementResponse.kt b/app/src/main/java/com/naviapp/models/response/BankStatementResponse.kt
index 5e454dbf59..77bcbfd708 100644
--- a/app/src/main/java/com/naviapp/models/response/BankStatementResponse.kt
+++ b/app/src/main/java/com/naviapp/models/response/BankStatementResponse.kt
@@ -12,7 +12,6 @@ import com.google.gson.annotations.SerializedName
import com.navi.base.model.CtaData
import com.navi.naviwidgets.models.response.Footer
import com.navi.naviwidgets.models.response.TextFieldData
-import com.naviapp.personalloanrevamp.intermediatev2.fragments.BankStatementV2Fragment
import kotlinx.parcelize.Parcelize
data class BankStatementResponse(
diff --git a/app/src/main/java/com/naviapp/models/response/PermissionDetailsResponse.kt b/app/src/main/java/com/naviapp/models/response/PermissionDetailsResponse.kt
index bb0813cb84..710d98e5f0 100644
--- a/app/src/main/java/com/naviapp/models/response/PermissionDetailsResponse.kt
+++ b/app/src/main/java/com/naviapp/models/response/PermissionDetailsResponse.kt
@@ -23,5 +23,6 @@ data class PermissionDetailsContent(
@SerializedName("dataSafetyBottomSheet")
val dataSafetyBottomSheet: InfoBottomSheetConfig? = null,
@SerializedName("permissionList") val permissionList: List? = null,
+ @SerializedName("modulesToInstall") val modulesToInstall: List? = null,
@SerializedName("finoramicData") val finoramicData: FinoramicData? = null
)
diff --git a/app/src/main/java/com/naviapp/network/retrofit/ResponseCallback.kt b/app/src/main/java/com/naviapp/network/retrofit/ResponseCallback.kt
index 1dee190803..5260c70780 100644
--- a/app/src/main/java/com/naviapp/network/retrofit/ResponseCallback.kt
+++ b/app/src/main/java/com/naviapp/network/retrofit/ResponseCallback.kt
@@ -29,8 +29,8 @@ import com.naviapp.network.ApiConstants.API_SUCCESS_CODE
import com.naviapp.network.ApiConstants.API_SUCCESS_CODE_201
import com.naviapp.network.ApiConstants.API_SUCCESS_CODE_204
import com.naviapp.network.ApiConstants.E_OFFER_EXPIRED
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity.Companion.LOAN_OFFER_EXPIRED
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity.Companion.SYSTEM_UNDER_MAINTENANCE
+import com.naviapp.utils.Constants.LOAN_OFFER_EXPIRED
+import com.naviapp.utils.Constants.SYSTEM_UNDER_MAINTENANCE
import com.naviapp.utils.deleteCacheAndOpenLoginPage
import com.naviapp.utils.handleError
import com.naviapp.utils.isNetworkAvailable
diff --git a/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt b/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt
index 63b559c34e..95e22945fa 100644
--- a/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt
@@ -24,8 +24,12 @@ import com.navi.common.utils.Constants.AVAILABLE_APP_VERSION_CODE
import com.navi.common.utils.Constants.BOTTOM_NAV_BAR_ENDPOINT
import com.navi.common.utils.Constants.HEADER_CONNECTIVITY_TYPE
import com.navi.common.utils.Constants.HEADER_DEVICE_DENSITY
+import com.navi.common.utils.Constants.HEADER_PERMISSION_GRANTED
+import com.navi.common.utils.Constants.HEADER_INSTALLED_MODULES
+import com.navi.common.utils.Constants.HEADER_PERMISSIONS
import com.navi.insurance.models.request.FlagUpdateRequest
import com.navi.naviwidgets.models.response.*
+import com.navi.uitron.model.UiTronResponse
import com.naviapp.account_aggregator.models.*
import com.naviapp.crosssell.models.CrossSellResponse
import com.naviapp.crosssell.models.TaxDocumentsResponse
@@ -34,6 +38,7 @@ import com.naviapp.csat.models.CSATSubmitResponse
import com.naviapp.dashboard.loanapplicationdetails.documentlist.models.DocumentData
import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.EmiCalendarResponse
import com.naviapp.dashboard.loanapplicationdetails.models.*
+import com.naviapp.dashboard.menu.appsettings.model.AppSettingsResponse
import com.naviapp.digitalgold.model.*
import com.naviapp.home.dashboard.models.response.*
import com.naviapp.home.model.BottomBarResponse
@@ -81,7 +86,8 @@ interface RetrofitService {
suspend fun submitOTP(
@Body otpRequest: OtpRequest,
@Header(HEADER_DEVICE_DENSITY) deviceDensity: String,
- @Header(HEADER_CONNECTIVITY_TYPE) connectivityType: String
+ @Header(HEADER_CONNECTIVITY_TYPE) connectivityType: String,
+ @Header(HEADER_PERMISSION_GRANTED) permissionGranted: Boolean
): Response>
// User data
@@ -130,6 +136,12 @@ interface RetrofitService {
@Path("requestId") requestId: String
): Response>
+ @GET("/v1/dynamic-module-settings")
+ suspend fun fetchAppSettings(
+ @Header(HEADER_PERMISSIONS) isPermissionGranted: Boolean,
+ @Header(HEADER_INSTALLED_MODULES) installedModules: String,
+ ): Response>
+
@GET("/requests/{requestId}")
suspend fun fetchAsyncRequestDataWithAdditionalData(
@Path("requestId") requestId: String
@@ -648,12 +660,16 @@ interface RetrofitService {
@Header(HEADER_DEVICE_DENSITY) deviceDensity: String,
@Header(HEADER_CONNECTIVITY_TYPE) connectivityType: String,
@Header(AVAILABLE_APP_VERSION_CODE) availableAppVersionCode: Int?,
+ @Header(HEADER_PERMISSIONS) isPermissionGranted: Boolean,
+ @Header(HEADER_INSTALLED_MODULES) installedModules: String,
@Query("appVariantAvailable") appVariantAvailable: Boolean
): Response>
@GET("/v2/home")
suspend fun fetchHomeItems(
@Header(AVAILABLE_APP_VERSION_CODE) availableAppVersionCode: Int?,
+ @Header(HEADER_PERMISSIONS) isPermissionGranted: Boolean,
+ @Header(HEADER_INSTALLED_MODULES) installedModules: String,
@Query("appVariantAvailable") appVariantAvailable: Boolean
): Response>
@@ -931,6 +947,9 @@ interface RetrofitService {
@GET("/customer-service/customers/me/permission")
suspend fun fetchPermissionDetails(): Response>
+ @GET("/v1/permissions")
+ suspend fun fetchPermissionDetailsV1(): Response>
+
@PATCH("/customer-service/customers/me/permission/submit")
suspend fun submitPermissionDetails(): Response>
@@ -1840,4 +1859,9 @@ interface RetrofitService {
suspend fun fetchMandatePermissionData(
@Body loginPermissionRequest: LoginPermissionRequest
): Response>
+
+ @GET("/onboarding/promotions")
+ suspend fun fetchPromotionData(
+ @Header(HEADER_PERMISSION_GRANTED) permissionGranted: Boolean
+ ): Response>
}
diff --git a/app/src/main/java/com/naviapp/permission/activities/MandatePermissionActivity.kt b/app/src/main/java/com/naviapp/permission/activities/MandatePermissionActivity.kt
index d54eddf2b9..8d03ffb30e 100644
--- a/app/src/main/java/com/naviapp/permission/activities/MandatePermissionActivity.kt
+++ b/app/src/main/java/com/naviapp/permission/activities/MandatePermissionActivity.kt
@@ -18,16 +18,19 @@ import android.os.Bundle
import android.provider.Settings
import android.text.TextUtils
import android.view.View.VISIBLE
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
+import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import com.navi.base.model.*
import com.navi.base.sharedpref.PreferenceManager
+import com.navi.base.utils.BaseUtils
import com.navi.base.utils.isNotNull
import com.navi.base.utils.isNotNullAndNotEmpty
import com.navi.base.utils.orFalse
@@ -46,6 +49,8 @@ import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
import com.navi.naviwidgets.models.ActionButtonWidget
import com.navi.naviwidgets.models.NaviWidget
import com.navi.naviwidgets.models.StepsWidget
+import com.navi.naviwidgets.models.WidgetChangedData
+import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
import com.naviapp.BuildConfig
import com.naviapp.R
@@ -84,6 +89,10 @@ class MandatePermissionActivity : BaseActivity(), WidgetCallback {
screenName
)
private var isNormalFlow: Boolean = false
+ private val resultPermissionSettings =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ updateWidgetState()
+ }
override fun onCreate(savedInstanceState: Bundle?) {
@@ -100,23 +109,9 @@ class MandatePermissionActivity : BaseActivity(), WidgetCallback {
)
initUI()
initObserver()
- loginPermissionVM.setFirstTimeUser(true)
fetchPermissionScreenData()
}
- override fun onResume() {
- super.onResume()
- if (loginPermissionVM.getUpdateScreen()) {
- updateWidgetState()
- loginPermissionVM.setUpdateScreen(false)
- }
- }
-
- override fun onPause() {
- super.onPause()
- loginPermissionVM.setUpdateScreen(true)
- }
-
private fun readArguments() {
intent.extras?.keySet()?.forEach { key ->
parameters.add(LineItem(key = key, value = intent.extras?.get(key).toString()))
@@ -146,12 +141,16 @@ class MandatePermissionActivity : BaseActivity(), WidgetCallback {
response.header?.let {
setUpHeader(it)
}
+ response.extraData?.modulesToInstall?.let {
+ if (it.isNotEmpty()) { installDynamicModules(it) }
+ }
hideLoader()
response.contentWidget?.let { contentWidgets ->
naviContentWidgets.setData(contentWidgets)
setPermissionList(contentWidgets)
- updateWidgetState()
- loginPermissionVM.setFirstTimeUser(false)
+ if (BaseUtils.isUserLoggedIn() && isNormalFlow) {
+ updateWidgetState()
+ }
}
response.footerWidget?.let { footerWidgets ->
naviFooterWidgets.setData(footerWidgets)
@@ -291,6 +290,8 @@ class MandatePermissionActivity : BaseActivity(), WidgetCallback {
}
}
+ override fun getLifeCycle(): Lifecycle = lifecycle
+
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array, grantResults: IntArray
) {
@@ -307,42 +308,6 @@ class MandatePermissionActivity : BaseActivity(), WidgetCallback {
@SuppressLint("NotifyDataSetChanged")
private fun updatePermissionsStateAndData() {
-
- if (loginPermissionVM.getFirstTimeUser()) {
- var enabledPermissionCheck = false
- loginPermissionVM.permissionScreenLiveData.value?.contentWidget?.forEachIndexed { _, widget ->
- if (widget is StepsWidget) {
- loginPermissionVM.getListOfPermissionsAndTypes().forEach {
- if (widget.widgetData?.extraData?.permissionType == it.key) {
- if (it.key == PermissionEnum.LOCATION.name &&
- loginPermissionVM.permissionScreenLiveData.value?.extraData?.fineLocation == true
- ) {
- enabledPermissionCheck = enabledPermissionCheck or
- (ActivityCompat.checkSelfPermission(
- this@MandatePermissionActivity,
- it.value
- ) == PERMISSION_GRANTED) and
- (ActivityCompat.checkSelfPermission(
- this@MandatePermissionActivity,
- Manifest.permission.ACCESS_FINE_LOCATION
- ) == PERMISSION_GRANTED)
- } else {
- enabledPermissionCheck = enabledPermissionCheck or
- (ActivityCompat.checkSelfPermission(
- this@MandatePermissionActivity,
- it.value
- ) == PERMISSION_GRANTED)
- }
- }
- }
- }
- }
-
- if (enabledPermissionCheck.not()) {
- return
- }
- }
-
loginPermissionVM.permissionScreenLiveData.value?.contentWidget?.forEachIndexed { _, widget ->
if (widget is StepsWidget) {
loginPermissionVM.getListOfPermissionsAndTypes().forEach {
@@ -383,9 +348,7 @@ class MandatePermissionActivity : BaseActivity(), WidgetCallback {
sendAnalytics()
if (permissionsManager.hasPermissions(loginPermissionVM.getListOfPermissionsAndTypes().values.toTypedArray())) {
loginPermissionVM.setHardDenyPermissionClicked(false)
- if (loginPermissionVM.getFirstTimeUser().not()) {
- onGrantPermissions()
- }
+ onGrantPermissions()
}
}
}
@@ -419,6 +382,15 @@ class MandatePermissionActivity : BaseActivity(), WidgetCallback {
naviContentWidgets.setData(listOfWidgets)
}
}
+ response.footerWidget?.forEachIndexed { index, naviWidget ->
+ if (naviWidget is ActionButtonWidget) {
+ naviWidget.widgetData?.updateTitle = getString(R.string.go_to_settings_text)
+ naviFooterWidgets.notifyItemChanged(
+ index, WidgetChangedData(WIDGET_STATE_CHANGE, naviWidget)
+ )
+ return@forEachIndexed
+ }
+ }
}
}
}
@@ -583,7 +555,7 @@ class MandatePermissionActivity : BaseActivity(), WidgetCallback {
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.parse(Constants.PACKAGE.plus(BuildConfig.APPLICATION_ID))
)
- startActivity(intent)
+ resultPermissionSettings.launch(intent)
}
@Deprecated("Deprecated in Java")
@@ -591,12 +563,13 @@ class MandatePermissionActivity : BaseActivity(), WidgetCallback {
when (requestCode) {
NaviLocationManager.REQUEST_LOCATION_SETTINGS -> {
if (resultCode == RESULT_OK) {
- onGrantPermissions()
+ showLoader()
+ sendLocation()
OK
} else {
+ hideLoader()
NO
}
- hideLoader()
}
}
super.onActivityResult(requestCode, resultCode, data)
diff --git a/app/src/main/java/com/naviapp/permission/models/LoginPermissionResponse.kt b/app/src/main/java/com/naviapp/permission/models/LoginPermissionResponse.kt
index fa6c78dcee..7d52c41ad5 100644
--- a/app/src/main/java/com/naviapp/permission/models/LoginPermissionResponse.kt
+++ b/app/src/main/java/com/naviapp/permission/models/LoginPermissionResponse.kt
@@ -32,7 +32,9 @@ data class LoginPermissionExtraData(
@SerializedName("fineLocation")
val fineLocation: Boolean? = null,
@SerializedName("mandatoryPermission")
- val mandatoryPermission: Boolean? = null
+ val mandatoryPermission: Boolean? = null,
+ @SerializedName("modulesToInstall")
+ val modulesToInstall: List? = null
)
data class LoginPermissionHeader(
diff --git a/app/src/main/java/com/naviapp/permission/repository/PermissionRepository.kt b/app/src/main/java/com/naviapp/permission/repository/PermissionRepository.kt
index 79178ce8c9..2d1da68d86 100644
--- a/app/src/main/java/com/naviapp/permission/repository/PermissionRepository.kt
+++ b/app/src/main/java/com/naviapp/permission/repository/PermissionRepository.kt
@@ -1,6 +1,6 @@
/*
*
- * * Copyright © 2019 by Navi Technologies Private Limited
+ * * Copyright © 2019-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
@@ -9,6 +9,7 @@ package com.naviapp.permission.repository
import com.naviapp.network.retrofit.ResponseCallback
import com.naviapp.utils.retrofitService
+import com.naviapp.utils.superAppRetrofitService
class PermissionRepository : ResponseCallback() {
suspend fun fetchPermissionDetails() =
@@ -17,15 +18,12 @@ class PermissionRepository : ResponseCallback() {
suspend fun submitPermissionDetails() =
apiResponseCallback(retrofitService().submitPermissionDetails())
+ suspend fun fetchPermissionDetailsV1() =
+ apiResponseCallback(superAppRetrofitService().fetchPermissionDetailsV1())
suspend fun fetchAsyncRequestData(requestId: String) =
apiResponseCallback(retrofitService().fetchAsyncRequestData(requestId))
- /*suspend fun fetchPermissionDetails(): RepoResult {
- val type = object : TypeToken() {}.type
- return mockApiResponse(type, "permissionDetailsResponse")
- }*/
suspend fun fetchPanVerification() =
apiResponseCallback(retrofitService().fetchPanVerification())
-
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/permission/utils/PermissionUtil.kt b/app/src/main/java/com/naviapp/permission/utils/PermissionUtil.kt
index b19e58000c..2891406f79 100644
--- a/app/src/main/java/com/naviapp/permission/utils/PermissionUtil.kt
+++ b/app/src/main/java/com/naviapp/permission/utils/PermissionUtil.kt
@@ -119,7 +119,7 @@ fun getAlternatePermissionTilesV2(): List {
null
),
application.getString(R.string.sms),
- application.getString(R.string.sms_permission),
+ application.getString(R.string.home_sms_permission),
listOf(Manifest.permission.READ_SMS),
iconCode = IconUtils.ICON_MESSAGE_PERMISSION
),
@@ -130,7 +130,7 @@ fun getAlternatePermissionTilesV2(): List {
null
),
application.getString(R.string.contacts),
- application.getString(R.string.contacts_permission),
+ application.getString(R.string.home_contacts_permission),
listOf(Manifest.permission.READ_CONTACTS),
iconCode = IconUtils.ICON_CONTACTS_PERMISSION
),
@@ -141,7 +141,7 @@ fun getAlternatePermissionTilesV2(): List {
null
),
application.getString(R.string.location),
- application.getString(R.string.location_permission),
+ application.getString(R.string.home_location_permission),
listOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
@@ -151,7 +151,7 @@ fun getAlternatePermissionTilesV2(): List {
PermissionTile(
ResourcesCompat.getDrawable(application.resources, R.drawable.ic_phone, null),
application.getString(R.string.device),
- application.getString(R.string.device_permission),
+ application.getString(R.string.home_device_permission),
iconCode = IconUtils.ICON_DEVICE_PERMISSION
)
)
diff --git a/app/src/main/java/com/naviapp/permission/viewmodel/LoginPermissionVM.kt b/app/src/main/java/com/naviapp/permission/viewmodel/LoginPermissionVM.kt
index bb7933cce3..9b67fc4da3 100644
--- a/app/src/main/java/com/naviapp/permission/viewmodel/LoginPermissionVM.kt
+++ b/app/src/main/java/com/naviapp/permission/viewmodel/LoginPermissionVM.kt
@@ -48,8 +48,6 @@ class LoginPermissionVM @Inject constructor(
private var hardDenyPermissionClicked = false
private var nextCta: ActionData? = null
private var isExtraWidgetsShown: Boolean = false
- private var updateScreen: Boolean = false
- private var firstTimeUser: Boolean = false
fun fetchPermissionData(loginPermissionRequest: LoginPermissionRequest) {
viewModelScope.launch {
@@ -109,16 +107,4 @@ class LoginPermissionVM @Inject constructor(
}
fun getIsExtraWidgetShown() = isExtraWidgetsShown
-
- fun setUpdateScreen(value: Boolean) {
- this.updateScreen = value
- }
-
- fun getUpdateScreen() = updateScreen
-
- fun setFirstTimeUser(value: Boolean) {
- this.firstTimeUser = value
- }
-
- fun getFirstTimeUser() = firstTimeUser
}
\ No newline at end of file
diff --git a/app/src/main/java/com/naviapp/permission/viewmodel/PermissionViewModel.kt b/app/src/main/java/com/naviapp/permission/viewmodel/PermissionViewModel.kt
index a9e8615580..dc43c28939 100644
--- a/app/src/main/java/com/naviapp/permission/viewmodel/PermissionViewModel.kt
+++ b/app/src/main/java/com/naviapp/permission/viewmodel/PermissionViewModel.kt
@@ -71,6 +71,23 @@ class PermissionViewModel(private val permissionRepository: PermissionRepository
}
}
+ fun fetchPermissionDetailsV1() {
+ viewModelScope.launch {
+ val response = permissionRepository.fetchPermissionDetailsV1()
+ if (response.error == null && response.errors?.isEmpty().orTrue()) {
+ _permissionDetailsResponse.value = response.data
+ } else {
+ setErrorData(
+ response.errors, response.error,
+ errorMetaData = ErrorMetaData(
+ flowName = FLOW_PERMISSION,
+ methodName = ::fetchPermissionDetailsV1.name
+ )
+ )
+ }
+ }
+ }
+
fun submitPermissionDetails() {
analyticsTracker.postPermissionStartTime()
viewModelScope.launch {
diff --git a/app/src/main/java/com/naviapp/personalloan/di/PersonalLoanModule.kt b/app/src/main/java/com/naviapp/personalloan/di/PersonalLoanModule.kt
index 3815059f9f..6701a2a7f7 100644
--- a/app/src/main/java/com/naviapp/personalloan/di/PersonalLoanModule.kt
+++ b/app/src/main/java/com/naviapp/personalloan/di/PersonalLoanModule.kt
@@ -1,6 +1,6 @@
/*
*
- * * Copyright © 2019 by Navi Technologies Private Limited
+ * * Copyright © 2019-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
@@ -12,8 +12,6 @@ import com.naviapp.email.repo.EmailRepository
import com.naviapp.network.di.SuperAppRetroFit
import com.naviapp.network.retrofit.RetrofitService
import com.naviapp.personalloan.getloan.kyc.repositories.KycPhysicalAddressVerificationRepository
-import com.naviapp.personalloanrevamp.getloanRevamp.repository.LoanDetailsV2Repository
-import com.naviapp.personalloanrevamp.useridentificationv2.repository.PersonalLoanTrackerRepository
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
@@ -38,14 +36,4 @@ class PersonalLoanModule {
@Provides
fun providesEmailRepository(@SuperAppRetroFit retrofitService: RetrofitService) =
EmailRepository(retrofitService)
-
- @ViewModelScoped
- @Provides
- fun providesLoanDetailsV2Repository(@SuperAppRetroFit retrofitService: RetrofitService) =
- LoanDetailsV2Repository(retrofitService)
-
- @ViewModelScoped
- @Provides
- fun providesPersonalLoanTrackerRepository(@SuperAppRetroFit retrofitService: RetrofitService) =
- PersonalLoanTrackerRepository(retrofitService)
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/activities/BankAccountVerificationLoaderActivity.kt b/app/src/main/java/com/naviapp/personalloan/getloan/activities/BankAccountVerificationLoaderActivity.kt
index 80c9a0f9ec..f756491ed1 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/activities/BankAccountVerificationLoaderActivity.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/activities/BankAccountVerificationLoaderActivity.kt
@@ -46,8 +46,10 @@ import com.naviapp.models.response.PennyDropBankData
import com.naviapp.personalloan.getloan.bankdetails.fragments.BankDetailsFragment.Companion.PENNY_DROP_BANK_DATA
import com.naviapp.personalloan.getloan.bankdetails.models.BankLoanStatusType
import com.naviapp.personalloan.getloan.bankdetails.viewmodels.BankDetailsVM
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
import com.naviapp.utils.Constants
+import com.naviapp.utils.Constants.ERROR_DATA
+import com.naviapp.utils.Constants.REDIRECT_DATA
+import com.naviapp.utils.Constants.REJECTION_DATA
import com.naviapp.utils.LOAN_APPLICATION_ID
import dagger.hilt.android.AndroidEntryPoint
@@ -71,8 +73,8 @@ class BankAccountVerificationLoaderActivity :
hideLoader()
if ((it.first?.softReject == true)) {
val data = Bundle()
- data.putParcelable(ErrorScreenV2Activity.REDIRECT_DATA, it.first)
- data.putParcelable(ErrorScreenV2Activity.ERROR_DATA, it.second)
+ data.putParcelable(REDIRECT_DATA, it.first)
+ data.putParcelable(ERROR_DATA, it.second)
data.putString(Constants.WIDGET_ID, Constants.PERSONAL_LOAN)
ScreenNavigator.instance.startActivityWithNoActivityStack(
this,
@@ -85,7 +87,7 @@ class BankAccountVerificationLoaderActivity :
hideLoader()
if (rejectionDetailsResponse.hasRejection.orFalse()) {
val data = Bundle()
- data.putParcelable(ErrorScreenV2Activity.REJECTION_DATA, rejectionDetailsResponse)
+ data.putParcelable(REJECTION_DATA, rejectionDetailsResponse)
data.putBoolean(
GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY,
intent.getBooleanExtra(GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY, false)
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/activities/GetLoanActivity.kt b/app/src/main/java/com/naviapp/personalloan/getloan/activities/GetLoanActivity.kt
index 8f314add2c..ecf2196a3d 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/activities/GetLoanActivity.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/activities/GetLoanActivity.kt
@@ -30,7 +30,6 @@ import com.navi.common.paymenthandler.factories.PaymentProviderFactory
import com.navi.common.ui.activity.BaseActivity
import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.utils.log
-import com.navi.common.utils.observeNonNull
import com.navi.payment.razorpay.RazorpayHelper
import com.navi.payment.utils.ProviderType
import com.navi.payment.utils.ProviderType.DIGIO
@@ -65,12 +64,6 @@ import com.naviapp.personalloan.getloan.kyc.models.AadhaarVerificationData
import com.naviapp.personalloan.getloan.kyc.viewmodels.KycSharedVM
import com.naviapp.personalloan.getloan.loandetails.viewmodels.LoanDetailsAndEmiSharedVM
import com.naviapp.personalloanrevamp.getloanRevamp.fragments.BankDetailsV2Fragment.Companion.DISBURSEMENT_DETAILS
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment.Companion.AADHAR_OTP_REQUEST_CODE
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment.Companion.PAN_CAMERA_REQUEST_CODE
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment.Companion.SELFIE_REQUEST_CODE
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment.Companion.UPLOAD_AADHAR_REQUEST_CODE
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment.Companion.VIDEO_KYC_REQUEST_CODE
-import com.naviapp.personalloanrevamp.useridentificationv2.activities.LoanEligibilityLoaderV2Activity.Companion.OFFER
import com.naviapp.registration.viewmodel.ConfigVM
import com.naviapp.selfiecapture.SelfieErrorData
import com.naviapp.selfiecapture.SelfieVerificationHelper
@@ -563,6 +556,12 @@ class GetLoanActivity :
const val MFI_CONSENT_SCREEN = "MFI_CONSENT"
const val EMI_SELECTOR_SCREEN = "EMI_SELECTOR"
const val EFFECTIVE_INTEREST_COST_SCREEN = "EFFECTIVE_INTEREST_COST"
+ const val SELFIE_REQUEST_CODE = 100
+ const val PAN_CAMERA_REQUEST_CODE = 101
+ const val UPLOAD_AADHAR_REQUEST_CODE = 102
+ const val VIDEO_KYC_REQUEST_CODE = 103
+ const val AADHAR_OTP_REQUEST_CODE = 104
+ const val OFFER = "QUOTE"
}
override fun updateHeader(
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/viewmodels/AddressVerificationVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/viewmodels/AddressVerificationVM.kt
index f0a2789ce7..d7a2af0fb0 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/viewmodels/AddressVerificationVM.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/viewmodels/AddressVerificationVM.kt
@@ -16,20 +16,23 @@ import com.navi.common.network.models.ErrorMetaData
import com.navi.common.network.models.GenericErrorResponse
import com.navi.common.utils.isValidResponse
import com.navi.common.viewmodel.BaseVM
+import com.navi.naviwidgets.models.response.Action
+import com.naviapp.R
+import com.naviapp.app.NaviApplication
import com.naviapp.models.RedirectPageStatus
import com.naviapp.models.request.Address
+import com.naviapp.models.request.AddressType
import com.naviapp.models.request.KycRequest
import com.naviapp.models.request.SaveCorrespondenceAddressRequest
import com.naviapp.models.response.*
import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloan.getloan.kyc.models.KycInReviewResponse
import com.naviapp.personalloan.getloan.kyc.repositories.KycRepository
-import com.naviapp.personalloanrevamp.addressverificationrevamp.fragment.KycAddressProofV2Fragment
-import com.naviapp.personalloanrevamp.addressverificationrevamp.helper.AddressHelper.getUploadDocumentErrorData
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment
import com.naviapp.personalloanrevamp.models.DocumentUploadViewData
import com.naviapp.personalloanrevamp.models.FLOW_KYC_VERIFICATION
import com.naviapp.personalloanrevamp.models.PROP_ERROR_TAG
+import com.naviapp.utils.Constants.COMPLETED
+import com.naviapp.utils.Constants.NO_ADDRESS_SELECTED_BOTTOM_SHEET
import kotlinx.coroutines.launch
class AddressVerificationVM(private val repository: KycRepository = KycRepository()) : BaseVM() {
@@ -171,7 +174,7 @@ class AddressVerificationVM(private val repository: KycRepository = KycRepositor
currentAddressIndex == -2 -> {
if (uploadedDocumentTypeAndUrl.value != null) {
CurrentAddress(
- status = KycV2Fragment.COMPLETED,
+ status = COMPLETED,
documentType = uploadedDocumentTypeAndUrl.value?.first,
documentUrl = uploadedDocumentTypeAndUrl.value?.second,
city = addressProofLiveData.value?.content?.city,
@@ -214,7 +217,7 @@ class AddressVerificationVM(private val repository: KycRepository = KycRepositor
pinCode = currentAddress?.pinCode,
documentType = currentAddress?.documentType,
documentTempUrl = currentAddress?.documentUrl,
- type = KycAddressProofV2Fragment.CORRESPONDENCE,
+ type = AddressType.CORRESPONDENCE.name,
current = true
)
updateKycDetails(KycRequest(address))
@@ -360,4 +363,16 @@ class AddressVerificationVM(private val repository: KycRepository = KycRepositor
}
}
}
+
+ private fun getUploadDocumentErrorData(): GenericErrorResponse {
+ val context = NaviApplication.instance
+ return GenericErrorResponse(
+ listOf(Action(context.getString(R.string.upload_proof))),
+ null,
+ context.getString(R.string.upload_document_error_description),
+ context.getString(R.string.document_not_uploaded),
+ null,
+ NO_ADDRESS_SELECTED_BOTTOM_SHEET
+ )
+ }
}
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/accountaggregator/AccountAggregatorFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/accountaggregator/AccountAggregatorFragment.kt
index 6ce7c9720f..469a7502cd 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/accountaggregator/AccountAggregatorFragment.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/accountaggregator/AccountAggregatorFragment.kt
@@ -1,6 +1,6 @@
/*
*
- * * Copyright © 2019-2022 by Navi Technologies Limited
+ * * Copyright © 2019-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
@@ -58,18 +58,18 @@ import com.naviapp.personalloan.getloan.activities.GetLoanActivity
import com.naviapp.personalloan.getloan.bankdetails.adapters.AggregatorCheckBoxAdapter
import com.naviapp.personalloan.getloan.bankdetails.adapters.AggregatorFipAdapter
import com.naviapp.personalloan.getloan.bankdetails.viewmodels.AggregatorSharedVM
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
-import com.naviapp.personalloanrevamp.intermediatev2.fragments.BankStatementV2Fragment
-import com.naviapp.personalloanrevamp.intermediatev2.helper.IntermediateV2Helper
import com.naviapp.utils.*
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.BACK_ACTION
import com.naviapp.utils.Constants.BANK_OPTION_FLOW_TYPE
+import com.naviapp.utils.Constants.BANK_STATEMENT_V2
+import com.naviapp.utils.Constants.BANK_STATEMENT_VERIFICATION_V2
import com.naviapp.utils.Constants.CONSENT_INITIATOR_PL
import com.naviapp.utils.Constants.DIVIDER
import com.naviapp.utils.Constants.FLOW_TYPE
import com.naviapp.utils.Constants.IS_REVAMP_FLOW
+import com.naviapp.utils.Constants.IS_SOFT_REJECT
+import com.naviapp.utils.Constants.LOAN_OFFER_UPGRADE_V2
import com.naviapp.utils.EMPTY
import com.onemoney.custom.Onemoney
import com.onemoney.custom.OnemoneyError
@@ -164,7 +164,7 @@ class AccountAggregatorFragment :
if (arguments?.getBoolean(IS_REVAMP_FLOW, false) == true) {
nextCta =
INTERMEDIATE_V2.plus(DIVIDER)
- .plus(IntermediateV2Helper.BANK_STATEMENT_VERIFICATION_V2)
+ .plus(BANK_STATEMENT_VERIFICATION_V2)
}
val commonBottomSheet =
CommonBottomSheet.newInstance(
@@ -556,11 +556,11 @@ class AccountAggregatorFragment :
GetLoanActivity.LOAN_OFFER_UPGRADE_SCREEN
)
if (
- arguments?.getString(FLOW_TYPE) == BankStatementV2Fragment.BANK_STATEMENT_V2
+ arguments?.getString(FLOW_TYPE) == BANK_STATEMENT_V2
) {
nextCtaUrl =
LOAN_APPLICATION_V2.plus(DIVIDER)
- .plus(GetLoanV2ViewHelper.LOAN_OFFER_UPGRADE_V2)
+ .plus(LOAN_OFFER_UPGRADE_V2)
}
NaviDeepLinkNavigator.navigate(
activity = activity,
@@ -572,12 +572,12 @@ class AccountAggregatorFragment :
AggregatorSharedVM.ErrorType.BANK_STATEMENT_SOFT_REJECT.name -> {
var nextCtaUrl = NaviDeepLinkNavigator.ERROR
if (
- arguments?.getString(FLOW_TYPE) == BankStatementV2Fragment.BANK_STATEMENT_V2
+ arguments?.getString(FLOW_TYPE) == BANK_STATEMENT_V2
) {
nextCtaUrl = NaviDeepLinkNavigator.ERROR_V2
}
val data = Bundle()
- data.putString(ErrorScreenV2Activity.IS_SOFT_REJECT, Constants.TRUE)
+ data.putString(IS_SOFT_REJECT, Constants.TRUE)
NaviDeepLinkNavigator.navigate(
activity = activity,
ctaData = CtaData(url = nextCtaUrl),
@@ -956,7 +956,7 @@ class AccountAggregatorFragment :
override fun onFooterBackPress(ctaData: CtaData?) {
// To do check the back handling
- if (arguments?.getString(FLOW_TYPE) == BankStatementV2Fragment.BANK_STATEMENT_V2) {
+ if (arguments?.getString(FLOW_TYPE) == BANK_STATEMENT_V2) {
moveToBankStatementVerification()
} else {
fragmentInterchangeListener?.navigateToNextScreen(BANK_STATEMENT_VERIFICATION, Bundle())
@@ -968,7 +968,7 @@ class AccountAggregatorFragment :
isOnConsentScreen = false
showLinkingScreen()
} else {
- if (arguments?.getString(FLOW_TYPE) == BankStatementV2Fragment.BANK_STATEMENT_V2) {
+ if (arguments?.getString(FLOW_TYPE) == BANK_STATEMENT_V2) {
moveToBankStatementVerification()
} else {
fragmentInterchangeListener?.navigateToNextScreen(
@@ -991,7 +991,7 @@ class AccountAggregatorFragment :
url =
INTERMEDIATE_V2.appendStrings(
FORWARD_SLASH.toString(),
- IntermediateV2Helper.BANK_STATEMENT_VERIFICATION_V2
+ BANK_STATEMENT_VERIFICATION_V2
)
),
bundle = bundle,
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/repositories/BankDetailsRepository.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/repositories/BankDetailsRepository.kt
index d324b3a6c4..66f49a4410 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/repositories/BankDetailsRepository.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/repositories/BankDetailsRepository.kt
@@ -13,9 +13,8 @@ import com.naviapp.models.response.BankDetailsPostKyc
import com.naviapp.models.response.SelectBankPageResponse
import com.naviapp.network.retrofit.ResponseCallback
import com.naviapp.utils.retrofitService
-import javax.inject.Inject
-class BankDetailsRepository @Inject constructor() : ResponseCallback() {
+class BankDetailsRepository : ResponseCallback() {
suspend fun submitBankDetails(
bankDetail: BankDetail,
loanApplicationId: String,
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/viewmodels/BankDetailsVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/viewmodels/BankDetailsVM.kt
index 51eecdd261..f3ddc3d66b 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/viewmodels/BankDetailsVM.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/viewmodels/BankDetailsVM.kt
@@ -30,13 +30,11 @@ import com.naviapp.personalloanrevamp.models.FLOW_BANK_VERIFICATION
import com.naviapp.personalloanrevamp.models.PROP_REQUEST_ID
import com.naviapp.utils.LOAN_APPLICATION_ID
import com.naviapp.utils.isNetworkAvailable
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class BankDetailsVM @Inject constructor(private val repository: BankDetailsRepository) :
- BaseVM() {
+class BankDetailsVM(
+ private val repository: BankDetailsRepository = BankDetailsRepository()
+) : BaseVM() {
private val _bankDetailAdd =
MutableLiveData>()
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/viewmodels/SelectBankVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/viewmodels/SelectBankVM.kt
index 4108325eb0..d0db59fa1d 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/viewmodels/SelectBankVM.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/viewmodels/SelectBankVM.kt
@@ -8,14 +8,13 @@ import com.naviapp.models.response.SelectBankPageResponse
import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloan.getloan.bankdetails.repositories.BankDetailsRepository
import com.naviapp.personalloanrevamp.models.FLOW_BANK_STATEMENT_VERIFICATION
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class SelectBankVM @Inject constructor(private val repository: BankDetailsRepository): BaseVM() {
+class SelectBankVM(
+ private val repository: BankDetailsRepository = BankDetailsRepository()
+): BaseVM() {
private val _selectBankPageResponse =
MutableStateFlow>(GenericResponseState.Init())
val selectBankPageResponse = _selectBankPageResponse.asStateFlow()
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt
index 7147d2b023..abee1ecf08 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt
@@ -36,12 +36,12 @@ import com.naviapp.network.ApiConstants
import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloan.getloan.common.view.KycPanView
import com.naviapp.personalloan.getloan.common.view.StatusIndicatorView
+import com.naviapp.personalloan.getloan.kyc.adapter.KycItemType
import com.naviapp.personalloan.getloan.kyc.adapter.KycItemsAdapter
import com.naviapp.personalloan.getloan.kyc.models.AadhaarDetailsResponse
import com.naviapp.personalloan.getloan.kyc.models.AadhaarVerificationData
import com.naviapp.personalloan.getloan.kyc.models.KycInReviewResponse
import com.naviapp.personalloan.getloan.kyc.repositories.KycRepository
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment
import com.naviapp.personalloanrevamp.models.*
import com.naviapp.utils.*
import kotlinx.coroutines.launch
@@ -574,7 +574,7 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM()
fun getJsonKey(): String {
if (isTextFieldPresent()) {
_kycDetails.value?.kycDetails?.kycItemList?.forEach { kycItem ->
- if (kycItem.type == KycV2Fragment.TEXTFIELD) {
+ if (kycItem.type == KycItemType.TEXTFIELD.name) {
return kycItem.jsonKey.toString()
}
}
@@ -585,12 +585,12 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM()
fun isCurrentAddressFieldPresent(): Boolean {
var isCurrentAddressFieldPresent = false
_kycDetails.value?.kycDetails?.kycItemList?.forEach { kycItem ->
- if (kycItem.type == KycV2Fragment.CURRENT_ADDRESS) {
+ if (kycItem.type == KycItemType.CURRENT_ADDRESS.name) {
isCurrentAddressFieldPresent = true
}
}
_kycDetailsV2.value?.kycDetails?.kycItemList?.forEach { kycItem ->
- if (kycItem.kycType == KycV2Fragment.CURRENT_ADDRESS) {
+ if (kycItem.kycType == KycItemType.CURRENT_ADDRESS.name) {
isCurrentAddressFieldPresent = true
}
}
@@ -600,7 +600,7 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM()
fun isTextFieldPresent(): Boolean {
var isTextFieldPresent = false
_kycDetails.value?.kycDetails?.kycItemList?.forEach { kycItem ->
- if (kycItem.type == KycV2Fragment.TEXTFIELD) {
+ if (kycItem.type == KycItemType.TEXTFIELD.name) {
isTextFieldPresent = true
}
}
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/repositories/EmiSelectorRepository.kt b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/repositories/EmiSelectorRepository.kt
index d7b20da5f5..fed81d4f0b 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/repositories/EmiSelectorRepository.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/repositories/EmiSelectorRepository.kt
@@ -1,6 +1,6 @@
/*
*
- * * Copyright © 2022 by Navi Technologies Private Limited
+ * * Copyright © 2022-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
@@ -9,16 +9,13 @@ package com.naviapp.personalloan.getloan.loandetails.repositories
import com.naviapp.models.request.LoanFeeDetailsRequest
import com.naviapp.network.retrofit.ResponseCallback
-import com.naviapp.network.retrofit.RetrofitService
-import javax.inject.Inject
+import com.naviapp.utils.retrofitService
-class EmiSelectorRepository @Inject constructor(
- private val retrofitService: RetrofitService
-) : ResponseCallback() {
+class EmiSelectorRepository : ResponseCallback() {
suspend fun fetchOptionalEmiDates() =
- apiResponseCallback(retrofitService.fetchOptionalEmiDates())
+ apiResponseCallback(retrofitService().fetchOptionalEmiDates())
suspend fun fetchUpcomingEmiDates(loanFeeDetailsRequest: LoanFeeDetailsRequest) =
- apiResponseCallback(retrofitService.fetchUpcomingEmiDates(loanFeeDetailsRequest))
-}
\ No newline at end of file
+ apiResponseCallback(retrofitService().fetchUpcomingEmiDates(loanFeeDetailsRequest))
+}
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/EmiSelectorVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/EmiSelectorVM.kt
index e403fde95e..43ba226429 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/EmiSelectorVM.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/EmiSelectorVM.kt
@@ -17,13 +17,10 @@ import com.naviapp.models.response.EmiCalendarDataResponse
import com.naviapp.models.response.UpcomingEmiDatesResponse
import com.naviapp.personalloan.getloan.loandetails.repositories.EmiSelectorRepository
import com.naviapp.personalloanrevamp.models.FLOW_EMI_SELECTION
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class EmiSelectorVM @Inject constructor(
- private val repository: EmiSelectorRepository
+class EmiSelectorVM(
+ private val repository: EmiSelectorRepository = EmiSelectorRepository()
) : BaseVM() {
private val _emiOptionalDateInfo = MutableLiveData()
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/GstDetailsVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/GstDetailsVM.kt
index 1e56076317..410505c600 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/GstDetailsVM.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/GstDetailsVM.kt
@@ -25,12 +25,11 @@ import com.naviapp.personalloan.getloan.loandetails.states.GstVerificationState
import com.naviapp.personalloan.getloan.repositories.GstDetailsRepository
import com.naviapp.personalloanrevamp.models.FLOW_GST
import com.naviapp.personalloanrevamp.models.PROP_CODE
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class GstDetailsVM @Inject constructor(val repository: GstDetailsRepository) : BaseVM() {
+class GstDetailsVM(
+ val repository: GstDetailsRepository = GstDetailsRepository()
+) : BaseVM() {
private val _gstDetailsResponse = MutableLiveData()
val gstDetailsResponse: LiveData
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/repositories/GstDetailsRepository.kt b/app/src/main/java/com/naviapp/personalloan/getloan/repositories/GstDetailsRepository.kt
index 39077da922..762ed2dcf9 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/repositories/GstDetailsRepository.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/repositories/GstDetailsRepository.kt
@@ -11,31 +11,28 @@ import com.naviapp.models.request.GstLoginData
import com.naviapp.models.request.GstOtpVerificationData
import com.naviapp.models.request.GstSendOtpData
import com.naviapp.network.retrofit.ResponseCallback
-import com.naviapp.network.retrofit.RetrofitService
-import javax.inject.Inject
+import com.naviapp.utils.retrofitService
-class GstDetailsRepository @Inject constructor(val retrofitService: RetrofitService) :
- ResponseCallback() {
+class GstDetailsRepository : ResponseCallback() {
suspend fun fetchGstDetails(queryMap: HashMap?) =
- apiResponseCallback(retrofitService.fetchGstDetails(queryMap = queryMap))
+ apiResponseCallback(retrofitService().fetchGstDetails(queryMap = queryMap))
suspend fun loginGstWithCredential(gstLoginData: GstLoginData) =
- apiResponseCallback(retrofitService.loginGstWithCredential(gstLoginData))
+ apiResponseCallback(retrofitService().loginGstWithCredential(gstLoginData))
suspend fun sendOTPForGstVerification(gstSendOtpData: GstSendOtpData) =
- apiResponseCallback(retrofitService.sendOTPForGstVerification(gstSendOtpData))
+ apiResponseCallback(retrofitService().sendOTPForGstVerification(gstSendOtpData))
suspend fun verifyOTPForGstVerification(gstOtpVerificationData: GstOtpVerificationData) =
- apiResponseCallback(retrofitService.verifyOTPForGstVerification(gstOtpVerificationData))
+ apiResponseCallback(retrofitService().verifyOTPForGstVerification(gstOtpVerificationData))
suspend fun fetchGstLoginWithCredentialStatus(requestId: String) =
- apiResponseCallback(retrofitService.fetchGstLoginWithCredentialStatus(requestId))
+ apiResponseCallback(retrofitService().fetchGstLoginWithCredentialStatus(requestId))
suspend fun fetchSendOTPForGstVerificationStatus(requestId: String) =
- apiResponseCallback(retrofitService.fetchSendOTPForGstVerificationStatus(requestId))
+ apiResponseCallback(retrofitService().fetchSendOTPForGstVerificationStatus(requestId))
suspend fun fetchVerifyOTPForGstVerification(requestId: String) =
- apiResponseCallback(retrofitService.fetchVerifyOTPForGstVerification(requestId))
-
-}
\ No newline at end of file
+ apiResponseCallback(retrofitService().fetchVerifyOTPForGstVerification(requestId))
+}
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/repositories/SkipMandateRepository.kt b/app/src/main/java/com/naviapp/personalloan/getloan/repositories/SkipMandateRepository.kt
index 8c7cc74d0f..59a601f841 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/repositories/SkipMandateRepository.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/repositories/SkipMandateRepository.kt
@@ -1,25 +1,23 @@
/*
- * *
- * * Copyright (c) 2022 . All rights reserved @Navi
+ *
+ * * Copyright © 2022-2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
*
*/
package com.naviapp.personalloan.getloan.repositories
import com.naviapp.network.retrofit.ResponseCallback
-import com.naviapp.network.retrofit.RetrofitService
-import javax.inject.Inject
+import com.naviapp.utils.retrofitService
-class SkipMandateRepository @Inject constructor(private val retrofitService: RetrofitService) :
- ResponseCallback() {
+class SkipMandateRepository : ResponseCallback() {
suspend fun fetchSkipMandateDetails(loanApplicationId: String) =
- apiResponseCallback(retrofitService.fetchSkipMandateDetails(loanApplicationId))
+ apiResponseCallback(retrofitService().fetchSkipMandateDetails(loanApplicationId))
suspend fun fetchLoanBasicDetails() =
- apiResponseCallback(retrofitService.fetchLoanBasicDetails())
+ apiResponseCallback(retrofitService().fetchLoanBasicDetails())
suspend fun fetchSkipMandateV2Details(loanApplicationId: String) =
- apiResponseCallback(retrofitService.fetchSkipMandateV2Details(loanApplicationId))
-
-}
\ No newline at end of file
+ apiResponseCallback(retrofitService().fetchSkipMandateV2Details(loanApplicationId))
+}
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/utils/FaqsUtil.kt b/app/src/main/java/com/naviapp/personalloan/getloan/utils/FaqsUtil.kt
index b9a02be6b6..87d31cc531 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/utils/FaqsUtil.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/utils/FaqsUtil.kt
@@ -1,6 +1,6 @@
/*
*
- * * Copyright © 2019 by Navi Technologies Private Limited
+ * * Copyright © 2019-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
@@ -12,188 +12,273 @@ import com.naviapp.R
import com.naviapp.models.response.Faq
import com.naviapp.models.response.FaqContent
-fun loanDetailsFaqs(context: Context) = Faq(
- context.getString(R.string.loan_details),
- listOf(
- FaqContent(
- context.getString(R.string.what_is_moratorium),
- context.getString(R.string.moratorium_is_the_period_of_time)
- ),
- FaqContent(
- context.getString(R.string.is_the_moratorium_available),
- context.getString(R.string.navi_will_not_be_able_to_extend_moratorium)
- ),
- FaqContent(
- context.getString(R.string.can_i_change_loan_amount),
- context.getString(R.string.you_can_select_loan_amount)
- ),
- FaqContent(
- context.getString(R.string.can_i_change_emi),
- context.getString(R.string.you_can_select_emi)
- ),
- FaqContent(
- context.getString(R.string.can_i_change_tenure),
- context.getString(R.string.you_can_change_emi)
- ),
- FaqContent(
- context.getString(R.string.can_i_pre_close),
- context.getString(R.string.you_can_pre_close)
- ),
- FaqContent(
- context.getString(R.string.time_for_loan_disbursal),
- context.getString(R.string.loan_disbursal_is_instant)
- ),
- FaqContent(
- context.getString(R.string.loan_amount_and_interest_rates_determined),
- context.getString(R.string.calculated_by_internal_algorithms)
- ),
- FaqContent(
- context.getString(R.string.loan_for_remaining_amount),
- context.getString(R.string.repay_the_existing_loan)
- ),
- FaqContent(
- context.getString(R.string.why_is_processing_fee_charged),
- context.getString(R.string.variety_of_fixed_costs_associated)
- ),
- FaqContent(
- context.getString(R.string.why_is_gst_charged),
- context.getString(R.string.gst_of_18_of_processing_fee)
+fun loanDetailsFaqs(context: Context) =
+ Faq(
+ context.getString(R.string.loan_details),
+ listOf(
+ FaqContent(
+ context.getString(R.string.what_is_moratorium),
+ context.getString(R.string.moratorium_is_the_period_of_time)
+ ),
+ FaqContent(
+ context.getString(R.string.is_the_moratorium_available),
+ context.getString(R.string.navi_will_not_be_able_to_extend_moratorium)
+ ),
+ FaqContent(
+ context.getString(R.string.can_i_change_loan_amount),
+ context.getString(R.string.you_can_select_loan_amount)
+ ),
+ FaqContent(
+ context.getString(R.string.can_i_change_emi),
+ context.getString(R.string.you_can_select_emi)
+ ),
+ FaqContent(
+ context.getString(R.string.can_i_change_tenure),
+ context.getString(R.string.you_can_change_emi)
+ ),
+ FaqContent(
+ context.getString(R.string.can_i_pre_close),
+ context.getString(R.string.you_can_pre_close)
+ ),
+ FaqContent(
+ context.getString(R.string.time_for_loan_disbursal),
+ context.getString(R.string.loan_disbursal_is_instant)
+ ),
+ FaqContent(
+ context.getString(R.string.loan_amount_and_interest_rates_determined),
+ context.getString(R.string.calculated_by_internal_algorithms)
+ ),
+ FaqContent(
+ context.getString(R.string.loan_for_remaining_amount),
+ context.getString(R.string.repay_the_existing_loan)
+ ),
+ FaqContent(
+ context.getString(R.string.why_is_processing_fee_charged),
+ context.getString(R.string.variety_of_fixed_costs_associated)
+ ),
+ FaqContent(
+ context.getString(R.string.why_is_gst_charged),
+ context.getString(R.string.gst_of_18_of_processing_fee)
+ ),
+ FaqContent(
+ context.getString(R.string.how_can_i_reach_out_to_gro),
+ context.getString(R.string.how_can_i_reach_out_to_gro_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.what_are_the_cash_loan_features),
+ context.getString(R.string.what_are_the_cash_loan_features_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.is_navi_an_nbfc),
+ context.getString(R.string.is_navi_an_nbfc_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.how_can_i_lodge_a_complaint),
+ context.getString(R.string.how_can_i_lodge_a_complaint_answer)
+ )
)
)
-)
-fun kycFaqs(context: Context) = Faq(
- context.getString(R.string.kyc),
- listOf(
- FaqContent(
- context.getString(R.string.reason_for_kyc_rejection),
- context.getString(R.string.name_or_selfie_mismatch)
- ),
- FaqContent(
- context.getString(R.string.aadhaar_not_linked_to_mobile),
- context.getString(R.string.upload_image_of_aadhaar)
- ),
- FaqContent(
- context.getString(R.string.do_not_have_an_aadhaar),
- context.getString(R.string.completing_kyc_offline)
- ),
- FaqContent(
- context.getString(R.string.how_to_complete_kyc_offline),
- context.getString(R.string.complete_kyc_offline_detail)
- ),
- FaqContent(
- context.getString(R.string.do_not_have_current_address_proof),
- context.getString(R.string.proceed_without_attaching_proof)
- ),
- FaqContent(
- context.getString(R.string.reason_am_not_getting_aadhaar_otp),
- context.getString(R.string.make_sure_aadhaar_is_linked)
- ),
- FaqContent(
- context.getString(R.string.aadhaar_details_safe),
- context.getString(R.string.do_not_store_aadhaar)
+fun kycFaqs(context: Context) =
+ Faq(
+ context.getString(R.string.kyc),
+ listOf(
+ FaqContent(
+ context.getString(R.string.reason_for_kyc_rejection),
+ context.getString(R.string.name_or_selfie_mismatch)
+ ),
+ FaqContent(
+ context.getString(R.string.aadhaar_not_linked_to_mobile),
+ context.getString(R.string.upload_image_of_aadhaar)
+ ),
+ FaqContent(
+ context.getString(R.string.do_not_have_an_aadhaar),
+ context.getString(R.string.completing_kyc_offline)
+ ),
+ FaqContent(
+ context.getString(R.string.how_to_complete_kyc_offline),
+ context.getString(R.string.complete_kyc_offline_detail)
+ ),
+ FaqContent(
+ context.getString(R.string.do_not_have_current_address_proof),
+ context.getString(R.string.proceed_without_attaching_proof)
+ ),
+ FaqContent(
+ context.getString(R.string.reason_am_not_getting_aadhaar_otp),
+ context.getString(R.string.make_sure_aadhaar_is_linked)
+ ),
+ FaqContent(
+ context.getString(R.string.aadhaar_details_safe),
+ context.getString(R.string.do_not_store_aadhaar)
+ ),
+ FaqContent(
+ context.getString(R.string.how_can_i_reach_out_to_gro),
+ context.getString(R.string.how_can_i_reach_out_to_gro_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.what_are_the_cash_loan_features),
+ context.getString(R.string.what_are_the_cash_loan_features_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.is_navi_an_nbfc),
+ context.getString(R.string.is_navi_an_nbfc_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.how_can_i_lodge_a_complaint),
+ context.getString(R.string.how_can_i_lodge_a_complaint_answer)
+ )
)
)
-)
-fun bankDetailsFaqs(context: Context) = Faq(
- context.getString(R.string.bank_verification),
- listOf(
- FaqContent(
- context.getString(R.string.bank_not_supported),
- context.getString(R.string.emandate_governed_by_npci_are_supported)
- ),
- FaqContent(
- context.getString(R.string.find_ifsc_code),
- context.getString(R.string.address_of_bank_accounts_branch)
- ),
- FaqContent(
- context.getString(R.string.bank_verification_required),
- context.getString(R.string.ensure_loan_amount_goes_to_right_account)
- ),
- FaqContent(
- context.getString(R.string.use_someone_else_bank_account),
- context.getString(R.string.disbursed_only_to_your_account)
- ),
- FaqContent(
- context.getString(R.string.bank_verification_fail),
- context.getString(R.string.details_do_not_match_with_registered_account)
+fun bankDetailsFaqs(context: Context) =
+ Faq(
+ context.getString(R.string.bank_verification),
+ listOf(
+ FaqContent(
+ context.getString(R.string.bank_not_supported),
+ context.getString(R.string.emandate_governed_by_npci_are_supported)
+ ),
+ FaqContent(
+ context.getString(R.string.find_ifsc_code),
+ context.getString(R.string.address_of_bank_accounts_branch)
+ ),
+ FaqContent(
+ context.getString(R.string.bank_verification_required),
+ context.getString(R.string.ensure_loan_amount_goes_to_right_account)
+ ),
+ FaqContent(
+ context.getString(R.string.use_someone_else_bank_account),
+ context.getString(R.string.disbursed_only_to_your_account)
+ ),
+ FaqContent(
+ context.getString(R.string.bank_verification_fail),
+ context.getString(R.string.details_do_not_match_with_registered_account)
+ ),
+ FaqContent(
+ context.getString(R.string.how_can_i_reach_out_to_gro),
+ context.getString(R.string.how_can_i_reach_out_to_gro_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.what_are_the_cash_loan_features),
+ context.getString(R.string.what_are_the_cash_loan_features_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.is_navi_an_nbfc),
+ context.getString(R.string.is_navi_an_nbfc_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.how_can_i_lodge_a_complaint),
+ context.getString(R.string.how_can_i_lodge_a_complaint_answer)
+ )
)
)
-)
-fun bankDetailsAutoDebitFaqs(context: Context) = Faq(
- context.getString(R.string.setup_auto_debit),
- listOf(
- FaqContent(
- context.getString(R.string.what_is_auto_debit),
- context.getString(R.string.emis_paid_directly_from_bank_account)
- ),
- FaqContent(
- context.getString(R.string.what_is_emandate),
- context.getString(R.string.ways_to_register_for_auto_debit)
- ),
- FaqContent(
- context.getString(R.string.why_setup_auto_debit),
- context.getString(R.string.pay_emis_on_time_directly_from_bank_account)
- ),
- FaqContent(
- context.getString(R.string.how_to_setup_auto_debit),
- context.getString(R.string.verify_emandate_with_bank)
- ),
- FaqContent(
- context.getString(R.string.why_netbanking_debit_card_details),
- context.getString(R.string.to_verify_emandate)
- ),
- FaqContent(
- context.getString(R.string.are_netbanking_card_details_safe),
- context.getString(R.string.we_do_not_store_netbanking_card_details)
- ),
- FaqContent(
- context.getString(R.string.why_debit_card_option_not_available),
- context.getString(R.string.options_decided_by_your_bank)
- ),
- FaqContent(
- context.getString(R.string.dont_remember_password),
- context.getString(R.string.can_use_debit_card_option)
- ),
- FaqContent(
- context.getString(R.string.why_auto_debit_setup_failed),
- context.getString(R.string.decided_by_bank)
- ),
- FaqContent(
- context.getString(R.string.charges_for_auto_debit),
- context.getString(R.string.we_do_not_charge_you)
- ),
- FaqContent(
- context.getString(R.string.can_i_change_bank_account),
- context.getString(R.string.you_can_use_change_bank_option)
- ),
- FaqContent(
- context.getString(R.string.change_bank_after_auto_debit_success),
- context.getString(R.string.no_period)
- ),
- FaqContent(
- context.getString(R.string.use_separate_bank_accounts),
- context.getString(R.string.same_bank_account_has_to_be_used)
+fun bankDetailsAutoDebitFaqs(context: Context) =
+ Faq(
+ context.getString(R.string.setup_auto_debit),
+ listOf(
+ FaqContent(
+ context.getString(R.string.what_is_auto_debit),
+ context.getString(R.string.emis_paid_directly_from_bank_account)
+ ),
+ FaqContent(
+ context.getString(R.string.what_is_emandate),
+ context.getString(R.string.ways_to_register_for_auto_debit)
+ ),
+ FaqContent(
+ context.getString(R.string.why_setup_auto_debit),
+ context.getString(R.string.pay_emis_on_time_directly_from_bank_account)
+ ),
+ FaqContent(
+ context.getString(R.string.how_to_setup_auto_debit),
+ context.getString(R.string.verify_emandate_with_bank)
+ ),
+ FaqContent(
+ context.getString(R.string.why_netbanking_debit_card_details),
+ context.getString(R.string.to_verify_emandate)
+ ),
+ FaqContent(
+ context.getString(R.string.are_netbanking_card_details_safe),
+ context.getString(R.string.we_do_not_store_netbanking_card_details)
+ ),
+ FaqContent(
+ context.getString(R.string.why_debit_card_option_not_available),
+ context.getString(R.string.options_decided_by_your_bank)
+ ),
+ FaqContent(
+ context.getString(R.string.dont_remember_password),
+ context.getString(R.string.can_use_debit_card_option)
+ ),
+ FaqContent(
+ context.getString(R.string.why_auto_debit_setup_failed),
+ context.getString(R.string.decided_by_bank)
+ ),
+ FaqContent(
+ context.getString(R.string.charges_for_auto_debit),
+ context.getString(R.string.we_do_not_charge_you)
+ ),
+ FaqContent(
+ context.getString(R.string.can_i_change_bank_account),
+ context.getString(R.string.you_can_use_change_bank_option)
+ ),
+ FaqContent(
+ context.getString(R.string.change_bank_after_auto_debit_success),
+ context.getString(R.string.no_period)
+ ),
+ FaqContent(
+ context.getString(R.string.use_separate_bank_accounts),
+ context.getString(R.string.same_bank_account_has_to_be_used)
+ ),
+ FaqContent(
+ context.getString(R.string.how_can_i_reach_out_to_gro),
+ context.getString(R.string.how_can_i_reach_out_to_gro_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.what_are_the_cash_loan_features),
+ context.getString(R.string.what_are_the_cash_loan_features_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.is_navi_an_nbfc),
+ context.getString(R.string.is_navi_an_nbfc_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.how_can_i_lodge_a_complaint),
+ context.getString(R.string.how_can_i_lodge_a_complaint_answer)
+ )
)
)
-)
-fun getLoanFaqs(context: Context) = Faq(
- context.getString(R.string.get_loan),
- listOf(
- FaqContent(
- context.getString(R.string.check_my_loan_details),
- context.getString(R.string.available_in_loan_details_section)
- ),
- FaqContent(
- context.getString(R.string.agreement_be_sent_to_me),
- context.getString(R.string.sending_loan_agreement_on_whatsapp)
- ),
- FaqContent(
- context.getString(R.string.reminders_for_emi),
- context.getString(R.string.timely_reminders_for_payments)
+fun getLoanFaqs(context: Context) =
+ Faq(
+ context.getString(R.string.get_loan),
+ listOf(
+ FaqContent(
+ context.getString(R.string.check_my_loan_details),
+ context.getString(R.string.available_in_loan_details_section)
+ ),
+ FaqContent(
+ context.getString(R.string.agreement_be_sent_to_me),
+ context.getString(R.string.sending_loan_agreement_on_whatsapp)
+ ),
+ FaqContent(
+ context.getString(R.string.reminders_for_emi),
+ context.getString(R.string.timely_reminders_for_payments)
+ ),
+ FaqContent(
+ context.getString(R.string.how_can_i_reach_out_to_gro),
+ context.getString(R.string.how_can_i_reach_out_to_gro_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.what_are_the_cash_loan_features),
+ context.getString(R.string.what_are_the_cash_loan_features_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.is_navi_an_nbfc),
+ context.getString(R.string.is_navi_an_nbfc_answer)
+ ),
+ FaqContent(
+ context.getString(R.string.how_can_i_lodge_a_complaint),
+ context.getString(R.string.how_can_i_lodge_a_complaint_answer)
+ )
)
)
-)
diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/viewmodels/SkipMandateVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/viewmodels/SkipMandateVM.kt
index 0bc9f8b873..c2a6d46da9 100644
--- a/app/src/main/java/com/naviapp/personalloan/getloan/viewmodels/SkipMandateVM.kt
+++ b/app/src/main/java/com/naviapp/personalloan/getloan/viewmodels/SkipMandateVM.kt
@@ -17,12 +17,11 @@ import com.naviapp.models.response.LoanBasicDetailsResponse
import com.naviapp.models.response.SkipMandateResponse
import com.naviapp.personalloan.getloan.repositories.SkipMandateRepository
import com.naviapp.personalloanrevamp.models.FLOW_SKIP_MANDATE
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class SkipMandateVM @Inject constructor(private val repository: SkipMandateRepository) : BaseVM() {
+class SkipMandateVM(
+ private val repository: SkipMandateRepository = SkipMandateRepository()
+) : BaseVM() {
private val _skipMandateResponse = MutableLiveData()
val skipMandateResponse: LiveData
diff --git a/app/src/main/java/com/naviapp/personalloan/intermediate/activity/IntermediateActivity.kt b/app/src/main/java/com/naviapp/personalloan/intermediate/activity/IntermediateActivity.kt
index 158eebc2ed..36dbea387b 100644
--- a/app/src/main/java/com/naviapp/personalloan/intermediate/activity/IntermediateActivity.kt
+++ b/app/src/main/java/com/naviapp/personalloan/intermediate/activity/IntermediateActivity.kt
@@ -36,7 +36,6 @@ import com.naviapp.personalloan.intermediate.chatBot.ChatBotFragment
import com.naviapp.personalloan.intermediate.cibilfailure.fragment.CibilFailureFragment
import com.naviapp.personalloan.intermediate.coupon.fragment.CouponFragment
import com.naviapp.personalloan.intermediate.topup.fragment.TopUpLoanIntroFragment
-import com.naviapp.personalloanrevamp.intermediatev2.fragments.BankStatementV2Fragment
import com.naviapp.utils.Constants
import dagger.hilt.android.AndroidEntryPoint
@@ -67,14 +66,16 @@ class IntermediateActivity :
val fragment =
supportFragmentManager.findFragmentByTag(currentScreenTag)
?: getFragment(currentScreenTag, bundle)
- val fragmentTransaction = supportFragmentManager.beginTransaction()
- if (!supportFragmentManager.isStateSaved && !supportFragmentManager.isDestroyed) {
- fragmentTransaction.replace(
- getViewContainer(bundle.getBoolean(Constants.IS_FULL_SCREEN_VIEW)),
- fragment,
- currentScreenTag
- )
- fragmentTransaction.commit()
+ fragment?.let {
+ val fragmentTransaction = supportFragmentManager.beginTransaction()
+ if (!supportFragmentManager.isStateSaved && !supportFragmentManager.isDestroyed) {
+ fragmentTransaction.replace(
+ getViewContainer(bundle.getBoolean(Constants.IS_FULL_SCREEN_VIEW)),
+ fragment,
+ currentScreenTag
+ )
+ fragmentTransaction.commit()
+ }
}
}
@@ -83,7 +84,7 @@ class IntermediateActivity :
finish()
}
- private fun getFragment(screen: String, bundle: Bundle): Fragment {
+ private fun getFragment(screen: String, bundle: Bundle): Fragment? {
return when (screen) {
SubPageStatusType.MONEY_DISBURSEMENT_STATUS ->
DelayedDisbursementFragment.newInstance(bundle)
@@ -94,7 +95,7 @@ class IntermediateActivity :
SubPageStatusType.TOP_UP_INTRO -> TopUpLoanIntroFragment.newInstance(bundle)
SubPageStatusType.CHAT_SCREEN -> ChatBotFragment()
SubPageStatusType.CIBIL_FAILURE -> CibilFailureFragment.newInstance(bundle)
- else -> BankStatementV2Fragment.getInstance(bundle)
+ else -> null
}
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/bankDetailsPostKyc/activity/BankDetailsLoaderPostKycActivity.kt b/app/src/main/java/com/naviapp/personalloanrevamp/bankDetailsPostKyc/activity/BankDetailsLoaderPostKycActivity.kt
index ddf7c24906..564167e919 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/bankDetailsPostKyc/activity/BankDetailsLoaderPostKycActivity.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/bankDetailsPostKyc/activity/BankDetailsLoaderPostKycActivity.kt
@@ -59,18 +59,15 @@ import com.naviapp.personalloan.getloan.bankdetails.fragments.BankDetailsFragmen
import com.naviapp.personalloan.getloan.bankdetails.models.BankLoanStatusType
import com.naviapp.personalloan.getloan.bankdetails.viewmodels.BankDetailsVM
import com.naviapp.personalloan.getloan.viewmodels.LoanDisbursementVM
-
-import com.naviapp.personalloanrevamp.getloanRevamp.activities.BankAccountVerificationLoaderV2Activity
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.getloanRevamp.activities.LoanDisbursementLoaderV2Activity
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.rewards.ui.RewardDelightActivity
import com.naviapp.utils.Constants
+import com.naviapp.utils.Constants.IS_SOFT_REJECT
+import com.naviapp.utils.Constants.LOAN_ACCOUNT_NUMBER
+import com.naviapp.utils.Constants.MONEY_DISBURSEMENT_STATUS_V2
+import com.naviapp.utils.Constants.REJECTION_DATA
import com.naviapp.utils.LOAN_APPLICATION_ID
import com.naviapp.utils.appendStrings
-import dagger.hilt.android.AndroidEntryPoint
-@AndroidEntryPoint
class BankDetailsLoaderPostKycActivity : BaseActivity() {
lateinit var binding: PennyDropDisbursalLoaderBinding
@@ -248,7 +245,7 @@ class BankDetailsLoaderPostKycActivity : BaseActivity() {
hideLoader()
if ((it.first?.softReject == true)) {
val data = Bundle()
- data.putString(ErrorScreenV2Activity.IS_SOFT_REJECT, Constants.TRUE)
+ data.putString(IS_SOFT_REJECT, Constants.TRUE)
ScreenNavigator.instance.startActivityWithNoActivityStack(
this,
ScreenNavigator.ERROR_FULL_PAGE_SCREEN_V2,
@@ -261,7 +258,7 @@ class BankDetailsLoaderPostKycActivity : BaseActivity() {
hideLoader()
if (rejectionDetailsResponse.hasRejection.orFalse()) {
val data = Bundle()
- data.putParcelable(ErrorScreenV2Activity.REJECTION_DATA, rejectionDetailsResponse)
+ data.putParcelable(REJECTION_DATA, rejectionDetailsResponse)
data.putBoolean(
GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY,
intent.extras?.getBoolean(GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY, false)
@@ -377,7 +374,7 @@ class BankDetailsLoaderPostKycActivity : BaseActivity() {
),
bundle = Bundle().apply {
putString(
- LoanDisbursementLoaderV2Activity.LOAN_ACCOUNT_NUMBER,
+ LOAN_ACCOUNT_NUMBER,
viewModel.loanAccountNumber.value
)
putParcelable(
@@ -385,7 +382,7 @@ class BankDetailsLoaderPostKycActivity : BaseActivity() {
PreviousScreenNameRequest(Constants.DISBURSED)
)
putString(
- LoanDisbursementLoaderV2Activity.LOAN_ACCOUNT_NUMBER,
+ LOAN_ACCOUNT_NUMBER,
viewModel.loanAccountNumber.value
)
putBoolean(Constants.POST_DISBURSEMENT, true)
@@ -472,7 +469,7 @@ class BankDetailsLoaderPostKycActivity : BaseActivity() {
redirectUser(
NaviDeepLinkNavigator.LOAN_APPLICATION_V2.appendStrings(
FORWARD_SLASH.toString(),
- GetLoanV2ViewHelper.MONEY_DISBURSEMENT_STATUS_V2
+ MONEY_DISBURSEMENT_STATUS_V2
)
)
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/bankDetailsPostKyc/fragment/BankDetailsPostKycFragment.kt b/app/src/main/java/com/naviapp/personalloanrevamp/bankDetailsPostKyc/fragment/BankDetailsPostKycFragment.kt
index 68c46272a5..8e3a393232 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/bankDetailsPostKyc/fragment/BankDetailsPostKycFragment.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/bankDetailsPostKyc/fragment/BankDetailsPostKycFragment.kt
@@ -66,17 +66,15 @@ import com.naviapp.personalloanrevamp.getloanRevamp.fragments.IfscV2Fragment
import com.naviapp.personalloanrevamp.getloanRevamp.fragments.PennyDropFailureV2BottomSheet
import com.naviapp.personalloanrevamp.getloanRevamp.fragments.SelectBankV2Fragment
import com.naviapp.personalloanrevamp.getloanRevamp.helper.BankDetailsV2Helper
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
import com.naviapp.personalloanrevamp.models.StyledTextConfig
import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
import com.naviapp.utils.*
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
+import com.naviapp.utils.Constants.BANK_DETAILS_AUTO_DEBIT_V2
import com.naviapp.utils.IconUtils.ICON_IFSC_SUCCESS
-import dagger.hilt.android.AndroidEntryPoint
-@AndroidEntryPoint
class BankDetailsPostKycFragment : BaseFragment(), View.OnClickListener,
FindIfscListener,
View.OnKeyListener,
@@ -632,7 +630,7 @@ class BankDetailsPostKycFragment : BaseFragment(), View.OnClickListener,
private fun onPennyDropSuccess() {
listener?.navigateTo(
viewModel.disbursementDetails.value?.footer?.nextCta?.url
- ?: GetLoanV2ViewHelper.BANK_DETAILS_AUTO_DEBIT_V2,
+ ?: BANK_DETAILS_AUTO_DEBIT_V2,
Bundle().apply {
putString(Constants.PERSONAL_LOAN_APPLICATION_ID, loanApplicationId)
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/BankStatementVerificationMethodView.kt b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/BankStatementVerificationMethodView.kt
index 5135ccfd25..4a0e2e9cca 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/BankStatementVerificationMethodView.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/BankStatementVerificationMethodView.kt
@@ -1,6 +1,6 @@
/*
*
- * * Copyright © 2022 by Navi Technologies Limited
+ * * Copyright © 2022-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
@@ -23,7 +23,6 @@ import com.naviapp.databinding.BankStatementVerificationMethodLayoutBinding
import com.naviapp.models.response.InfoCtaData
import com.naviapp.models.response.SelectedOption
import com.naviapp.models.response.SelectorMethodData
-import com.naviapp.personalloanrevamp.intermediatev2.fragments.BankStatementV2Fragment
import com.naviapp.utils.IconUtils
class BankStatementVerificationMethodView(context: Context, attrs: AttributeSet?) :
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/EmiTenureSummaryView.kt b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/EmiTenureSummaryView.kt
index 0f1e16b198..a2ea092a8e 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/EmiTenureSummaryView.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/EmiTenureSummaryView.kt
@@ -15,9 +15,9 @@ import com.google.gson.Gson
import com.navi.base.model.CtaData
import com.navi.base.model.LineItem
import com.naviapp.analytics.utils.NaviAnalytics
+import com.naviapp.common.fragment.RadioButtonBottomSheet.Companion.EVENT_NAME
import com.naviapp.databinding.EmiTenureSummaryViewBinding
import com.naviapp.models.response.LoanDetailsV2AdditionData
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.FreshLoanDetailsV2Fragment
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
import com.naviapp.personalloanrevamp.models.EmiTenureSummaryWidgetConfig
import com.naviapp.personalloanrevamp.models.LoanAmountSummaryWidgetBody
@@ -65,7 +65,7 @@ class EmiTenureSummaryView(context: Context, attrs: AttributeSet? = null) :
eventName?.let {
params.add(
LineItem(
- key = FreshLoanDetailsV2Fragment.EVENT_NAME,
+ key = EVENT_NAME,
value = eventName
)
)
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/LoanAmountSummaryV2View.kt b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/LoanAmountSummaryV2View.kt
index 8659f15961..36b32c31b9 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/LoanAmountSummaryV2View.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/LoanAmountSummaryV2View.kt
@@ -24,9 +24,8 @@ import com.navi.naviwidgets.models.response.CardProperties
import com.navi.naviwidgets.utils.setCardProperties
import com.naviapp.databinding.LoanAmountSummaryV2ViewBinding
import com.naviapp.models.response.LoanDetailsV2AdditionData
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.FreshLoanDetailsV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.LoanDetailsEditorFragment
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
+import com.naviapp.personalloanrevamp.models.CtaType
import com.naviapp.personalloanrevamp.models.LoanAmountSummaryWidgetConfig
import com.naviapp.personalloanrevamp.models.StyledTitleDescriptionBottomSheetConfig
import com.naviapp.utils.setMargin
@@ -74,8 +73,8 @@ class LoanAmountSummaryV2View(context: Context, attrs: AttributeSet? = null) :
binding.footerLl.setOnClickListener {
val subtitleEventCta =
getEventCta(
- widgetConfig?.widgetBody?.footerTag?.cta,
- type = LoanDetailsEditorFragment.CtaType.INFO_ICON_CLICK.value
+ widgetConfig.widgetBody.footerTag?.cta,
+ type = CtaType.INFO_ICON_CLICK.value
)
widgetCallback?.onCtaClick(subtitleEventCta)
}
@@ -100,7 +99,7 @@ class LoanAmountSummaryV2View(context: Context, attrs: AttributeSet? = null) :
eventName?.let {
params.add(
LineItem(
- key = FreshLoanDetailsV2Fragment.EVENT_NAME,
+ key = EVENT_NAME,
value = eventName
)
)
@@ -208,5 +207,6 @@ class LoanAmountSummaryV2View(context: Context, attrs: AttributeSet? = null) :
companion object {
const val FOOTER_BOTTOM_SHEET_CLICK = "FOOTER_BOTTOM_SHEET_CLICK"
const val FOOTER_BOTTOM_SHEET_DATA = "FOOTER_BOTTOM_SHEET_DATA"
+ const val EVENT_NAME = "EVENT_NAME"
}
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/LoanAmountSummaryView.kt b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/LoanAmountSummaryView.kt
index 2c08e0f1c0..37c8ff5174 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/LoanAmountSummaryView.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/LoanAmountSummaryView.kt
@@ -20,9 +20,9 @@ import com.navi.base.utils.orFalse
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.databinding.LoanAmountSummaryViewBinding
import com.naviapp.models.response.LoanDetailsV2AdditionData
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.FreshLoanDetailsV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.LoanDetailsEditorFragment
+import com.naviapp.personalloanrevamp.common.customview.LoanAmountSummaryV2View.Companion.EVENT_NAME
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
+import com.naviapp.personalloanrevamp.models.CtaType
import com.naviapp.personalloanrevamp.models.LoanAmountSummaryWidgetConfig
import com.naviapp.personalloanrevamp.models.StyledTitleDescriptionBottomSheetConfig
import com.naviapp.utils.setMargin
@@ -55,7 +55,7 @@ class LoanAmountSummaryView(context: Context, attrs: AttributeSet? = null) :
val subtitleEventCta =
getEventCta(
widgetBody.subtitle?.cta,
- type = LoanDetailsEditorFragment.CtaType.INFO_ICON_CLICK.value
+ type = CtaType.INFO_ICON_CLICK.value
)
widgetCallback?.onCtaClick(subtitleEventCta)
}
@@ -78,7 +78,7 @@ class LoanAmountSummaryView(context: Context, attrs: AttributeSet? = null) :
eventName?.let {
params.add(
LineItem(
- key = FreshLoanDetailsV2Fragment.EVENT_NAME,
+ key = EVENT_NAME,
value = eventName
)
)
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/TopUpLoanSummaryView.kt b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/TopUpLoanSummaryView.kt
index 88c6be681a..287d9ae3f6 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/TopUpLoanSummaryView.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/TopUpLoanSummaryView.kt
@@ -20,12 +20,12 @@ import com.navi.base.utils.orZero
import com.navi.insurance.util.log
import com.naviapp.databinding.TopupLoanSummaryViewBinding
import com.naviapp.models.response.LoanDetailsV2AdditionData
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.FreshLoanDetailsV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.LoanDetailsEditorFragment
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
import com.naviapp.personalloanrevamp.models.TopUpSummaryWidgetConfig
import com.naviapp.personalloanrevamp.models.ValueAdditionWidgetBody
import com.naviapp.personalloanrevamp.models.ValueAdditionWidgetKeyValue
+import com.naviapp.personalloanrevamp.models.*
+import com.naviapp.utils.Constants.EVENT_NAME
import com.naviapp.utils.formatDoubleAmount
import com.naviapp.utils.setMargin
@@ -55,7 +55,7 @@ class TopUpLoanSummaryView(context: Context, attrs: AttributeSet? = null) :
val subtitleEventCta =
getEventCta(
widgetBody.subtitle?.cta,
- type = LoanDetailsEditorFragment.CtaType.INFO_ICON_CLICK.value
+ type = CtaType.INFO_ICON_CLICK.value
)
widgetCallback?.onCtaClick(subtitleEventCta)
}
@@ -115,7 +115,7 @@ class TopUpLoanSummaryView(context: Context, attrs: AttributeSet? = null) :
eventName?.let {
params.add(
LineItem(
- key = FreshLoanDetailsV2Fragment.EVENT_NAME,
+ key = EVENT_NAME,
value = eventName
)
)
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/ViewDescriptionCtaView.kt b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/ViewDescriptionCtaView.kt
index a8e8bf569f..d05d41a1c5 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/ViewDescriptionCtaView.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/common/customview/ViewDescriptionCtaView.kt
@@ -11,18 +11,9 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
-import com.google.gson.Gson
-import com.navi.base.model.CtaData
-import com.navi.base.model.LineItem
-import com.naviapp.analytics.utils.NaviAnalytics
-import com.naviapp.databinding.EmiTenureSummaryViewBinding
import com.naviapp.databinding.ViewDescriptionCtaViewBinding
import com.naviapp.models.response.LoanDetailsV2AdditionData
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.FreshLoanDetailsV2Fragment
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
-import com.naviapp.personalloanrevamp.models.EmiTenureSummaryWidgetConfig
-import com.naviapp.personalloanrevamp.models.LoanAmountSummaryWidgetBody
-import com.naviapp.personalloanrevamp.models.StyledTitleDescriptionBottomSheetConfig
import com.naviapp.personalloanrevamp.models.ViewDescriptionCtaWidgetConfig
import com.naviapp.utils.setMargin
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/customview/BoxWithIconTitleView.kt b/app/src/main/java/com/naviapp/personalloanrevamp/customview/BoxWithIconTitleView.kt
deleted file mode 100644
index 17064c6e39..0000000000
--- a/app/src/main/java/com/naviapp/personalloanrevamp/customview/BoxWithIconTitleView.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.naviapp.personalloanrevamp.customview
-
-import android.content.Context
-import android.util.AttributeSet
-import android.view.LayoutInflater
-import androidx.constraintlayout.widget.ConstraintLayout
-import com.naviapp.databinding.BoxWithIconTitleViewBinding
-import com.naviapp.personalloanrevamp.models.response.EmiDetail
-
-class BoxWithIconTitleView @JvmOverloads constructor(
- context: Context,
- attrs: AttributeSet? = null
-) : ConstraintLayout(context, attrs) {
-
- private val binding = BoxWithIconTitleViewBinding.inflate(
- LayoutInflater.from(context), this, true
- )
-
- init {
- layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
- }
-
- fun setProperties(emiDetail : EmiDetail) {
- binding.binder = emiDetail
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/BankAccountVerificationLoaderV2Activity.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/BankAccountVerificationLoaderV2Activity.kt
index 92b4a3f130..0bd7574dbf 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/BankAccountVerificationLoaderV2Activity.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/BankAccountVerificationLoaderV2Activity.kt
@@ -70,8 +70,6 @@ import com.naviapp.personalloan.getloan.helpers.EnachHelper
import com.naviapp.personalloan.getloan.helpers.EnachStub
import com.naviapp.personalloanrevamp.getloanRevamp.fragments.BankDetailsAutoDebitV2Fragment
import com.naviapp.personalloanrevamp.getloanRevamp.fragments.BankDetailsV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.LoanDetailsV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.personalloanrevamp.models.FLOW_KYC_VERIFICATION
import com.naviapp.personalloanrevamp.models.FLOW_MANDATE_POLLING
import com.naviapp.personalloanrevamp.models.FLOW_MANDATE_SETUP
@@ -83,23 +81,22 @@ import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
import com.naviapp.utils.Constants.URL
import com.razorpay.PaymentData
import com.razorpay.PaymentResultWithDataListener
-import dagger.hilt.android.AndroidEntryPoint
import `in`.digio.sdk.esign.DigioResponse
import `in`.digio.sdk.esign.DigioResponseListener
import com.navi.payment.razorpay.RazorpayHelper
import com.navi.payment.utils.PaymentAnalytics
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
+import com.naviapp.utils.Constants.BANK_DETAILS_AUTO_DEBIT_V2
import com.naviapp.personalloanrevamp.models.EMPTY_ERROR_CODE_BY_3rd_PARTY
import com.naviapp.personalloanrevamp.models.EMPTY_REASON_BY_3rd_PARTY
+import com.naviapp.utils.Constants.IS_SOFT_REJECT
+import com.naviapp.utils.Constants.REJECTION_DATA
import com.naviapp.utils.Constants.SUCCESS_ANIMATION_GREEN_BG_TIME
import com.naviapp.utils.Constants.UPI
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@AndroidEntryPoint
class BankAccountVerificationLoaderV2Activity : BaseActivity(), EnachListener,
- DigioResponseListener, PaymentResultWithDataListener, LoanDetailsV2Fragment.UpdateUiListener {
+ DigioResponseListener, PaymentResultWithDataListener, BankDetailsAutoDebitV2Fragment.UpdateUiListener {
private lateinit var binding: ActivityBankAccountVerificationLoaderV2Binding
@@ -132,15 +129,14 @@ class BankAccountVerificationLoaderV2Activity : BaseActivity(), EnachListener,
private val enachHelper = EnachHelper()
private var unifyPennyDropMandateLottie: LottieFieldData? = null
private var isUnifyPdMandateLottieFileCached = false
-
- @Inject
- lateinit var lottieRemoteHelper: LottieRemoteHelper
+ private lateinit var lottieRemoteHelper: LottieRemoteHelper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = getBindingObject()
super.setContentView(binding.root)
NaviTrackEvent.sendScreenTransitionEvent(screenName)
+ lottieRemoteHelper = LottieRemoteHelper(this)
initQueryMapFromCtaParameters()
initError()
readBundle()
@@ -264,7 +260,7 @@ class BankAccountVerificationLoaderV2Activity : BaseActivity(), EnachListener,
}
if ((it.first?.softReject == true)) {
val data = Bundle()
- data.putString(ErrorScreenV2Activity.IS_SOFT_REJECT, Constants.TRUE)
+ data.putString(IS_SOFT_REJECT, Constants.TRUE)
ScreenNavigator.instance.startActivityWithNoActivityStack(
this,
ScreenNavigator.ERROR_FULL_PAGE_SCREEN_V2,
@@ -281,7 +277,7 @@ class BankAccountVerificationLoaderV2Activity : BaseActivity(), EnachListener,
}
if (rejectionDetailsResponse.hasRejection.orFalse()) {
val data = Bundle()
- data.putParcelable(ErrorScreenV2Activity.REJECTION_DATA, rejectionDetailsResponse)
+ data.putParcelable(REJECTION_DATA, rejectionDetailsResponse)
data.putBoolean(
GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY,
intent.getBooleanExtra(GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY, false)
@@ -1080,7 +1076,7 @@ class BankAccountVerificationLoaderV2Activity : BaseActivity(), EnachListener,
NaviDeepLinkNavigator.navigate(
activity = this, ctaData = CtaData(
url = NaviDeepLinkNavigator.LOAN_APPLICATION_V2.plus(DIVIDER)
- .plus(GetLoanV2ViewHelper.BANK_DETAILS_AUTO_DEBIT_V2),
+ .plus(BANK_DETAILS_AUTO_DEBIT_V2),
bundle = bundle
),
finish = true
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/SkipMandateV2Activity.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/SkipMandateV2Activity.kt
index 746acfe5d8..57c6345251 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/SkipMandateV2Activity.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/SkipMandateV2Activity.kt
@@ -33,9 +33,7 @@ import com.naviapp.personalloanrevamp.models.response.SkipMandateV2Response
import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
import com.naviapp.utils.LOAN_APPLICATION_ID
import com.naviapp.utils.setMargin
-import dagger.hilt.android.AndroidEntryPoint
-@AndroidEntryPoint
class SkipMandateV2Activity :
BaseActivity(), FooterViewV2.FooterInteractionListener, NaviHeaderView.InteractionListener {
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/BankDetailsAutoDebitV2Fragment.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/BankDetailsAutoDebitV2Fragment.kt
index bd074999ac..c17d8c28e8 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/BankDetailsAutoDebitV2Fragment.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/BankDetailsAutoDebitV2Fragment.kt
@@ -17,6 +17,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.annotation.ColorRes
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.isVisible
import androidx.databinding.ViewDataBinding
@@ -84,9 +85,6 @@ import com.naviapp.personalloanrevamp.customview.LoanOfferStickinessBottomSheetV
import com.naviapp.personalloanrevamp.getloanRevamp.activities.BankAccountVerificationLoaderV2Activity
import com.naviapp.personalloanrevamp.getloanRevamp.activities.EnachTutorialV2Activity
import com.naviapp.personalloanrevamp.getloanRevamp.adapters.LoanDetailsV2WidgetAdapter
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.FreshLoanDetailsV2Fragment.Companion.ALPHA_INVISIBLE
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.FreshLoanDetailsV2Fragment.Companion.ALPHA_VISIBLE
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
import com.naviapp.personalloanrevamp.models.FLOW_MANDATE_POLLING
import com.naviapp.personalloanrevamp.models.FLOW_MANDATE_SETUP
@@ -98,11 +96,13 @@ import com.naviapp.utils.Constants.FLOW_TYPE
import com.naviapp.utils.Constants.FLOW_TYPE_SMALL
import com.naviapp.utils.Constants.LOAN_ACCOUNT_NUMBER
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
+import com.naviapp.utils.Constants.BANK_DETAILS_V2
import com.naviapp.utils.Constants.POST_DISBURSEMENT
import com.naviapp.utils.Constants.REDIRECTED_FROM_HOME_SCREEN
import com.naviapp.utils.Constants.REFILL_TOP_UP
import com.naviapp.utils.Constants.SLASH
import com.naviapp.utils.Constants.TRUE
+import com.naviapp.utils.Constants.UPI_STATUS_V2
import com.naviapp.utils.Constants.UPI
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
@@ -127,7 +127,7 @@ class BankDetailsAutoDebitV2Fragment :
private var loanType: String? = null
private val ctaQueryMap = HashMap()
private var headerListener: NaviHeaderView.InteractionListener? = null
- private var updateUIListener: LoanDetailsV2Fragment.UpdateUiListener? = null
+ private var updateUIListener: UpdateUiListener? = null
private var skipMandateSelectedOption: String? = null
private var widgetIdProvider: WidgetIdProvider = WidgetIdProvider()
private var forPostDisbursal: Boolean = false
@@ -508,7 +508,7 @@ class BankDetailsAutoDebitV2Fragment :
loanApplicationId
)
listener?.navigateTo(
- GetLoanV2ViewHelper.UPI_STATUS_V2,
+ UPI_STATUS_V2,
bundle
)
}
@@ -1170,7 +1170,7 @@ class BankDetailsAutoDebitV2Fragment :
private fun navigateToBankDetailsScreen(isPostDisbursal: String? = null) {
listener?.navigateTo(
- GetLoanV2ViewHelper.BANK_DETAILS_V2,
+ BANK_DETAILS_V2,
Bundle().apply {
putString(Constants.PERSONAL_LOAN_APPLICATION_ID, loanApplicationId)
putString(Constants.SUB_REDIRECT, arguments?.getString(Constants.SUB_REDIRECT))
@@ -1217,7 +1217,7 @@ class BankDetailsAutoDebitV2Fragment :
listener = context as? FragmentInteractionListener
enachListener = context as? EnachListener
headerListener = context as? NaviHeaderView.InteractionListener
- updateUIListener = context as? LoanDetailsV2Fragment.UpdateUiListener
+ updateUIListener = context as? UpdateUiListener
}
override fun onDetach() {
@@ -1361,6 +1361,8 @@ class BankDetailsAutoDebitV2Fragment :
const val CHANGE_BANK = "CHANGE_BANK"
const val FOOTER_NEXT_CLICK = "FOOTER_NEXT_CLICK"
const val PL_RE_ENACH = "plReEnach"
+ const val ALPHA_VISIBLE = 1F
+ const val ALPHA_INVISIBLE = 0F
fun newInstance(bundle: Bundle?): BankDetailsAutoDebitV2Fragment {
return BankDetailsAutoDebitV2Fragment().apply { arguments = bundle }
@@ -1411,4 +1413,11 @@ class BankDetailsAutoDebitV2Fragment :
override fun onLoanAmountChange(loanAmount: Double, progressPercentage: Double) {}
override fun onEmailChange(email: String?) {}
+
+ interface UpdateUiListener {
+ fun changeHeaderBackGround(blackOut: Boolean)
+ fun changeHeaderBackgroundColor(@ColorRes color: Int)
+ fun showAutoPayAnimation()
+ fun setHeaderBackgroundColor(colorString: String)
+ }
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/BankDetailsV2Fragment.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/BankDetailsV2Fragment.kt
index a71b6a197c..8a3375dadb 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/BankDetailsV2Fragment.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/BankDetailsV2Fragment.kt
@@ -69,12 +69,12 @@ import com.naviapp.personalloanrevamp.customview.LoanOfferStickinessBottomSheetV
import com.naviapp.personalloanrevamp.getloanRevamp.activities.BankAccountVerificationLoaderV2Activity
import com.naviapp.personalloanrevamp.getloanRevamp.customview.SearchV2Field
import com.naviapp.personalloanrevamp.getloanRevamp.helper.BankDetailsV2Helper
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper.BANK_DETAILS_AUTO_DEBIT_V2
import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
import com.naviapp.utils.*
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.BANK_ACCOUNT_NUMBER
+import com.naviapp.utils.Constants.BANK_DETAILS_AUTO_DEBIT_V2
import com.naviapp.utils.Constants.BANK_IFSC
import com.naviapp.utils.Constants.BANK_NAME_SELECTED
import com.naviapp.utils.Constants.IFSC_CODE_LENGTH
@@ -93,10 +93,7 @@ import com.naviapp.utils.Constants.SLASH
import com.naviapp.utils.Constants.SUB_REDIRECT
import com.naviapp.utils.Constants.TRUE
import com.naviapp.utils.Constants.ZERO
-import dagger.hilt.android.AndroidEntryPoint
-import javax.inject.Inject
-@AndroidEntryPoint
class BankDetailsV2Fragment :
BaseFragment(),
View.OnClickListener,
@@ -107,8 +104,7 @@ class BankDetailsV2Fragment :
FooterViewV2.FooterInteractionListener,
BackListener {
- @Inject
- lateinit var lottieRemoteHelper: LottieRemoteHelper
+ private lateinit var lottieRemoteHelper: LottieRemoteHelper
private lateinit var binding: BankDetailsV2FragmentBinding
private val viewModel by lazy { ViewModelProvider(this)[BankDetailsVM::class.java] }
@@ -142,6 +138,7 @@ class BankDetailsV2Fragment :
savedInstanceState: Bundle?
): View {
binding = BankDetailsV2FragmentBinding.inflate(inflater, container, false)
+ lottieRemoteHelper = LottieRemoteHelper(requireContext())
initQueryMapFromCtaParameters()
initError()
initUi()
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/SelectBankV2Fragment.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/SelectBankV2Fragment.kt
index 2b45c8c165..9aa6c8dbaf 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/SelectBankV2Fragment.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/SelectBankV2Fragment.kt
@@ -27,9 +27,7 @@ import com.naviapp.personalloanrevamp.getloanRevamp.customview.SearchV2Field
import com.naviapp.personalloanrevamp.getloanRevamp.helper.BankDetailsV2Helper
import com.naviapp.utils.Constants.FLOW_TYPE
import com.naviapp.utils.IconUtils
-import dagger.hilt.android.AndroidEntryPoint
-@AndroidEntryPoint
class SelectBankV2Fragment :
BaseBottomSheet(), SearchV2Field.SearchFieldListener, OnSelectBankListener {
private lateinit var binding: SelectBankV2LayoutBinding
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/SelectBankV3Fragment.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/SelectBankV3Fragment.kt
index edfce34314..d1c3573296 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/SelectBankV3Fragment.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/SelectBankV3Fragment.kt
@@ -46,16 +46,14 @@ import com.naviapp.personalloanrevamp.getloanRevamp.fragments.SelectBankV2Fragme
import com.naviapp.personalloanrevamp.getloanRevamp.fragments.SelectBankV2Fragment.Companion.BANK_TYPE
import com.naviapp.personalloanrevamp.getloanRevamp.fragments.SelectBankV2Fragment.Companion.SELECTED_BANK
import com.naviapp.personalloanrevamp.getloanRevamp.helper.BankDetailsV2Helper
-import com.naviapp.personalloanrevamp.intermediatev2.helper.IntermediateV2Helper
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
+import com.naviapp.utils.Constants.BANK_STATEMENT_VERIFICATION_V2
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.EMPTY
import com.naviapp.utils.IconUtils
-import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
-@AndroidEntryPoint
class SelectBankV3Fragment:
BaseFragment(), SearchV2Field.SearchFieldListener, OnSelectBankListener, BackListener, WidgetCallback,
InfoBottomSheetListener {
@@ -230,7 +228,7 @@ class SelectBankV3Fragment:
}
}
setDefaultHeaderProperties()
- fragmentInterchangeListener?.navigateToNextScreen(IntermediateV2Helper.BANK_STATEMENT_VERIFICATION_V2, arguments ?: Bundle())
+ fragmentInterchangeListener?.navigateToNextScreen(BANK_STATEMENT_VERIFICATION_V2, arguments ?: Bundle())
}
override fun onClickUnserviceableBank() {
@@ -264,7 +262,7 @@ class SelectBankV3Fragment:
override fun onBackPressed() {
setDefaultHeaderProperties()
- fragmentInterchangeListener?.navigateToNextScreen(IntermediateV2Helper.BANK_STATEMENT_VERIFICATION_V2, arguments ?: Bundle())
+ fragmentInterchangeListener?.navigateToNextScreen(BANK_STATEMENT_VERIFICATION_V2, arguments ?: Bundle())
}
override fun onPrimaryActionClick(ctaData: CtaData) {
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanDetailsV2Repository.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanDetailsV2Repository.kt
index 7c3f0ca458..3f4f045a21 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanDetailsV2Repository.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanDetailsV2Repository.kt
@@ -14,16 +14,13 @@ import com.naviapp.models.request.LoanFeeDetailsRequest
import com.naviapp.models.request.LoanRequest
import com.naviapp.models.response.OfferId
import com.naviapp.network.retrofit.ResponseCallback
-import com.naviapp.network.retrofit.RetrofitService
import com.naviapp.personalloanrevamp.models.response.FeeDetailsV2Response
import com.naviapp.personalloanrevamp.models.response.LoanDetailsV2Response
import com.naviapp.utils.cdnRetrofitService
import com.naviapp.utils.retrofitService
import retrofit2.Response
-import javax.inject.Inject
-class LoanDetailsV2Repository @Inject constructor(private val retrofitService: RetrofitService) :
- ResponseCallback() {
+class LoanDetailsV2Repository : ResponseCallback() {
suspend fun fetchLoanDetails(offerId: String): RepoResult {
return apiResponseCallback(retrofitService().fetchLoanDetailsV2Response(offerId))
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanEditorRepository.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanEditorRepository.kt
index 71d3b84e31..a2e5d575ab 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanEditorRepository.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanEditorRepository.kt
@@ -1,25 +1,23 @@
-package com.naviapp.personalloanrevamp.getloanRevamp.repository
/*
*
- * * Copyright © 2022 by Navi Technologies Private Limited
+ * * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
+package com.naviapp.personalloanrevamp.getloanRevamp.repository
+
import com.navi.common.network.models.RepoResult
import com.naviapp.models.request.LoanFeeDetailsRequest
import com.naviapp.models.request.LoanRequest
import com.naviapp.network.retrofit.ResponseCallback
-import com.naviapp.network.retrofit.RetrofitService
import com.naviapp.personalloanrevamp.models.response.LoanDetailsV2Response
import com.naviapp.utils.retrofitService
-import javax.inject.Inject
-class LoanEditorRepository @Inject constructor(private val retrofitService: RetrofitService) :
- ResponseCallback() {
+class LoanEditorRepository : ResponseCallback() {
suspend fun fetchLoanEditorDetails(
- data : LoanFeeDetailsRequest
+ data: LoanFeeDetailsRequest
): RepoResult {
return apiResponseCallback(retrofitService().fetchLoanEditorResponse(data))
}
@@ -29,4 +27,4 @@ class LoanEditorRepository @Inject constructor(private val retrofitService: Retr
suspend fun checkApiPollStatus(requestId: String) =
apiResponseCallback(retrofitService().fetchAsyncRequestData(requestId))
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanOfferUpgradeV3Repository.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanOfferUpgradeV3Repository.kt
index 4a1049d03f..879144dbce 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanOfferUpgradeV3Repository.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/repository/LoanOfferUpgradeV3Repository.kt
@@ -1,13 +1,17 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
package com.naviapp.personalloanrevamp.getloanRevamp.repository
import com.naviapp.network.retrofit.ResponseCallback
-import com.naviapp.network.retrofit.RetrofitService
import com.naviapp.utils.retrofitService
-import javax.inject.Inject
-class LoanOfferUpgradeV3Repository @Inject constructor(private val retrofitService: RetrofitService) :
- ResponseCallback() {
+class LoanOfferUpgradeV3Repository : ResponseCallback() {
suspend fun fetchOfferUpgradeV3Details(queryMap: HashMap) =
apiResponseCallback(retrofitService().fetchOfferUpgradeV3Details(queryMap))
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/FreshLoanDetailsV2FragmentVM.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/FreshLoanDetailsV2FragmentVM.kt
index 51ae91515b..43abbb80f0 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/FreshLoanDetailsV2FragmentVM.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/FreshLoanDetailsV2FragmentVM.kt
@@ -13,7 +13,6 @@ import androidx.lifecycle.viewModelScope
import com.navi.base.sharedpref.PreferenceManager
import com.navi.common.firebasedb.LOAN_APPLY
import com.navi.common.firebasedb.OFFER_GENERATE
-import com.navi.common.model.ModuleName
import com.navi.common.model.UploadDataAsyncResponse
import com.navi.common.network.models.ErrorMetaData
import com.navi.common.network.models.GenericResponseState
@@ -35,16 +34,13 @@ import com.naviapp.personalloanrevamp.models.response.FeeDetailsV2Response
import com.naviapp.personalloanrevamp.models.response.RPDDetailsResponse
import com.naviapp.personalloanrevamp.models.response.RPDNextCta
import com.naviapp.utils.LOAN_APPLICATION_ID
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class FreshLoanDetailsV2FragmentVM
-@Inject
-constructor(private val repository: LoanDetailsV2Repository) : BaseVM() {
+class FreshLoanDetailsV2FragmentVM(
+ private val repository: LoanDetailsV2Repository = LoanDetailsV2Repository()
+) : BaseVM() {
private val _feeDetailsV2Response = MutableLiveData()
val feeDetailsV2Response: LiveData
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/GetLoanV2SharedVM.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/GetLoanV2SharedVM.kt
index 84e5b33aea..00ada9b665 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/GetLoanV2SharedVM.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/GetLoanV2SharedVM.kt
@@ -1,26 +1,17 @@
+
/*
*
- * * Copyright © 2023 by Navi Technologies Limited
+ * * Copyright © 2022-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.naviapp.personalloanrevamp.getloanRevamp.viewmodels
-/*
- *
- * * Copyright © 2022 by Navi Technologies Private Limited
- * * All rights reserved. Strictly confidential
- *
- */
import androidx.lifecycle.MutableLiveData
import com.navi.common.viewmodel.BaseVM
-import dagger.hilt.android.lifecycle.HiltViewModel
-import javax.inject.Inject
-
-@HiltViewModel
-class GetLoanV2SharedVM @Inject constructor() : BaseVM() {
+class GetLoanV2SharedVM : BaseVM() {
val selectedEmiDateInYYYYMMDD = MutableLiveData()
var helpButtonClickstreamName: String? = null
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanDetailsV2FragmentVM.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanDetailsV2FragmentVM.kt
index 38d3f554ad..faef366ca0 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanDetailsV2FragmentVM.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanDetailsV2FragmentVM.kt
@@ -36,14 +36,13 @@ import com.naviapp.personalloanrevamp.getloanRevamp.repository.LoanDetailsV2Repo
import com.naviapp.personalloanrevamp.models.*
import com.naviapp.personalloanrevamp.models.response.LoanDetailsV2Response
import com.naviapp.utils.LOAN_APPLICATION_ID
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class LoanDetailsV2FragmentVM @Inject constructor(private val repository: LoanDetailsV2Repository) : BaseVM() {
+class LoanDetailsV2FragmentVM(
+ private val repository: LoanDetailsV2Repository = LoanDetailsV2Repository()
+) : BaseVM() {
private val _loanDetailsV2Response = MutableLiveData()
val loanDetailsV2Response: LiveData
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanEditorVM.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanEditorVM.kt
index 2903fafca4..911fe2d5da 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanEditorVM.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanEditorVM.kt
@@ -6,12 +6,6 @@
*/
package com.naviapp.personalloanrevamp.getloanRevamp.viewmodels
-/*
- *
- * * Copyright © 2022 by Navi Technologies Private Limited
- * * All rights reserved. Strictly confidential
- *
- */
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
@@ -26,13 +20,11 @@ import com.naviapp.models.response.UploadDataWithCtaAsyncResponse
import com.naviapp.personalloanrevamp.getloanRevamp.repository.LoanEditorRepository
import com.naviapp.personalloanrevamp.models.FLOW_LOAN_EDITOR
import com.naviapp.personalloanrevamp.models.response.LoanDetailsV2Response
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class LoanEditorVM @Inject constructor(private val repository: LoanEditorRepository) :
- BaseVM() {
+class LoanEditorVM(
+ private val repository: LoanEditorRepository = LoanEditorRepository()
+) : BaseVM() {
val isAutoDebitSetUp = MutableLiveData(false)
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanOfferUpgradeV3FragmentVM.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanOfferUpgradeV3FragmentVM.kt
index a26828c04c..c3dca981d7 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanOfferUpgradeV3FragmentVM.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/LoanOfferUpgradeV3FragmentVM.kt
@@ -1,3 +1,10 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
package com.naviapp.personalloanrevamp.getloanRevamp.viewmodels
import androidx.lifecycle.viewModelScope
@@ -6,19 +13,15 @@ import com.navi.common.utils.isValidResponse
import com.navi.common.viewmodel.BaseVM
import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloanrevamp.getloanRevamp.repository.LoanOfferUpgradeV3Repository
-import com.naviapp.personalloanrevamp.models.FLOW_FRESH_LOAN_DETAILS
import com.naviapp.personalloanrevamp.models.FLOW_OFFER_UPGRADE
import com.naviapp.personalloanrevamp.states.OfferUpgradeResponseState
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class LoanOfferUpgradeV3FragmentVM
-@Inject
-constructor(private val repository: LoanOfferUpgradeV3Repository) : BaseVM() {
+class LoanOfferUpgradeV3FragmentVM(
+ private val repository: LoanOfferUpgradeV3Repository = LoanOfferUpgradeV3Repository()
+) : BaseVM() {
private val _offerUpgradeV3ResponseState = MutableStateFlow(
OfferUpgradeResponseState.Init)
@@ -42,4 +45,4 @@ constructor(private val repository: LoanOfferUpgradeV3Repository) : BaseVM() {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/SkipMandateV2VM.kt b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/SkipMandateV2VM.kt
index 06111745af..322cfa69b5 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/SkipMandateV2VM.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/viewmodels/SkipMandateV2VM.kt
@@ -17,12 +17,11 @@ import com.naviapp.models.response.LoanBasicDetailsResponse
import com.naviapp.personalloan.getloan.repositories.SkipMandateRepository
import com.naviapp.personalloanrevamp.models.FLOW_SKIP_MANDATE
import com.naviapp.personalloanrevamp.models.response.SkipMandateV2Response
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@HiltViewModel
-class SkipMandateV2VM @Inject constructor(private val repository: SkipMandateRepository) : BaseVM() {
+class SkipMandateV2VM(
+ private val repository: SkipMandateRepository = SkipMandateRepository()
+) : BaseVM() {
private val _skipMandateResponse = MutableLiveData()
val skipMandateResponse: LiveData
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/helper/IntermediateV2Helper.kt b/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/helper/IntermediateV2Helper.kt
deleted file mode 100644
index 1db86cd4bd..0000000000
--- a/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/helper/IntermediateV2Helper.kt
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *
- * * Copyright © 2022-2023 by Navi Technologies Limited
- * * All rights reserved. Strictly confidential
- *
- */
-
-package com.naviapp.personalloanrevamp.intermediatev2.helper
-
-import android.os.Bundle
-import androidx.fragment.app.Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.GstVerificationPasswordV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.GstVerificationV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.SelectBankV3Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.TopupLoanIntroV2Fragment
-import com.naviapp.personalloanrevamp.intermediatev2.fragments.BankStatementV2Fragment
-import com.naviapp.personalloanrevamp.intermediatev2.fragments.TelcoOtpV2Fragment
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.EmploymentOtpVerificationFragment
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.EmploymentVerificationV2Fragment
-
-object IntermediateV2Helper {
-
- private const val GST_VERIFICATION_V2 = "GST_VERIFICATION_V2"
- private const val GST_VERIFICATION_PASSWORD_V2 = "GST_VERIFICATION_PASSWORD_V2"
- private const val TELCO_OTP_VERIFICATION_V2 = "TELCO_OTP_VERIFICATION_V2"
- private const val SELECT_BANK_V3 = "SELECT_BANK_V3_SCREEN"
- const val BANK_STATEMENT_VERIFICATION_V2 = "BANK_STATEMENT_VERIFICATION_V2"
- const val EPFO_V2 = "EPFO_V2"
- const val EPFO_OTP_VERIFICATION_V2 = "EPFO_OTP_VERIFICATION_V2"
- const val TOP_UP_INTRO_V2 = "TOP_UP_INTRO"
-
- fun getTag(screen: String): String {
- return when (screen) {
- GST_VERIFICATION_V2 -> GstVerificationV2Fragment.TAG
- GST_VERIFICATION_PASSWORD_V2 -> GstVerificationPasswordV2Fragment.TAG
- TELCO_OTP_VERIFICATION_V2 -> TelcoOtpV2Fragment.TAG
- BANK_STATEMENT_VERIFICATION_V2 -> BankStatementV2Fragment.TAG
- EPFO_V2 -> EmploymentVerificationV2Fragment.TAG
- EPFO_OTP_VERIFICATION_V2 -> EmploymentOtpVerificationFragment.TAG
- TOP_UP_INTRO_V2 -> TopupLoanIntroV2Fragment.TAG
- SELECT_BANK_V3 -> SelectBankV3Fragment.TAG
- else -> BankStatementV2Fragment.TAG
- }
- }
-
- fun getFragment(screen: String, bundle: Bundle? = null): Fragment {
- return when (screen) {
- GST_VERIFICATION_V2 -> GstVerificationV2Fragment.getInstance(bundle)
- GST_VERIFICATION_PASSWORD_V2 -> GstVerificationPasswordV2Fragment.getInstance(bundle)
- TELCO_OTP_VERIFICATION_V2 -> TelcoOtpV2Fragment.getInstance(bundle)
- BANK_STATEMENT_VERIFICATION_V2 -> BankStatementV2Fragment.getInstance(bundle)
- EPFO_V2 -> EmploymentVerificationV2Fragment.getInstance(bundle)
- EPFO_OTP_VERIFICATION_V2 -> EmploymentOtpVerificationFragment.getInstance(bundle)
- TOP_UP_INTRO_V2 -> TopupLoanIntroV2Fragment.getInstance(bundle)
- SELECT_BANK_V3 -> SelectBankV3Fragment.getInstance(bundle)
- else -> BankStatementV2Fragment.getInstance(bundle)
- }
- }
-
- fun getBackButtonEventName(currentScreen: String): String {
- return when (currentScreen) {
- GST_VERIFICATION_V2 -> "PL_Gst_Verification_Back_Clicked"
- GST_VERIFICATION_PASSWORD_V2 -> "PL_Gst_Verification_Password_Back_Clicked"
- else -> ""
- }
- }
-}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/models/CtaType.kt b/app/src/main/java/com/naviapp/personalloanrevamp/models/CtaType.kt
new file mode 100644
index 0000000000..2fadbb353e
--- /dev/null
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/models/CtaType.kt
@@ -0,0 +1,33 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.naviapp.personalloanrevamp.models
+
+enum class CtaType(val value: String) {
+ CHANGE_EMI_DATE("CHANGE_EMI_DATE"),
+ TENURE_SELECTED_TYPE("TENURE_SELECTED_TYPE"),
+ SLIDER_SELECTED_TYPE("SLIDER_SELECTED_TYPE"),
+ TENURE_SELECTED_VALUE("TENURE_SELECTED_VALUE"),
+ MONTHLY_EMI_VALUE("MONTHLY_EMI_VALUE"),
+ CUSTOMISE_TENURE("CUSTOMISE_TENURE"),
+ TENURE_SLIDER_CHANGE("TENURE_SLIDER_CHANGE"),
+ VIEW_EMI_CALENDAR("VIEW_EMI_CALENDAR"),
+ KNOW_MORE("KNOW_MORE"),
+ SLIDER_END_TYPE("SLIDER_END_TYPE"),
+ TENURE_CLICKED_TYPE("TENURE_CLICKED_TYPE"),
+ TENURE_DEFAULT_SELECTED("TENURE_DEFAULT_SELECTED"),
+ INFO_ICON_CLICK("INFO_ICON_CLICK"),
+ FOOTER_NEXT_PRESS("FOOTER_NEXT_PRESS"),
+ FOOTER_DESCRIPTION_PRESS("FOOTER_DESCRIPTION_PRESS"),
+ API_CALL_UPI_TOKEN("API_CALL_UPI_TOKEN"),
+ LAUNCH_UPI_BOTTOM_SHEET("LAUNCH_UPI_BOTTOM_SHEET"),
+ FAILURE_BOTTOM_SHEET("FAILURE_BOTTOM_SHEET"),
+ BANK_DETAILS_AUTO_DEBIT_V2("BANK_DETAILS_AUTO_DEBIT_V2"),
+ APR_CLICK("APR_BOTTOM_SHEET"),
+ CLOSE_SNAPPED_HEADER("CLOSE_SNAPPED_HEADER"),
+ LOAN_AMOUNT_SLIDER("LOAN_AMOUNT_SLIDER")
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/models/response/PersonalLoanTrackerResponse.kt b/app/src/main/java/com/naviapp/personalloanrevamp/models/response/PersonalLoanTrackerResponse.kt
index cfbda98326..341e1d5756 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/models/response/PersonalLoanTrackerResponse.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/models/response/PersonalLoanTrackerResponse.kt
@@ -9,8 +9,9 @@ package com.naviapp.personalloanrevamp.models.response
import android.os.Parcelable
import com.google.gson.annotations.SerializedName
-import com.navi.naviwidgets.models.response.RewardsInfoWidget
+import com.navi.design.textview.model.TextWithStyle
import com.navi.naviwidgets.models.response.Footer
+import com.navi.naviwidgets.models.response.RewardsInfoWidget
import com.naviapp.models.response.Header
import kotlinx.parcelize.Parcelize
@@ -23,7 +24,8 @@ data class PersonalLoanTrackerResponse(
data class PersonalLoanTrackerContent(
@SerializedName("stepTitle") val stepTitle: String? = null,
@SerializedName("steps") val steps: List? = null,
- @SerializedName("rewardInfo") val rewardsInfo: RewardsInfoWidget? = null
+ @SerializedName("rewardInfo") val rewardsInfo: RewardsInfoWidget? = null,
+ @SerializedName("disclaimer") val disclaimer: TextWithStyle? = null
)
data class PersonalLoanTrackerStep(
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/PermissionV2Activity.kt b/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/PermissionV2Activity.kt
index 315cc8d1d6..5fdefd3294 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/PermissionV2Activity.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/PermissionV2Activity.kt
@@ -6,12 +6,6 @@
*/
package com.naviapp.personalloanrevamp.useridentificationv2.activities
-/*
- *
- * * Copyright © 2022 by Navi Technologies Private Limited
- * * All rights reserved. Strictly confidential
- *
- */
import android.Manifest
import android.content.Intent
@@ -22,9 +16,13 @@ import android.provider.Settings
import android.text.TextUtils
import android.view.View
import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.work.OneTimeWorkRequestBuilder
+import androidx.work.WorkManager
+import com.moengage.core.internal.utils.isNullOrEmpty
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.model.CtaData
import com.navi.base.model.LineItem
@@ -39,15 +37,16 @@ import com.navi.common.managers.PermissionsManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.RequestConfig
import com.navi.common.utils.*
+import com.navi.naviwidgets.extensions.setTextFieldData
+import com.navi.naviwidgets.models.response.Footer
import com.naviapp.BuildConfig
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
-import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.navigator.NaviDeepLinkNavigator
-import com.naviapp.common.navigator.ScreenNavigator
import com.naviapp.databinding.ActivityPermissionV2Binding
import com.naviapp.devicedata.finoramic.FinoramicHelper
+import com.naviapp.manager.UserDataUploadManager
import com.naviapp.models.FeedbackPageType
import com.naviapp.models.RedirectPageStatus
import com.naviapp.network.ApiErrorTagType
@@ -55,9 +54,7 @@ import com.naviapp.permission.utils.getAlternatePermissionTilesV2
import com.naviapp.permission.utils.hasPermissions
import com.naviapp.permission.viewmodel.PermissionViewModel
import com.naviapp.personalloan.getloan.common.fragment.CustomerSupportFragment
-import com.naviapp.personalloanrevamp.models.ImportantNote
import com.naviapp.personalloanrevamp.useridentificationv2.adapter.PermissionV2Adapter
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
import com.naviapp.receiver.WifiTrackerBaseActivity
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
@@ -66,7 +63,6 @@ import com.naviapp.utils.IntentConstants
class PermissionV2Activity :
WifiTrackerBaseActivity(),
- FooterViewV2.FooterInteractionListener,
View.OnClickListener,
NaviHeaderView.InteractionListener {
private lateinit var binding: ActivityPermissionV2Binding
@@ -83,11 +79,15 @@ class PermissionV2Activity :
screenName
)
}
+ private val dynamicDeliveryEventTracker by lazy {
+ NaviAnalytics.naviAnalytics.DynamicDelivery(screenName)
+ }
private val naviLocationManager = NaviLocationManager()
private var finoramicHelper: FinoramicHelper? = null
private val onPollingEnd = { handleTimeOutError(ApiErrorTagType.LOCATION_UPLOAD) }
private val helpEventTracker by lazy { NaviAnalytics.naviAnalytics.Faq() }
private var panVerificationType: String? = null
+ private var isFirstTime = true
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -123,7 +123,7 @@ class PermissionV2Activity :
private fun fetchPermissionDetails() {
showLoader()
- permissionViewModel.fetchPermissionDetails()
+ permissionViewModel.fetchPermissionDetailsV1()
}
private fun initObservers() {
@@ -131,15 +131,23 @@ class PermissionV2Activity :
hideLoader()
naviAnalyticsEventTracker.onPageLands()
response?.let { permissionDetailsResponse ->
+ permissionDetailsResponse.content?.modulesToInstall?.let { modulesToInstall ->
+ checkForModulesInstall(modulesToInstall)
+ }
setProperties(
- permissionDetailsResponse.header?.title.orEmpty(),
- permissionDetailsResponse.header?.leftIconCode,
- permissionDetailsResponse.header?.infoCta,
- null,
- true
+ title = permissionDetailsResponse.header?.title.orEmpty(),
+ leftIconCode = permissionDetailsResponse.header?.leftIconCode,
+ infoCta = permissionDetailsResponse.header?.infoCta,
+ hideHelp = !(permissionDetailsResponse.header?.enableHelp ?: false),
+ hideLeftIcon = isNullOrEmpty(permissionDetailsResponse.header?.leftIconCode),
+ colorInt = null,
+ hideDivider = true
)
+ setLeftIconVisibility(!isNullOrEmpty(permissionDetailsResponse.header?.leftIconCode))
binding.headerDescriptionView.setProperties(permissionDetailsResponse.header)
- binding.footerView.setProperties(permissionDetailsResponse.footer, listener = this)
+ permissionDetailsResponse.footer?.let { footerData ->
+ setFooterData(footerData)
+ }
response.content?.permissionList?.forEachIndexed { index, permissionTile ->
permissionTiles.getOrNull(index)?.icon =
permissionTile.icon ?: permissionTiles.getOrNull(index)?.icon
@@ -149,7 +157,6 @@ class PermissionV2Activity :
description = permissionTile.description
}
}
- permissionAdapter.updatePermissionTiles(permissionTiles)
permissionDetailsResponse.content?.finoramicData?.let { finoramicData ->
if (finoramicData.enabled.orFalse()) {
finoramicHelper = FinoramicHelper()
@@ -157,16 +164,14 @@ class PermissionV2Activity :
}
}
}
+
if (permissionsManager.hasPermissions()) {
- permissionTiles.forEach { permissionTile ->
- permissionTile.qualifier?.let {
- permissionTile.permissionState = PackageManager.PERMISSION_GRANTED
- }
- }
permissionAdapter.updatePermissionTiles(permissionTiles)
onGrantPermissions()
+ } else {
+ binding.permissionDeniedLayoutV2.visibility = View.GONE
}
- enableDataSafetyHeader()
+ permissionAdapter.updatePermissionTiles(permissionTiles)
panVerificationType = getPanVerificationType(response?.footer?.nextCta?.parameters)
}
@@ -190,6 +195,18 @@ class PermissionV2Activity :
}
}
+ private fun checkForModulesInstall(modulesToInstall: List) {
+ if (modulesToInstall.isNotEmpty()) {
+ dynamicDeliveryEventTracker.subModuleAutomaticDownload()
+ installDynamicModules(modulesToInstall)
+ }
+ }
+
+ private fun setFooterData(footerData: Footer) {
+ binding.footerView.title.setTextFieldData(footerData.topInfoTitle)
+ binding.footerView.footerButton.text = footerData.nextCta?.title ?: EMPTY
+ }
+
private fun getPanVerificationType(parameters: List?): String? {
parameters?.forEach {
if (it.key == PAN_VERIFICATION_TYPE) {
@@ -259,12 +276,10 @@ class PermissionV2Activity :
when {
TextUtils.equals(status, FirebaseStatusType.SUCCESS) -> {
deInitializeAsyncListeners(baseFirebaseDataHelper, baseApiPollScheduler)
- if (panVerificationType != null && panVerificationType.equals(NEW_PAN_VERIFICATION)) {
- hideLoader()
- navigateToNextScreen()
- } else {
- fetchPanVerification()
- }
+ hideLoader()
+ baseApiPollScheduler?.stopApiPoll()
+ baseFirebaseDataHelper?.clear()
+ navigateToNextScreen()
}
TextUtils.equals(status, FirebaseStatusType.FAILURE) -> {
hideLoader()
@@ -278,6 +293,7 @@ class PermissionV2Activity :
}
private fun initUi() {
+ setLeftIconVisibility(false)
binding.permissionTileRvv.layoutManager = LinearLayoutManager(this)
binding.permissionTileRvv.adapter = permissionAdapter
binding.permissionTileRvv.addItemDecoration(
@@ -291,12 +307,21 @@ class PermissionV2Activity :
naviAnalyticsEventTracker.onAllPermissionMandatoryClicked()
openNativePermissionPage()
}
- binding.importantNoteBinder = ImportantNote(IMPORTANT_NOTE_TITLE, IMPORTANT_NOTE_DETAILS)
binding.headerView.setOnInteractionListener(this)
+ binding.footerView.footerButton.setOnClickListener {
+ onFooterNextCtaClick()
+ }
}
- private fun enableDataSafetyHeader() {
- binding.footerView.showDataSafetyHeader()
+ private fun onFooterNextCtaClick() {
+ naviAnalyticsEventTracker.onAllowClicked()
+ NaviTrackEvent.setStartTs(screenName)
+ if (binding.permissionDeniedLayoutV2.visibility == View.VISIBLE) {
+ openNativePermissionPage()
+ } else {
+ permissionRequested = true
+ permissionsManager.requestPermissions()
+ }
}
private fun openNativePermissionPage() {
@@ -325,6 +350,22 @@ class PermissionV2Activity :
}
}
+ private fun updatePermissionState() {
+ permissionTiles.forEach { permissionTile ->
+ permissionTile.qualifier?.let {
+ if (permissionsManager.hasPermissionsAny(it.toTypedArray())) {
+ permissionTile.permissionState = PackageManager.PERMISSION_GRANTED
+ } else {
+ permissionTile.permissionState = PackageManager.PERMISSION_DENIED
+ }
+ }
+ }
+ if (permissionsManager.hasPermissions()) {
+ binding.permissionDeniedLayoutV2.visibility = View.GONE
+ }
+ permissionAdapter.updatePermissionTiles(permissionTiles)
+ }
+
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array,
@@ -398,11 +439,19 @@ class PermissionV2Activity :
if (isDontAskAgainClicked(permissions[index], grantResults[index])) {
binding.permissionDeniedLayoutV2.visibility = View.VISIBLE
}
- } else permissionTile.permissionState = PackageManager.PERMISSION_GRANTED
+ }
}
}
}
+ override fun onResume() {
+ super.onResume()
+ if (!isFirstTime) {
+ updatePermissionState()
+ }
+ isFirstTime = false
+ }
+
private fun sendAnalyticsEventFroPermission(
permissions: Array,
grantResults: IntArray
@@ -441,10 +490,26 @@ class PermissionV2Activity :
private fun onGrantPermissions() {
showLoader()
+ uploadUserData()
sendSMSDataToFinoramic()
sendLocation()
}
+ private fun uploadUserData() {
+ val uploadSms =
+ ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.READ_SMS) ==
+ PackageManager.PERMISSION_GRANTED
+ val uploadContacts =
+ ContextCompat.checkSelfPermission(
+ applicationContext,
+ Manifest.permission.READ_CONTACTS
+ ) == PackageManager.PERMISSION_GRANTED
+ if (uploadSms && uploadContacts) {
+ val manager = OneTimeWorkRequestBuilder().build()
+ WorkManager.getInstance(applicationContext).enqueue(manager)
+ }
+ }
+
private fun sendSMSDataToFinoramic() {
try {
finoramicHelper?.sendSms(applicationContext)
@@ -477,7 +542,7 @@ class PermissionV2Activity :
override fun onBackPressed() {
naviAnalyticsEventTracker.onBackButtonClicked(screenName, isSystemBackPressed = true)
- launchHome()
+ finish()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@@ -499,11 +564,15 @@ class PermissionV2Activity :
override fun onClick(v: View?) {
when (v?.id) {
R.id.back_iv -> {
- launchHome()
+ finish()
}
}
}
+ override fun setLeftIconVisibility(visible: Boolean) {
+ binding.headerView.setLeftIconVisibility(visible)
+ }
+
override fun setProperties(
title: String,
leftIconCode: String?,
@@ -535,47 +604,10 @@ class PermissionV2Activity :
}
override fun onBackButtonPressed() {
- naviAnalyticsEventTracker.onCrossButtonClicked(screenName)
- launchHome()
- }
-
- private fun launchHome() {
- if (isTaskRoot) {
- ScreenNavigator.instance.startActivityWithNoActivityStack(
- this,
- ScreenNavigator.DASHBOARD_SCREEN
- )
- } else {
- finish()
- }
- }
-
- override fun onFooterBackPressed(backCta: CtaData?) {
- naviAnalyticsEventTracker.onBackButtonClicked(screenName)
- permissionViewModel.permissionDetailsResponse.value?.footer?.backCta?.let {
- NaviDeepLinkNavigator.navigate(this, it, true)
- }
- }
-
- override fun onKnowMoreClicked(cta: CtaData?) {
- naviAnalyticsEventTracker.onKnowMoreClicked()
- permissionViewModel.permissionDetailsResponse.value
- ?.content
- ?.dataSafetyBottomSheet
- ?.let {
- val infoBottomSheet = InformationBottomSheet.getInstance(it)
- safelyShowBottomSheet(infoBottomSheet, InformationBottomSheet.TAG)
- }
- }
-
- override fun onFooterNextPressed(nextCta: CtaData?) {
- naviAnalyticsEventTracker.onAllowClicked()
- NaviTrackEvent.setStartTs(screenName)
- if (binding.permissionDeniedLayoutV2.visibility == View.VISIBLE) {
- openNativePermissionPage()
- } else {
- permissionRequested = true
- permissionsManager.requestPermissions()
+ permissionViewModel.permissionDetailsResponse.value?.header?.actionData?.url?.let {
+ naviAnalyticsEventTracker.onCrossButtonClicked(screenName)
+ TemporaryStorageHelper.isPermissionSkipFlow = true
+ NaviDeepLinkNavigator.navigate(this, CtaData(url = it), true)
}
}
@@ -588,8 +620,6 @@ class PermissionV2Activity :
companion object {
private const val OK = "Ok"
private const val NO = "No"
- const val IMPORTANT_NOTE_TITLE = "Important Note:"
- const val IMPORTANT_NOTE_DETAILS = "All permissions are mandatory to complete the process"
const val TAG = "PERMISSION_ACTIVITY_V2"
const val PAN_VERIFICATION_TYPE = "PAN_VERIFICATION_TYPE"
const val NEW_PAN_VERIFICATION = "NEW_PAN_VERIFICATION"
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/LoanSummaryV2Helper.kt b/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/LoanSummaryV2Helper.kt
deleted file mode 100644
index a6e236d4e3..0000000000
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/LoanSummaryV2Helper.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.naviapp.personalloanrevamp.useridentificationv2.helper
-
-import android.content.Context
-import com.navi.naviwidgets.widgets.labledtextinput.InputTextWidgetMeta
-import com.navi.naviwidgets.widgets.labledtextinput.LabeledTextInputWidgetModelV2
-import com.navi.naviwidgets.widgets.labledtextinput.TextInputWidgetData
-import com.naviapp.R
-
-object LoanSummaryV2Helper {
-
- fun getEmailWidget(context: Context): LabeledTextInputWidgetModelV2 {
- return LabeledTextInputWidgetModelV2(
- widgetData = TextInputWidgetData(
- inputTextData = InputTextWidgetMeta(
- hint = context.getString(R.string.enter_your_email_id),
- )
- ).apply {
- title = context.getString(R.string.email_id)
- titleInfo = context.getString(R.string.for_loan_agreement)
- }
- )
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/repository/PersonalLoanTrackerRepository.kt b/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/repository/PersonalLoanTrackerRepository.kt
index 3d9862039f..d37260b562 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/repository/PersonalLoanTrackerRepository.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/repository/PersonalLoanTrackerRepository.kt
@@ -1,6 +1,6 @@
/*
*
- * * Copyright © 2022 by Navi Technologies Limited
+ * * Copyright © 2022-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
@@ -9,20 +9,11 @@ package com.naviapp.personalloanrevamp.useridentificationv2.repository
import com.navi.common.network.models.RepoResult
import com.naviapp.network.retrofit.ResponseCallback
-import com.naviapp.network.retrofit.RetrofitService
import com.naviapp.personalloanrevamp.models.response.PersonalLoanTrackerResponse
import com.naviapp.utils.retrofitService
-import javax.inject.Inject
-class PersonalLoanTrackerRepository
-@Inject
-constructor(private val retrofitService: RetrofitService) : ResponseCallback() {
+class PersonalLoanTrackerRepository : ResponseCallback() {
suspend fun fetchPersonalLoanStatusTracker(): RepoResult =
apiResponseCallback(retrofitService().fetchPersonalLoanTrackerResponse())
-
- /*suspend fun fetchPersonalLoanStatusTracker(): RepoResult {
- val type = object : TypeToken() {}.type
- return mockApiResponse(type, "personalLoanTrackerResponse")
- }*/
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/viewmodels/PersonalLoanTrackerVM.kt b/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/viewmodels/PersonalLoanTrackerVM.kt
index 53280bf4ae..7ce0fac2ee 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/viewmodels/PersonalLoanTrackerVM.kt
+++ b/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/viewmodels/PersonalLoanTrackerVM.kt
@@ -16,14 +16,11 @@ import com.navi.common.viewmodel.BaseVM
import com.naviapp.personalloanrevamp.models.FLOW_LOAN_JOURNEY_TRACKER
import com.naviapp.personalloanrevamp.models.response.PersonalLoanTrackerResponse
import com.naviapp.personalloanrevamp.useridentificationv2.repository.PersonalLoanTrackerRepository
-import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
-import javax.inject.Inject
-
-
-@HiltViewModel
-class PersonalLoanTrackerVM @Inject constructor(private val repository: PersonalLoanTrackerRepository) : BaseVM() {
+class PersonalLoanTrackerVM(
+ private val repository: PersonalLoanTrackerRepository = PersonalLoanTrackerRepository()
+) : BaseVM() {
private val _statusTrackerResponse = MutableLiveData()
val statusTrackerResponse: LiveData
get() = _statusTrackerResponse
@@ -35,14 +32,15 @@ class PersonalLoanTrackerVM @Inject constructor(private val repository: Personal
_statusTrackerResponse.value = response.data
} else {
setErrorData(
- response.errors, response.error,
- errorMetaData = ErrorMetaData(
- flowName = FLOW_LOAN_JOURNEY_TRACKER,
- methodName = ::fetchLoanTrackerResponse.name
- )
+ response.errors,
+ response.error,
+ errorMetaData =
+ ErrorMetaData(
+ flowName = FLOW_LOAN_JOURNEY_TRACKER,
+ methodName = ::fetchLoanTrackerResponse.name
+ )
)
}
}
}
-
}
diff --git a/app/src/main/java/com/naviapp/receiver/WifiTrackerBaseActivity.kt b/app/src/main/java/com/naviapp/receiver/WifiTrackerBaseActivity.kt
index 9f544e220e..a2aab1515a 100644
--- a/app/src/main/java/com/naviapp/receiver/WifiTrackerBaseActivity.kt
+++ b/app/src/main/java/com/naviapp/receiver/WifiTrackerBaseActivity.kt
@@ -72,12 +72,6 @@ abstract class WifiTrackerBaseActivity : BaseActivity() {
)
) {
wifiManager?.startScan()
- } else {
- permissionsManager.requestPermissions(
- arrayOf(
- Manifest.permission.ACCESS_COARSE_LOCATION
- )
- )
}
} else {
wifiManager?.startScan()
@@ -93,24 +87,6 @@ abstract class WifiTrackerBaseActivity : BaseActivity() {
)
) {
wifiManager?.startScan()
- } else {
- if (FirebaseRemoteConfigHelper.getBoolean(
- FirebaseRemoteConfigHelper.LOCATION_EXPERIMENT
- )
- ) {
- permissionsManager.requestPermissions(
- arrayOf(
- Manifest.permission.ACCESS_COARSE_LOCATION
- )
- )
- } else {
- permissionsManager.requestPermissions(
- arrayOf(
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.ACCESS_COARSE_LOCATION
- )
- )
- }
}
} else {
wifiManager?.startScan()
@@ -118,22 +94,6 @@ abstract class WifiTrackerBaseActivity : BaseActivity() {
}
}
- override fun onRequestPermissionsResult(
- requestCode: Int,
- permissions: Array,
- grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- if (requestCode == PermissionsManager.REQUEST_CODE) {
- if (
- grantResults.isNotEmpty() &&
- grantResults.first() == PackageManager.PERMISSION_GRANTED
- ) {
- wifiManager?.startScan()
- }
- }
- }
-
override fun onStop() {
super.onStop()
unregisterReceiver(receiverWifi)
diff --git a/app/src/main/java/com/naviapp/registration/LoginFragment.kt b/app/src/main/java/com/naviapp/registration/LoginFragment.kt
index 6270dffe6b..36b70f1187 100644
--- a/app/src/main/java/com/naviapp/registration/LoginFragment.kt
+++ b/app/src/main/java/com/naviapp/registration/LoginFragment.kt
@@ -14,6 +14,7 @@ import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
+import android.view.View.GONE
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
@@ -53,8 +54,6 @@ import com.naviapp.utils.Constants.DEFAULT
import com.naviapp.utils.Constants.LEGAL_DOC_TYPE_PRIVACY_POLICY
import com.naviapp.utils.Constants.LEGAL_DOC_TYPE_TNC
import com.naviapp.utils.Constants.VALID_PHONE_NUMBER_LENGTH
-import com.naviapp.utils.EMPTY
-import com.naviapp.utils.openKeyboard
class LoginFragment : BaseFragment(), View.OnClickListener {
@@ -66,6 +65,7 @@ class LoginFragment : BaseFragment(), View.OnClickListener {
private var source: String? = null
private var isCheckBoxNeedToShow = true
private var isNoCallDisclaimerEnabled = false
+ private var isOldHomePageEnabled: Boolean = false
override fun onCreateView(
inflater: LayoutInflater,
@@ -78,6 +78,7 @@ class LoginFragment : BaseFragment(), View.OnClickListener {
if (source.isNullOrEmpty()) {
source = DEFAULT
}
+ readArguments()
initUi()
initObservers()
initData()
@@ -151,7 +152,8 @@ class LoginFragment : BaseFragment(), View.OnClickListener {
null
)
}
- } catch (e: Exception) {}
+ } catch (e: Exception) {
+ }
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@@ -194,6 +196,11 @@ class LoginFragment : BaseFragment(), View.OnClickListener {
return validated
}
+ private fun readArguments() {
+ isOldHomePageEnabled =
+ FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.OLD_HOME_PAGE_THEME)
+ }
+
private fun initUi() {
var tncTxt: String? = null
source?.let { loginSource ->
@@ -236,7 +243,40 @@ class LoginFragment : BaseFragment(), View.OnClickListener {
),
makeBold = true
)
- binding.noCallDisclaimer.headerLayout.isVisible = isNoCallDisclaimerEnabled
+
+ if (isOldHomePageEnabled.not()) {
+ binding.rightIcon.visibility = GONE
+ context?.let {
+ binding.conditionsCb.buttonDrawable =
+ ContextCompat.getDrawable(it, R.drawable.ic_purple_checkbox)
+ }
+ binding.tvNewNoCalls.isVisible = isNoCallDisclaimerEnabled
+ context?.let {
+ binding.verifyNumberTv.setTextColor(ContextCompat.getColor(it, R.color.dark_gray))
+ binding.countryCodeText.setTextColor(ContextCompat.getColor(it, R.color.dark_gray))
+ binding.phoneEdit.setTextColor(ContextCompat.getColor(it, R.color.dark_gray))
+ binding.termsConditionsTv.setTextColor(
+ ContextCompat.getColor(
+ it,
+ R.color.color_6B6B6B
+ )
+ )
+ binding.termsConditionsTv.setTextColor(
+ ContextCompat.getColor(
+ it,
+ R.color.description_color_seven
+ )
+ )
+ binding.termsConditionsTv.setLinkTextColor(
+ ContextCompat.getColor(
+ it,
+ R.color.description_color_seven
+ )
+ )
+ }
+ } else {
+ binding.noCallDisclaimer.headerLayout.isVisible = isNoCallDisclaimerEnabled
+ }
}
private fun openLegalDocsOnBrowser(type: String) {
@@ -254,15 +294,23 @@ class LoginFragment : BaseFragment(), View.OnClickListener {
private fun navigateToOtpScreenOrEnableOtpButton() {
if (
binding.phoneEdit.text.toString().length == VALID_PHONE_NUMBER_LENGTH &&
- (isCheckBoxNeedToShow.not() || binding.conditionsCb.isChecked)
+ (isCheckBoxNeedToShow.not() || binding.conditionsCb.isChecked)
) {
binding.getOtpBtn.isEnabled = true
context?.let {
binding.getOtpBtn.background = getNaviDrawable(
- cornerRadius = resources.getDimension(R.dimen.layout_dp_32).toInt(),
+ cornerRadius = if (isOldHomePageEnabled.not()) {
+ resources.getDimension(R.dimen.layout_dp_4).toInt()
+ } else {
+ resources.getDimension(R.dimen.layout_dp_32).toInt()
+ },
backgroundColor = ContextCompat.getColor(
it,
- R.color.outrageous_orange
+ if (isOldHomePageEnabled.not()) {
+ R.color.color_1F002A
+ } else {
+ R.color.outrageous_orange
+ }
)
)
}
@@ -270,10 +318,18 @@ class LoginFragment : BaseFragment(), View.OnClickListener {
binding.getOtpBtn.isEnabled = false
context?.let {
binding.getOtpBtn.background = getNaviDrawable(
- cornerRadius = resources.getDimension(R.dimen.layout_dp_32).toInt(),
+ cornerRadius = if (isOldHomePageEnabled.not()) {
+ resources.getDimension(R.dimen.layout_dp_4).toInt()
+ } else {
+ resources.getDimension(R.dimen.layout_dp_32).toInt()
+ },
backgroundColor = ContextCompat.getColor(
it,
- R.color.outrageous_orange_opacity_56
+ if (isOldHomePageEnabled.not()) {
+ R.color.color_1F002A_opacity_56
+ } else {
+ R.color.outrageous_orange_opacity_56
+ }
)
)
}
diff --git a/app/src/main/java/com/naviapp/registration/OtpFragment.kt b/app/src/main/java/com/naviapp/registration/OtpFragment.kt
index 542f82d570..89ac83a1b6 100644
--- a/app/src/main/java/com/naviapp/registration/OtpFragment.kt
+++ b/app/src/main/java/com/naviapp/registration/OtpFragment.kt
@@ -12,6 +12,8 @@ import android.os.Bundle
import android.os.CountDownTimer
import android.view.LayoutInflater
import android.view.View
+import android.view.View.GONE
+import android.view.View.VISIBLE
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
@@ -64,6 +66,7 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
private var grootReferenceId: String? = null
private var channel: String? = null
private var isCallOptionEnabled = false
+ private var isOldHomePageEnabled: Boolean = false
override fun onAttach(context: Context) {
super.onAttach(context)
@@ -79,6 +82,7 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.otp_fragment, container, false)
+ readArguments()
initError()
initUi()
initListeners()
@@ -93,6 +97,11 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
}
}
+ private fun readArguments() {
+ isOldHomePageEnabled =
+ FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.OLD_HOME_PAGE_THEME)
+ }
+
private fun initError() {
initError(
registrationVM,
@@ -105,7 +114,11 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
private fun initListeners() {
binding.resendOtpTv.setOnClickListener(this)
- binding.editNumberTv.setOnClickListener(this)
+ if (isOldHomePageEnabled.not()) {
+ binding.tvEditNumberTitle.setOnClickListener(this)
+ } else {
+ binding.editNumberTv.setOnClickListener(this)
+ }
binding.verifyOtpBtn.setOnClickListener(this)
binding.otpOncallTv.setOnClickListener(this)
initObservers()
@@ -136,6 +149,7 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
hideLoader()
binding.otpLayout.clear()
binding.enterCorrectOtpTv.visibility = View.VISIBLE
+ binding.otpLayout.setErrorState()
}
}
@@ -159,9 +173,15 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
arguments?.getString(OTP_TOKEN)?.let { latestOtpToken = it }
context?.let {
binding.verifyOtpBtn.background = getNaviDrawable(
- cornerRadius = resources.getDimension(R.dimen.layout_dp_32).toInt(),
+ cornerRadius = if (isOldHomePageEnabled.not())
+ resources.getDimension(R.dimen.layout_dp_4).toInt()
+ else
+ resources.getDimension(R.dimen.layout_dp_32).toInt(),
backgroundColor = ContextCompat.getColor(
it,
+ if (isOldHomePageEnabled.not())
+ R.color.color_1F002A_opacity_56
+ else
R.color.outrageous_orange_opacity_56
)
)
@@ -182,10 +202,16 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
binding.verifyOtpBtn.isEnabled = true
context?.let {
binding.verifyOtpBtn.background = getNaviDrawable(
- cornerRadius = resources.getDimension(R.dimen.layout_dp_32).toInt(),
+ cornerRadius = if (isOldHomePageEnabled.not())
+ resources.getDimension(R.dimen.layout_dp_4).toInt()
+ else
+ resources.getDimension(R.dimen.layout_dp_32).toInt(),
backgroundColor = ContextCompat.getColor(
it,
- R.color.outrageous_orange
+ if (isOldHomePageEnabled.not())
+ R.color.color_1F002A
+ else
+ R.color.outrageous_orange
)
)
}
@@ -193,16 +219,23 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
binding.verifyOtpBtn.isEnabled = false
context?.let {
binding.verifyOtpBtn.background = getNaviDrawable(
- cornerRadius = resources.getDimension(R.dimen.layout_dp_32).toInt(),
+ cornerRadius = if (isOldHomePageEnabled.not())
+ resources.getDimension(R.dimen.layout_dp_4).toInt()
+ else
+ resources.getDimension(R.dimen.layout_dp_32).toInt(),
backgroundColor = ContextCompat.getColor(
it,
- R.color.outrageous_orange_opacity_56
+ if (isOldHomePageEnabled.not())
+ R.color.color_1F002A_opacity_56
+ else
+ R.color.outrageous_orange_opacity_56
)
)
}
}
if (binding.otpLayout.getText().length == 1) {
binding.enterCorrectOtpTv.visibility = View.GONE
+ binding.otpLayout.setNormalState()
}
}
arguments?.getString(LOGIN_SOURCE)?.let {
@@ -210,6 +243,65 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
FirebaseRemoteConfigHelper.getBoolean(it.plus("_NO_CALL_DISCLAIMER"))
}
startCountDownTimer()
+
+ changeComponentsToNewHomeTheme()
+ }
+
+ private fun changeComponentsToNewHomeTheme() {
+ if (isOldHomePageEnabled.not()) {
+ binding.rightIcon.visibility = GONE
+ binding.tvEditNumberTitle.visibility = VISIBLE
+ context?.let {
+ binding.enterOtpHeadingTv.setTextColor(
+ ContextCompat.getColor(
+ it,
+ R.color.dark_gray
+ )
+ )
+ binding.enterOtpTv.setTextColor(
+ ContextCompat.getColor(
+ it,
+ R.color.color_6B6B6B
+ )
+ )
+ binding.editNumberTv.setTextColor(
+ ContextCompat.getColor(
+ it,
+ R.color.dark_gray
+ )
+ )
+ binding.resendOtpTv.setTextColor(
+ ContextCompat.getColor(
+ it,
+ R.color.dark_gray
+ )
+ )
+ binding.otpOncallTv.setTextColor(
+ ContextCompat.getColor(
+ it,
+ R.color.dark_gray
+ )
+ )
+ binding.resendOtpTv.setCompoundDrawablesWithIntrinsicBounds(
+ R.drawable.ic_resend_new_theme,
+ 0,
+ 0,
+ 0,
+ )
+ binding.otpOncallTv.setCompoundDrawablesWithIntrinsicBounds(
+ R.drawable.ic_call_new_theme,
+ 0,
+ 0,
+ 0,
+ )
+ binding.editNumberTv.setCompoundDrawablesWithIntrinsicBounds(
+ 0,
+ 0,
+ 0,
+ 0,
+ )
+ }
+ }
}
private fun startCountDownTimer() {
@@ -252,7 +344,7 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
override fun onClick(view: View?) {
when (view?.id) {
R.id.resend_otp_tv -> resendOtp()
- R.id.edit_number_tv -> editNumber()
+ R.id.edit_number_tv, R.id.tvEditNumberTitle -> editNumber()
R.id.verify_otp_btn -> verifyOtp()
binding.otpOncallTv.id -> callOtpOnCall()
}
@@ -340,6 +432,7 @@ class OtpFragment : BaseFragment(), View.OnClickListener {
otpRequest,
density = getDensityName(context = requireContext()).orEmpty(),
connectivityType = getNetworkType(context = requireContext()),
+ permissionGranted = isAllMandatoryPermissionGranted(activity = requireActivity())
)
}
}
diff --git a/app/src/main/java/com/naviapp/registration/OtpFragmentV2.kt b/app/src/main/java/com/naviapp/registration/OtpFragmentV2.kt
index c6fdd2a04d..e19ff24c10 100644
--- a/app/src/main/java/com/naviapp/registration/OtpFragmentV2.kt
+++ b/app/src/main/java/com/naviapp/registration/OtpFragmentV2.kt
@@ -369,7 +369,8 @@ class OtpFragmentV2 : BaseFragment(), View.OnClickListener {
otpRequest,
density = getDensityName(context = requireContext()).orEmpty(),
connectivityType = getNetworkType(context = requireContext()),
- showMessageOnFragment = true
+ showMessageOnFragment = true,
+ permissionGranted = isAllMandatoryPermissionGranted(requireActivity())
)
}
}
diff --git a/app/src/main/java/com/naviapp/registration/RegistrationActivity.kt b/app/src/main/java/com/naviapp/registration/RegistrationActivity.kt
index 5565670eed..63d7e9d60b 100644
--- a/app/src/main/java/com/naviapp/registration/RegistrationActivity.kt
+++ b/app/src/main/java/com/naviapp/registration/RegistrationActivity.kt
@@ -1,6 +1,6 @@
/*
*
- * * Copyright © 2019-2022 by Navi Technologies Limited
+ * * Copyright © 2019-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
@@ -34,6 +34,8 @@ import com.navi.base.utils.BaseUtils
import com.navi.base.utils.orFalse
import com.navi.base.utils.orZero
import com.navi.common.firebasedb.FirebaseStatusType.SUCCESS
+import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
+import com.navi.common.managers.PermissionsManager
import com.navi.common.model.DeviceDetail
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.WifiDetails
@@ -90,6 +92,7 @@ class RegistrationActivity :
private lateinit var binding: RegistrationActivityBinding
private val registrationVM by lazy { ViewModelProvider(this).get(RegistrationVM::class.java) }
private val otpReceiver by lazy { SmsAutoReadReceiver() }
+ private val permissionsManager by lazy { PermissionsManager(this) }
private val registrationSharedVM by lazy {
ViewModelProvider(this).get(RegistrationSharedVM::class.java)
}
@@ -100,6 +103,7 @@ class RegistrationActivity :
private var grootReferenceId: String? = null
private var channel: String? = null
private lateinit var redirectStatus: String
+ private var isOldHomePageEnabled: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -108,6 +112,8 @@ class RegistrationActivity :
channel = intent.getStringExtra(Constants.CHANNEL)
grootReferenceId = intent.getStringExtra(Constants.IDENTIFIER)
super.setContentView(binding.root)
+ isOldHomePageEnabled =
+ FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.OLD_HOME_PAGE_THEME)
redirectStatus = intent.getStringExtra(REDIRECT_STATUS) ?: LOGIN_SCREEN
isTrueCallerEnabled = PreferenceManager.getBooleanPreference(TRUECALLER_ENABLED).orFalse()
if (redirectStatus != AUTH_VIA_LINK) {
@@ -136,7 +142,7 @@ class RegistrationActivity :
) {
randomRequestId = getUniqueRandomNumber()
FcmAnalyticsUtil.analytics.setCrashlyticRandomRequestId(randomRequestId)
- TrueCallerHelper.init(this, this, randomRequestId)
+ TrueCallerHelper.init(this, this, randomRequestId, isOldHomePageThemeEnabled = isOldHomePageEnabled)
}
initListener()
initError(registrationVM, showNewDesignSystemFragment = true)
@@ -181,6 +187,7 @@ class RegistrationActivity :
otpRequest,
density = getDensityName(context = this).orEmpty(),
connectivityType = getNetworkType(context = this),
+ permissionGranted = isAllMandatoryPermissionGranted(this)
)
}
@@ -406,7 +413,8 @@ class RegistrationActivity :
registrationVM.loginViaTrueCaller(
otpRequest = otpRequest,
density = getDensityName(context = this).orEmpty(),
- connectivityType = getNetworkType(context = this)
+ connectivityType = getNetworkType(context = this),
+ permissionGranted = isAllMandatoryPermissionGranted(this)
)
}
@@ -429,7 +437,7 @@ class RegistrationActivity :
override fun onFragmentOpen(type: String?) {
if (!TrueCallerHelper.isInit()) {
- TrueCallerHelper.init(this, this)
+ TrueCallerHelper.init(this, this, isOldHomePageThemeEnabled = isOldHomePageEnabled)
}
if (TruecallerSDK.getInstance().isUsable) {
TruecallerSDK.getInstance().getUserProfile(this)
@@ -556,7 +564,7 @@ class RegistrationActivity :
private fun goToNextScreen(nextCta: CtaData?) {
updateFCMToken()
- nextCta?.let { cta -> NaviDeepLinkNavigator.navigate(this, cta, true, clearTask = true, bundle = intent.extras ?: Bundle()) }
+ nextCta?.let { cta -> navigate(cta) }
?: run {
callingActivity?.let {
setResult(Activity.RESULT_OK, intent)
@@ -571,6 +579,14 @@ class RegistrationActivity :
}
}
+ private fun navigate(cta: CtaData) {
+ if (cta.url == NaviDeepLinkNavigator.MANDATE_PERMISSION && isAllMandatoryPermissionGranted(permissionsManager)) {
+ NaviDeepLinkNavigator.navigate(this, CtaData(url = NaviDeepLinkNavigator.HOME), true, clearTask = true, bundle = intent.extras ?: Bundle())
+ } else {
+ NaviDeepLinkNavigator.navigate(this, cta, true, clearTask = true, bundle = intent.extras ?: Bundle())
+ }
+ }
+
private fun updateCommunicationMediums() {
val whatsappEnabled = PreferenceManager.getBooleanPreference(WHATSAPP_COMMUNICATION_ENABLED)
val eventTracker = NaviAnalytics.naviAnalytics.Whatsapp()
diff --git a/app/src/main/java/com/naviapp/registration/SplashActivity.kt b/app/src/main/java/com/naviapp/registration/SplashActivity.kt
index 370ea254d1..d87da2a8b5 100644
--- a/app/src/main/java/com/naviapp/registration/SplashActivity.kt
+++ b/app/src/main/java/com/naviapp/registration/SplashActivity.kt
@@ -52,13 +52,12 @@ import com.navi.common.managers.PermissionsManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.PushNotificationData
import com.navi.common.ui.activity.BaseActivity
+import com.navi.common.utils.*
import com.navi.common.utils.Constants.LIST_OF_PERMISSION
import com.navi.common.utils.Constants.LOGIN_SOURCE
+import com.navi.common.utils.Constants.PERMISSION_PREFIX
import com.navi.common.utils.Constants.SHOW_INVESTMENT_ON_BOTTOM_NAV
-import com.navi.common.utils.getScreenRefreshRate
-import com.navi.common.utils.getSessionId
-import com.navi.common.utils.getWifiAddress
-import com.navi.common.utils.observeNullable
+import com.navi.common.utils.Constants.SKIP_PERMISSION_SCREEN
import com.navi.naviwidgets.utils.CURRENT_VERSION_IN_STORE
import com.naviapp.BuildConfig
import com.naviapp.R
@@ -75,6 +74,7 @@ import com.naviapp.common.navigator.NaviDeepLinkNavigator.CHAT_ACTIVITY
import com.naviapp.common.navigator.NaviDeepLinkNavigator.HOME
import com.naviapp.common.navigator.ScreenNavigator
import com.naviapp.common.navigator.ScreenNavigator.Companion.PERMISSION_SCREEN
+import com.naviapp.common.navigator.ScreenNavigator.Companion.PROMOTION_SCREEN
import com.naviapp.common.transformer.AppLoadTimerMapper
import com.naviapp.databinding.ActivitySplashScreenBinding
import com.naviapp.manager.UserDataUploadManager
@@ -87,6 +87,7 @@ import com.naviapp.registration.viewmodel.ConfigVM
import com.naviapp.registration.viewmodel.RegistrationVM
import com.naviapp.services.KillAppInBackgroundService
import com.naviapp.utils.*
+import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.CLICKED_BRANCH_LINK
import com.naviapp.utils.Constants.DEEPLINK
import com.naviapp.utils.Constants.DEEPLINK_JSON_OBJECT
@@ -149,6 +150,7 @@ class SplashActivity : BaseActivity(), DeepLinkListener {
}
binding = DataBindingUtil.setContentView(this, R.layout.activity_splash_screen)
super.setContentView(binding.root)
+ PreferenceManager.setBooleanPreference(SKIP_PERMISSION_SCREEN, false)
initAnimation()
sendDeeplinkEvent()
startAppKillInBackgroundService()
@@ -315,12 +317,14 @@ class SplashActivity : BaseActivity(), DeepLinkListener {
private fun fetchConfigData() {
configVM.getGaId()
configVM.fetchFireBaseInstanceId()
- if (BaseUtils.isUserLoggedIn()) {
+ if (BaseUtils.isUserLoggedIn() && isAllMandatoryPermissionGranted(permissionsManager)) {
configVM.fetchHomeScreens(
PreferenceManager.getIntPreferenceApp(
CURRENT_VERSION_IN_STORE
),
- isSecondaryAppAvailable
+ isSecondaryAppAvailable,
+ true,
+ getInstalledDynamicModulesCommaSeparated()
)
}
}
@@ -346,6 +350,16 @@ class SplashActivity : BaseActivity(), DeepLinkListener {
private fun loginSettingsObserver() {
configVM.loginSettings.observeNullable(this) {
+ it?.requiredPermissions?.let {permissions ->
+ val listOfPermissions = ArrayList()
+ permissions.forEach { permission ->
+ listOfPermissions.add(PERMISSION_PREFIX + permission)
+ }
+ PreferenceManager.setHashSet(
+ LIST_OF_PERMISSION,
+ listOfPermissions.toHashSet()
+ )
+ }
it?.migration?.let { migrationResponse ->
canNavigateNextScreen = migrationResponse.migrate?.not() ?: true
redirectToFpsApp = it.redirectToOtherApp ?: false
@@ -582,6 +596,12 @@ class SplashActivity : BaseActivity(), DeepLinkListener {
ScreenNavigator.REGISTRATION_SCREEN,
bundle
)
+ } else if (isUserNotExitedPromotionScreen()) {
+ ScreenNavigator.instance.startActivityWithNoActivityStack(
+ this,
+ PROMOTION_SCREEN,
+ clearTask = isTaskRoot.not()
+ )
} else if (listOfPermissions.isNullOrEmpty().not() &&
!permissionsManager.hasPermissions(listOfPermissions?.toTypedArray()!!)
) {
diff --git a/app/src/main/java/com/naviapp/registration/WhatsAppLoginFragment.kt b/app/src/main/java/com/naviapp/registration/WhatsAppLoginFragment.kt
index e89a2a8512..e7a6cde8da 100644
--- a/app/src/main/java/com/naviapp/registration/WhatsAppLoginFragment.kt
+++ b/app/src/main/java/com/naviapp/registration/WhatsAppLoginFragment.kt
@@ -54,6 +54,7 @@ class WhatsAppLoginFragment : BaseFragment(), View.OnClickListener {
private var isCheckBoxNeedToShow = true
private var isNoCallDisclaimerEnabled = false
private var whatsAppLoginConfig: WhatsappLoginConfig? = null
+ private var isOldHomePageEnabled: Boolean = false
override fun onCreateView(
inflater: LayoutInflater,
@@ -81,9 +82,15 @@ class WhatsAppLoginFragment : BaseFragment(), View.OnClickListener {
WHATS_APP_LOGIN_CONFIG,
WhatsappLoginConfig::class.java
)
+ readArguments()
initUi()
}
+ private fun readArguments() {
+ isOldHomePageEnabled =
+ FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.OLD_HOME_PAGE_THEME)
+ }
+
private fun initUi() {
var tncTxt: String? = null
source?.let { loginSource ->
@@ -181,13 +188,20 @@ class WhatsAppLoginFragment : BaseFragment(), View.OnClickListener {
binding.loginBtn.isVisible = FirebaseRemoteConfigHelper.getBoolean(
ENABLE_OTP_LOGIN_ON_WHATSAPP_PAGE
).orTrue()
- binding.otpLessBtn.isVisible = whatsAppLoginConfig?.otpLess == true
- binding.whatsappLayout.isVisible = (whatsAppLoginConfig?.otpLess == true).not()
+ binding.otpLessBtn.isVisible = (whatsAppLoginConfig?.otpLess == true).not()
+ binding.whatsappLayout.isVisible = (whatsAppLoginConfig?.otpLess == true)
binding.otpLessBtn.setResultCallback { otpLessResponse ->
otpLessResponse?.let {
registrationVM.saveWaIdOtpLess( otpLessResponse.waId.orEmpty())
}
}
+ if (isOldHomePageEnabled.not()) {
+ context?.let {
+ binding.nextIcon.setImageDrawable(ContextCompat.getDrawable(it, R.drawable.ic_whatsapp_right_arrow))
+ binding.termsConditionsTv.setTextColor(ContextCompat.getColor(it, R.color.description_color_seven))
+ binding.termsConditionsTv.setLinkTextColor(ContextCompat.getColor(it, R.color.description_color_seven))
+ }
+ }
}
private fun openWhatsApp() {
diff --git a/app/src/main/java/com/naviapp/registration/helper/TrueCallerHelper.kt b/app/src/main/java/com/naviapp/registration/helper/TrueCallerHelper.kt
index 329111a841..16fe8ba791 100644
--- a/app/src/main/java/com/naviapp/registration/helper/TrueCallerHelper.kt
+++ b/app/src/main/java/com/naviapp/registration/helper/TrueCallerHelper.kt
@@ -20,19 +20,19 @@ object TrueCallerHelper {
private var isInit: Boolean? = null
- fun init(context: Context, tcCallBack: ITrueCallback, requestId: String? = null) {
- initImpl(context, tcCallBack, requestId)
+ fun init(context: Context, tcCallBack: ITrueCallback, requestId: String? = null, isOldHomePageThemeEnabled: Boolean) {
+ initImpl(context, tcCallBack, requestId, isOldHomePageThemeEnabled)
}
- private fun initImpl(context: Context, tcCallBack: ITrueCallback, requestId: String? = null) {
+ private fun initImpl(context: Context, tcCallBack: ITrueCallback, requestId: String? = null, isOldHomePageThemeEnabled: Boolean) {
try {
val trueScope = TruecallerSdkScope.Builder(context, tcCallBack)
.consentMode(TruecallerSdkScope.CONSENT_MODE_BOTTOMSHEET)
- .buttonColor(context.resources.getColor(R.color.outrageous_orange))
+ .buttonColor(context.resources.getColor(if (isOldHomePageThemeEnabled.not()) R.color.color_1F002A else R.color.outrageous_orange))
.buttonTextColor(context.resources.getColor(R.color.white))
// .privacyPolicyUrl("https://navi-tnc-privacy-policy-resources.s3.ap-south-1.amazonaws.com/privacy_policy/index.html")
//.termsOfServiceUrl("https://navi-tnc-privacy-policy-resources.s3.ap-south-1.amazonaws.com/privacy_policy/index.html")
- .buttonShapeOptions(TruecallerSdkScope.BUTTON_SHAPE_ROUNDED)
+ .buttonShapeOptions(if (isOldHomePageThemeEnabled.not()) TruecallerSdkScope.BUTTON_SHAPE_RECTANGLE else TruecallerSdkScope.BUTTON_SHAPE_ROUNDED)
.footerType(TruecallerSdkScope.FOOTER_TYPE_CONTINUE)
.consentTitleOption(TruecallerSdkScope.SDK_CONSENT_TITLE_LOG_IN)
.sdkOptions(TruecallerSdkScope.SDK_OPTION_WITHOUT_OTP) // isUsable can be true/false with SDK_OPTION_WITHOUT_OTP but only true for SDK_OPTION_WITH_OTP
diff --git a/app/src/main/java/com/naviapp/registration/repositories/RegisterRepository.kt b/app/src/main/java/com/naviapp/registration/repositories/RegisterRepository.kt
index ba105b8b0d..cb3fdfaf8d 100644
--- a/app/src/main/java/com/naviapp/registration/repositories/RegisterRepository.kt
+++ b/app/src/main/java/com/naviapp/registration/repositories/RegisterRepository.kt
@@ -23,13 +23,19 @@ class RegisterRepository : ResponseCallback() {
suspend fun submitPhoneNumber(loginRequest: LoginRequest) =
apiResponseCallback(superAppRetrofitService().submitPhoneNumber(loginRequest))
- suspend fun verifyOtp(otpRequest: OtpRequest, density: String, connectivityType: String) =
+ suspend fun verifyOtp(
+ otpRequest: OtpRequest,
+ density: String,
+ connectivityType: String,
+ permissionGranted: Boolean
+ ) =
apiResponseCallback(
superAppRetrofitService()
.submitOTP(
otpRequest = otpRequest,
deviceDensity = density,
- connectivityType = connectivityType
+ connectivityType = connectivityType,
+ permissionGranted = permissionGranted
)
)
diff --git a/app/src/main/java/com/naviapp/registration/viewmodel/ConfigVM.kt b/app/src/main/java/com/naviapp/registration/viewmodel/ConfigVM.kt
index 96b874e6ff..8b9079c85b 100644
--- a/app/src/main/java/com/naviapp/registration/viewmodel/ConfigVM.kt
+++ b/app/src/main/java/com/naviapp/registration/viewmodel/ConfigVM.kt
@@ -146,11 +146,22 @@ class ConfigVM @Inject constructor(
}
}
- fun fetchHomeScreens(availableAppVersionCode: Int?, isSecondaryAppAvailable: Boolean) {
+ fun fetchHomeScreens(
+ availableAppVersionCode: Int?,
+ isSecondaryAppAvailable: Boolean,
+ isPermissionGranted: Boolean,
+ installedModules: String
+ ) {
viewModelScope.launch(Dispatchers.IO) {
homeRepoHelper.fetchBottomNavData()
homeRepoHelper.fetchHome(
- null, null, null, availableAppVersionCode, isSecondaryAppAvailable
+ null,
+ null,
+ null,
+ availableAppVersionCode,
+ isSecondaryAppAvailable,
+ isPermissionGranted,
+ installedModules
)
homeRepoHelper.fetchDashboard()
homeRepoHelper.fetchInvestmentTab()
diff --git a/app/src/main/java/com/naviapp/registration/viewmodel/RegistrationVM.kt b/app/src/main/java/com/naviapp/registration/viewmodel/RegistrationVM.kt
index aff3154a2b..fec96df874 100644
--- a/app/src/main/java/com/naviapp/registration/viewmodel/RegistrationVM.kt
+++ b/app/src/main/java/com/naviapp/registration/viewmodel/RegistrationVM.kt
@@ -175,14 +175,16 @@ class RegistrationVM(private val registerRepository: RegisterRepository = Regist
otpRequest: OtpRequest,
density: String,
connectivityType: String,
- showMessageOnFragment: Boolean? = null
+ showMessageOnFragment: Boolean? = null,
+ permissionGranted: Boolean
) {
coroutineScope.launch {
val response =
registerRepository.verifyOtp(
otpRequest = otpRequest,
density = density,
- connectivityType = connectivityType
+ connectivityType = connectivityType,
+ permissionGranted = permissionGranted
)
Timber.i("otp data $response")
when {
@@ -210,14 +212,16 @@ class RegistrationVM(private val registerRepository: RegisterRepository = Regist
fun verifyDeepLinkAuth(
otpRequest: OtpRequest,
density: String,
- connectivityType: String
+ connectivityType: String,
+ permissionGranted: Boolean
) {
coroutineScope.launch {
val response =
registerRepository.verifyOtp(
otpRequest = otpRequest,
density = density,
- connectivityType = connectivityType
+ connectivityType = connectivityType,
+ permissionGranted = permissionGranted
)
if (response.error == null && !response.data?.authToken.isNullOrEmpty()) {
BaseUtils.saveSessionToken(response.data?.sessionToken.orEmpty())
@@ -242,14 +246,16 @@ class RegistrationVM(private val registerRepository: RegisterRepository = Regist
fun loginViaTrueCaller(
otpRequest: OtpRequest,
density: String,
- connectivityType: String
+ connectivityType: String,
+ permissionGranted: Boolean
) {
coroutineScope.launch {
val response =
registerRepository.verifyOtp(
otpRequest = otpRequest,
density = density,
- connectivityType = connectivityType
+ connectivityType = connectivityType,
+ permissionGranted = permissionGranted
)
when {
response.error == null && !response.data?.authToken.isNullOrEmpty() -> {
diff --git a/app/src/main/java/com/naviapp/utils/Constants.kt b/app/src/main/java/com/naviapp/utils/Constants.kt
index 8ca819cce1..fab6c9a13d 100644
--- a/app/src/main/java/com/naviapp/utils/Constants.kt
+++ b/app/src/main/java/com/naviapp/utils/Constants.kt
@@ -105,6 +105,7 @@ object Constants {
const val FAQ_HOME_LOAN = "Home Loan"
const val FAQ_PERSONAL_LOAN = "Personal Loan"
const val WIDGET_ID = "WIDGET_ID"
+ const val IS_SOFT_REJECT = "softReject"
const val DATE_FORMAT = "dd/MM/yyyy"
const val DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd"
const val DAY_OF_MONTH_FORMAT = "d"
@@ -188,6 +189,7 @@ object Constants {
const val LOAN_ACCOUNT_NUMBER_DATA = "LOAN_ACCOUNT_NUMBER_DATA"
const val PROFESSION_TYPE = "PROFESSION_TYPE"
const val ACTION = "action"
+ const val UNINSTALL = "uninstall"
const val STAGE_KEY = "stage"
const val RETURN_URL = "returnUrl"
const val SERVICE_PROVIDER = "serviceProvider"
@@ -309,6 +311,8 @@ object Constants {
const val FRESH_LOAN_DETAILS_FLOW = "FRESH_LOAN_DETAILS_FLOW"
const val OFFER_GENERATION_FLOW = "OFFER_GENERATION"
const val OFFER_UPGRADE_FLOW = "OFFER_UPGRADE"
+ const val OFFER_IN_REVIEW = "OFFER_IN_REVIEW"
+ const val BASIC_DETAILS_V2 = "BASIC_DETAILS_V2"
const val EXPIRY_TIME_IN_MIN = "expiryTimeInMinutes"
const val NOTIFICATION_SENT_TIME = "notificationSentTimeInUTC"
const val SOURCE = "source"
@@ -455,6 +459,30 @@ object Constants {
const val APP_ACTION_OBJECTIVE_REWARDS_CAMPAIGN_ONBOARD = "REWARDS_CAMPAIGN_ONBOARD"
+ const val LOAN_OFFER_UPGRADE_V2 = "LOAN_OFFER_UPGRADE_V2"
+ const val BANK_DETAILS_V2 = "BANK_DETAILS_V2"
+ const val UPI_STATUS_V2 = "UPI_STATUS_V2"
+ const val BANK_DETAILS_AUTO_DEBIT_V2 = "BANK_DETAILS_AUTO_DEBIT_V2"
+ const val SUMMARY_SCREEN_V2 = "SUMMARY_SCREEN_V2"
+ const val KYC_V2 = "KYC_V2"
+ const val LOAN_AGREEMENT_V2 = "LOAN_AGREEMENT_V2"
+ const val MONEY_DISBURSEMENT_STATUS_V2 = "MONEY_DISBURSEMENT_STATUS_V2"
+ const val BANK_STATEMENT_V2 = "BANK_STATEMENT_V2"
+ const val BANK_STATEMENT_VERIFICATION_V2 = "BANK_STATEMENT_VERIFICATION_V2"
+ const val NO_ADDRESS_SELECTED_BOTTOM_SHEET = "NO_ADDRESS_SELECTED_BOTTOM_SHEET"
+ const val SCROLL_TO_WIDGET_POSITION = "SCROLL_TO_WIDGET_POSITION"
+ const val EVENT_NAME = "EVENT_NAME"
+ const val ACTIVITY_CLASS_PATH = "ACTIVITY_CLASS_PATH"
+ const val NEEDS_RESULT = "NEEDS_RESULT"
+ const val CLEAR_TASK = "CLEAR_TASK"
+ const val REQUEST_CODE = "REQUEST_CODE"
+ const val PL_DYNAMIC_MODULE_NAME = "navi_pl_dynamic"
+ const val LOAN_OFFER_EXPIRED = "LOAN_OFFER_EXPIRED"
+ const val SYSTEM_UNDER_MAINTENANCE = "SYSTEM_UNDER_MAINTENANCE"
+ const val REDIRECT_DATA = "REDIRECT_DATA"
+ const val ERROR_DATA = "ERROR_DATA"
+ const val REJECTION_DATA = "REJECTION_DATA"
+
enum class JourneyType(val type: String) {
POST_PURCHASE("post_purchase")
}
diff --git a/app/src/main/java/com/naviapp/utils/Ext.kt b/app/src/main/java/com/naviapp/utils/Ext.kt
index 004e224705..372209683c 100644
--- a/app/src/main/java/com/naviapp/utils/Ext.kt
+++ b/app/src/main/java/com/naviapp/utils/Ext.kt
@@ -43,6 +43,7 @@ import com.navi.base.model.CtaData
import com.navi.base.sharedpref.CommonPrefConstants
import com.navi.base.sharedpref.PreferenceManager
import com.navi.base.utils.BaseUtils
+import com.navi.base.utils.orTrue
import com.navi.common.managers.PermissionsManager
import com.navi.common.model.Money
import com.navi.common.utils.Constants
@@ -574,13 +575,21 @@ fun getBaseUrl(): String {
return BuildConfig.BASE_URL
}
fun isAllMandatoryPermissionGranted(activity: Activity): Boolean {
+ return isAllMandatoryPermissionGranted(PermissionsManager(activity))
+}
+
+fun isAllMandatoryPermissionGranted(permissionsManager: PermissionsManager?): Boolean {
val listOfPermissions = PreferenceManager.getHashSet(Constants.LIST_OF_PERMISSION)
- val permissionsManager = PermissionsManager(activity)
return listOfPermissions?.let {
- permissionsManager.hasPermissions(it.toTypedArray())
+ permissionsManager?.hasPermissions(it.toTypedArray()).orTrue()
} ?: run { true }
}
+fun isUserNotExitedPromotionScreen() =
+ PreferenceManager.getBooleanPreference(Constants.PROMOTION_SCREEN_VISITED, false) &&
+ PreferenceManager.getBooleanPreference(Constants.PROMOTION_SCREEN_CTA_CLICKED, false)
+ .not()
+
fun isSecondaryCtaAvailable(metadata: JSONObject?): Boolean {
return metadata?.optString(Constants.SECONDARY_URL).isNullOrEmpty().not()
}
diff --git a/app/src/main/java/com/naviapp/utils/MockUtil.kt b/app/src/main/java/com/naviapp/utils/MockUtil.kt
index 6b20357a6b..09eb83c35b 100644
--- a/app/src/main/java/com/naviapp/utils/MockUtil.kt
+++ b/app/src/main/java/com/naviapp/utils/MockUtil.kt
@@ -22,9 +22,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.uitron.deserializer.BaseUiTronTriggerApiActionDeserializer
import com.navi.uitron.deserializer.ComposePropertyDeserializer
import com.navi.uitron.deserializer.UiTronDataDeserializer
import com.navi.uitron.deserializer.UiTronValidationDeserializer
+import com.navi.uitron.model.UiTronResponse
+import com.navi.uitron.model.action.TriggerApiAction
import com.navi.uitron.model.data.UiTronAction
import com.navi.uitron.model.data.UiTronData
import com.navi.uitron.model.ui.BaseProperty
@@ -54,3 +57,25 @@ fun mockApiResponse(
.create()
return RepoResult(customGson.fromJson(jsonElement, type))
}
+
+fun mockApiResponse2(
+ type: Type,
+ jsonKey: String,
+ source: Int = R.raw.mock
+): RepoResult {
+ val inputStream = NaviApplication.instance.resources.openRawResource(source)
+ val dataString = String(inputStream.readBytes(), StandardCharsets.UTF_8)
+ val jsonElement = (JsonParser.parseString(dataString) as? JsonObject)?.get(jsonKey)
+ val customGson =
+ GsonBuilder()
+ .registerTypeAdapter(UiTronData::class.java, UiTronDataDeserializer())
+ .registerTypeAdapter(UiTronBaseValidation::class.java, UiTronValidationDeserializer())
+ .registerTypeAdapter(BaseProperty::class.java, ComposePropertyDeserializer())
+ .registerTypeAdapter(UiTronAction::class.java, UiTronActionDeserializer())
+ .registerTypeAdapter(
+ TriggerApiAction::class.java,
+ BaseUiTronTriggerApiActionDeserializer()
+ )
+ .create()
+ return RepoResult(customGson.fromJson(jsonElement, type))
+}
diff --git a/app/src/main/java/com/naviapp/utils/Utility.kt b/app/src/main/java/com/naviapp/utils/Utility.kt
index 40a5be1df4..e179795efd 100644
--- a/app/src/main/java/com/naviapp/utils/Utility.kt
+++ b/app/src/main/java/com/naviapp/utils/Utility.kt
@@ -62,12 +62,13 @@ import com.naviapp.models.ColorData
import com.naviapp.models.RedirectPageStatus
import com.naviapp.models.response.WidgetConfig
import com.naviapp.models.response.WidgetConfigLayoutParams
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity.Companion.ERROR_DATA
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity.Companion.REDIRECT_DATA
+import com.naviapp.common.navigator.NaviDeepLinkNavigator.ERROR_V2
+import com.naviapp.common.navigator.NaviDeepLinkNavigator.getPersonalLoanDynamicModuleIntent
+import com.naviapp.permission.activities.MandatePermissionActivity
import com.naviapp.personalloanrevamp.models.response.BottomSheetConfig
import com.naviapp.registration.SplashActivity
import com.naviapp.utils.Constants.ATLEAST_ONE_ALPHANUMERIC
+import com.naviapp.utils.Constants.ERROR_DATA
import com.naviapp.utils.Constants.HYPERVERGE_FILES_PATH
import com.naviapp.utils.Constants.INDIAN_COUNTRY_CODE
import com.naviapp.utils.Constants.MINIMUM_NUMBER_OF_CHARACTERS_IN_NAME
@@ -77,6 +78,7 @@ import com.naviapp.utils.Constants.NAVI_PACKAGE_FPS
import com.naviapp.utils.Constants.NAVI_PACKAGE_FPS_NON_PROD
import com.naviapp.utils.Constants.NAVI_PACKAGE_NON_PROD
import com.naviapp.utils.Constants.PLAY_STORE_REQUEST_CODE
+import com.naviapp.utils.Constants.REDIRECT_DATA
import com.naviapp.utils.Constants.UTF_8
import com.naviapp.utils.Constants.VALID_COMPANY_NAME_REGEX
import com.naviapp.utils.Constants.VALID_NAME_REGEX
@@ -137,7 +139,7 @@ fun deleteCacheAndOpenLoginPage(context: Context = NaviApplication.instance) {
}
}
-fun clearHypervergeData(){
+fun clearHypervergeData() {
try {
val file =
File(ContextWrapper(NaviApplication.instance).applicationInfo.dataDir + HYPERVERGE_FILES_PATH)
@@ -152,10 +154,10 @@ fun clearHypervergeData(){
fun handleError(errors: List?, redirectPageStatus: RedirectPageStatus?) {
val context = NaviApplication.instance.applicationContext
val intent =
- /*if (errors?.firstOrNull()?.isNewJourneyCustomer.orFalse())
- Intent(context, ErrorScreenV2Activity::class.java)
- else Intent(context, ErrorActivity::class.java)*/
- Intent(context, ErrorScreenV2Activity::class.java)
+ getPersonalLoanDynamicModuleIntent(
+ context = context,
+ url = ERROR_V2
+ )
intent.putExtra(ERROR_DATA, errors?.firstOrNull())
intent.putExtra(REDIRECT_DATA, redirectPageStatus)
intent.addFlags(
@@ -942,3 +944,19 @@ fun toOpenBottomSheet(url: String?): Boolean {
return false
}
}
+
+fun launchPermissionActivity(activity: Activity, addIntentFlags: Boolean = false, finish: Boolean = true, normalFlow: Boolean = false) {
+ val intent = Intent(activity, MandatePermissionActivity::class.java)
+ intent.putExtra(MandatePermissionActivity.NORMAL_PERMISSION_FLOW, normalFlow)
+ if (addIntentFlags) {
+ intent.addFlags(
+ Intent.FLAG_ACTIVITY_NEW_TASK or
+ Intent.FLAG_ACTIVITY_CLEAR_TASK or
+ Intent.FLAG_ACTIVITY_CLEAR_TOP
+ )
+ }
+ activity.startActivity(intent)
+ if (finish) {
+ activity.finish()
+ }
+}
diff --git a/app/src/main/res/drawable/bg_lottie_dance_floor.xml b/app/src/main/res/drawable/bg_lottie_dance_floor.xml
new file mode 100644
index 0000000000..0023769c8e
--- /dev/null
+++ b/app/src/main/res/drawable/bg_lottie_dance_floor.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/finserv_logo_purple.xml b/app/src/main/res/drawable/finserv_logo_purple.xml
new file mode 100644
index 0000000000..0d99a4b467
--- /dev/null
+++ b/app/src/main/res/drawable/finserv_logo_purple.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/finserv_logo_white.xml b/app/src/main/res/drawable/finserv_logo_white.xml
new file mode 100644
index 0000000000..8471792c09
--- /dev/null
+++ b/app/src/main/res/drawable/finserv_logo_white.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_purple_checkbox.xml b/app/src/main/res/drawable/ic_purple_checkbox.xml
new file mode 100644
index 0000000000..a5851421f5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_purple_checkbox.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_dynamic_delivery.xml b/app/src/main/res/layout/activity_dynamic_delivery.xml
new file mode 100644
index 0000000000..cb2c19f35f
--- /dev/null
+++ b/app/src/main/res/layout/activity_dynamic_delivery.xml
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_login_permission.xml b/app/src/main/res/layout/activity_login_permission.xml
index be6d430501..da22b479a0 100644
--- a/app/src/main/res/layout/activity_login_permission.xml
+++ b/app/src/main/res/layout/activity_login_permission.xml
@@ -13,14 +13,14 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/white"
tools:context=".permission.activities.MandatePermissionActivity">
@@ -43,6 +42,9 @@
android:id="@+id/rvContent"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_0"
+ android:background="@color/white"
+ android:clipChildren="false"
+ android:clipToPadding="false"
android:paddingStart="@dimen/dp_16"
android:paddingEnd="@dimen/dp_16"
app:layout_constraintBottom_toTopOf="@id/rvFooter"
@@ -54,6 +56,8 @@
android:id="@+id/rvFooter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@drawable/ic_background_gradient_white"
+ android:paddingTop="@dimen/dp_16"
android:paddingStart="@dimen/dp_16"
android:paddingEnd="@dimen/dp_16"
app:layout_constraintBottom_toBottomOf="parent"
diff --git a/app/src/main/res/layout/activity_permission_v2.xml b/app/src/main/res/layout/activity_permission_v2.xml
index 3fb2f612c3..e6c640e977 100644
--- a/app/src/main/res/layout/activity_permission_v2.xml
+++ b/app/src/main/res/layout/activity_permission_v2.xml
@@ -11,10 +11,6 @@
-
-
@@ -53,42 +49,20 @@
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/header_description_view" />
-
+ app:layout_constraintTop_toBottomOf="@id/permission_denied_layout_v2" />
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/app_settings_items.xml b/app/src/main/res/layout/app_settings_items.xml
new file mode 100644
index 0000000000..2402a2e11d
--- /dev/null
+++ b/app/src/main/res/layout/app_settings_items.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_home_ln.xml b/app/src/main/res/layout/fragment_home_ln.xml
index e8a837c2c7..5bb30deba0 100644
--- a/app/src/main/res/layout/fragment_home_ln.xml
+++ b/app/src/main/res/layout/fragment_home_ln.xml
@@ -83,7 +83,7 @@
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/ic_scroll_nudge" />
+
+
diff --git a/app/src/main/res/layout/otp_fragment.xml b/app/src/main/res/layout/otp_fragment.xml
index 2dadd79d5f..e988f38bee 100644
--- a/app/src/main/res/layout/otp_fragment.xml
+++ b/app/src/main/res/layout/otp_fragment.xml
@@ -49,6 +49,20 @@
app:layout_constraintTop_toBottomOf="@+id/enter_otp_tv"
app:layout_constraintTop_toTopOf="@+id/enter_otp_tv" />
+
+
-
+ app:layout_constraintTop_toBottomOf="@id/otp_layout"
+ tools:visibility="visible" />
-
+ app:layout_constraintTop_toBottomOf="@id/countdown_timer_tv"
+ tools:visibility="visible" />
EMI Amount
We collect and monitor only your non personal messages related to bank transactions, names of the transacting parties, a description of transaction and amount of transaction for the purpose of performing credit risk assessment. No personal SMS data is collected, read or stored.
Helps understand your financial profile
+ Customised product recommendations based on your financial behaviour.
Installed Apps
We collect each installed applications’ metadata information which includes the application name, package name, installed time, updated time, version name and version code of each installed application on your device to assess your credit worthiness by analyzing the type of apps you use and provide you with pre-approved customized loan offers.
Location
We collect and monitor the information about the location of your device to provide serviceability of your loan application, to reduce the risk associated with your loan application and to provide pre-approved customized loan offers. This also helps us to verify the address, make a better credit risk decision and expedite your KYC process.
To check loan serviceability in your area
+ To complete your KYC details.
Contacts
As part of the loan journey, we collect all of your phonebook contacts which includes their contact names, phone numbers, account types, favorites (starred) and contact labels to enrich your financial profile. We use this data to determine your social network from your phonebook contacts and identify fraudulent contacts in your network. This helps us in detecting fraud loan applications and reducing credit risk.
To identify fraud within network of contacts
+ Products tailored to what\'s trending around your network.
Camera
We need your camera access to capture your selfie for identity verification and collection of scanned documents for KYC process.
Storage
@@ -115,6 +118,7 @@
Phone
Device
To collect your primary and social account information to verify your identity
+ To register this device as your trusted device.
Our app collects and monitors specific information about your device including your hardware model, RAM, storage; unique device identifiers like IMEI, serial number, SSAID; SIM information that includes network operator, roaming state, MNC and MCC codes, WIFI information that includes MAC address and mobile network information to uniquely identify the devices and ensure that no unauthorized device acts on your behalf to prevent fraud. This also helps us in enriching your credit profile and assess your creditworthiness.
Signup
@@ -429,7 +433,7 @@
Rate Us
Kindly rate your experience
Please select rating
- Get OTP via call
+ Get OTP on call
Get OTP via call
Change
You will receive otp via call
@@ -558,6 +562,14 @@
Yes. We will be sending the loan agreement to you on WhatsApp. You can also download the agreement from the \'Loan Details\' section on the app.
Will I get reminders for EMI payment?
Yes. We will send you timely reminders for payments.
+ How can I reach out to GRO?
+ Name: Sadiya Naz\nDesignation – Customer Grievance Redressal Officer\nAddress – Navi Finserv Limited, 2nd Floor, Vaishnavi Tech Square, Iballur Village, Taluk, Bagalur, Begur, Bengaluru, Karnataka 560102\nEmail – grievance@navi.com\n\nName: Abhijeet Paul\nDesignation – Customer Grievance Redressal Officer (DLA)\nAddress – Navi Technologies Limited, 9th Floor, Vaishnavi Tech Square, Iballur Village, Taluk, Bagalur, Begur, Bengaluru, Karnataka 560102\nEmail – grievance.ntl@navi.com
+ What are the Cash Loan features?
+ 1. Loan amount: Up to Rs. 20 Lakh\n2. Interest Rate: Starting from 9.9% - 45% p.a\n3. Loan Tenure: 3 to 72 months\n4. 100% digital process\n5. Instant money transfer in your bank account\n6. Minimum household income*: Rs. 3,00,000\n7. Processing Fees: Rs. 0 to Rs. 7499\n8. APR (9.9% to 90%)
+ Is Navi an NBFC?
+ The Navi App is a digital platform owned by Navi Technologies Private Limited. On the Navi App, loans are provided by Navi Finserv Private Limited (https://navi.com/finserv) which is the registered NBFC.
+ How can I lodge a complaint?
+ You can lodge complaint by emailing your request to Navi at help@navi.com
What is Auto-debit?
Auto-debit is a convenient way by which your EMIs are paid directly from your bank account without the need for you to pay them manually. This eliminates the hassles of reminders and late penalty charges.
What is eMandate? What is the difference between Auto-debit and eMandate?
@@ -833,6 +845,7 @@
₹%.2f Payment Cancelled
Ok, got it
Powered By
+ powered by
Linked
Accounts discovered for %s
Link these accounts with Onemoney to fetch bank statements
@@ -1206,10 +1219,11 @@
Please wait, we are verifying your PAN card
Redirecting to\nAccount Aggregator…
Verifying bank statement…
- Investments \u2022 Loans \u2022 Insurance
+ Investments \u2022 Loans \u2022 Insurance
Invite your friends
Sorry, no matching contacts found! please check the name and try again.
Contacts
+ EDIT
Keep Original PAN card handy with you
Original PAN card
Tap to focus
@@ -1217,4 +1231,15 @@
Move PAN card closer to the camera
Move PAN card away from the camera
Please make sure the PAN card is properly visible
+ Navi PL Dynamic Module
+ Downloading Cash loan app
+ Please don\'t close or press back
+ Please wait…\nWe are installing Cash Loan app
+ Please wait…\nWe are uninstalling Cash Loan app
+ App installed successfully!
+ %1$d%%
+ of %1$d Kb
+ #FFFFFF
+ calculating…
+ Go to settings
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index bfc2595aae..a489bb3025 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -296,7 +296,7 @@
diff --git a/navi-amc/src/main/res/layout/fund_buy_activity.xml b/navi-amc/src/main/res/layout/fund_buy_activity.xml
index 510f946fd3..1718c3ebef 100644
--- a/navi-amc/src/main/res/layout/fund_buy_activity.xml
+++ b/navi-amc/src/main/res/layout/fund_buy_activity.xml
@@ -7,7 +7,7 @@
android:layout_height="match_parent"
android:background="@color/white">
-
-
diff --git a/navi-amc/src/main/res/layout/sip_calendar_layout.xml b/navi-amc/src/main/res/layout/sip_calendar_layout.xml
index 01019860c1..0ed5066635 100644
--- a/navi-amc/src/main/res/layout/sip_calendar_layout.xml
+++ b/navi-amc/src/main/res/layout/sip_calendar_layout.xml
@@ -10,7 +10,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
- ? = null,
@SerializedName("divider") var divider: StraightLineWidget? = null,
- @SerializedName("requestConfig") val requestConfig: RequestConfig? = null
+ @SerializedName("requestConfig") val requestConfig: RequestConfig? = null,
+ @SerializedName("footerText") var footerText: TextFieldData? = null
) : Parcelable
@Parcelize
diff --git a/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt b/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt
index 4e68dbe515..e1a2407f30 100644
--- a/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt
+++ b/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt
@@ -203,6 +203,10 @@ abstract class BaseActivity :
}
}
+ fun hasPermissions(): Boolean {
+ return permissionsManager?.hasPermissions().orFalse()
+ }
+
private fun initObservers() {
feedbackObserver()
}
diff --git a/navi-common/src/main/java/com/navi/common/ui/fragment/HorizontalActionErrorFragment.kt b/navi-common/src/main/java/com/navi/common/ui/fragment/HorizontalActionErrorFragment.kt
index 189546c2c8..8faf0144aa 100644
--- a/navi-common/src/main/java/com/navi/common/ui/fragment/HorizontalActionErrorFragment.kt
+++ b/navi-common/src/main/java/com/navi/common/ui/fragment/HorizontalActionErrorFragment.kt
@@ -15,6 +15,7 @@ import com.google.gson.Gson
import com.navi.base.deeplink.DeepLinkManager
import com.navi.base.model.ActionData
import com.navi.base.model.CtaData
+import com.navi.base.utils.orFalse
import com.navi.base.utils.orZero
import com.navi.common.R
import com.navi.common.databinding.HorizontalActionErrorFragmentBinding
@@ -27,6 +28,7 @@ import com.navi.common.utils.GENERAL_ERROR
import com.navi.common.utils.NO_INTERNET
import com.navi.common.utils.SOCKET_TIMEOUT
import com.navi.common.utils.getNetworkType
+import com.navi.common.utils.*
import com.navi.design.utils.dpToPx
class HorizontalActionErrorFragment : BaseBottomSheet() {
@@ -67,6 +69,12 @@ class HorizontalActionErrorFragment : BaseBottomSheet() {
binding.iconIv.setImageResource(getErrorIcon())
setTitleAndMessage()
setAbvText()
+ setIconVisibility()
+ }
+
+ private fun setIconVisibility() {
+ binding.iconIv.visibility =
+ if (arguments?.getBoolean(HIDE_ICON).orFalse()) View.GONE else View.VISIBLE
}
private fun trackScreenLaunch() {
@@ -199,6 +207,7 @@ class HorizontalActionErrorFragment : BaseBottomSheet() {
private const val DIALOG_CANCELABLE = "DIALOG_CANCELABLE"
private const val SOURCE_SCREEN = "SOURCE_SCREEN"
private const val MODULE_NAME = "MODULE_NAME"
+ private const val HIDE_ICON = "HIDE_ICON"
@JvmStatic
fun getInstance(
@@ -207,7 +216,8 @@ class HorizontalActionErrorFragment : BaseBottomSheet() {
cancelable: Boolean = true,
sourceScreenName: String?,
secondaryAction: View.OnClickListener? = null,
- moduleName: String? = null
+ moduleName: String? = null,
+ hideIcon: Boolean = false
) =
HorizontalActionErrorFragment().apply {
this.action = action
@@ -218,6 +228,7 @@ class HorizontalActionErrorFragment : BaseBottomSheet() {
putBoolean(DIALOG_CANCELABLE, cancelable)
putString(SOURCE_SCREEN, sourceScreenName)
putString(MODULE_NAME, moduleName)
+ putBoolean(HIDE_ICON, hideIcon)
}
}
diff --git a/navi-common/src/main/java/com/navi/common/utils/Constants.kt b/navi-common/src/main/java/com/navi/common/utils/Constants.kt
index 5d001ab31a..74272d22e7 100644
--- a/navi-common/src/main/java/com/navi/common/utils/Constants.kt
+++ b/navi-common/src/main/java/com/navi/common/utils/Constants.kt
@@ -135,4 +135,13 @@ object Constants {
const val TERMS_AND_CONDITIONS_URL = "https://navi.com/terms-and-conditions"
const val LIST_OF_PERMISSION = "LIST_OF_PERMISSION"
const val SKIP_PERMISSION_SCREEN = "SKIP_PERMISSION_SCREEN"
+ const val HEADER_PERMISSION_GRANTED = "X-Permissions-Granted"
+ const val PERMISSION_PREFIX = "android.permission."
+ const val PROMOTION_SCREEN_CTA_CLICKED = "PROMOTION_SCREEN_CTA_CLICKED"
+ const val PROMOTION_SCREEN_VISITED = "PROMOTION_SCREEN_VISITED"
+ const val HEADER_INSTALLED_MODULES = "X-Installed-Modules"
+ const val HEADER_PERMISSIONS = "X-Permissions-Granted"
+ const val IS_DYNAMIC_MODULE_INSTALLED = "IS_DYNAMIC_MODULE_INSTALLED"
+ const val DYNAMIC_MODULE_DOWNLOAD_SIZE_IN_BYTES = "DYNAMIC_MODULE_DOWNLOAD_SIZE_IN_BYTES"
+ const val KEY_UPCOMING_LOAN = "KEY_UPCOMING_LOAN"
}
diff --git a/navi-common/src/main/java/com/navi/common/utils/DynamicDeliveryUtil.kt b/navi-common/src/main/java/com/navi/common/utils/DynamicDeliveryUtil.kt
new file mode 100644
index 0000000000..d177a91a99
--- /dev/null
+++ b/navi-common/src/main/java/com/navi/common/utils/DynamicDeliveryUtil.kt
@@ -0,0 +1,60 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.common.utils
+
+import com.google.android.play.core.splitinstall.SplitInstallManager
+import com.google.android.play.core.splitinstall.SplitInstallManagerFactory
+import com.google.android.play.core.splitinstall.SplitInstallRequest
+import com.navi.base.sharedpref.PreferenceManager.getBooleanPreferenceApp
+import com.navi.base.sharedpref.PreferenceManager.getLongPreferenceApp
+import com.navi.base.sharedpref.PreferenceManager.setBooleanPreferenceApp
+import com.navi.base.sharedpref.PreferenceManager.setLongPreferenceApp
+import com.navi.common.CommonLibManager
+import com.navi.common.utils.Constants.DYNAMIC_MODULE_DOWNLOAD_SIZE_IN_BYTES
+import com.navi.common.utils.Constants.IS_DYNAMIC_MODULE_INSTALLED
+
+fun getSplitInstallManager() = SplitInstallManagerFactory.create(CommonLibManager.application)
+
+fun getInstalledDynamicModules(splitInstallManager: SplitInstallManager): Set =
+ splitInstallManager.installedModules
+
+fun isDynamicModuleInstalled(moduleName: String) =
+ getInstalledDynamicModulesCommaSeparated().contains(moduleName)
+
+fun getInstalledDynamicModulesCommaSeparated(
+ splitInstallManager: SplitInstallManager = getSplitInstallManager()
+) =
+ if (getDynamicModuleInstallationStatus())
+ getInstalledDynamicModules(splitInstallManager).joinToString(separator = COMMA)
+ else EMPTY
+
+fun installDynamicModules(moduleNames: List) {
+ getSplitInstallManager()
+ .startInstall(
+ SplitInstallRequest.newBuilder().apply { moduleNames.forEach { addModule(it) } }.build()
+ )
+
+ setDynamicModuleInstallationStatus(isInstalled = true)
+}
+
+fun uninstallDynamicModules(moduleNames: List) {
+ getSplitInstallManager().deferredUninstall(moduleNames)
+
+ setDynamicModuleInstallationStatus(isInstalled = false)
+}
+
+fun setDynamicModuleInstallationStatus(isInstalled: Boolean) =
+ setBooleanPreferenceApp(IS_DYNAMIC_MODULE_INSTALLED, isInstalled)
+
+fun getDynamicModuleInstallationStatus() = getBooleanPreferenceApp(IS_DYNAMIC_MODULE_INSTALLED)
+
+fun setDynamicModuleDownloadSizeInBytes(downloadSizeInBytes: Long) =
+ setLongPreferenceApp(DYNAMIC_MODULE_DOWNLOAD_SIZE_IN_BYTES, downloadSizeInBytes)
+
+fun getDynamicModuleDownloadSizeInBytes(fallbackDownloadSize: Long = 500000) =
+ getLongPreferenceApp(DYNAMIC_MODULE_DOWNLOAD_SIZE_IN_BYTES, fallbackDownloadSize)
diff --git a/navi-common/src/main/java/com/navi/common/utils/Keys.kt b/navi-common/src/main/java/com/navi/common/utils/Keys.kt
index 7adba36399..6140c4ea6e 100644
--- a/navi-common/src/main/java/com/navi/common/utils/Keys.kt
+++ b/navi-common/src/main/java/com/navi/common/utils/Keys.kt
@@ -1,6 +1,6 @@
/*
*
- * * Copyright © 2019-2022 by Navi Technologies Limited
+ * * Copyright © 2019-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
@@ -15,3 +15,4 @@ const val BACKSLASH = "\""
const val RETRY = "retry"
const val ERROR = "error"
const val SEPARATOR = "__"
+const val PERCENT = "%"
diff --git a/navi-common/src/main/java/com/navi/common/utils/TemporaryStorageHelper.kt b/navi-common/src/main/java/com/navi/common/utils/TemporaryStorageHelper.kt
index 5cd817171c..b2d91dbd89 100644
--- a/navi-common/src/main/java/com/navi/common/utils/TemporaryStorageHelper.kt
+++ b/navi-common/src/main/java/com/navi/common/utils/TemporaryStorageHelper.kt
@@ -28,6 +28,7 @@ object TemporaryStorageHelper {
var isHomePageApiInProgress = false
var isBottomNavApiInProgress = false
var isInvestmentPageApiInProgress = false
+ var isPermissionSkipFlow = false
fun clear() {
apiResponse.clear()
diff --git a/navi-amc/src/main/res/layout/header_layout.xml b/navi-common/src/main/res/layout/header_layout.xml
similarity index 100%
rename from navi-amc/src/main/res/layout/header_layout.xml
rename to navi-common/src/main/res/layout/header_layout.xml
diff --git a/navi-design/src/main/java/com/navi/design/utils/AnimationUtils.kt b/navi-design/src/main/java/com/navi/design/utils/AnimationUtils.kt
index efac8b4ea6..84a894d6c3 100644
--- a/navi-design/src/main/java/com/navi/design/utils/AnimationUtils.kt
+++ b/navi-design/src/main/java/com/navi/design/utils/AnimationUtils.kt
@@ -9,6 +9,8 @@ package com.navi.design.utils
import android.animation.ObjectAnimator
import android.view.View
+import android.view.animation.Animation
+import android.view.animation.TranslateAnimation
import androidx.core.animation.doOnEnd
import androidx.core.animation.doOnStart
import androidx.core.view.isVisible
@@ -63,3 +65,16 @@ fun moveViewWithDistanceAnimator(
start()
}
}
+
+fun setShakeAnimation(vararg views: View) {
+ try {
+ val animation =
+ TranslateAnimation(0F, 30F, 0F, 0F).apply {
+ duration = 100L
+ repeatCount = 5
+ repeatMode = Animation.REVERSE
+ }
+ views.forEach { it.animation = animation }
+ animation.start()
+ } catch (_: Exception) { }
+}
diff --git a/navi-design/src/main/res/drawable/checkbox_green_button.xml b/navi-design/src/main/res/drawable/checkbox_green_button.xml
new file mode 100644
index 0000000000..a0b968c53d
--- /dev/null
+++ b/navi-design/src/main/res/drawable/checkbox_green_button.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
diff --git a/navi-design/src/main/res/drawable/checkbox_green_checked.xml b/navi-design/src/main/res/drawable/checkbox_green_checked.xml
new file mode 100644
index 0000000000..10a02fcdb8
--- /dev/null
+++ b/navi-design/src/main/res/drawable/checkbox_green_checked.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/navi-design/src/main/res/drawable/checkbox_green_unchecked.xml b/navi-design/src/main/res/drawable/checkbox_green_unchecked.xml
new file mode 100644
index 0000000000..467c8ffc7e
--- /dev/null
+++ b/navi-design/src/main/res/drawable/checkbox_green_unchecked.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
diff --git a/navi-design/src/main/res/values/colors.xml b/navi-design/src/main/res/values/colors.xml
index 7a8e4556a5..79f311529c 100644
--- a/navi-design/src/main/res/values/colors.xml
+++ b/navi-design/src/main/res/values/colors.xml
@@ -251,4 +251,6 @@
#4DB0C0D9
#80B0C0D9
#7853D3
+ #1F002A
+ #8F1F002A
diff --git a/navi-payment/src/main/java/com/navi/payment/base/PaymentManager.kt b/navi-payment/src/main/java/com/navi/payment/base/PaymentManager.kt
index c6834c677d..84c4d99f68 100644
--- a/navi-payment/src/main/java/com/navi/payment/base/PaymentManager.kt
+++ b/navi-payment/src/main/java/com/navi/payment/base/PaymentManager.kt
@@ -1,3 +1,10 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
package com.navi.payment.base
import android.app.Activity
@@ -37,7 +44,9 @@ import com.navi.payment.utils.toSignalActionType
import kotlinx.coroutines.*
import java.lang.ref.WeakReference
-class PaymentManager constructor(private val repository: PaymentRepository = PaymentRepository()) : ViewModel() {
+class PaymentManager(
+ private val repository: PaymentRepository = PaymentRepository()
+) : ViewModel() {
private var activityRef: WeakReference? = null
private var paymentListener: PaymentListener? = null
@@ -313,4 +322,4 @@ class PaymentManager constructor(private val repository: PaymentRepository = Pay
paymentListener = null
rpdListener = null
}
-}
\ No newline at end of file
+}
diff --git a/navi-pl/build.gradle b/navi-pl/build.gradle
deleted file mode 100644
index 2c4aec943a..0000000000
--- a/navi-pl/build.gradle
+++ /dev/null
@@ -1,41 +0,0 @@
-plugins {
- id 'com.android.library'
- id 'org.jetbrains.kotlin.android'
-}
-
-android {
- namespace 'com.navi.pl'
- compileSdk 32
-
- defaultConfig {
- minSdk 21
- targetSdk 32
-
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- consumerProguardFiles "consumer-rules.pro"
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- }
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
- kotlinOptions {
- jvmTarget = '1.8'
- }
-}
-
-dependencies {
-
- implementation "androidx.core:core-ktx:$core_version"
- implementation "androidx.appcompat:appcompat:$appcompat_version"
- implementation "com.google.android.material:material:$material_version"
- testImplementation "junit:junit:$junit_version"
- androidTestImplementation "androidx.test.ext:junit:$android_junit_version"
- androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_version"
-}
diff --git a/navi-pl/consumer-rules.pro b/navi-pl/consumer-rules.pro
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/navi-pl/src/main/AndroidManifest.xml b/navi-pl/src/main/AndroidManifest.xml
deleted file mode 100644
index 8c89ca082b..0000000000
--- a/navi-pl/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKYCWaitingForExecutiveFragment.kt b/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKYCWaitingForExecutiveFragment.kt
index 77c72bd145..ebc359ab8b 100644
--- a/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKYCWaitingForExecutiveFragment.kt
+++ b/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKYCWaitingForExecutiveFragment.kt
@@ -11,17 +11,11 @@ import android.app.Activity
import android.media.AudioManager
import android.os.Bundle
import android.os.CountDownTimer
-import android.os.Handler
-import android.os.Looper
-import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.View.GONE
-import android.view.View.INVISIBLE
import android.view.View.VISIBLE
import android.view.ViewGroup
-import android.widget.TextView
-import androidx.compose.material.Divider
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.isVisible
import androidx.lifecycle.ViewModelProvider
@@ -56,8 +50,6 @@ import com.navi.naviwidgets.models.response.StraightLineWidget
import com.navi.naviwidgets.models.response.StraightLineWidgetData
import com.navi.naviwidgets.models.response.StyleString
import com.navi.naviwidgets.models.response.TextFieldData
-import com.navi.naviwidgets.utils.ZERO
-import com.navi.uitron.utils.IconUtils
import com.navi.vkyc.R
import com.navi.vkyc.common.VkycScreens
import com.navi.vkyc.constants.ApiConstants
@@ -73,7 +65,6 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.joda.time.DateTimeConstants.MINUTES_PER_HOUR
import org.joda.time.DateTimeConstants.SECONDS_PER_MINUTE
-import java.util.*
@AndroidEntryPoint
class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.InteractionListener,
@@ -184,7 +175,7 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
val footer = ItemFooter(
styledText = TextFieldData(
text = getString(R.string.keep_original_pan_card_handy_with_you),
- textColor = "#444444",
+ textColor = Colors.TEXT_COLOR_INSTRUCTIONS,
size = 12,
font = FontWeightEnum.TT_REGULAR.name,
substringStyles = listOf(
@@ -194,7 +185,7 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
)
)
),
- hexColor = "#EBEBEB"
+ hexColor = Colors.COLOR_BG_GREY
)
waitingPageDetailsResponse.content?.itemFooter = footer
@@ -203,10 +194,10 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
icon = ImageFieldData(iconCode = Constants.ICON_INFO_RED_VKYC),
title = TextFieldData(
text = getString(R.string.important_note),
- textColor = "#FF5732",
+ textColor = Colors.COLOR_ORANGE_TITLE_TEXT,
font = FontWeightEnum.TT_MEDIUM.name
),
- bgColor = "#FFF3F0",
+ bgColor = Colors.COLOR_ORANGE_TITLE,
padding = Padding(
startDp = 12f,
endDp = 0f,
@@ -220,7 +211,7 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
icon = ImageFieldData(iconCode = Constants.ICON_CLOTHS),
title = TextFieldData(
text = getString(R.string.be_suitably_dressed),
- textColor = "#444444",
+ textColor = Colors.TEXT_COLOR_INSTRUCTIONS,
font = FontWeightEnum.TT_REGULAR.name,
size = 10
)
@@ -230,7 +221,7 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
icon = ImageFieldData(iconCode = Constants.ICON_LIGHTING),
title = TextFieldData(
text = getString(R.string.ensure_proper_lighting),
- textColor = "#444444",
+ textColor = Colors.TEXT_COLOR_INSTRUCTIONS,
font = FontWeightEnum.TT_REGULAR.name,
size = 10
)
@@ -240,7 +231,7 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
icon = ImageFieldData(iconCode = Constants.ICON_CLOTHS),
title = TextFieldData(
text = getString(R.string.have_good_internet),
- textColor = "#444444",
+ textColor = Colors.TEXT_COLOR_INSTRUCTIONS,
font = FontWeightEnum.TT_REGULAR.name,
size = 10
)
@@ -259,6 +250,15 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
waitingPageDetailsResponse.content?.divider = divider
+ val footerText = TextFieldData(
+ text = getString(R.string.please_dont_close_app_text),
+ textColor = Colors.COLOR_TEXT_GREY,
+ size = 10,
+ font = FontWeightEnum.TT_SEMI_BOLD.name
+ )
+
+ waitingPageDetailsResponse.content?.footerText = footerText
+
binder = waitingPageDetailsResponse.content
importantNote.divider1.rootView.update(
@@ -285,14 +285,6 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
showLowVolumeToast()
}
- /*importantNote.importantNoteCl.background = getNaviDrawable(
- shape = DrawableShape.RECTANGLE,
- cornerRadius = resources.getDimension(R.dimen.dp_8).toInt(),
- backgroundColor = ContextCompat.getColor(requireContext(), R.color.white),
- strokeWidth = response.content?.importantNote?.border?.widthDp?.toInt(),
- strokeColor = response.content?.importantNote?.border?.color?.parseColorSafe()
- )*/
-
timerCard.divider.setVisibilityState(VISIBLE)
waitingPageDetailsResponse.content?.timerDurationInSeconds?.let {
@@ -332,18 +324,6 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
}
}
- timerCard.timerDescriptionTs.apply {
- removeAllViews()
- setFactory { TextView(context).apply { gravity = Gravity.CENTER } }
- showWhenDataIsAvailable(
- waitingPageDetailsResponse.content?.timerDescriptionList,
- Timer(),
- period = DEFAULT_SLIDE_PERIOD_TIME
- ) {
- Handler(Looper.getMainLooper()).post { setText(it) }
- }
- }
-
setStyledText(
timerCard.timerDescriptionTv,
waitingPageDetailsResponse.content?.postTimerDescription,
@@ -362,22 +342,6 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
ResourcesCompat.getColor(resources, R.color.white, null),
cornerRadius = resources.getDimension(R.dimen.dp_8).toInt()
)
-
- waitingPageDetailsResponse.content
- ?.importantNote
- ?.footerTag
- ?.backgroundColor
- ?.let {
- /*importantNote.footerLl.background =
- getNaviDrawable(
- backgroundColor = it.parseColorSafe(),
- radii =
- CornerRadius(
- rightBottom = resources.getDimension(R.dimen.dp_8),
- leftBottom = resources.getDimension(R.dimen.dp_8)
- )
- )*/
- }
}
startTime = System.currentTimeMillis()
onPageResponseReceived(waitingPageDetailsResponse.content?.requestConfig)
@@ -516,6 +480,15 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti
private const val FOUR_SECONDS = 4L
private const val ONE_SECOND = 1L
private const val FORTY = 40
+
+ object Colors {
+ const val TEXT_COLOR_INSTRUCTIONS = "#444444"
+ const val COLOR_BG_GREY = "#EBEBEB"
+ const val COLOR_TEXT_GREY = "#191919"
+ const val COLOR_ORANGE_TITLE_TEXT = "#FF5732"
+ const val COLOR_ORANGE_TITLE = "#FFF3F0"
+ }
+
fun getInstance(bundle: Bundle?): VKYCWaitingForExecutiveFragment {
return VKYCWaitingForExecutiveFragment().apply { arguments = bundle }
}
diff --git a/navi-vkyc/src/main/res/layout/vkyc_timer_card_layout.xml b/navi-vkyc/src/main/res/layout/vkyc_timer_card_layout.xml
index 42162e7d56..1ab08b0e1f 100644
--- a/navi-vkyc/src/main/res/layout/vkyc_timer_card_layout.xml
+++ b/navi-vkyc/src/main/res/layout/vkyc_timer_card_layout.xml
@@ -73,11 +73,11 @@
android:layout_marginHorizontal="@dimen/layout_dp_16"
android:layout_marginTop="@dimen/layout_dp_24"
android:textAlignment="center"
+ android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/divider"
app:setStyledText="@{binder.timerTitle}"
- app:visibility="@{binder.timerTitle != null}"
tools:text="Your VKYC will start in" />
+ tools:text="You are one step away from getting your loan"
+ tools:visibility="visible" />
+
+
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/barrier"
+ app:layout_constraintVertical_bias="1" />
diff --git a/navi-vkyc/src/main/res/layout/vkyc_waiting_for_executive.xml b/navi-vkyc/src/main/res/layout/vkyc_waiting_for_executive.xml
index e5c01011d5..d9735bfd0d 100644
--- a/navi-vkyc/src/main/res/layout/vkyc_waiting_for_executive.xml
+++ b/navi-vkyc/src/main/res/layout/vkyc_waiting_for_executive.xml
@@ -8,7 +8,8 @@
-->
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools">
@@ -33,13 +34,14 @@
+ android:orientation="vertical"
+ android:paddingBottom="@dimen/layout_dp_48">
+
+
diff --git a/navi-vkyc/src/main/res/values/strings.xml b/navi-vkyc/src/main/res/values/strings.xml
index 74df9163ec..5faa9e595f 100644
--- a/navi-vkyc/src/main/res/values/strings.xml
+++ b/navi-vkyc/src/main/res/values/strings.xml
@@ -49,4 +49,5 @@
Be suitably dressed
Ensure proper lighting
Have good internet
+ Please don\'t close the application or press back button.
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/extensions/WidgetExt.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/extensions/WidgetExt.kt
index e1a91a1369..9228d5ea28 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/extensions/WidgetExt.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/extensions/WidgetExt.kt
@@ -1187,6 +1187,15 @@ fun LottieAnimationView.showWhenDataIsAvailable(
LottieEnums.REWARD_COIN.name -> {
setAnimation(R.raw.reward_coin)
}
+ LottieEnums.DYNAMIC_DELIVERY_DOWNLOADING.name -> {
+ setAnimation(R.raw.dynamic_delivery_downloading)
+ }
+ LottieEnums.DYNAMIC_DELIVERY_INSTALLING.name -> {
+ setAnimation(R.raw.dynamic_delivery_installing)
+ }
+ LottieEnums.DYNAMIC_DELIVERY_INSTALLED.name -> {
+ setAnimation(R.raw.dynamic_delivery_installed)
+ }
else -> {
isInAppLottie = false
CoroutineScope(Dispatchers.Main).launch {
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/models/ActionButtonWidget.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/models/ActionButtonWidget.kt
index 71b6186a34..b7da79edba 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/models/ActionButtonWidget.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/models/ActionButtonWidget.kt
@@ -42,6 +42,8 @@ data class ActionButtonWidgetData(
val timerInfo: TimerInfo? = null,
@SerializedName("backgroundShapeData")
val backgroundShapeData: BackgroundShapeData? = null,
+ @SerializedName("updateTitle")
+ var updateTitle: String? = null,
@SerializedName("timerExpiryBottomSheetData")
val timerExpiryBottomSheetData: List? = null
) : Serializable
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/models/StepsWidget.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/models/StepsWidget.kt
index 4cc4c7363c..706e4e12b6 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/models/StepsWidget.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/models/StepsWidget.kt
@@ -1,6 +1,7 @@
package com.navi.naviwidgets.models
import com.google.gson.annotations.SerializedName
+import com.navi.design.textview.model.NaviSpan
import com.navi.naviwidgets.models.response.WidgetError
import com.navi.naviwidgets.widgets.textdisplay.Padding
import java.io.Serializable
@@ -48,7 +49,11 @@ data class StepsWidgetExtraData(
data class StepsWidgetErrorData(
@SerializedName("titleColor")
- val titleColor: String? = null,
+ val titleColor: List? = null,
@SerializedName("icon")
- val icon: String? = null
+ val icon: String? = null,
+ @SerializedName("permissionIcon")
+ val permissionIcon: String? = null,
+ @SerializedName("shakeAnimation")
+ val shakeAnimation: Boolean? = null
)
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/AdvertisementWidget.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/AdvertisementWidget.kt
index 250c4107cf..5381d3de94 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/AdvertisementWidget.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/AdvertisementWidget.kt
@@ -63,6 +63,7 @@ data class ContentData(
@SerializedName("descriptionTextSwitcherConfig") val descriptionTextSwitcherConfig: AdvertisementWidgetTextSwitcherConfig? = null,
@SerializedName("offerData") val offerData: TextWithStyle? = null,
@SerializedName("actionData") val actionData: ActionData? = null,
+ @SerializedName("disclaimer") val disclaimer: TextWithStyle? = null,
@SerializedName("gradient") val gradient: Gradient? = null,
@SerializedName("subsequentLoanLandingPage")
val subsequentLoanLandingPage: UpcomingLoanDetail? = null,
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/Footer.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/Footer.kt
index 90c2f55c26..ac79eb01a4 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/Footer.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/Footer.kt
@@ -30,7 +30,8 @@ data class Footer(
@SerializedName("nextCtaStyledTitle") val nextCtaStyledTitle: StyledTextWithIconCode? = null,
@SerializedName("backCtaStyledTitle") val backCtaStyledTitle: StyledTextWithIconCode? = null,
@SerializedName("backgroundDrawableData") val backgroundDrawableData: BackgroundDrawableData? = null,
- @SerializedName("radius") val radius: Int? = null
+ @SerializedName("radius") val radius: Int? = null,
+ @SerializedName("topInfoTitle") val topInfoTitle: TextFieldData? = null,
) : Parcelable
@Parcelize
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/HomeProductWidget.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/HomeProductWidget.kt
index be01e7b633..e1840ee29f 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/HomeProductWidget.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/HomeProductWidget.kt
@@ -64,6 +64,8 @@ data class ProductDetailsData(
@SerializedName("gradient") val gradient: Gradient? = null,
@SerializedName("bgColor") val bgColor: String? = null,
@SerializedName("label") val label: Label? = null,
+ @SerializedName("disclaimer") val disclaimer: TextWithStyle? = null,
+ @SerializedName("optionalDisclaimer") val optionalDisclaimer: TextWithStyle? = null,
@SerializedName("showOnlySubProducts") val showOnlySubProducts: Boolean? = false
) : Serializable
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/utils/LottieEnums.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/utils/LottieEnums.kt
index 4ee19b3aef..3e8d9f8342 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/utils/LottieEnums.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/utils/LottieEnums.kt
@@ -73,6 +73,8 @@ enum class LottieEnums {
GETTING_THERE_QUIZ_ANIM,
CONTACT_BOOK_LOTTIE,
GROWTH_LOTTIE,
- REWARD_COIN
-
+ REWARD_COIN,
+ DYNAMIC_DELIVERY_DOWNLOADING,
+ DYNAMIC_DELIVERY_INSTALLING,
+ DYNAMIC_DELIVERY_INSTALLED
}
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/utils/NaviWidgetIconUtils.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/utils/NaviWidgetIconUtils.kt
index f052ef57d9..28d7436b33 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/utils/NaviWidgetIconUtils.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/utils/NaviWidgetIconUtils.kt
@@ -107,6 +107,7 @@ object NaviWidgetIconUtils {
private const val CALL_ICON = "CALL_ICON"
private const val CALL_NEW_ICON = "CALL_NEW_ICON"
private const val RATE_ICON = "RATE_ICON"
+ private const val INTERNAL_APP_SETTINGS_ICON = "INTERNAL_APP_SETTINGS_ICON"
private const val SHARE_APP_ICON = "SHARE_APP_ICON"
private const val NOTIFICATION_ICON = "NOTIFICATION_ICON"
private const val PRIVACY_POLICY_ICON = "PRIVACY_POLICY_ICON"
@@ -601,6 +602,7 @@ object NaviWidgetIconUtils {
private const val DOCUMENT_LOAN_DETAILS = "DOCUMENT_LOAN_DETAILS"
private const val RUPPE_COIN_IN_HAND = "RUPPE_COIN_IN_HAND"
private const val RUPPE_COIN_WITH_TICK = "RUPPE_COIN_WITH_TICK"
+ private const val ICON_CASH_LOAN_SETTINGS = "ICON_CASH_LOAN_SETTINGS"
private const val WAIT_CLOCK_ICON = "WAIT_CLOCK_ICON"
private const val PERMISSION_LOCATION = "PERMISSION_LOCATION"
private const val PERMISSION_CONTACT = "PERMISSION_CONTACT"
@@ -621,6 +623,15 @@ object NaviWidgetIconUtils {
private const val PURPLE_CHEVRON = "PURPLE_CHEVRON"
private const val GREEN_TICK_MARK = "GREEN_TICK_MARK"
private const val RED_TICK_MARK = "RED_TICK_MARK"
+ private const val SMS_ALLOWED_PURPLE_THEME = "SMS_ALLOWED_PURPLE_THEME"
+ private const val CONTACTS_ALLOWED_PURPLE_THEME = "CONTACTS_ALLOWED_PURPLE_THEME"
+ private const val DEVICE_ALLOWED_PURPLE_THEME = "DEVICE_ALLOWED_PURPLE_THEME"
+ private const val LOCATION_ALLOWED_PURPLE_THEME = "LOCATION_ALLOWED_PURPLE_THEME"
+ private const val NEW_PURPLE_CHEVRON = "NEW_PURPLE_CHEVRON"
+ private const val SMS_DENIED_ICON = "SMS_DENIED_ICON"
+ private const val DEVICE_DENIED_ICON = "DEVICE_DENIED_ICON"
+ private const val CONTACTS_DENIED_ICON = "CONTACTS_DENIED_ICON"
+ private const val LOCATION_DENIED_ICON = "LOCATION_DENIED_ICON"
private const val ICON_CLOCK_LIGHT_ORANGE = "ICON_CLOCK_LIGHT_ORANGE"
private const val ICON_INFO_RED_VKYC = "ICON_INFO_RED_VKYC"
private const val ICON_CLOTHS = "ICON_CLOTHS"
@@ -714,6 +725,7 @@ object NaviWidgetIconUtils {
EMAIL_ICON -> R.drawable.ic_email_red_svg
CALL_ICON -> R.drawable.ic_call_svg
RATE_ICON -> R.drawable.ic_rate_us_red_svg
+ INTERNAL_APP_SETTINGS_ICON -> R.drawable.ic_internal_app_settings_svg
SHARE_APP_ICON -> R.drawable.ic_share_svg
NOTIFICATION_ICON -> R.drawable.ic_notifications_svg
PRIVACY_POLICY_ICON -> R.drawable.ic_privacy_poilcy_svg
@@ -1290,6 +1302,15 @@ object NaviWidgetIconUtils {
PURPLE_CHEVRON -> R.drawable.ic_new_purple_chevron
GREEN_TICK_MARK -> R.drawable.ic_green_success_new
RED_TICK_MARK -> R.drawable.ic_red_alert_error_new
+ SMS_ALLOWED_PURPLE_THEME -> R.drawable.ic_sms_new_purple_theme
+ CONTACTS_ALLOWED_PURPLE_THEME -> R.drawable.ic_contacts_new_purple_theme
+ DEVICE_ALLOWED_PURPLE_THEME -> R.drawable.ic_device_new_purple_theme
+ LOCATION_ALLOWED_PURPLE_THEME -> R.drawable.ic_location_new_purple_theme
+ NEW_PURPLE_CHEVRON -> R.drawable.ic_new_chevron_purple_theme
+ SMS_DENIED_ICON -> R.drawable.ic_sms_denied
+ DEVICE_DENIED_ICON -> R.drawable.ic_device_denied
+ CONTACTS_DENIED_ICON -> R.drawable.ic_contacts_denied
+ LOCATION_DENIED_ICON -> R.drawable.ic_location_denied
ICON_INFO_RED_VKYC -> R.drawable.ic_important
ICON_CLOTHS -> R.drawable.ic_suitable_clothing
ICON_LIGHTING -> R.drawable.ic_proper_lighting
@@ -1297,6 +1318,7 @@ object NaviWidgetIconUtils {
ICON_CLOCK_LIGHT_ORANGE -> R.drawable.ic_clock_light_orange
ATTENTION_ICON -> R.drawable.ic_attention
CIRCULAR_GREY_TICK_SMALL -> R.drawable.ic_round_grey_tick
+ ICON_CASH_LOAN_SETTINGS -> R.drawable.ic_cash_loan_settings_svg
else -> -1
}
}
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/ActionButtonWidgetLayout.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/ActionButtonWidgetLayout.kt
index 02e6c75ab8..1f5ad06ee5 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/ActionButtonWidgetLayout.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/ActionButtonWidgetLayout.kt
@@ -141,7 +141,16 @@ class ActionButtonWidgetLayout @JvmOverloads constructor(
}
}
+ private fun updateTitle() {
+ binding.apply {
+ info.widgetData?.updateTitle?.let { titleText ->
+ tvAction.text = titleText
+ }
+ }
+ }
+
fun updateActionButton() {
setActionButtonState()
+ updateTitle()
}
}
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/AdvertisementWidgetLayout.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/AdvertisementWidgetLayout.kt
index a9d7432b24..7bc7d2a2cd 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/AdvertisementWidgetLayout.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/AdvertisementWidgetLayout.kt
@@ -115,6 +115,7 @@ class AdvertisementWidgetLayout(context: Context, attributeSet: AttributeSet) :
setDescriptionTextSwitcherProperties()
setDescriptionExtraProperties()
offerText.setSpannableString(widgetData.advertisementWidgetData?.content?.offerData)
+ disclaimerTv.setSpannableString(widgetData.advertisementWidgetData?.content?.disclaimer)
widgetData.advertisementWidgetData?.content?.subsequentLoanLandingPage?.let { data ->
actionBtn.setProperties(widgetData.advertisementWidgetData?.content?.actionData)
root.setOnClickListener { setClickListenerData(data) }
@@ -131,8 +132,12 @@ class AdvertisementWidgetLayout(context: Context, attributeSet: AttributeSet) :
}
}
}
+ widgetData.advertisementWidgetData?.content?.disclaimer?.let {
+ (actionBtn.layoutParams as MarginLayoutParams).bottomMargin = dpToPxInInt(16)
+ } ?: kotlin.run {
+ (actionBtn.layoutParams as MarginLayoutParams).bottomMargin = dpToPxInInt(32)
+ }
widgetData.advertisementWidgetData?.content?.steps?.let {
- (actionBtn.layoutParams as MarginLayoutParams).bottomMargin = dpToPxInInt(64)
stepsView.setVisibilityState(VISIBLE)
stepsView.background =
getNaviDrawable(
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/HomeProductWidgetLayout.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/HomeProductWidgetLayout.kt
index c193d984a6..cb0a5f1fa7 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/HomeProductWidgetLayout.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/HomeProductWidgetLayout.kt
@@ -90,6 +90,8 @@ class HomeProductWidgetLayout(context: Context, attributeSet: AttributeSet) :
productTitle.setSpannableString(widgetData.homeProductWidgetData?.productDetails?.title)
productLottie.showWhenDataIsAvailable(widgetData.homeProductWidgetData?.productDetails?.lottieFile)
productSubtitle.setSpannableString(widgetData.homeProductWidgetData?.productDetails?.subtitle)
+ disclaimerTv.setSpannableString(widgetData.homeProductWidgetData?.productDetails?.disclaimer)
+ optionalDisclaimerTv.setSpannableString(widgetData.homeProductWidgetData?.productDetails?.optionalDisclaimer)
widgetData.homeProductWidgetData?.productDetails?.bgColor?.let {
productCard.setBackgroundColor(it.parseColorSafe())
}
diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/StepsWidgetLayout.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/StepsWidgetLayout.kt
index ba029295c1..0b63b68fe9 100644
--- a/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/StepsWidgetLayout.kt
+++ b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/StepsWidgetLayout.kt
@@ -6,6 +6,7 @@ import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
+import com.navi.base.model.ImageDetail
import com.navi.base.utils.isNotNull
import com.navi.design.utils.dpToPxInInt
import com.navi.design.utils.spannedText
@@ -17,8 +18,8 @@ import com.navi.naviwidgets.models.StepsWidget
import com.navi.naviwidgets.utils.CIRCULAR
import com.navi.naviwidgets.utils.DOTTED
import com.navi.naviwidgets.utils.ICON
-import com.navi.naviwidgets.utils.SELECTED_CIRCULAR
import com.navi.naviwidgets.utils.NaviWidgetIconUtils
+import com.navi.naviwidgets.utils.SELECTED_CIRCULAR
class StepsWidgetLayout @JvmOverloads constructor(
context: Context,
@@ -139,8 +140,18 @@ class StepsWidgetLayout @JvmOverloads constructor(
stepsWidget?.widgetData?.extraData?.enabled?.let { state ->
val leftIcon = NaviWidgetIconUtils.getIconResourceId(
if (state) {
+ binding.titleTv.text = stepsWidget?.widgetData?.title?.text.spannedText(
+ context = context,
+ span = stepsWidget?.widgetData?.title?.span
+ )
+ binding.icon.showWhenDataIsAvailable(imageDetail = ImageDetail(url = stepsWidget?.widgetData?.iconCode))
stepsWidget?.widgetData?.extraData?.successIcon.orEmpty()
} else {
+ binding.titleTv.text = stepsWidget?.widgetData?.title?.text.spannedText(
+ context = context,
+ span = stepsWidget?.widgetData?.errorData?.titleColor
+ )
+ binding.icon.showWhenDataIsAvailable(imageDetail = ImageDetail(url = stepsWidget?.widgetData?.errorData?.permissionIcon))
stepsWidget?.widgetData?.errorData?.icon.orEmpty()
}
)
diff --git a/navi-widgets/src/main/res/drawable/ic_background_gradient_white.xml b/navi-widgets/src/main/res/drawable/ic_background_gradient_white.xml
new file mode 100644
index 0000000000..4da276a25d
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_background_gradient_white.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_call_new_theme.xml b/navi-widgets/src/main/res/drawable/ic_call_new_theme.xml
new file mode 100644
index 0000000000..7f27c910a9
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_call_new_theme.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_cash_loan_settings_svg.xml b/navi-widgets/src/main/res/drawable/ic_cash_loan_settings_svg.xml
new file mode 100644
index 0000000000..6ffe211876
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_cash_loan_settings_svg.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_contacts_denied.xml b/navi-widgets/src/main/res/drawable/ic_contacts_denied.xml
new file mode 100644
index 0000000000..b2a315fa7e
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_contacts_denied.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_contacts_new_purple_theme.xml b/navi-widgets/src/main/res/drawable/ic_contacts_new_purple_theme.xml
new file mode 100644
index 0000000000..d7fc4e80a4
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_contacts_new_purple_theme.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_device_denied.xml b/navi-widgets/src/main/res/drawable/ic_device_denied.xml
new file mode 100644
index 0000000000..94e438fbeb
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_device_denied.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_device_new_purple_theme.xml b/navi-widgets/src/main/res/drawable/ic_device_new_purple_theme.xml
new file mode 100644
index 0000000000..674c54fe51
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_device_new_purple_theme.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_internal_app_settings_svg.xml b/navi-widgets/src/main/res/drawable/ic_internal_app_settings_svg.xml
new file mode 100644
index 0000000000..45d4af2f9f
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_internal_app_settings_svg.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_location_denied.xml b/navi-widgets/src/main/res/drawable/ic_location_denied.xml
new file mode 100644
index 0000000000..e5fb2eb729
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_location_denied.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_location_new_purple_theme.xml b/navi-widgets/src/main/res/drawable/ic_location_new_purple_theme.xml
new file mode 100644
index 0000000000..d32e2dc945
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_location_new_purple_theme.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_new_chevron_purple_theme.xml b/navi-widgets/src/main/res/drawable/ic_new_chevron_purple_theme.xml
new file mode 100644
index 0000000000..a972b8029b
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_new_chevron_purple_theme.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_no_call.xml b/navi-widgets/src/main/res/drawable/ic_no_call.xml
new file mode 100644
index 0000000000..5f053bfb51
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_no_call.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_purple_selected_state.xml b/navi-widgets/src/main/res/drawable/ic_purple_selected_state.xml
new file mode 100644
index 0000000000..5f2f3f9270
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_purple_selected_state.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/navi-widgets/src/main/res/drawable/ic_purple_unselected_state.xml b/navi-widgets/src/main/res/drawable/ic_purple_unselected_state.xml
new file mode 100644
index 0000000000..e291780737
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_purple_unselected_state.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/navi-widgets/src/main/res/drawable/ic_resend_new_theme.xml b/navi-widgets/src/main/res/drawable/ic_resend_new_theme.xml
new file mode 100644
index 0000000000..18473342fd
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_resend_new_theme.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_sms_denied.xml b/navi-widgets/src/main/res/drawable/ic_sms_denied.xml
new file mode 100644
index 0000000000..e61a90549d
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_sms_denied.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_sms_new_purple_theme.xml b/navi-widgets/src/main/res/drawable/ic_sms_new_purple_theme.xml
new file mode 100644
index 0000000000..5c0b147ae7
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_sms_new_purple_theme.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/ic_whatsapp_right_arrow.xml b/navi-widgets/src/main/res/drawable/ic_whatsapp_right_arrow.xml
new file mode 100644
index 0000000000..be344f95d7
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/ic_whatsapp_right_arrow.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/navi-widgets/src/main/res/drawable/rounded_grey_4_radius_f5f5f5.xml b/navi-widgets/src/main/res/drawable/rounded_grey_4_radius_f5f5f5.xml
new file mode 100644
index 0000000000..efef0644a9
--- /dev/null
+++ b/navi-widgets/src/main/res/drawable/rounded_grey_4_radius_f5f5f5.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/navi-widgets/src/main/res/layout/advertisment_widget_layout.xml b/navi-widgets/src/main/res/layout/advertisment_widget_layout.xml
index 0d8014d8b5..da718c0ccc 100644
--- a/navi-widgets/src/main/res/layout/advertisment_widget_layout.xml
+++ b/navi-widgets/src/main/res/layout/advertisment_widget_layout.xml
@@ -147,24 +147,28 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_24"
- android:layout_marginBottom="@dimen/dp_24" />
+ android:layout_marginBottom="@dimen/dp_32" />
+
+
+
+
-
-
diff --git a/navi-widgets/src/main/res/layout/home_product_widget_layout.xml b/navi-widgets/src/main/res/layout/home_product_widget_layout.xml
index 5f2597fd6a..69b9375081 100644
--- a/navi-widgets/src/main/res/layout/home_product_widget_layout.xml
+++ b/navi-widgets/src/main/res/layout/home_product_widget_layout.xml
@@ -115,11 +115,36 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_24"
- android:layout_marginBottom="@dimen/dp_16"
- app:layout_constraintBottom_toTopOf="@id/product_strategy"
+ android:layout_marginBottom="@dimen/dp_6"
+ app:layout_goneMarginBottom="@dimen/dp_16"
+ app:layout_constraintBottom_toTopOf="@id/disclaimer_tv"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/product_subtitle" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/error/activity/ErrorScreenV2Activity.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/ErrorScreenV2Activity.kt
similarity index 91%
rename from app/src/main/java/com/naviapp/personalloanrevamp/error/activity/ErrorScreenV2Activity.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/ErrorScreenV2Activity.kt
index 5c0e204886..4a72019919 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/error/activity/ErrorScreenV2Activity.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/ErrorScreenV2Activity.kt
@@ -5,8 +5,9 @@
*
*/
-package com.naviapp.personalloanrevamp.error.activity
+package com.navi.pl.dynamic.activity
+import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
@@ -15,6 +16,7 @@ import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
+import com.google.android.play.core.splitcompat.SplitCompat
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.model.CtaData
import com.navi.base.model.StyledTextWithIconCode
@@ -27,7 +29,11 @@ import com.navi.common.network.models.GenericErrorResponse
import com.navi.common.ui.activity.BaseActivity
import com.navi.common.utils.log
import com.navi.common.utils.observeNonNull
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.activity.LoanEligibilityLoaderV2Activity.Companion.IS_UW_REJECTION
+import com.navi.pl.dynamic.databinding.PlActivityErrorScreenV2Binding
+import com.navi.pl.dynamic.fragment.ErrorV2Fragment
+import com.navi.pl.dynamic.fragment.MFIErrorFragmentV2
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.navigator.NaviDeepLinkNavigator
@@ -35,20 +41,21 @@ import com.naviapp.common.navigator.ScreenNavigator
import com.naviapp.common.viewmodel.ActiveLoanDetailsVM
import com.naviapp.dashboard.rating.RatingActivity
import com.naviapp.dashboard.rating.RatingChangeListener
-import com.naviapp.databinding.ActivityErrorScreenV2Binding
import com.naviapp.errors.viewmodels.ErrorVM
import com.naviapp.models.RedirectPageStatus
import com.naviapp.personalloan.getloan.activities.GetLoanActivity
import com.naviapp.personalloan.getloan.common.fragment.CustomerSupportFragment
-import com.naviapp.personalloanrevamp.error.fragments.ErrorV2Fragment
-import com.naviapp.personalloanrevamp.error.fragments.MFIErrorFragmentV2
import com.naviapp.personalloanrevamp.models.FLOW_REJECTION
import com.naviapp.personalloanrevamp.models.RejectionDetailsResponseV2
-import com.naviapp.personalloanrevamp.useridentificationv2.activities.LoanEligibilityLoaderV2Activity.Companion.IS_UW_REJECTION
-import com.naviapp.utils.*
+import com.naviapp.utils.Constants
+import com.naviapp.utils.EMPTY
+import com.naviapp.utils.getLendingModuleNameFromWidgetId
+import com.naviapp.utils.hideRatingWidget
+import com.naviapp.utils.showRatingWidget
+import com.naviapp.R as appR
class ErrorScreenV2Activity : BaseActivity(), NaviHeaderView.InteractionListener {
- private lateinit var binding: ActivityErrorScreenV2Binding
+ private lateinit var binding: PlActivityErrorScreenV2Binding
private var errorData: GenericErrorResponse? = null
private var redirectStatusData: RedirectPageStatus? = null
@@ -69,7 +76,7 @@ class ErrorScreenV2Activity : BaseActivity(), NaviHeaderView.InteractionListener
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initializeData(savedInstanceState)
- binding = DataBindingUtil.setContentView(this, R.layout.activity_error_screen_v2)
+ binding = DataBindingUtil.setContentView(this, R.layout.pl_activity_error_screen_v2)
super.setContentView(binding.root)
initError(viewModel, actionErrorV2Enabled = true)
initObservers()
@@ -134,12 +141,12 @@ class ErrorScreenV2Activity : BaseActivity(), NaviHeaderView.InteractionListener
error.content?.nextCta?.let {
binding.primaryAction.visibility = View.VISIBLE
binding.primaryAction.setProperties(
- error.content.nextCta.title ?: resources.getString(R.string.go_home)
+ it.title ?: resources.getString(appR.string.go_home)
)
binding.primaryAction.setOnClickListener {
NaviDeepLinkNavigator.navigate(
this,
- CtaData(url = error.content.nextCta.url),
+ CtaData(url = error.content?.nextCta?.url),
null
)
}
@@ -257,9 +264,9 @@ class ErrorScreenV2Activity : BaseActivity(), NaviHeaderView.InteractionListener
}
}
binding.ratingViewLay.isVisible = true
- binding.ratingViewLay.setBackgroundResource(R.drawable.bg_rounded_rect_with_shadow)
+ binding.ratingViewLay.setBackgroundResource(appR.drawable.bg_rounded_rect_with_shadow)
binding.ratingViewLay.setListener(ratingListener)
- binding.ratingViewLay.setData(getString(R.string.rate_us))
+ binding.ratingViewLay.setData(getString(appR.string.rate_us))
showRatingWidget(binding.ratingViewLay, this)
analyticsEventTracker.onRatingWidgetShown()
}
@@ -375,7 +382,12 @@ class ErrorScreenV2Activity : BaseActivity(), NaviHeaderView.InteractionListener
const val PROFILE_NOT_ELIGIBLE_DUE_TO_MFI = "PROFILE_NOT_ELIGIBLE_DUE_TO_MFI"
const val APPLICATION_ON_HOLD = "APPLICATION_ON_HOLD"
const val ERROR_TYPE = "ERROR_TYPE"
- const val LOAN_OFFER_EXPIRED = "LOAN_OFFER_EXPIRED"
- const val SYSTEM_UNDER_MAINTENANCE = "SYSTEM_UNDER_MAINTENANCE"
+ }
+
+ override fun attachBaseContext(newBase: Context?) {
+ super.attachBaseContext(newBase)
+ if (newBase != null) {
+ SplitCompat.installActivity(newBase)
+ }
}
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/GetLoanV2Activity.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/GetLoanV2Activity.kt
similarity index 93%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/GetLoanV2Activity.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/GetLoanV2Activity.kt
index cb45e9e485..20d0028e9b 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/GetLoanV2Activity.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/GetLoanV2Activity.kt
@@ -5,9 +5,10 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.activities
+package com.navi.pl.dynamic.activity
import android.app.Activity
+import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Handler
@@ -22,6 +23,7 @@ import co.hyperverge.hypersnapsdk.objects.HVError
import co.hyperverge.hypersnapsdk.objects.HVResponse
import com.digitap.dtokyc.exception.DTException
import com.digitap.dtokyc.handler.OKYCListener
+import com.google.android.play.core.splitcompat.SplitCompat
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.model.CtaData
import com.navi.base.model.LineItem
@@ -41,7 +43,16 @@ import com.navi.common.utils.log
import com.navi.payment.razorpay.RazorpayHelper
import com.navi.payment.utils.PaymentAnalytics
import com.navi.payment.utils.ProviderType
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.activity.ErrorScreenV2Activity.Companion.IS_KYC_REJECTION
+import com.navi.pl.dynamic.activity.LoanEligibilityLoaderV2Activity.Companion.OFFER
+import com.navi.pl.dynamic.databinding.PlActivityGetLoanV2Binding
+import com.navi.pl.dynamic.fragment.KycV2Fragment
+import com.navi.pl.dynamic.fragment.LoanDetailsEditorFragment
+import com.navi.pl.dynamic.fragment.VideoKycV2Fragment
+import com.navi.pl.dynamic.helper.AddressHelper.isValidRequestCode
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
+import com.navi.pl.dynamic.listener.UpdateKycStateListener
import com.naviapp.analytics.utils.LoadTimeEventTracker
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
@@ -49,10 +60,13 @@ import com.naviapp.common.listeners.BackListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.ActivityGetLoanV2Binding
import com.naviapp.models.EnachData
import com.naviapp.models.RedirectPageStatus
-import com.naviapp.models.request.*
+import com.naviapp.models.request.EnachRequest
+import com.naviapp.models.request.FailurePayload
+import com.naviapp.models.request.SelfieSetting
+import com.naviapp.models.request.SelfieUploadRequestData
+import com.naviapp.models.request.SuccessPayload
import com.naviapp.models.response.EnachMandateDetailsResponse
import com.naviapp.network.ApiConstants
import com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels.EnachSharedVM
@@ -69,15 +83,8 @@ import com.naviapp.personalloan.getloan.kyc.models.AadhaarVerificationData
import com.naviapp.personalloan.getloan.kyc.models.SupportedOvd
import com.naviapp.personalloan.getloan.kyc.utils.DocumentType
import com.naviapp.personalloan.getloan.kyc.viewmodels.KycSharedVM
-import com.naviapp.personalloanrevamp.addressverificationrevamp.helper.AddressHelper.isValidRequestCode
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity.Companion.IS_KYC_REJECTION
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.LoanDetailsV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
+import com.naviapp.personalloanrevamp.getloanRevamp.fragments.BankDetailsAutoDebitV2Fragment
import com.naviapp.personalloanrevamp.getloanRevamp.viewmodels.GetLoanV2SharedVM
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment
-import com.naviapp.personalloanrevamp.kyc.fragment.VideoKycV2Fragment
-import com.naviapp.personalloanrevamp.kyc.listener.UpdateKycStateListener
-import com.naviapp.personalloanrevamp.useridentificationv2.activities.LoanEligibilityLoaderV2Activity.Companion.OFFER
import com.naviapp.personalloanrevamp.models.EMPTY_ERROR_CODE_BY_3rd_PARTY
import com.naviapp.personalloanrevamp.models.EMPTY_REASON_BY_3rd_PARTY
import com.naviapp.selfiecapture.SelfieErrorData
@@ -90,21 +97,20 @@ import com.naviapp.utils.EMPTY
import com.naviapp.utils.IconUtils
import com.razorpay.PaymentData
import com.razorpay.PaymentResultWithDataListener
-import dagger.hilt.android.AndroidEntryPoint
import `in`.digio.sdk.esign.DigioResponse
import `in`.digio.sdk.esign.DigioResponseListener
import org.json.JSONObject
+import com.naviapp.R as appR
-@AndroidEntryPoint
class GetLoanV2Activity : BaseActivity(), FragmentInteractionListener,
- NaviHeaderView.InteractionListener, LoanDetailsV2Fragment.UpdateUiListener,
+ NaviHeaderView.InteractionListener, BankDetailsAutoDebitV2Fragment.UpdateUiListener,
UpdateKycStateListener, SelfieCaptureListener, AadhaarVerificationListener, OKYCListener,
PaymentResultWithDataListener, DigioResponseListener, EnachProvider,
DocCaptureCompletionHandler, EnachListener {
private val kycSharedVM by lazy { ViewModelProvider(this)[KycSharedVM::class.java] }
private var currentScreen: String = EMPTY
- private lateinit var binding: ActivityGetLoanV2Binding
+ private lateinit var binding: PlActivityGetLoanV2Binding
private val sharedVM by lazy { ViewModelProvider(this)[GetLoanV2SharedVM::class.java] }
private val loadTimeEventTracker = LoadTimeEventTracker()
private val selfieVerificationHelper: SelfieVerificationHelper? by lazy {
@@ -122,7 +128,7 @@ class GetLoanV2Activity : BaseActivity(), FragmentInteractionListener,
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = DataBindingUtil.setContentView(this, R.layout.activity_get_loan_v2)
+ binding = DataBindingUtil.setContentView(this, R.layout.pl_activity_get_loan_v2)
super.setContentView(binding.root)
initListeners()
handleIntentData()
@@ -149,9 +155,9 @@ class GetLoanV2Activity : BaseActivity(), FragmentInteractionListener,
override fun navigateTo(screen: String, bundle: Bundle?) {
deInitSharedObservers()
if (isDead()) return
- val fragmentTag = GetLoanV2ViewHelper.getTag(screen)
+ val fragmentTag = GetLoanV2Helper.getTag(screen)
val fragment = supportFragmentManager.findFragmentByTag(fragmentTag)
- ?: GetLoanV2ViewHelper.getFragment(screen, bundle)
+ ?: GetLoanV2Helper.getFragment(screen, bundle)
fragment?.let { frag ->
frag.arguments = bundle ?: Bundle()
@@ -182,7 +188,7 @@ class GetLoanV2Activity : BaseActivity(), FragmentInteractionListener,
override fun onActivityCompleted(screen: String?, bundle: Bundle?) {}
private fun updateCurrentScreen(screen: String, bundle: Bundle? = null) {
- currentScreen = GetLoanV2ViewHelper.getScreenName(screen, bundle)
+ currentScreen = GetLoanV2Helper.getScreenName(screen, bundle)
}
override fun getCurrentFragmentScreenName(): String {
@@ -318,7 +324,7 @@ class GetLoanV2Activity : BaseActivity(), FragmentInteractionListener,
Handler(Looper.getMainLooper()).postDelayed(
{
binding.autopaySuccessAnimationHolderFl.setBackgroundColor(
- ContextCompat.getColor(this, R.color.green)
+ ContextCompat.getColor(this, appR.color.green)
)
startAnimationWhiteBackground()
}, Constants.SUCCESS_ANIMATION_WHITE_BG_TIME
@@ -329,7 +335,7 @@ class GetLoanV2Activity : BaseActivity(), FragmentInteractionListener,
Handler(Looper.getMainLooper()).postDelayed(
{
binding.autopaySuccessAnimationHolderFl.setBackgroundColor(
- ContextCompat.getColor(this, R.color.white)
+ ContextCompat.getColor(this, appR.color.white)
)
}, Constants.SUCCESS_ANIMATION_GREEN_BG_TIME
)
@@ -523,7 +529,7 @@ class GetLoanV2Activity : BaseActivity(), FragmentInteractionListener,
Handler(Looper.getMainLooper()).postDelayed(
{
binding.kycSuccessAnimationHolderFl.setBackgroundColor(
- ContextCompat.getColor(this, R.color.green)
+ ContextCompat.getColor(this, appR.color.green)
)
startKycAnimationWhiteBackground()
}, Constants.SUCCESS_ANIMATION_WHITE_BG_TIME
@@ -534,7 +540,7 @@ class GetLoanV2Activity : BaseActivity(), FragmentInteractionListener,
Handler(Looper.getMainLooper()).postDelayed(
{
binding.kycSuccessAnimationHolderFl.setBackgroundColor(
- ContextCompat.getColor(this, R.color.white)
+ ContextCompat.getColor(this, appR.color.white)
)
}, Constants.SUCCESS_ANIMATION_GREEN_BG_TIME
)
@@ -679,4 +685,10 @@ class GetLoanV2Activity : BaseActivity(), FragmentInteractionListener,
}
}
+ override fun attachBaseContext(newBase: Context?) {
+ super.attachBaseContext(newBase)
+ if (newBase != null) {
+ SplitCompat.installActivity(newBase)
+ }
+ }
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/IntermediateV2Activity.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/IntermediateV2Activity.kt
similarity index 89%
rename from app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/IntermediateV2Activity.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/IntermediateV2Activity.kt
index e70ab0dd0b..4a599eae63 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/IntermediateV2Activity.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/IntermediateV2Activity.kt
@@ -5,14 +5,16 @@
*
*/
-package com.naviapp.personalloanrevamp.intermediatev2
+package com.navi.pl.dynamic.activity
import android.app.Activity
+import android.content.Context
import android.os.Bundle
import android.view.View
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
+import com.google.android.play.core.splitcompat.SplitCompat
import com.navi.base.model.CtaData
import com.navi.base.model.StyledTextWithIconCode
import com.navi.base.utils.orFalse
@@ -20,30 +22,29 @@ import com.navi.common.listeners.FragmentInterchangeListener
import com.navi.common.model.ModuleNameV2
import com.navi.common.ui.activity.BaseActivity
import com.navi.common.ui.fragment.BaseFragment
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.databinding.PlActivityIntermediateV2Binding
+import com.navi.pl.dynamic.helper.IntermediateV2Helper
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.listeners.BackListener
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.ActivityIntermediateV2Binding
import com.naviapp.models.SubPageStatusType
import com.naviapp.personalloan.getloan.bankdetails.viewmodels.AggregatorSharedVM
import com.naviapp.personalloan.getloan.common.fragment.CustomerSupportFragment
-import com.naviapp.personalloanrevamp.intermediatev2.helper.IntermediateV2Helper
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.REDIRECTED_FROM_POSITIVE_REINFORCEMENT
import com.naviapp.utils.EMPTY
import com.naviapp.utils.IconUtils
-import dagger.hilt.android.AndroidEntryPoint
+import com.naviapp.R as appR
-@AndroidEntryPoint
class IntermediateV2Activity :
BaseActivity(),
View.OnClickListener,
FragmentInterchangeListener,
NaviHeaderView.InteractionListener {
- private lateinit var binding: ActivityIntermediateV2Binding
+ private lateinit var binding: PlActivityIntermediateV2Binding
private var currentScreen: String? = null
private val helpEventTracker by lazy { NaviAnalytics.naviAnalytics.Faq() }
private var headerLeftIconCode: String? = null
@@ -56,7 +57,7 @@ class IntermediateV2Activity :
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = DataBindingUtil.setContentView(this, R.layout.activity_intermediate_v2)
+ binding = DataBindingUtil.setContentView(this, R.layout.pl_activity_intermediate_v2)
super.setContentView(binding.root)
redirectedFromPositiveReinforcement = intent?.getStringExtra(REDIRECTED_FROM_POSITIVE_REINFORCEMENT).toBoolean()
val screenTag = intent?.extras?.getString(Constants.REDIRECT_STATUS)
@@ -73,7 +74,7 @@ class IntermediateV2Activity :
setProperties(
EMPTY,
IconUtils.ICON_CROSS_BLACK,
- CtaData(title = resources.getString(R.string.help))
+ CtaData(title = resources.getString(appR.string.help))
)
}
@@ -96,10 +97,10 @@ class IntermediateV2Activity :
override fun onClick(v: View?) {
when (v?.id) {
- R.id.back_iv -> {
+ appR.id.back_iv -> {
onBackPressed()
}
- R.id.help_iv -> openHelpInfo()
+ appR.id.help_iv -> openHelpInfo()
}
}
@@ -204,4 +205,11 @@ class IntermediateV2Activity :
companion object {
const val KEY_NEEDS_RESULT = "KEY_NEEDS_RESULT"
}
+
+ override fun attachBaseContext(newBase: Context?) {
+ super.attachBaseContext(newBase)
+ if (newBase != null) {
+ SplitCompat.installActivity(newBase)
+ }
+ }
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/LoanAgreementV2Activity.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/LoanAgreementV2Activity.kt
similarity index 93%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/LoanAgreementV2Activity.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/LoanAgreementV2Activity.kt
index 2c76052281..305eed62be 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/LoanAgreementV2Activity.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/LoanAgreementV2Activity.kt
@@ -5,16 +5,19 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.activities
+package com.navi.pl.dynamic.activity
import android.app.Activity
+import android.content.Context
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
+import com.google.android.play.core.splitcompat.SplitCompat
import com.navi.base.sharedpref.PreferenceManager
+import com.navi.base.utils.orElse
import com.navi.common.firebasedb.FirebaseStatusType
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
import com.navi.common.model.ModuleNameV2
@@ -22,23 +25,21 @@ import com.navi.common.model.RequestConfig
import com.navi.common.ui.activity.BaseActivity
import com.navi.common.utils.ApiPollScheduler
import com.navi.common.utils.observeNonNull
-import com.navi.insurance.util.FirebaseRemoteConfigUtils
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.databinding.PlActivityLoanAgreementV2Binding
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
-import com.naviapp.databinding.ActivityLoanAgreementV2Binding
import com.naviapp.personalloan.getloan.common.fragment.CustomerSupportFragment
import com.naviapp.personalloanrevamp.getloanRevamp.viewmodels.LoanAgreementV2VM
import com.naviapp.personalloanrevamp.models.response.FetchLoanAgreementV2Response
import com.naviapp.utils.Constants
import com.naviapp.utils.LOAN_APPLICATION_ID
import com.naviapp.utils.NaviDownloadManager
-import com.navi.base.utils.orElse
import java.lang.ref.WeakReference
class LoanAgreementV2Activity : BaseActivity(), NaviHeaderView.InteractionListener {
- private lateinit var binding: ActivityLoanAgreementV2Binding
+ private lateinit var binding: PlActivityLoanAgreementV2Binding
private val viewModel by lazy { ViewModelProvider(this)[LoanAgreementV2VM::class.java] }
private var downloadManager: NaviDownloadManager? = null
private var loanAgreementV2Data: FetchLoanAgreementV2Response? = null
@@ -46,7 +47,7 @@ class LoanAgreementV2Activity : BaseActivity(), NaviHeaderView.InteractionListen
private val loanAgreementEventTracker by lazy { NaviAnalytics.naviAnalytics.LoanAgreement(screenName) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = DataBindingUtil.setContentView(this, R.layout.activity_loan_agreement_v2)
+ binding = DataBindingUtil.setContentView(this, R.layout.pl_activity_loan_agreement_v2)
super.setContentView(binding.root)
initError(viewModel, actionErrorV2Enabled = true)
initListeners()
@@ -185,7 +186,7 @@ class LoanAgreementV2Activity : BaseActivity(), NaviHeaderView.InteractionListen
}
private fun fetchLoanAgreementPollingDetails() {
- val isDataPollingEnabled = FirebaseRemoteConfigUtils.getBoolean(FirebaseRemoteConfigHelper.ENABLE_DATA_POLLING_ON_LOAN_AGREEMENT)
+ val isDataPollingEnabled = FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.ENABLE_DATA_POLLING_ON_LOAN_AGREEMENT)
if(isDataPollingEnabled){
PreferenceManager.getStringPreference(LOAN_APPLICATION_ID)?.let {
startShimmer()
@@ -242,4 +243,11 @@ class LoanAgreementV2Activity : BaseActivity(), NaviHeaderView.InteractionListen
const val SANCTION_LETTER_FILE_NAME = "Navi_Personal_loan_Sanction_letter"
const val BALANCE_TRANSFER_FILE_NAME = "Balance_Transfer_Request_letter"
}
+
+ override fun attachBaseContext(newBase: Context?) {
+ super.attachBaseContext(newBase)
+ if (newBase != null) {
+ SplitCompat.installActivity(newBase)
+ }
+ }
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/LoanDisbursementLoaderV2Activity.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/LoanDisbursementLoaderV2Activity.kt
similarity index 90%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/LoanDisbursementLoaderV2Activity.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/LoanDisbursementLoaderV2Activity.kt
index a7a400f708..b64f7b6c13 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/activities/LoanDisbursementLoaderV2Activity.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/LoanDisbursementLoaderV2Activity.kt
@@ -5,8 +5,9 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.activities
+package com.navi.pl.dynamic.activity
+import android.content.Context
import android.os.Bundle
import android.os.CountDownTimer
import android.os.Handler
@@ -16,6 +17,7 @@ import android.view.View
import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
+import com.google.android.play.core.splitcompat.SplitCompat
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.model.CtaData
import com.navi.base.sharedpref.PreferenceManager
@@ -23,32 +25,40 @@ import com.navi.base.utils.orElse
import com.navi.base.utils.orFalse
import com.navi.base.utils.orZero
import com.navi.common.constants.MESSAGE_TEXT
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.DISBURSEMENT
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.PreviousScreenNameRequest
import com.navi.common.model.RequestConfig
import com.navi.common.ui.activity.BaseActivity
-import com.navi.common.utils.*
+import com.navi.common.utils.ApiPollScheduler
+import com.navi.common.utils.observeNonNull
+import com.navi.common.utils.observeNullable
import com.navi.naviwidgets.models.response.RewardWidget
import com.navi.naviwidgets.models.response.RewardWidgetData
import com.navi.naviwidgets.utils.FORWARD_SLASH
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.databinding.PlActivityLoanDisbursementLoaderV2Binding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.naviapp.analytics.utils.LoadTimeEventTracker
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.ActivityLoanDisbursementLoaderV2Binding
import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloan.getloan.viewmodels.LoanDisbursementVM
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.rewards.ui.RewardDelightActivity
-import com.naviapp.utils.*
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.LONG_ZERO
import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
+import com.naviapp.utils.LOAN_APPLICATION_ID
+import com.naviapp.utils.appendStrings
+import com.naviapp.R as appR
class LoanDisbursementLoaderV2Activity : BaseActivity() {
- private lateinit var binding: ActivityLoanDisbursementLoaderV2Binding
+ private lateinit var binding: PlActivityLoanDisbursementLoaderV2Binding
private val viewModel by lazy { ViewModelProvider(this).get(LoanDisbursementVM::class.java) }
private var timer: CountDownTimer? = null
private val analyticsEventTracker = NaviAnalytics.naviAnalytics.FullPageProcessingDetail(screenName)
@@ -57,7 +67,7 @@ class LoanDisbursementLoaderV2Activity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding =
- DataBindingUtil.setContentView(this, R.layout.activity_loan_disbursement_loader_v2)
+ DataBindingUtil.setContentView(this, R.layout.pl_activity_loan_disbursement_loader_v2)
super.setContentView(binding.root)
NaviTrackEvent.sendScreenTransitionEvent(screenName)
initError()
@@ -194,7 +204,7 @@ class LoanDisbursementLoaderV2Activity : BaseActivity() {
url =
NaviDeepLinkNavigator.LOAN_APPLICATION_V2.appendStrings(
FORWARD_SLASH.toString(),
- GetLoanV2ViewHelper.MONEY_DISBURSEMENT_STATUS_V2
+ GetLoanV2Helper.MONEY_DISBURSEMENT_STATUS_V2
)
),
bundle =
@@ -215,7 +225,7 @@ class LoanDisbursementLoaderV2Activity : BaseActivity() {
)
data?.requestId?.let {
binding.statusDetailsTv.text =
- data.details?.message ?: getString(R.string.sending_amount)
+ data.details?.message ?: getString(appR.string.sending_amount)
initFirebase(it, data.notificationPath.orEmpty())
apiPollInit(it, data.requestConfig)
}
@@ -268,7 +278,7 @@ class LoanDisbursementLoaderV2Activity : BaseActivity() {
}
private fun handleTimeOutError() {
- binding.statusTv.text = resources.getString(R.string.longer_than_usual)
+ binding.statusTv.text = resources.getString(appR.string.longer_than_usual)
binding.statusDetailsTv.text = viewModel.loanDisbursementResponse.value?.details?.message
binding.knowMoreTv.text = null
binding.knowMoreTv.visibility = View.VISIBLE
@@ -311,8 +321,8 @@ class LoanDisbursementLoaderV2Activity : BaseActivity() {
}
private fun initUi() {
- binding.statusTv.text = getString(R.string.please_wait)
- binding.statusDetailsTv.text = getString(R.string.empty_string)
+ binding.statusTv.text = getString(appR.string.please_wait)
+ binding.statusDetailsTv.text = getString(appR.string.empty_string)
loadTimeEventTracker.onLoadingStarted(NaviAnalytics.PL_LOAN_DISBURSEMENT_LOAD_TIME)
fetchDisbursementStatus()
analyticsEventTracker.onPLLoanDisbursementPageLand()
@@ -388,7 +398,7 @@ class LoanDisbursementLoaderV2Activity : BaseActivity() {
.postDelayed(
{
binding.successAnimationHolderFl.setBackgroundColor(
- ContextCompat.getColor(this, R.color.green)
+ ContextCompat.getColor(this, appR.color.green)
)
startAnimationWhiteBackground()
},
@@ -401,7 +411,7 @@ class LoanDisbursementLoaderV2Activity : BaseActivity() {
.postDelayed(
{
binding.successAnimationHolderFl.setBackgroundColor(
- ContextCompat.getColor(this, R.color.white)
+ ContextCompat.getColor(this, appR.color.white)
)
},
Constants.SUCCESS_ANIMATION_GREEN_BG_TIME
@@ -412,7 +422,7 @@ class LoanDisbursementLoaderV2Activity : BaseActivity() {
analyticsEventTracker.onLoanDisbursalSuccessMessageShown()
loadTimeEventTracker.onLoadingCompleted(NaviAnalytics.PL_LOAN_DISBURSEMENT_LOAD_TIME)
if(showSuccessAnimation.orFalse()) {
- binding.statusTv.text = getString(R.string.success)
+ binding.statusTv.text = getString(appR.string.success)
binding.statusDetailsTv.text = message
binding.loaderG.visibility = View.GONE
binding.successAnimationHolderFl.visibility = View.VISIBLE
@@ -442,4 +452,11 @@ class LoanDisbursementLoaderV2Activity : BaseActivity() {
private const val NEXT_SCREEN_TRANSITION_DELAY = 1000L
private const val NUMBER_OF_RETRY = 12
}
+
+ override fun attachBaseContext(newBase: Context?) {
+ super.attachBaseContext(newBase)
+ if (newBase != null) {
+ SplitCompat.installActivity(newBase)
+ }
+ }
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/LoanEligibilityLoaderV2Activity.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/LoanEligibilityLoaderV2Activity.kt
similarity index 95%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/LoanEligibilityLoaderV2Activity.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/LoanEligibilityLoaderV2Activity.kt
index b9e87732cf..96a4cbe456 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/LoanEligibilityLoaderV2Activity.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/LoanEligibilityLoaderV2Activity.kt
@@ -1,12 +1,13 @@
/*
*
- * * Copyright © 2022-2023 by Navi Technologies Limited
+ * * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.activities
+package com.navi.pl.dynamic.activity
+import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.CountDownTimer
@@ -18,33 +19,51 @@ import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
+import com.google.android.play.core.splitcompat.SplitCompat
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.model.CtaData
import com.navi.base.sharedpref.PreferenceManager
import com.navi.base.utils.isNotNull
+import com.navi.base.utils.orElse
import com.navi.base.utils.orFalse
import com.navi.base.utils.orTrue
import com.navi.base.utils.orZero
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.OFFER_GENERATE
+import com.navi.common.firebasedb.PERMISSION
+import com.navi.common.firebasedb.PRE_ELIGIBILITY
+import com.navi.common.firebasedb.UPDATE_LOCATION
import com.navi.common.lottie.LottieRemoteHelper
import com.navi.common.managers.NaviLocationManager
import com.navi.common.managers.PermissionsManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.RequestConfig
import com.navi.common.model.UploadDataAsyncResponse
-import com.navi.common.utils.*
+import com.navi.common.utils.ApiPollScheduler
+import com.navi.common.utils.CommonNaviAnalytics
+import com.navi.common.utils.getNetworkType
+import com.navi.common.utils.getScreenRefreshRate
+import com.navi.common.utils.observeNonNull
+import com.navi.common.utils.observeNullable
+import com.navi.common.utils.setEaseInAnimation
import com.navi.naviwidgets.extensions.setLottieAnimationData
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
import com.navi.naviwidgets.utils.LottieEnums
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.databinding.PlActivityLoanEligibilityLoaderV2Binding
+import com.navi.pl.dynamic.fragment.PanVerificationBottomSheet
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
+import com.navi.uitron.model.data.TextData
import com.navi.uitron.render.UiTronRenderer
-import com.naviapp.R
import com.naviapp.analytics.utils.LoadTimeEventTracker
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.analytics.utils.NaviAnalytics.Companion.NO
import com.naviapp.analytics.utils.NaviAnalytics.Companion.PERMISSION_POLLING_START_TIME
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.ActivityLoanEligibilityLoaderV2Binding
import com.naviapp.manager.viewmodel.UserDataViewModel
import com.naviapp.models.OfferUpgradeConfig
import com.naviapp.models.TextTimerConfig
@@ -56,9 +75,6 @@ import com.naviapp.permission.viewmodel.PermissionViewModel
import com.naviapp.personalloan.getloan.activities.GetLoanActivity
import com.naviapp.personalloan.getloan.loandetails.viewmodels.LoanDetailsVM
import com.naviapp.personalloan.intermediate.activity.IntermediateActivity
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.PanVerificationBottomSheet
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.personalloanrevamp.models.FLOW_OFFER_GENERATION
import com.naviapp.receiver.WifiTrackerBaseActivity
import com.naviapp.utils.Constants
@@ -90,17 +106,13 @@ import com.naviapp.utils.Constants.SUCCESS_ANIMATION_WHITE_BG_TIME
import com.naviapp.utils.Constants.USER_EXIT
import com.naviapp.utils.IntentConstants
import com.naviapp.utils.OFFER_ID
-import com.navi.base.utils.orElse
-import com.navi.uitron.model.data.TextData
-import dagger.hilt.android.AndroidEntryPoint
import getDataId
import kotlinx.coroutines.launch
-import javax.inject.Inject
+import com.naviapp.R as appR
-@AndroidEntryPoint
class LoanEligibilityLoaderV2Activity : WifiTrackerBaseActivity() {
- private lateinit var binding: ActivityLoanEligibilityLoaderV2Binding
+ private lateinit var binding: PlActivityLoanEligibilityLoaderV2Binding
private val loanDetailsVM by lazy { ViewModelProvider(this).get(LoanDetailsVM::class.java) }
private val userDataViewModel by lazy {
ViewModelProvider(this)[UserDataViewModel::class.java]
@@ -118,15 +130,16 @@ class LoanEligibilityLoaderV2Activity : WifiTrackerBaseActivity() {
private var panVerificationType: String? = null
private var lottieUrl: String? = null
private val naviLocationManager = NaviLocationManager()
- @Inject lateinit var lottieRemoteHelper: LottieRemoteHelper
+ private lateinit var lottieRemoteHelper: LottieRemoteHelper
private var offerUpgradeTimerCount:Int = 0
private var bankNotAvailableFlag: Boolean? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = DataBindingUtil.setContentView(this, R.layout.activity_loan_eligibility_loader_v2)
+ binding = DataBindingUtil.setContentView(this, R.layout.pl_activity_loan_eligibility_loader_v2)
super.setContentView(binding.root)
NaviTrackEvent.sendScreenTransitionEvent(screenName)
+ lottieRemoteHelper = LottieRemoteHelper(this)
initData()
initError()
submitPermission()
@@ -447,7 +460,7 @@ class LoanEligibilityLoaderV2Activity : WifiTrackerBaseActivity() {
ctaData = CtaData(
url =
NaviDeepLinkNavigator.LOAN_APPLICATION_V2.plus(Constants.DIVIDER)
- .plus(GetLoanV2ViewHelper.KYC_IN_REVIEW)
+ .plus(GetLoanV2Helper.KYC_IN_REVIEW)
),
bundle = Bundle().apply {
putString(FLOW_TYPE, CRIF)
@@ -928,7 +941,7 @@ class LoanEligibilityLoaderV2Activity : WifiTrackerBaseActivity() {
.postDelayed(
{
binding.successAnimationHolderFl.setBackgroundColor(
- ContextCompat.getColor(this, R.color.green)
+ ContextCompat.getColor(this, appR.color.green)
)
startAnimationWhiteBackground()
},
@@ -941,7 +954,7 @@ class LoanEligibilityLoaderV2Activity : WifiTrackerBaseActivity() {
.postDelayed(
{
binding.successAnimationHolderFl.setBackgroundColor(
- ContextCompat.getColor(this, R.color.white)
+ ContextCompat.getColor(this, appR.color.white)
)
},
SUCCESS_ANIMATION_GREEN_BG_TIME
@@ -1085,4 +1098,11 @@ class LoanEligibilityLoaderV2Activity : WifiTrackerBaseActivity() {
private const val UW_LOTTIE_URL = "UW_LOTTIE_URL"
private const val BANK_NOT_AVAILABLE_FLAG = "bankNotAvailableFlag"
}
+
+ override fun attachBaseContext(newBase: Context?) {
+ super.attachBaseContext(newBase)
+ if (newBase != null) {
+ SplitCompat.installActivity(newBase)
+ }
+ }
}
diff --git a/app/src/main/java/com/naviapp/dashboard/newloan/NewLoanConsentActivity.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/NewLoanConsentActivity.kt
similarity index 67%
rename from app/src/main/java/com/naviapp/dashboard/newloan/NewLoanConsentActivity.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/NewLoanConsentActivity.kt
index a5c8b7edd7..16b649b29f 100644
--- a/app/src/main/java/com/naviapp/dashboard/newloan/NewLoanConsentActivity.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/NewLoanConsentActivity.kt
@@ -1,14 +1,14 @@
/*
*
- * * Copyright © 2019 by Navi Technologies Private Limited
+ * * Copyright © 2019-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
-package com.naviapp.dashboard.newloan
+package com.navi.pl.dynamic.activity
import android.Manifest
-import android.content.pm.PackageManager
+import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@@ -16,24 +16,24 @@ import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.databinding.DataBindingUtil
import androidx.work.PeriodicWorkRequestBuilder
-import com.navi.common.managers.PermissionsManager
+import com.google.android.play.core.splitcompat.SplitCompat
import com.navi.base.model.CtaData
import com.navi.base.utils.orFalse
+import com.navi.common.managers.PermissionsManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.ui.activity.BaseActivity
import com.navi.common.utils.Constants
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.databinding.PlActivityNewLoanConsentBinding
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.navigator.NaviDeepLinkNavigator
-import com.naviapp.databinding.ActivityNewLoanConsentBinding
import com.naviapp.manager.WorkManager
import com.naviapp.manager.workers.UserSmsWorker
import com.naviapp.payment.models.UpcomingLoanDetail
-import com.naviapp.permission.fragments.PermissionDeniedFragment
-import com.naviapp.permission.utils.getPermissionDeniedData
import com.naviapp.personalloan.getloan.activities.GetLoanActivity
import com.naviapp.utils.dpToPx
import java.util.concurrent.TimeUnit
+import com.naviapp.R as appR
class NewLoanConsentActivity : BaseActivity(), View.OnClickListener {
companion object {
@@ -51,14 +51,12 @@ class NewLoanConsentActivity : BaseActivity(), View.OnClickListener {
super.onCreate(savedInstanceState)
permissionsManager = PermissionsManager(this)
readSmsData()
- val binding: ActivityNewLoanConsentBinding =
- DataBindingUtil.setContentView(this, R.layout.activity_new_loan_consent)
+ val binding: PlActivityNewLoanConsentBinding =
+ DataBindingUtil.setContentView(this, R.layout.pl_activity_new_loan_consent)
super.setContentView(binding.root)
upcomingLoanDetail =
intent.getParcelableExtra(KEY_UPCOMING_LOAN_DETAIL) ?: getUpcomingLoanDetails(
- intent.getParcelableExtra(
- KEY_UPCOMING_LOAN
- )
+ intent.getParcelableExtra(KEY_UPCOMING_LOAN)
)
upcomingLoanDetail?.let { initUI(binding, it) }
naviAnalyticsEventTracker.onDemandRepeatPageLand()
@@ -75,43 +73,10 @@ class NewLoanConsentActivity : BaseActivity(), View.OnClickListener {
when (v?.id) {
R.id.cta_button -> {
naviAnalyticsEventTracker.onDemandRepeatCheckOfferClicked()
- if (permissionsManager?.hasPermissions(arrayOf(Manifest.permission.READ_SMS))
- .orFalse()
- ) {
- readSmsData()
- goToNextScreen()
- } else {
- permissionsManager?.requestPermissions(arrayOf(Manifest.permission.READ_SMS))
- }
- }
- R.id.back_iv -> activityExit()
- }
- }
-
- override fun onRequestPermissionsResult(
- requestCode: Int,
- permissions: Array,
- grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- if (requestCode == PermissionsManager.REQUEST_CODE) {
- if (grantResults.first() == PackageManager.PERMISSION_GRANTED) {
readSmsData()
goToNextScreen()
- } else if (!permissionsManager?.shouldShowRequestPermissionRationale(
- this,
- Manifest.permission.READ_SMS
- ).orFalse()
- ) {
- getPermissionDeniedData(Manifest.permission.READ_SMS)?.let { data ->
- if (isFinishing) return
- PermissionDeniedFragment.getInstance(
- data,
- NaviAnalytics.READ_SMS_PERMISSION_BOTTOM_SHEET
- ).show(supportFragmentManager, PermissionDeniedFragment.TAG)
- }
}
-
+ appR.id.back_iv -> activityExit()
}
}
@@ -151,14 +116,14 @@ class NewLoanConsentActivity : BaseActivity(), View.OnClickListener {
}
private fun initUI(
- binding: ActivityNewLoanConsentBinding,
+ binding: PlActivityNewLoanConsentBinding,
upcomingLoanDetail: UpcomingLoanDetail
) {
binding.greetingTv.text = upcomingLoanDetail.banner
binding.titleTv.text = upcomingLoanDetail.title
upcomingLoanDetail.features?.forEach { feature ->
val itemView: TextView = LayoutInflater.from(this)
- .inflate(R.layout.item_loan_feature, binding.parentView, false) as TextView
+ .inflate(R.layout.pl_layout_item_loan_feature, binding.parentView, false) as TextView
itemView.text = feature
val layoutParams: ConstraintLayout.LayoutParams =
itemView.layoutParams as ConstraintLayout.LayoutParams
@@ -166,10 +131,10 @@ class NewLoanConsentActivity : BaseActivity(), View.OnClickListener {
binding.featuresView.addView(itemView, layoutParams)
}
var title = upcomingLoanDetail.cta?.title
- if (title.isNullOrEmpty()) title = resources.getString(R.string.loan_consent_cta)
+ if (title.isNullOrEmpty()) title = resources.getString(appR.string.loan_consent_cta)
binding.ctaButton.setProperties(
title,
- iconId = R.drawable.ic_arrow_right_white
+ iconId = appR.drawable.ic_arrow_right_white
)
binding.noteTv.text = upcomingLoanDetail.note
binding.ctaButton.setOnClickListener(this)
@@ -184,4 +149,11 @@ class NewLoanConsentActivity : BaseActivity(), View.OnClickListener {
note = temp?.note
)
}
+
+ override fun attachBaseContext(newBase: Context?) {
+ super.attachBaseContext(newBase)
+ if (newBase != null) {
+ SplitCompat.installActivity(newBase)
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/activity/PanVerificationLoaderActivity.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/PanVerificationLoaderActivity.kt
similarity index 91%
rename from app/src/main/java/com/naviapp/personalloanrevamp/kyc/activity/PanVerificationLoaderActivity.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/PanVerificationLoaderActivity.kt
index 2043efa52d..fa6d03a9ed 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/activity/PanVerificationLoaderActivity.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/PanVerificationLoaderActivity.kt
@@ -5,9 +5,10 @@
*
*/
-package com.naviapp.personalloanrevamp.kyc.activity
+package com.navi.pl.dynamic.activity
import android.Manifest
+import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
@@ -21,10 +22,15 @@ import androidx.browser.customtabs.CustomTabsIntent
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
+import com.google.android.play.core.splitcompat.SplitCompat
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.model.CtaData
import com.navi.base.utils.orFalse
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.VIDEO_KYC
import com.navi.common.managers.PermissionsManager
import com.navi.common.model.ModuleName
import com.navi.common.model.ModuleNameV2
@@ -34,31 +40,30 @@ import com.navi.common.utils.CommonUtils.getByteArray
import com.navi.common.utils.observeNonNull
import com.navi.common.utils.observeNullable
import com.navi.naviwidgets.utils.FORWARD_SLASH
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.adapter.KycItemType
+import com.navi.pl.dynamic.adapter.KycItemsV2Adapter
+import com.navi.pl.dynamic.databinding.PlActivityPanVerificationLoaderBinding
+import com.navi.pl.dynamic.fragment.KycV2Fragment
+import com.navi.pl.dynamic.fragment.VideoKycV2Fragment
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.navi.vkyc.presentation.activity.VKYCActivity
import com.naviapp.BuildConfig
-import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.PanVerificationLoaderActivityBinding
import com.naviapp.models.KycUiStatusValue
import com.naviapp.models.VideoKycStatusEnum
import com.naviapp.personalloan.getloan.kyc.models.SupportedOvd
import com.naviapp.personalloan.getloan.kyc.utils.DocumentType
import com.naviapp.personalloan.getloan.kyc.viewmodels.VideoKycVM
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
-import com.naviapp.personalloanrevamp.kyc.adapter.KycItemType
-import com.naviapp.personalloanrevamp.kyc.adapter.KycItemsV2Adapter
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment
-import com.naviapp.personalloanrevamp.kyc.fragment.VideoKycV2Fragment
import com.naviapp.utils.Constants
import kotlinx.coroutines.launch
-
+import com.naviapp.R as appR
class PanVerificationLoaderActivity : BaseActivity() {
- private lateinit var binding: PanVerificationLoaderActivityBinding
+ private lateinit var binding: PlActivityPanVerificationLoaderBinding
private val analyticsEventTracker by lazy { NaviAnalytics.naviAnalytics.Kyc() }
@@ -74,7 +79,7 @@ class PanVerificationLoaderActivity : BaseActivity() {
private val startCustomTabsForResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
- binding.statusTv.text = resources.getString(R.string.video_kyc_status)
+ binding.statusTv.text = resources.getString(appR.string.video_kyc_status)
analyticsEventTracker.onVideoKycCallbackToApp()
viewModel.startVideoKycStatusCheck()
}
@@ -105,7 +110,7 @@ class PanVerificationLoaderActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = DataBindingUtil.setContentView(this, R.layout.pan_verification_loader_activity)
+ binding = DataBindingUtil.setContentView(this, R.layout.pl_activity_pan_verification_loader)
getData()
initObserver()
initError(viewModel , actionErrorV2Enabled = true)
@@ -115,7 +120,7 @@ class PanVerificationLoaderActivity : BaseActivity() {
redirectionUrl = intent.getStringExtra(VideoKycV2Fragment.REDIRECT_URL) ?: intent.extras?.getString(VideoKycV2Fragment.REDIRECT_URL)
intent.extras?.getParcelable(Constants.PAN_SUPPORTED_OVD)?.let {
binding.statusTv.text =
- resources.getString(R.string.please_wait_we_are_verifying_your_document)
+ resources.getString(appR.string.please_wait_we_are_verifying_your_document)
onPANDocumentCaptureSuccess(it)
viewModel.setCurrentSelectedType(KycItemType.PAN.name)
analyticsEventTracker.onVKYCPANCaptured()
@@ -130,7 +135,7 @@ class PanVerificationLoaderActivity : BaseActivity() {
videoKycInit()
}
binding.statusTv.text =
- resources.getString(R.string.video_kyc_status)
+ resources.getString(appR.string.video_kyc_status)
}
}
}
@@ -152,7 +157,7 @@ class PanVerificationLoaderActivity : BaseActivity() {
if (videoKycItem?.status == KycItemsV2Adapter.COMPLETED) {
NaviDeepLinkNavigator.navigate(
this,
- CtaData(url = getRedirectionUrl() ?: GetLoanV2ViewHelper.KYC_V2),
+ CtaData(url = getRedirectionUrl() ?: GetLoanV2Helper.KYC_V2),
finish = true
)
} else {
@@ -213,7 +218,7 @@ class PanVerificationLoaderActivity : BaseActivity() {
NaviDeepLinkNavigator.navigate(
this,
CtaData(url = getRedirectionUrl()
- ?: (NaviDeepLinkNavigator.LOAN_APPLICATION_V2 + FORWARD_SLASH + GetLoanV2ViewHelper.KYC_V2)
+ ?: (NaviDeepLinkNavigator.LOAN_APPLICATION_V2 + FORWARD_SLASH + GetLoanV2Helper.KYC_V2)
),
finish = true
)
@@ -328,7 +333,7 @@ class PanVerificationLoaderActivity : BaseActivity() {
private fun startSuccessAnimations() {
binding.vkycSuccessAnimation.visibility = View.VISIBLE
- binding.vkycSuccessAnimation.setAnimation(com.navi.naviwidgets.R.raw.video_kyc_success)
+ binding.vkycSuccessAnimation.setAnimation(appR.raw.video_kyc_success)
binding.vkycSuccessAnimation.playAnimation()
startSuccessAnimationEndListener()
}
@@ -345,7 +350,7 @@ class PanVerificationLoaderActivity : BaseActivity() {
this,
viewModel.videoKycData.value?.ctaData ?: CtaData(
url = getRedirectionUrl()
- ?: GetLoanV2ViewHelper.KYC_ADDRESS_VERIFICATION
+ ?: GetLoanV2Helper.KYC_ADDRESS_VERIFICATION
),
finish = true
)
@@ -454,4 +459,11 @@ class PanVerificationLoaderActivity : BaseActivity() {
baseFirebaseDataReceiveListener = null
hideErrorScreen()
}
+
+ override fun attachBaseContext(newBase: Context?) {
+ super.attachBaseContext(newBase)
+ if (newBase != null) {
+ SplitCompat.installActivity(newBase)
+ }
+ }
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/PersonalLoanTrackerActivity.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/PersonalLoanTrackerActivity.kt
similarity index 74%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/PersonalLoanTrackerActivity.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/PersonalLoanTrackerActivity.kt
index 9ba4ea90f1..446a88a63a 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/PersonalLoanTrackerActivity.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/PersonalLoanTrackerActivity.kt
@@ -1,19 +1,13 @@
/*
*
- * * Copyright © 2022-2023 by Navi Technologies Limited
+ * * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.activities
-
-/*
- *
- * * Copyright © 2022 by Navi Technologies Private Limited
- * * All rights reserved. Strictly confidential
- *
- */
+package com.navi.pl.dynamic.activity
+import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@@ -21,8 +15,10 @@ import androidx.core.content.res.ResourcesCompat
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
+import com.google.android.play.core.splitcompat.SplitCompat
import com.google.gson.Gson
import com.navi.analytics.utils.NaviTrackEvent
+import com.navi.base.model.ActionData
import com.navi.base.model.GenericAnalyticsData
import com.navi.base.model.NaviClickAction
import com.navi.base.model.NaviWidgetClickWithActionData
@@ -30,26 +26,27 @@ import com.navi.common.model.ModuleNameV2
import com.navi.common.ui.activity.BaseActivity
import com.navi.common.utils.observeNonNull
import com.navi.common.utils.toCtaData
+import com.navi.design.textview.model.TextWithStyle
import com.navi.design.utils.getNaviDrawable
+import com.navi.design.utils.setSpannableString
import com.navi.naviwidgets.callbacks.WidgetCallback
import com.navi.naviwidgets.databinding.LayoutRewardsInfoBinding
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.adapter.PersonalLoanTrackerAdapter
+import com.navi.pl.dynamic.databinding.PlActivityPersonalLoanTrackerBinding
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.ActivityPersonalLoanTrackerBinding
import com.naviapp.personalloan.getloan.common.fragment.CustomerSupportFragment
import com.naviapp.personalloanrevamp.models.response.PersonalLoanTrackerResponse
-import com.naviapp.personalloanrevamp.useridentificationv2.adapter.PersonalLoanTrackerAdapter
import com.naviapp.personalloanrevamp.useridentificationv2.viewmodels.PersonalLoanTrackerVM
import com.naviapp.rewards.models.RewardsAnnouncementData
import com.naviapp.rewards.ui.RewardsAnnouncementFragment
-import dagger.hilt.android.AndroidEntryPoint
+import com.naviapp.R as appR
-@AndroidEntryPoint
class PersonalLoanTrackerActivity : BaseActivity(), View.OnClickListener, WidgetCallback {
- private lateinit var binding: ActivityPersonalLoanTrackerBinding
+ private lateinit var binding: PlActivityPersonalLoanTrackerBinding
private val viewModel by lazy { ViewModelProvider(this).get(PersonalLoanTrackerVM::class.java) }
private val widgetNaviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Widget()
private val naviAnalyticsEventTracker by lazy { NaviAnalytics.naviAnalytics.PersonalLoanTracker(screenName) }
@@ -57,7 +54,7 @@ class PersonalLoanTrackerActivity : BaseActivity(), View.OnClickListener, Widget
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = DataBindingUtil.setContentView(this, R.layout.activity_personal_loan_tracker)
+ binding = DataBindingUtil.setContentView(this, R.layout.pl_activity_personal_loan_tracker)
super.setContentView(binding.root)
readRewardsAnnouncementData()
initError(
@@ -105,9 +102,10 @@ class PersonalLoanTrackerActivity : BaseActivity(), View.OnClickListener, Widget
binding.nextBtn.background =
getNaviDrawable(
backgroundColor =
- ResourcesCompat.getColor(resources, R.color.outrageous_orange, null),
- cornerRadius = resources.getDimension(R.dimen.layout_dp_24).toInt()
+ ResourcesCompat.getColor(resources, appR.color.outrageous_orange, null),
+ cornerRadius = resources.getDimension(appR.dimen.layout_dp_8).toInt()
)
+ setNextCtaEnable(enabled = false)
}
private fun fetchPersonalLoanTrackerResponse() {
@@ -127,6 +125,7 @@ class PersonalLoanTrackerActivity : BaseActivity(), View.OnClickListener, Widget
binding.trackerBinder = response
binding.rootItem.isVisible = true
initTrackerAdapter(response)
+ initDisclaimer(response.content?.disclaimer)
response.content?.rewardsInfo?.let {
binding.rewardsLayout.update(
LayoutRewardsInfoBinding.inflate(
@@ -136,13 +135,23 @@ class PersonalLoanTrackerActivity : BaseActivity(), View.OnClickListener, Widget
),
it,
this,
- marginHorizontal = resources.getDimension(R.dimen.layout_dp_16),
- marginTop = resources.getDimension(R.dimen.layout_dp_25)
+ marginHorizontal = resources.getDimension(appR.dimen.layout_dp_16),
+ marginTop = resources.getDimension(appR.dimen.layout_dp_25)
)
binding.rewardsLayout.visibility = View.VISIBLE
}
}
+ private fun initDisclaimer(disclaimer: TextWithStyle?) {
+ binding.checkboxTv.setSpannableString(disclaimer) {
+ openLegalDocsOnBrowser(it)
+ }
+ }
+
+ private fun openLegalDocsOnBrowser(actionData: ActionData) {
+ NaviDeepLinkNavigator.navigate(this, actionData.toCtaData())
+ }
+
override fun onClick(naviClickAction: NaviClickAction, widgetId: String?) {
when (naviClickAction) {
is NaviWidgetClickWithActionData -> {
@@ -174,6 +183,8 @@ class PersonalLoanTrackerActivity : BaseActivity(), View.OnClickListener, Widget
binding.closeIv.setOnClickListener(this)
binding.nextBtn.setOnClickListener(this)
binding.rightIcon.setOnClickListener(this)
+ binding.checkboxLl.setOnClickListener(this)
+ binding.checkboxCb.setOnClickListener(this)
}
override fun onBackPressed() {
@@ -204,6 +215,8 @@ class PersonalLoanTrackerActivity : BaseActivity(), View.OnClickListener, Widget
R.id.close_iv -> onCrossButtonClicked()
R.id.next_btn -> onNextCtaClick()
R.id.right_icon -> openSupportScreen()
+ R.id.checkbox_ll -> onDisclaimerClicked()
+ R.id.checkbox_cb -> onCheckboxClicked()
}
}
@@ -213,12 +226,33 @@ class PersonalLoanTrackerActivity : BaseActivity(), View.OnClickListener, Widget
}
private fun onNextCtaClick() {
- naviAnalyticsEventTracker.onNextClicked()
+ naviAnalyticsEventTracker.onNextClicked(consentGiven = binding.checkboxCb.isChecked)
binding.trackerBinder?.footer?.nextCta?.let {
NaviDeepLinkNavigator.navigate(activity = this, ctaData = it, finish = true)
}
}
+ private fun onDisclaimerClicked() {
+ binding.checkboxCb.isChecked = !binding.checkboxCb.isChecked
+ processCheckboxClickAction()
+ }
+
+ private fun onCheckboxClicked() {
+ processCheckboxClickAction()
+ }
+
+ private fun processCheckboxClickAction() {
+ naviAnalyticsEventTracker.onCheckboxClicked(isChecked = binding.checkboxCb.isChecked)
+ setNextCtaEnable(enabled = binding.checkboxCb.isChecked)
+ }
+
+ private fun setNextCtaEnable(enabled: Boolean) {
+ binding.nextBtn.apply {
+ isEnabled = enabled
+ alpha = if (enabled) 1f else 0.56f
+ }
+ }
+
override val screenName: String
get() = NaviAnalytics.PERSONAL_LOAN_TRACKER
@@ -229,4 +263,11 @@ class PersonalLoanTrackerActivity : BaseActivity(), View.OnClickListener, Widget
const val TAG = "PERSONAL_LOAN_TRACKER_ACTIVITY"
private const val KEY_REWARDS_ANNOUNCEMENT = "rewardAnnouncement"
}
+
+ override fun attachBaseContext(newBase: Context?) {
+ super.attachBaseContext(newBase)
+ if (newBase != null) {
+ SplitCompat.installActivity(newBase)
+ }
+ }
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/UserIdentificationV2Activity.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/UserIdentificationV2Activity.kt
similarity index 94%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/UserIdentificationV2Activity.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/UserIdentificationV2Activity.kt
index 869a416ca5..5bfaa9e214 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/activities/UserIdentificationV2Activity.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/activity/UserIdentificationV2Activity.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.activities
+package com.navi.pl.dynamic.activity
/*
*
@@ -14,6 +14,7 @@ package com.naviapp.personalloanrevamp.useridentificationv2.activities
*
*/
+import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
@@ -21,6 +22,7 @@ import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import androidx.lifecycle.ViewModelProvider
+import com.google.android.play.core.splitcompat.SplitCompat
import com.navi.base.model.CtaData
import com.navi.base.model.StyledTextWithIconCode
import com.navi.base.utils.orFalse
@@ -29,31 +31,30 @@ import com.navi.common.managers.NaviLocationManager
import com.navi.common.managers.PermissionsManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.ui.fragment.BaseFragment
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.databinding.PlActivityUserIdentificationV2Binding
+import com.navi.pl.dynamic.helper.UserIdentificationV2Helper
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.listeners.BackListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.ActivityUserIdentificationV2Binding
import com.naviapp.models.FinoramicPostData
import com.naviapp.personalloan.getloan.common.fragment.CustomerSupportFragment
import com.naviapp.personalloan.useridentification.viewmodels.EligibilityShareVM
-import com.naviapp.personalloanrevamp.useridentificationv2.helper.UserIdentificationV2Helper
import com.naviapp.receiver.WifiTrackerBaseActivity
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.KEY_CTA
import com.naviapp.utils.IconUtils
-import dagger.hilt.android.AndroidEntryPoint
+import com.naviapp.R as appR
-@AndroidEntryPoint
class UserIdentificationV2Activity :
WifiTrackerBaseActivity(),
FragmentInterchangeListener,
View.OnClickListener,
NaviHeaderView.InteractionListener {
- private lateinit var binding: ActivityUserIdentificationV2Binding
+ private lateinit var binding: PlActivityUserIdentificationV2Binding
private var permissionsManager: PermissionsManager? = null
private val locationManager = NaviLocationManager()
private val naviAnalytics by lazy { NaviAnalytics.naviAnalytics.PlEligibility(screenName) }
@@ -65,7 +66,7 @@ class UserIdentificationV2Activity :
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = DataBindingUtil.setContentView(this, R.layout.activity_user_identification_v2)
+ binding = DataBindingUtil.setContentView(this, R.layout.pl_activity_user_identification_v2)
super.setContentView(binding.root)
setHeaderProperties()
val screenTag = intent?.extras?.getString(Constants.REDIRECT_STATUS)
@@ -232,7 +233,7 @@ class UserIdentificationV2Activity :
override fun onClick(v: View?) {
when (v?.id) {
- R.id.back_iv -> {
+ appR.id.back_iv -> {
naviAnalytics.onBackButtonClicked(currentScreen)
naviAnalytics.onBackButtonEventClick(
UserIdentificationV2Helper.getBackButtonEventName(currentScreen)
@@ -312,4 +313,11 @@ class UserIdentificationV2Activity :
companion object {
const val CURRENT_SCREEN_NAME = "current_screen_name"
}
+
+ override fun attachBaseContext(newBase: Context?) {
+ super.attachBaseContext(newBase)
+ if (newBase != null) {
+ SplitCompat.installActivity(newBase)
+ }
+ }
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/adapter/CurrentAddressItemsV2Adapter.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/CurrentAddressItemsV2Adapter.kt
similarity index 83%
rename from app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/adapter/CurrentAddressItemsV2Adapter.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/CurrentAddressItemsV2Adapter.kt
index 2f9e344ade..0dd64872ff 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/adapter/CurrentAddressItemsV2Adapter.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/CurrentAddressItemsV2Adapter.kt
@@ -1,12 +1,19 @@
-package com.naviapp.personalloanrevamp.addressverificationrevamp.adapter
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.pl.dynamic.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
-import com.naviapp.databinding.AddressRadioButtonV2Binding
+import com.navi.pl.dynamic.databinding.PlLayoutAddressRadioButtonV2Binding
+import com.navi.pl.dynamic.fragment.CurrentAddressChangeListener
import com.naviapp.models.response.CurrentAddress
-import com.naviapp.personalloanrevamp.addressverificationrevamp.fragment.CurrentAddressChangeListener
class CurrentAddressItemsV2Adapter(
private val currentAddressChangeListener: CurrentAddressChangeListener,
@@ -17,7 +24,7 @@ class CurrentAddressItemsV2Adapter(
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CurrentAddressItemsV2Holder {
val binding =
- AddressRadioButtonV2Binding.inflate(LayoutInflater.from(parent.context), parent, false)
+ PlLayoutAddressRadioButtonV2Binding.inflate(LayoutInflater.from(parent.context), parent, false)
return CurrentAddressItemsV2Holder(binding)
}
@@ -72,7 +79,7 @@ class CurrentAddressItemsV2Adapter(
notifyDataSetChanged()
}
- class CurrentAddressItemsV2Holder(val binding: AddressRadioButtonV2Binding) :
+ class CurrentAddressItemsV2Holder(val binding: PlLayoutAddressRadioButtonV2Binding) :
RecyclerView.ViewHolder(binding.root)
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/adapter/KycItemsV2Adapter.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/KycItemsV2Adapter.kt
similarity index 98%
rename from app/src/main/java/com/naviapp/personalloanrevamp/kyc/adapter/KycItemsV2Adapter.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/KycItemsV2Adapter.kt
index 7e29734ef0..c1f2cfd33a 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/adapter/KycItemsV2Adapter.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/KycItemsV2Adapter.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.kyc.adapter
+package com.navi.pl.dynamic.adapter
import android.graphics.Bitmap
import android.view.LayoutInflater
@@ -18,11 +18,11 @@ import com.navi.design.font.FontWeightEnum
import com.navi.naviwidgets.models.response.StyleString
import com.navi.naviwidgets.models.response.TextFieldData
import com.naviapp.R
+import com.navi.pl.dynamic.listener.MultipleKycItemListeners
import com.naviapp.databinding.ItemKycMultipleLayoutBinding
import com.naviapp.databinding.ItemKycV2Binding
import com.naviapp.databinding.ItemNextStepsKycBinding
import com.naviapp.personalloan.getloan.kyc.listeners.KycItemsListener
-import com.naviapp.personalloanrevamp.kyc.listener.MultipleKycItemListeners
import com.naviapp.personalloanrevamp.models.KycItemV2
import com.naviapp.personalloanrevamp.models.KycMultipleActionType
import com.naviapp.utils.IconUtils
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/adapter/MultipleKycItemAdapter.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/MultipleKycItemAdapter.kt
similarity index 96%
rename from app/src/main/java/com/naviapp/personalloanrevamp/kyc/adapter/MultipleKycItemAdapter.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/MultipleKycItemAdapter.kt
index acca91e95b..3a4ba65389 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/adapter/MultipleKycItemAdapter.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/MultipleKycItemAdapter.kt
@@ -5,14 +5,14 @@
*
*/
-package com.naviapp.personalloanrevamp.kyc.adapter
+package com.navi.pl.dynamic.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
+import com.navi.pl.dynamic.listener.MultipleKycItemListeners
import com.naviapp.databinding.ItemRadioButtonForMultipleKycItemBinding
-import com.naviapp.personalloanrevamp.kyc.listener.MultipleKycItemListeners
import com.naviapp.personalloanrevamp.models.KycItemV2
import com.naviapp.utils.IconUtils
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/adapter/PersonalLoanTrackerAdapter.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/PersonalLoanTrackerAdapter.kt
similarity index 83%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/adapter/PersonalLoanTrackerAdapter.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/PersonalLoanTrackerAdapter.kt
index e8b51503e2..eee587a73b 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/adapter/PersonalLoanTrackerAdapter.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/adapter/PersonalLoanTrackerAdapter.kt
@@ -1,22 +1,29 @@
-package com.naviapp.personalloanrevamp.useridentificationv2.adapter
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.pl.dynamic.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
-import com.naviapp.databinding.TrackerScreenLayoutBinding
+import com.navi.pl.dynamic.databinding.PlLayoutTrackerScreenBinding
import com.naviapp.personalloanrevamp.models.response.PersonalLoanTrackerStep
import com.naviapp.utils.setBackgroundColorFromString
import com.naviapp.utils.setTextColorFromString
class PersonalLoanTrackerAdapter(private val trackerScreen: List) :
RecyclerView.Adapter() {
- class PersonalLoanTrackerView(val binding: TrackerScreenLayoutBinding) :
+ class PersonalLoanTrackerView(val binding: PlLayoutTrackerScreenBinding) :
RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PersonalLoanTrackerView {
val inflater = LayoutInflater.from(parent.context)
- val binding = TrackerScreenLayoutBinding.inflate(inflater, parent, false)
+ val binding = PlLayoutTrackerScreenBinding.inflate(inflater, parent, false)
return PersonalLoanTrackerView(binding)
}
@@ -53,4 +60,4 @@ class PersonalLoanTrackerAdapter(private val trackerScreen: List
IconUtils.updateIcon(iconCode, binding.noteImv)
binding.noteImv.setColorFilter(
- ResourcesCompat.getColor(resources, R.color.black, null)
+ ResourcesCompat.getColor(resources, appR.color.black, null)
)
}
}
@@ -712,7 +729,7 @@ class BankStatementV2Fragment :
override fun onClickUnserviceableBank() {
optionSelected = null
context?.toast(
- getString(R.string.this_bank_is_not_supported),
+ getString(appR.string.this_bank_is_not_supported),
offsetY = 200,
length = Toast.LENGTH_SHORT
)
@@ -768,7 +785,7 @@ class BankStatementV2Fragment :
override fun onBackPressed() {
when (arguments?.getString(FLOW_TYPE)) {
- OFFER_UPGRADE_FLOW, UserIdentificationV2Helper.OFFER_IN_REVIEW -> {
+ OFFER_UPGRADE_FLOW, OFFER_IN_REVIEW -> {
val backCta = viewModel.bankStatementData.value?.footer?.backCta
backCta?.let {
NaviDeepLinkNavigator.navigate(
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/DelayedDisbursementV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/DelayedDisbursementV2Fragment.kt
similarity index 83%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/DelayedDisbursementV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/DelayedDisbursementV2Fragment.kt
index ee3d1ae6bd..015c7c33e6 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/DelayedDisbursementV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/DelayedDisbursementV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.os.Bundle
import android.view.LayoutInflater
@@ -18,12 +18,12 @@ import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.utils.CommonNaviAnalytics
import com.navi.common.utils.getNetworkType
import com.navi.common.utils.observeNonNull
+import com.navi.pl.dynamic.activity.LoanDisbursementLoaderV2Activity.Companion.LOAN_ACCOUNT_NUMBER
+import com.navi.pl.dynamic.databinding.PlFragmentDelayedDisbursementV2Binding
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.navigator.NaviDeepLinkNavigator
-import com.naviapp.databinding.DelayedDisbursementV2LayoutBinding
import com.naviapp.personalloan.getloan.delayedDisbursement.viewmodels.DelayedDisbursementViewModel
-import com.naviapp.personalloanrevamp.getloanRevamp.activities.LoanDisbursementLoaderV2Activity.Companion.LOAN_ACCOUNT_NUMBER
import com.naviapp.personalloanrevamp.models.FLOW_DELAYED_DISBURSEMENT
import com.naviapp.personalloanrevamp.models.PROP_FILE_NAME
import com.naviapp.utils.Constants.ACTION
@@ -31,7 +31,7 @@ import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.IconUtils
class DelayedDisbursementV2Fragment : BaseFragment() {
- private lateinit var binding: DelayedDisbursementV2LayoutBinding
+ private lateinit var binding: PlFragmentDelayedDisbursementV2Binding
private val viewModel by lazy {
ViewModelProvider(this).get(DelayedDisbursementViewModel::class.java)
}
@@ -43,7 +43,7 @@ class DelayedDisbursementV2Fragment : BaseFragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = DelayedDisbursementV2LayoutBinding.inflate(inflater, container, false)
+ binding = PlFragmentDelayedDisbursementV2Binding.inflate(inflater, container, false)
analyticsEventTracker.onPLDelayedDisbursementPageLand()
initError(viewModel, actionErrorV2Enabled = true)
initListener()
@@ -61,15 +61,21 @@ class DelayedDisbursementV2Fragment : BaseFragment() {
private fun initListener() {
binding.actionBtn.setOnClickListener {
+ var ctaData: CtaData? = null
viewModel.delayedDisbursementDetails.value?.content?.let {
- it.firstOrNull()?.ctaData?.let {
- NaviDeepLinkNavigator.navigate(activity = activity, ctaData = it, finish = true)
- activity?.finishAffinity()
+ it.firstOrNull()?.ctaData?.let { cta ->
+ ctaData = cta
}
+ } ?: kotlin.run {
+ ctaData = CtaData(url = NaviDeepLinkNavigator.HOME)
+ }
+ ctaData?.let {
+ NaviDeepLinkNavigator.navigate(
+ activity = activity,
+ ctaData = it,
+ finish = true
+ )
}
- ?: kotlin.run {
- NaviDeepLinkNavigator.navigate(activity = activity, ctaData = CtaData(url = NaviDeepLinkNavigator.HOME), finish = true)
- }
}
setEventNameToLatencyMapper(PL_SCREEN_ACTIVITY, queryMap[ACTION])
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/EffectiveInterestCostV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EffectiveInterestCostV2Fragment.kt
similarity index 95%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/EffectiveInterestCostV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EffectiveInterestCostV2Fragment.kt
index c71b6d18c2..6e0ddc6273 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/EffectiveInterestCostV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EffectiveInterestCostV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.app.Activity
import android.content.Context
@@ -19,15 +19,15 @@ import androidx.lifecycle.ViewModelProvider
import com.navi.common.ui.fragment.BaseFragment
import com.navi.design.font.FontWeightEnum
import com.navi.design.utils.setFontStyle
+import com.navi.naviwidgets.models.response.Footer
+import com.navi.pl.dynamic.databinding.PlFragmentEffectiveInterestCostV2Binding
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.listeners.BackListener
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.EffectiveInterestCostV2FragmentBinding
import com.naviapp.models.response.EffectiveInterestInfoContent
import com.naviapp.models.response.EffectiveInterestInfoResponse
-import com.navi.naviwidgets.models.response.Footer
import com.naviapp.personalloan.getloan.loandetails.viewmodels.EffectiveInterestCostVM
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
@@ -37,7 +37,7 @@ import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class EffectiveInterestCostV2Fragment : BaseFragment(), BackListener {
- private lateinit var binding: EffectiveInterestCostV2FragmentBinding
+ private lateinit var binding: PlFragmentEffectiveInterestCostV2Binding
private val viewModel by lazy {
ViewModelProvider(this).get(EffectiveInterestCostVM::class.java)
}
@@ -50,7 +50,7 @@ class EffectiveInterestCostV2Fragment : BaseFragment(), BackListener {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = EffectiveInterestCostV2FragmentBinding.inflate(layoutInflater, container, false)
+ binding = PlFragmentEffectiveInterestCostV2Binding.inflate(layoutInflater, container, false)
initError(viewModel, actionErrorV2Enabled = true)
initObserver()
initUI()
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/EmiSelectorV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EmiSelectorV2Fragment.kt
similarity index 94%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/EmiSelectorV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EmiSelectorV2Fragment.kt
index f4c0b12e1e..72e6d1d15e 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/EmiSelectorV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EmiSelectorV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.app.Activity
import android.content.Context
@@ -21,7 +21,11 @@ import com.navi.base.sharedpref.PreferenceManager
import com.navi.base.utils.orZero
import com.navi.common.model.Money
import com.navi.common.ui.fragment.BaseFragment
-import com.navi.common.utils.*
+import com.navi.common.utils.formatDateInto
+import com.navi.common.utils.formatDateIntoPrefixMonthNames
+import com.navi.common.utils.getDateWithSuffix
+import com.navi.common.utils.getWeekDaysFirstLetters
+import com.navi.common.utils.parseYYYYMMDDStringToDate
import com.navi.common.utils.setCornerRadius
import com.navi.design.calendar.adapter.NaviCalendarViewAdapter
import com.navi.design.calendar.model.DateStyleModel
@@ -32,12 +36,13 @@ import com.navi.design.utils.getTotalNumberOfDayInMonth
import com.navi.design.utils.parseDateFromOneToAnother
import com.navi.naviwidgets.models.response.Footer
import com.navi.naviwidgets.widgets.textdisplay.Margin
+import com.navi.pl.dynamic.databinding.PlFragmentEmiSelectorV2Binding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.listeners.BackListener
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.EmiSelectorFragmentV2Binding
import com.naviapp.models.EmiStartDate
import com.naviapp.models.request.LoanFeeDetailsRequest
import com.naviapp.models.response.EmiCalendarData
@@ -45,18 +50,21 @@ import com.naviapp.models.response.EmiCalendarDataResponse
import com.naviapp.models.response.Header
import com.naviapp.personalloan.getloan.loandetails.viewmodels.EmiSelectorVM
import com.naviapp.personalloan.getloan.loandetails.viewmodels.LoanDetailsAndEmiSharedVM
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
-import com.naviapp.utils.*
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
+import com.naviapp.utils.IconUtils
+import com.naviapp.utils.PRODUCT_CODE
+import com.naviapp.utils.makeUnderlined
+import com.naviapp.utils.setMargin
import dagger.hilt.android.AndroidEntryPoint
-import java.util.*
+import java.util.Calendar
+import java.util.Date
@AndroidEntryPoint
class EmiSelectorV2Fragment : BaseFragment(), BackListener {
- private lateinit var binding: EmiSelectorFragmentV2Binding
+ private lateinit var binding: PlFragmentEmiSelectorV2Binding
private val viewModel by lazy { ViewModelProvider(this).get(EmiSelectorVM::class.java) }
private var loanDetailsAndEmiSharedVM: LoanDetailsAndEmiSharedVM? = null
private var selectedDate: Date? = null
@@ -70,7 +78,7 @@ class EmiSelectorV2Fragment : BaseFragment(), BackListener {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = EmiSelectorFragmentV2Binding.inflate(layoutInflater, container, false)
+ binding = PlFragmentEmiSelectorV2Binding.inflate(layoutInflater, container, false)
initError(viewModel, actionErrorV2Enabled = true)
initObserver()
initListeners()
@@ -149,7 +157,7 @@ class EmiSelectorV2Fragment : BaseFragment(), BackListener {
)
}
}
- listener?.navigateTo(GetLoanV2ViewHelper.UPCOMING_EMI_DETAIL_V2, bundle)
+ listener?.navigateTo(GetLoanV2Helper.UPCOMING_EMI_DETAIL_V2, bundle)
}
}
setEventNameToLatencyMapper(PL_SCREEN_ACTIVITY, queryMap[ACTION])
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/EmploymentOtpVerificationFragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EmploymentOtpVerificationFragment.kt
similarity index 92%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/EmploymentOtpVerificationFragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EmploymentOtpVerificationFragment.kt
index 91a45f091e..a3e0b117ea 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/EmploymentOtpVerificationFragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EmploymentOtpVerificationFragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.content.IntentFilter
@@ -22,7 +22,11 @@ import com.moengage.pushbase.internal.ACTION
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.model.CtaData
import com.navi.base.utils.orZero
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.EPFO_VERIFICATION
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
import com.navi.common.listeners.FragmentInterchangeListener
import com.navi.common.model.RequestConfig
import com.navi.common.receiver.OtpReceiveListener
@@ -32,7 +36,8 @@ import com.navi.common.utils.ApiPollScheduler
import com.navi.common.utils.observeNonNull
import com.navi.design.font.FontWeightEnum
import com.navi.design.utils.getFontStyle
-import com.naviapp.R
+import com.navi.pl.dynamic.databinding.PlFragmentEmploymentOtpVerificationBinding
+import com.navi.pl.dynamic.helper.IntermediateV2Helper.EPFO_V2
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
@@ -40,21 +45,21 @@ import com.naviapp.common.fragment.OtpBottomSheet
import com.naviapp.common.listeners.BackListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.EmploymentOtpVerificationFragmentBinding
import com.naviapp.models.request.OtpRequest
import com.naviapp.models.response.OTPVerifyResponse
import com.naviapp.personalloan.useridentification.employmentverification.viewmodel.EmploymentVerificationVM
-import com.naviapp.personalloanrevamp.useridentificationv2.helper.UserIdentificationV2Helper
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.FLOW_TYPE
+import com.naviapp.utils.Constants.OFFER_IN_REVIEW
import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.shakeView
+import com.naviapp.R as appR
open class EmploymentOtpVerificationFragment :
BaseFragment(), View.OnClickListener, BackListener, FooterViewV2.FooterInteractionListener {
- private lateinit var binding: EmploymentOtpVerificationFragmentBinding
+ private lateinit var binding: PlFragmentEmploymentOtpVerificationBinding
private val viewModel by lazy {
ViewModelProvider(this).get(EmploymentVerificationVM::class.java)
}
@@ -75,7 +80,7 @@ open class EmploymentOtpVerificationFragment :
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = EmploymentOtpVerificationFragmentBinding.inflate(inflater, container, false)
+ binding = PlFragmentEmploymentOtpVerificationBinding.inflate(inflater, container, false)
initError(viewModel, actionErrorV2Enabled = true)
initWarning(viewModel)
pageType = arguments?.getString(Constants.EPFO_PAGE_TYPE).orEmpty()
@@ -106,7 +111,7 @@ open class EmploymentOtpVerificationFragment :
override fun onClick(v: View?) {
when (v?.id) {
- R.id.resend_otp_tv -> reSendOtp()
+ appR.id.resend_otp_tv -> reSendOtp()
}
}
@@ -172,7 +177,7 @@ open class EmploymentOtpVerificationFragment :
}
binding.otpBoxLayout.setFontStyle(
textSize = 16F,
- colorId = R.color.black,
+ colorId = appR.color.black,
fontId = getFontStyle(FontWeightEnum.TT_MEDIUM)
)
}
@@ -197,7 +202,7 @@ open class EmploymentOtpVerificationFragment :
Constants.SECONDS_PER_MINUTE
if (isAdded)
binding.countdownTimerTv.text =
- " ${String.format(getString(R.string.time_format), minutes, seconds)}"
+ " ${String.format(getString(appR.string.time_format), minutes, seconds)}"
}
override fun onFinish() {
@@ -305,8 +310,8 @@ open class EmploymentOtpVerificationFragment :
}
open fun onOtpVerificationSuccess(otpVerifyResponse: OTPVerifyResponse?) {
- if (otpVerifyResponse?.details?.data?.karzaStatus == PASSBOOK_GENERATED && pageType == UserIdentificationV2Helper.OFFER_IN_REVIEW) {
- otpVerifyResponse.details.data.nextCTA?.let { ctaData ->
+ if (otpVerifyResponse?.details?.data?.karzaStatus == PASSBOOK_GENERATED && pageType == OFFER_IN_REVIEW) {
+ otpVerifyResponse.details?.data?.nextCTA?.let { ctaData ->
NaviDeepLinkNavigator.navigate(
activity = activity,
ctaData = ctaData,
@@ -316,7 +321,7 @@ open class EmploymentOtpVerificationFragment :
}
} else {
fragmentInterchangeListener?.navigateToNextScreen(
- UserIdentificationV2Helper.EPFO_V2,
+ EPFO_V2,
arguments ?: Bundle()
)
}
@@ -362,7 +367,7 @@ open class EmploymentOtpVerificationFragment :
override fun onFooterBackPressed(backCta: CtaData?) {
naviAnalyticsEventTracker.onBackButtonClicked(screenName)
- if (backCta?.title.orEmpty() == getString(R.string.skip)) {
+ if (backCta?.title.orEmpty() == getString(appR.string.skip)) {
naviAnalyticsEventTracker.onSkipButtonClick(arguments?.getString(FLOW_TYPE).orEmpty())
}
backCta?.let { NaviDeepLinkNavigator.navigate(activity, it, true) }
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/EmploymentVerificationV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EmploymentVerificationV2Fragment.kt
similarity index 89%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/EmploymentVerificationV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EmploymentVerificationV2Fragment.kt
index 47b0c01927..6daee06de3 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/EmploymentVerificationV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/EmploymentVerificationV2Fragment.kt
@@ -5,14 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.fragments
-
-/*
- *
- * * Copyright © 2022 by Navi Technologies Private Limited
- * * All rights reserved. Strictly confidential
- *
- */
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -36,7 +29,9 @@ import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.utils.observeNonNull
import com.navi.common.utils.observeNullable
import com.navi.design.utils.getNaviDrawable
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.databinding.PlFragmentEmploymentVerificationV2Binding
+import com.navi.pl.dynamic.helper.IntermediateV2Helper.EPFO_OTP_VERIFICATION_V2
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.BoxInputGroup.Companion.OTP_LENGTH_6
import com.naviapp.common.customview.FooterViewV2
@@ -49,15 +44,11 @@ import com.naviapp.common.navigator.ScreenNavigator
import com.naviapp.common.viewmodel.OtpSharedViewModel
import com.naviapp.common.viewmodel.SearchViewModel
import com.naviapp.databinding.CustomToastBinding
-import com.naviapp.databinding.EmploymentVerificationV2LayoutBinding
import com.naviapp.models.response.EPFODetails
import com.naviapp.models.response.SendDisbursementOtpResponse
import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloan.useridentification.employmentverification.viewmodel.EmploymentVerificationVM
import com.naviapp.personalloanrevamp.common.customview.InfoBottomSheetV2
-import com.naviapp.personalloanrevamp.intermediatev2.helper.IntermediateV2Helper.EPFO_OTP_VERIFICATION_V2
-import com.naviapp.personalloanrevamp.useridentificationv2.helper.UserIdentificationV2Helper
-import com.naviapp.utils.*
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.EPFO_PAGE_TYPE
import com.naviapp.utils.Constants.FLOW_TYPE
@@ -65,13 +56,20 @@ import com.naviapp.utils.Constants.IS_COMING_FROM_OFFER_UPGRADE_PAGE
import com.naviapp.utils.Constants.IS_COMING_FROM_QUESTIONNAIRE_PAGE
import com.naviapp.utils.Constants.IS_COMING_FROM_WORK_DETAILS
import com.naviapp.utils.Constants.OFFER
+import com.naviapp.utils.Constants.OFFER_IN_REVIEW
import com.naviapp.utils.Constants.OFFER_UPGRADE
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
+import com.naviapp.utils.EMPTY
+import com.naviapp.utils.IntentConstants
+import com.naviapp.utils.constructBundleWithCtaData
+import com.naviapp.utils.customToast
+import com.naviapp.utils.toast
+import com.naviapp.R as appR
open class EmploymentVerificationV2Fragment :
BaseFragment(), View.OnClickListener, FooterViewV2.FooterInteractionListener, BackListener {
- private lateinit var binding: EmploymentVerificationV2LayoutBinding
+ private lateinit var binding: PlFragmentEmploymentVerificationV2Binding
protected var sharedSearchViewModel: SearchViewModel? = null
protected var otpSharedViewModel: OtpSharedViewModel? = null
protected var pageType: String? = null
@@ -94,7 +92,7 @@ open class EmploymentVerificationV2Fragment :
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = EmploymentVerificationV2LayoutBinding.inflate(inflater, container, false)
+ binding = PlFragmentEmploymentVerificationV2Binding.inflate(inflater, container, false)
initError()
initWarning()
pageType = arguments?.getString(EPFO_PAGE_TYPE).orEmpty()
@@ -154,16 +152,16 @@ open class EmploymentVerificationV2Fragment :
fetchEPFODetails()
binding.companySelectorContainer.background =
getNaviDrawable(
- cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt(),
- strokeWidth = resources.getDimension(R.dimen.layout_dp_1).toInt(),
+ cornerRadius = resources.getDimension(appR.dimen.layout_dp_8).toInt(),
+ strokeWidth = resources.getDimension(appR.dimen.layout_dp_1).toInt(),
strokeColor =
- ResourcesCompat.getColor(resources, R.color.border_dark_grey_color, null)
+ ResourcesCompat.getColor(resources, appR.color.border_dark_grey_color, null)
)
binding.generateOtpContainer.background =
getNaviDrawable(
backgroundColor =
- ResourcesCompat.getColor(resources, R.color.red_light_three, null),
- cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt()
+ ResourcesCompat.getColor(resources, appR.color.red_light_three, null),
+ cornerRadius = resources.getDimension(appR.dimen.layout_dp_8).toInt()
)
}
@@ -279,7 +277,7 @@ open class EmploymentVerificationV2Fragment :
bundle.putString(FLOW_TYPE, flowType)
bundle.putString(EPFO_PAGE_TYPE, pageType)
fragmentInterchangeListener?.navigateToNextScreen(
- UserIdentificationV2Helper.EPFO_OTP_VERIFICATION_V2,
+ EPFO_OTP_VERIFICATION_V2,
bundle
)
}
@@ -294,8 +292,8 @@ open class EmploymentVerificationV2Fragment :
binding.footerView.setContinueButtonEnable(true)
context?.customToast(
customView =
- getFilledToastView(resources.getString(R.string.verification_successful)),
- offsetY = resources.getDimension(R.dimen.layout_dp_120).toInt(),
+ getFilledToastView(resources.getString(appR.string.verification_successful)),
+ offsetY = resources.getDimension(appR.dimen.layout_dp_120).toInt(),
gravity = Gravity.BOTTOM or Gravity.FILL_HORIZONTAL
)
} else {
@@ -307,11 +305,11 @@ open class EmploymentVerificationV2Fragment :
private fun getFilledToastView(text: String?): View {
return CustomToastBinding.inflate(layoutInflater, null, false)
.apply {
- toastIv.setImageResource(R.drawable.ic_green_tick_small)
- toastLayoutRoot.setBackgroundResource(R.drawable.bg_light_green_rounded_12)
+ toastIv.setImageResource(appR.drawable.ic_green_tick_small)
+ toastLayoutRoot.setBackgroundResource(appR.drawable.bg_light_green_rounded_12)
toastTv.text = text
- context?.let { toastTv.setTextColor(ContextCompat.getColor(it, R.color.green)) }
- TextViewCompat.setTextAppearance(toastTv, R.style.NaviSansBoldExtraSmall)
+ context?.let { toastTv.setTextColor(ContextCompat.getColor(it, appR.color.green)) }
+ TextViewCompat.setTextAppearance(toastTv, appR.style.NaviSansBoldExtraSmall)
}
.root
}
@@ -329,7 +327,7 @@ open class EmploymentVerificationV2Fragment :
.orFalse() || otpSharedViewModel?.otpVerified?.value.orFalse()
) {
activity?.toast(
- getString(R.string.company_can_not_be_change),
+ getString(appR.string.company_can_not_be_change),
offsetY = 700,
length = Toast.LENGTH_SHORT
)
@@ -339,7 +337,7 @@ open class EmploymentVerificationV2Fragment :
bundle.putString(FLOW_TYPE, flowType)
val searchFragment =
SearchFragment.newInstance(
- resources.getString(R.string.select_company),
+ resources.getString(appR.string.select_company),
SearchFragment.SearchType.COMPANY_INDUSTRY,
null,
bundle
@@ -353,7 +351,7 @@ open class EmploymentVerificationV2Fragment :
override fun onClick(v: View?) {
when (v?.id) {
R.id.company_selector_container -> openBankSelector()
- R.id.info_icon -> openBottomSheet()
+ appR.id.info_icon -> openBottomSheet()
R.id.generate_otp_container -> sendOtp()
}
}
@@ -407,7 +405,7 @@ open class EmploymentVerificationV2Fragment :
naviAnalyticsEventTracker.onOtpVerified()
fetchEPFODetails()
activity?.toast(
- getString(R.string.verification_successful),
+ getString(appR.string.verification_successful),
offsetY = 600,
length = Toast.LENGTH_LONG
)
@@ -427,7 +425,7 @@ open class EmploymentVerificationV2Fragment :
naviAnalyticsEventTracker.onBackButtonClicked(screenName)
backCta?.url?.let {
naviAnalyticsEventTracker.onEPFOBackButtonTap()
- if (pageType?.equals(UserIdentificationV2Helper.OFFER_IN_REVIEW).orFalse()) {
+ if (pageType?.equals(OFFER_IN_REVIEW).orFalse()) {
NaviDeepLinkNavigator.navigate(activity, ctaData = backCta, finish = true)
} else {
fragmentInterchangeListener?.navigateToNextScreenWithCaching(it, Bundle())
@@ -442,7 +440,7 @@ open class EmploymentVerificationV2Fragment :
val channelList = ArrayList()
channelList.add(IntentConstants.EPFO)
NaviTrackEvent.setStartTs(screenName)
- if (nextCta.title.orEmpty() == getString(R.string.next)) {
+ if (nextCta.title.orEmpty() == getString(appR.string.next)) {
naviAnalyticsEventTracker.onNextButtonClick(flowType)
} else {
naviAnalyticsEventTracker.onSkipButtonClick(flowType)
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/error/fragments/ErrorV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/ErrorV2Fragment.kt
similarity index 93%
rename from app/src/main/java/com/naviapp/personalloanrevamp/error/fragments/ErrorV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/ErrorV2Fragment.kt
index 296d1c6c79..2fc7eeff4e 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/error/fragments/ErrorV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/ErrorV2Fragment.kt
@@ -1,11 +1,11 @@
/*
*
- * * Copyright © 2022 by Navi Technologies Limited
+ * * Copyright © 2022-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
-package com.naviapp.personalloanrevamp.error.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -18,19 +18,19 @@ import com.navi.common.network.models.GenericErrorResponse
import com.navi.common.ui.fragment.BaseFragment
import com.navi.design.utils.GradientOrientation
import com.navi.design.utils.getNaviDrawable
+import com.navi.pl.dynamic.activity.ErrorScreenV2Activity
+import com.navi.pl.dynamic.databinding.PlFragmentErrorV2Binding
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.navigator.NaviDeepLinkNavigator
-import com.naviapp.databinding.FragmentErrorV2Binding
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
import com.naviapp.personalloanrevamp.models.RejectionDetailsV2
import com.naviapp.utils.EMPTY
import com.naviapp.utils.IconUtils
class ErrorV2Fragment : BaseFragment() {
- private lateinit var binding: FragmentErrorV2Binding
+ private lateinit var binding: PlFragmentErrorV2Binding
private var headerListener: NaviHeaderView.InteractionListener? = null
override fun onCreateView(
@@ -38,7 +38,7 @@ class ErrorV2Fragment : BaseFragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = FragmentErrorV2Binding.inflate(inflater, container, false)
+ binding = PlFragmentErrorV2Binding.inflate(inflater, container, false)
initUi()
return binding.root
}
@@ -98,7 +98,7 @@ class ErrorV2Fragment : BaseFragment() {
binding.daysLayout.rootLayout.visibility = View.VISIBLE
binding.daysLayout.tvTryAgainAfter.text = it.title
binding.daysLayout.tvDays.text = it.description
- binding.daysLayout.tvNoOfDays.text = error.humanReadableContent.numberOfDays
+ binding.daysLayout.tvNoOfDays.text = error.humanReadableContent?.numberOfDays
}
?: run { binding.daysLayout.rootLayout.visibility = View.GONE }
error?.humanReadableContent?.numberOfDays?.let {
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/FreshLoanDetailsV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/FreshLoanDetailsV2Fragment.kt
similarity index 92%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/FreshLoanDetailsV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/FreshLoanDetailsV2Fragment.kt
index 7490749ae8..eae3feddfe 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/FreshLoanDetailsV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/FreshLoanDetailsV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.graphics.Color
@@ -28,12 +28,28 @@ import androidx.recyclerview.widget.SimpleItemAnimator
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.gson.Gson
import com.navi.analytics.utils.NaviTrackEvent
-import com.navi.base.model.*
+import com.navi.base.model.ClickableTextType
+import com.navi.base.model.CtaData
+import com.navi.base.model.GenericAnalyticsData
+import com.navi.base.model.LineItem
+import com.navi.base.model.NaviClickAction
+import com.navi.base.model.NaviWidgetClickWithActionData
import com.navi.base.sharedpref.PreferenceManager
-import com.navi.base.utils.*
import com.navi.base.utils.BaseUtils.isUpiAppAvailable
+import com.navi.base.utils.isNotNull
+import com.navi.base.utils.isNull
+import com.navi.base.utils.orElse
+import com.navi.base.utils.orFalse
+import com.navi.base.utils.orTrue
+import com.navi.base.utils.orZero
import com.navi.chat.utils.ChatPLScreens
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.ADD_BANK_ACCOUNT_V2
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.LOAN_APPLY
+import com.navi.common.firebasedb.OFFER_GENERATE
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.Money
import com.navi.common.model.RequestConfig
@@ -41,8 +57,17 @@ import com.navi.common.model.UploadDataAsyncResponse
import com.navi.common.network.getGlobalErrorType
import com.navi.common.network.models.GenericResponseState
import com.navi.common.uitron.model.action.CtaAction
-import com.navi.common.utils.*
+import com.navi.common.utils.ApiPollScheduler
+import com.navi.common.utils.CommonNaviAnalytics
import com.navi.common.utils.Constants.UNDERSCORE
+import com.navi.common.utils.findFirstCompletelyVisibleItemPosition
+import com.navi.common.utils.findFirstVisibleItemPosition
+import com.navi.common.utils.findLastCompletelyVisibleItemPosition
+import com.navi.common.utils.getNetworkType
+import com.navi.common.utils.log
+import com.navi.common.utils.observeNonNull
+import com.navi.common.utils.observeNullable
+import com.navi.common.utils.toCtaData
import com.navi.design.utils.getNaviDrawable
import com.navi.design.utils.parseColorSafe
import com.navi.naviwidgets.callbacks.WidgetCallback
@@ -57,6 +82,11 @@ import com.navi.payment.base.PaymentManager
import com.navi.payment.listener.RPDListener
import com.navi.payment.model.GenericErrorResponse
import com.navi.payment.model.RpdPaymentDetails
+import com.navi.pl.dynamic.databinding.PlFragmentFreshLoanDetailsV2Binding
+import com.navi.pl.dynamic.fragment.EmiSelectorV2Fragment.Companion.LOAN_FEE_DETAILS_REQUEST
+import com.navi.pl.dynamic.fragment.EmiSelectorV2Fragment.Companion.RATE_OF_INTEREST
+import com.navi.pl.dynamic.fragment.EmiSelectorV2Fragment.Companion.TENURE
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.navi.uitron.model.data.TextData
import com.navi.uitron.render.UiTronRenderer
import com.naviapp.R
@@ -74,24 +104,43 @@ import com.naviapp.common.listeners.FooterWithDescriptionListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.FreshLoanDetailsV2FragmentBinding
-import com.naviapp.models.*
+import com.naviapp.models.CustomClickConfig
+import com.naviapp.models.CustomClickType
+import com.naviapp.models.FooterType
+import com.naviapp.models.Offer
+import com.naviapp.models.SubPageStatusType
+import com.naviapp.models.Tenure
import com.naviapp.models.request.LoanFeeDetailsRequest
import com.naviapp.models.request.LoanRequest
-import com.naviapp.models.response.*
+import com.naviapp.models.response.GeneralGreetingResponse
+import com.naviapp.models.response.LoanDetailsV2AdditionData
+import com.naviapp.models.response.OfferDetailsResponse
+import com.naviapp.models.response.OfferDialogType
+import com.naviapp.models.response.SnappedHeaderProps
+import com.naviapp.models.response.WidgetConfig
import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloan.factory.LoanDetailsV2VHFactoryImpl
import com.naviapp.personalloanrevamp.common.customview.LoanAmountSummaryView
import com.naviapp.personalloanrevamp.customview.DailyOfferBottomSheetV2
import com.naviapp.personalloanrevamp.getloanRevamp.adapters.LoanDetailsV2WidgetAdapter
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
+import com.naviapp.personalloanrevamp.getloanRevamp.fragments.BankDetailsAutoDebitV2Fragment
import com.naviapp.personalloanrevamp.getloanRevamp.repository.LoanDetailsV2Repository
import com.naviapp.personalloanrevamp.getloanRevamp.viewmodels.FreshLoanDetailsV2FragmentVM
import com.naviapp.personalloanrevamp.getloanRevamp.viewmodels.GetLoanV2SharedVM
-import com.naviapp.personalloanrevamp.models.*
-import com.naviapp.personalloanrevamp.models.response.*
+import com.naviapp.personalloanrevamp.models.CtaType
+import com.naviapp.personalloanrevamp.models.FLOW_UPI_REVERSE_PENNY_DROP
+import com.naviapp.personalloanrevamp.models.LoanDetailsV2WidgetType
+import com.naviapp.personalloanrevamp.models.StyledTextTimedCardData
+import com.naviapp.personalloanrevamp.models.StyledTitleDescriptionBottomSheetConfig
+import com.naviapp.personalloanrevamp.models.TransactionFailedBottomSheetInfo_Is_Null
+import com.naviapp.personalloanrevamp.models.response.BottomSheetContent
+import com.naviapp.personalloanrevamp.models.response.FeeDetailResponseWithFirstEmiDate
+import com.naviapp.personalloanrevamp.models.response.FeeDetailsV2Response
+import com.naviapp.personalloanrevamp.models.response.LoanDetailsV2Content
+import com.naviapp.personalloanrevamp.models.response.RPDDetailsResponse
+import com.naviapp.personalloanrevamp.models.response.RPDNextCta
+import com.naviapp.personalloanrevamp.models.response.TransferBottomSheetContent
import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
-import com.naviapp.utils.*
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.FETCH_FIRST_SELECTED_EMI_DATE_CODE
import com.naviapp.utils.Constants.ACTION
@@ -103,12 +152,22 @@ import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.Constants.TRANSFER_BOTTOMSHEET
import com.naviapp.utils.Constants.UITRON_WIDGET_TYPE
-import dagger.hilt.android.AndroidEntryPoint
+import com.naviapp.utils.LOAN_AMOUNT
+import com.naviapp.utils.LOAN_APPLICATION_ID
+import com.naviapp.utils.LOAN_DETAIL_WEB_VIEW_URL
+import com.naviapp.utils.OFFER_ID
+import com.naviapp.utils.PRODUCT_CODE
+import com.naviapp.utils.SELECTED_EMI_DATE
+import com.naviapp.utils.appendStrings
+import com.naviapp.utils.dpToPx
+import com.naviapp.utils.formatAmount
+import com.naviapp.utils.isBottomSheetEnabled
+import com.naviapp.utils.navigateToClickableText
+import com.naviapp.utils.pxToDp
+import com.naviapp.utils.setMargin
import getDataId
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@AndroidEntryPoint
class FreshLoanDetailsV2Fragment :
LoanDetailsV2BaseFragment(),
FooterWithDescriptionListener,
@@ -116,9 +175,8 @@ class FreshLoanDetailsV2Fragment :
WidgetCallback,
InfoBottomSheetListener {
- @Inject
- lateinit var repository: LoanDetailsV2Repository
- private lateinit var binding: FreshLoanDetailsV2FragmentBinding
+ private lateinit var repository: LoanDetailsV2Repository
+ private lateinit var binding: PlFragmentFreshLoanDetailsV2Binding
private val viewModel by lazy {
ViewModelProvider(this).get(FreshLoanDetailsV2FragmentVM::class.java)
}
@@ -133,7 +191,7 @@ class FreshLoanDetailsV2Fragment :
private var sharedVM: GetLoanV2SharedVM? = null
private val widgetNaviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Widget()
private lateinit var bottomSheetBehavior: BottomSheetBehavior
- private var updateUIListener: LoanDetailsV2Fragment.UpdateUiListener? = null
+ private var updateUIListener: BankDetailsAutoDebitV2Fragment.UpdateUiListener? = null
private var shortAnimationDuration: Int = 0
private var loanAmountSummaryWidgetPosition: Int? = null
private var pageLandEventEnabled = false
@@ -151,7 +209,8 @@ class FreshLoanDetailsV2Fragment :
savedInstanceState: Bundle?
): View {
super.onCreateView(inflater, container, savedInstanceState)
- binding = FreshLoanDetailsV2FragmentBinding.inflate(inflater, container, false)
+ binding = PlFragmentFreshLoanDetailsV2Binding.inflate(inflater, container, false)
+ repository = LoanDetailsV2Repository()
setWebViewScreenName(screenName)
checkWebViewArguments()
initUi()
@@ -440,11 +499,11 @@ class FreshLoanDetailsV2Fragment :
viewState.data?.run {
when(nextCta?.type){
CtaType.BANK_DETAILS_AUTO_DEBIT_V2.name -> {
- redirectToSetupAutoPay(nextCta)
+ redirectToSetupAutoPay(nextCta as CtaData)
}
CtaType.FAILURE_BOTTOM_SHEET.name -> {
val lineItem =
- nextCta.parameters?.firstOrNull { it.key == BOTTOM_SHEET_KEY }
+ nextCta?.parameters?.firstOrNull { it.key == BOTTOM_SHEET_KEY }
val bottomSheetInfoV2 =
this.metadata?.get(lineItem?.value)?.data
as? BottomSheetInfoV2
@@ -548,8 +607,8 @@ class FreshLoanDetailsV2Fragment :
} else {
showLoader()
paymentVM.initRPD(
- it.token,
- it.methodId,
+ it.token as String,
+ it.methodId as String,
requireActivity(),
object : RPDListener {
override fun onRpdPaymentMethodSuccess(rpdPaymentDetails: RpdPaymentDetails?) {
@@ -754,9 +813,9 @@ class FreshLoanDetailsV2Fragment :
binding.uitronFooter.visibility = View.VISIBLE
binding.uitronFooter.setContent {
UiTronRenderer(
- feeDetailsV2Response.footer.uiTronFooter.data,
+ feeDetailsV2Response.footer?.uiTronFooter?.data,
viewModel
- ).Render(composeViews = feeDetailsV2Response.footer.uiTronFooter.parentComposeView.orEmpty())
+ ).Render(composeViews = feeDetailsV2Response.footer?.uiTronFooter?.parentComposeView.orEmpty())
}
} ?: enableTitleDescriptionFooter(feeDetailsV2Response)
}
@@ -1157,7 +1216,7 @@ class FreshLoanDetailsV2Fragment :
}
} else {
feeDetailsV2Response.content?.widgets?.let { widgetConfigList ->
- feeDetailsV2Response.content.additionalData?.let { data ->
+ feeDetailsV2Response.content?.additionalData?.let { data ->
(binding.loanDetailsRv.adapter as? LoanDetailsV2WidgetAdapter)?.updateData(
widgetConfigList = widgetConfigList,
additionalData = data
@@ -1281,7 +1340,7 @@ class FreshLoanDetailsV2Fragment :
super.onAttach(context)
listener = context as? FragmentInteractionListener
headerListener = context as? NaviHeaderView.InteractionListener
- updateUIListener = context as? LoanDetailsV2Fragment.UpdateUiListener
+ updateUIListener = context as? BankDetailsAutoDebitV2Fragment.UpdateUiListener
activity?.let { sharedVM = ViewModelProvider(it).get(GetLoanV2SharedVM::class.java) }
}
@@ -1405,7 +1464,7 @@ class FreshLoanDetailsV2Fragment :
override fun onCtaClick(ctaData: CtaData?) {
when (ctaData?.type) {
- LoanDetailsEditorFragment.CtaType.CHANGE_EMI_DATE.value -> {
+ CtaType.CHANGE_EMI_DATE.value -> {
if (isWebView()) {
val loanFeeDetailsRequest = constructEmiBundleFromCtaParams(ctaData.parameters)
openEmiCalendar(loanFeeDetailsRequest)
@@ -1414,16 +1473,16 @@ class FreshLoanDetailsV2Fragment :
openEmiCalendar()
}
}
- LoanDetailsEditorFragment.CtaType.TENURE_DEFAULT_SELECTED.value -> {
+ CtaType.TENURE_DEFAULT_SELECTED.value -> {
onTenureDefaultSelected(ctaData.parameters)
}
- LoanDetailsEditorFragment.CtaType.TENURE_CLICKED_TYPE.value -> {
+ CtaType.TENURE_CLICKED_TYPE.value -> {
onTenureChanged(ctaData.parameters)
}
- LoanDetailsEditorFragment.CtaType.SLIDER_END_TYPE.value -> {
+ CtaType.SLIDER_END_TYPE.value -> {
onTenureSliderSelected(ctaData.parameters)
}
- LoanDetailsEditorFragment.CtaType.VIEW_EMI_CALENDAR.value -> {
+ CtaType.VIEW_EMI_CALENDAR.value -> {
if (isWebView()) {
val loanFeeDetailsRequest = constructEmiBundleFromCtaParams(ctaData.parameters)
launchEmiCalendar(loanFeeDetailsRequest)
@@ -1432,13 +1491,13 @@ class FreshLoanDetailsV2Fragment :
launchEmiCalendar()
}
}
- LoanDetailsEditorFragment.CtaType.KNOW_MORE.value -> {
+ CtaType.KNOW_MORE.value -> {
openKnowMoreBottomSheet()
}
- LoanDetailsEditorFragment.CtaType.INFO_ICON_CLICK.value -> {
+ CtaType.INFO_ICON_CLICK.value -> {
openEffectiveInterestCostScreen(ctaData)
}
- LoanDetailsEditorFragment.CtaType.FOOTER_NEXT_PRESS.value -> {
+ CtaType.FOOTER_NEXT_PRESS.value -> {
onFooterNextPress(ctaData)
}
SCROLL_TO_WIDGET_POSITION -> {
@@ -1506,7 +1565,7 @@ class FreshLoanDetailsV2Fragment :
}
sendEventFromCta(ctaData)
- if (LoanDetailsEditorFragment.CtaType.TENURE_SELECTED_TYPE.value == ctaData?.type) {
+ if (CtaType.TENURE_SELECTED_TYPE.value == ctaData?.type) {
loanDetailsEventTracker.onTenureSliderChanged(
viewModel.getOfferId(),
viewModel.isAutoDebitSetUp.value,
@@ -1515,7 +1574,7 @@ class FreshLoanDetailsV2Fragment :
)
}
- if (LoanDetailsEditorFragment.CtaType.SLIDER_END_TYPE.value == ctaData?.type) {
+ if (CtaType.SLIDER_END_TYPE.value == ctaData?.type) {
loanDetailsEventTracker.onEmiPlanClick(
viewModel.getOfferId(),
viewModel.isAutoDebitSetUp.value,
@@ -1611,13 +1670,13 @@ class FreshLoanDetailsV2Fragment :
var isCustomizeTenureSelected: Boolean? = false
parameters?.forEach {
when (it.key) {
- LoanDetailsEditorFragment.CtaType.TENURE_SELECTED_VALUE.value -> {
+ CtaType.TENURE_SELECTED_VALUE.value -> {
viewModel.setSelectedTenure(it.value?.toInt().orZero())
}
- LoanDetailsEditorFragment.CtaType.MONTHLY_EMI_VALUE.value -> {
+ CtaType.MONTHLY_EMI_VALUE.value -> {
viewModel.setSelectedMonthlyEmi(it.value?.toDouble().orZero())
}
- LoanDetailsEditorFragment.CtaType.CUSTOMISE_TENURE.value -> {
+ CtaType.CUSTOMISE_TENURE.value -> {
isCustomizeTenureSelected = it.value?.toBoolean()?.orFalse()
if (isCustomizeTenureSelected.orFalse()) {
loanDetailsEventTracker.onCustomizeTenureCardClicked(
@@ -1640,10 +1699,10 @@ class FreshLoanDetailsV2Fragment :
private fun onTenureDefaultSelected(parameters: List?) {
parameters?.forEach {
when (it.key) {
- LoanDetailsEditorFragment.CtaType.TENURE_SELECTED_VALUE.value -> {
+ CtaType.TENURE_SELECTED_VALUE.value -> {
viewModel.setSelectedTenure(it.value?.toInt().orZero())
}
- LoanDetailsEditorFragment.CtaType.MONTHLY_EMI_VALUE.value -> {
+ CtaType.MONTHLY_EMI_VALUE.value -> {
viewModel.setSelectedMonthlyEmi(it.value?.toDouble().orZero())
}
}
@@ -1653,13 +1712,13 @@ class FreshLoanDetailsV2Fragment :
private fun onTenureSliderSelected(parameters: List?) {
parameters?.forEach {
when (it.key) {
- LoanDetailsEditorFragment.CtaType.TENURE_SELECTED_VALUE.value -> {
+ CtaType.TENURE_SELECTED_VALUE.value -> {
viewModel.setSelectedTenure(it.value?.toInt().orZero())
}
- LoanDetailsEditorFragment.CtaType.MONTHLY_EMI_VALUE.value -> {
+ CtaType.MONTHLY_EMI_VALUE.value -> {
viewModel.setSelectedMonthlyEmi(it.value?.toDouble().orZero())
}
- LoanDetailsEditorFragment.CtaType.CUSTOMISE_TENURE.value -> {
+ CtaType.CUSTOMISE_TENURE.value -> {
val isCustomizeTenureSelected = it.value?.toBoolean()?.orFalse()
if (isCustomizeTenureSelected.orFalse()) {
loanDetailsEventTracker.onCustomizeTenureCardClicked(
@@ -1695,21 +1754,21 @@ class FreshLoanDetailsV2Fragment :
val bundle = Bundle()
loanFeeDetailsRequest?.let {
bundle.putParcelable(
- EmiSelectorV2Fragment.LOAN_AMOUNT,
+ LOAN_AMOUNT,
it.amount
)
- bundle.putInt(EmiSelectorV2Fragment.TENURE, it.tenureInMonths.orZero())
- bundle.putString(EmiSelectorV2Fragment.SELECTED_EMI_DATE, it.firstEmiDueDate)
- bundle.putDouble(EmiSelectorV2Fragment.RATE_OF_INTEREST, it.rateOfInterest.orZero())
+ bundle.putInt(TENURE, it.tenureInMonths.orZero())
+ bundle.putString(SELECTED_EMI_DATE, it.firstEmiDueDate)
+ bundle.putDouble(RATE_OF_INTEREST, it.rateOfInterest.orZero())
} ?: kotlin.run {
bundle.putParcelable(
- EmiSelectorV2Fragment.LOAN_AMOUNT,
+ LOAN_AMOUNT,
toMoney(viewModel.selectedLoanAmount.value)
)
- bundle.putInt(EmiSelectorV2Fragment.TENURE, viewModel.selectedTenure.value.orZero())
- bundle.putString(EmiSelectorV2Fragment.SELECTED_EMI_DATE, response?.firstEmiDueDate)
+ bundle.putInt(TENURE, viewModel.selectedTenure.value.orZero())
+ bundle.putString(SELECTED_EMI_DATE, response?.firstEmiDueDate)
response?.rateOfInterest?.let {
- bundle.putDouble(EmiSelectorV2Fragment.RATE_OF_INTEREST, it)
+ bundle.putDouble(RATE_OF_INTEREST, it)
}
}
@@ -1723,7 +1782,7 @@ class FreshLoanDetailsV2Fragment :
url =
NaviDeepLinkNavigator.LOAN_APPLICATION_V2.appendStrings(
FORWARD_SLASH.toString(),
- GetLoanV2ViewHelper.EMI_SELECTOR_FRAGMENT_V2
+ GetLoanV2Helper.EMI_SELECTOR_FRAGMENT_V2
)
),
finish = false
@@ -1746,7 +1805,7 @@ class FreshLoanDetailsV2Fragment :
}
val bundle =
Bundle().apply {
- putParcelable(EmiSelectorV2Fragment.LOAN_FEE_DETAILS_REQUEST, loanFeeDetailsRequest)
+ putParcelable(LOAN_FEE_DETAILS_REQUEST, loanFeeDetailsRequest)
}
NaviDeepLinkNavigator.navigateTo(
@@ -1756,7 +1815,7 @@ class FreshLoanDetailsV2Fragment :
url =
NaviDeepLinkNavigator.LOAN_APPLICATION_V2.appendStrings(
FORWARD_SLASH.toString(),
- GetLoanV2ViewHelper.UPCOMING_EMI_DETAIL_V2
+ GetLoanV2Helper.UPCOMING_EMI_DETAIL_V2
)
),
bundle = bundle,
@@ -1827,7 +1886,7 @@ class FreshLoanDetailsV2Fragment :
.plus(SubPageStatusType.BANK_DETAILS_AUTO_DEBIT)
private const val OFFER_UPGRADE_V2 =
NaviDeepLinkNavigator.LOAN_APPLICATION_V2.plus("/")
- .plus(GetLoanV2ViewHelper.LOAN_OFFER_UPGRADE_V2)
+ .plus(GetLoanV2Helper.LOAN_OFFER_UPGRADE_V2)
private const val WIDGET_POSITION = "WIDGET_POSITION"
const val EVENT_NAME = "EVENT_NAME"
const val LOAN_AMOUNT_UITRON_LAYOUT_ID = "loanAmountSlider"
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/GstVerificationPasswordV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/GstVerificationPasswordV2Fragment.kt
similarity index 91%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/GstVerificationPasswordV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/GstVerificationPasswordV2Fragment.kt
index 3f8c77390c..2dbb387ed4 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/GstVerificationPasswordV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/GstVerificationPasswordV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Build
@@ -30,12 +30,11 @@ import com.navi.common.utils.ApiPollScheduler
import com.navi.design.font.FontWeightEnum
import com.navi.design.utils.getFontStyle
import com.navi.design.utils.getNaviDrawable
-import com.naviapp.R
+import com.navi.pl.dynamic.databinding.PlFragmentGstVerificationPasswordV2Binding
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.navigator.NaviDeepLinkNavigator
-import com.naviapp.databinding.GstVerificationPasswordFragmentV2Binding
import com.naviapp.models.request.GstLoginData
import com.naviapp.models.request.GstOtpVerificationData
import com.naviapp.models.request.GstSendOtpData
@@ -45,15 +44,17 @@ import com.naviapp.personalloan.getloan.loandetails.states.GstOtpGenerationState
import com.naviapp.personalloan.getloan.loandetails.states.GstVerificationLoginState
import com.naviapp.personalloan.getloan.loandetails.states.GstVerificationState
import com.naviapp.personalloan.getloan.loandetails.viewmodels.GstDetailsVM
-import com.naviapp.utils.*
+import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
-import dagger.hilt.android.AndroidEntryPoint
+import com.naviapp.utils.EMPTY
+import com.naviapp.utils.IntentConstants
+import com.naviapp.utils.getTimer
+import com.naviapp.R as appR
-@AndroidEntryPoint
class GstVerificationPasswordV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
- private lateinit var binding: GstVerificationPasswordFragmentV2Binding
+ private lateinit var binding: PlFragmentGstVerificationPasswordV2Binding
private val viewModel by lazy { ViewModelProvider(this).get(GstDetailsVM::class.java) }
private var headerListener: NaviHeaderView.InteractionListener? = null
private var isVerificationMethodOTP: Boolean = true
@@ -70,7 +71,7 @@ class GstVerificationPasswordV2Fragment : BaseFragment(), FooterViewV2.FooterInt
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = GstVerificationPasswordFragmentV2Binding.inflate(inflater, container, false)
+ binding = PlFragmentGstVerificationPasswordV2Binding.inflate(inflater, container, false)
initError(viewModel, actionErrorV2Enabled = true)
initQueryMap()
initObserver()
@@ -119,7 +120,7 @@ class GstVerificationPasswordV2Fragment : BaseFragment(), FooterViewV2.FooterInt
}
private fun initUI() {
- timeInSecond = resources.getInteger(R.integer.value_60).toLong()
+ timeInSecond = resources.getInteger(appR.integer.value_60).toLong()
showLoader()
setPasswordHintStyle()
viewModel.fetchGstDetails(ctaQueryMap)
@@ -206,20 +207,20 @@ class GstVerificationPasswordV2Fragment : BaseFragment(), FooterViewV2.FooterInt
binding.gstDetailContainer.background =
getNaviDrawable(
strokeColor =
- ResourcesCompat.getColor(resources, R.color.naviBorderLightGrey, null),
- strokeWidth = resources.getDimension(R.dimen.layout_dp_1).toInt(),
- cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt(),
- backgroundColor = ResourcesCompat.getColor(resources, R.color.white, null)
+ ResourcesCompat.getColor(resources, appR.color.naviBorderLightGrey, null),
+ strokeWidth = resources.getDimension(appR.dimen.layout_dp_1).toInt(),
+ cornerRadius = resources.getDimension(appR.dimen.layout_dp_8).toInt(),
+ backgroundColor = ResourcesCompat.getColor(resources, appR.color.white, null)
)
setBannerBackground(gstDetailsResponse)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
binding.gstDetailContainer.outlineSpotShadowColor =
- ResourcesCompat.getColor(resources, R.color.shadow_color, null)
+ ResourcesCompat.getColor(resources, appR.color.shadow_color, null)
binding.gstDetailContainer.outlineAmbientShadowColor =
- ResourcesCompat.getColor(resources, R.color.shadow_color, null)
+ ResourcesCompat.getColor(resources, appR.color.shadow_color, null)
}
- binding.gstDetailContainer.elevation = resources.getDimension(R.dimen.layout_dp_3)
+ binding.gstDetailContainer.elevation = resources.getDimension(appR.dimen.layout_dp_3)
binding.footerListener = this
@@ -248,8 +249,8 @@ class GstVerificationPasswordV2Fragment : BaseFragment(), FooterViewV2.FooterInt
rootItem.background =
getNaviDrawable(
backgroundColor =
- ResourcesCompat.getColor(resources, R.color.container_bg_color, null),
- cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt()
+ ResourcesCompat.getColor(resources, appR.color.container_bg_color, null),
+ cornerRadius = resources.getDimension(appR.dimen.layout_dp_8).toInt()
)
rootItem.isVisible = true
}
@@ -288,7 +289,7 @@ class GstVerificationPasswordV2Fragment : BaseFragment(), FooterViewV2.FooterInt
private fun onVerifyOtpClicked() {
val enteredOtp = binding.otpBoxLayout.getText()
otpRequestId?.let {
- showLoader(resources.getString(R.string.please_wait))
+ showLoader(resources.getString(appR.string.please_wait))
viewModel.verifyOTPForGstVerification(
GstOtpVerificationData(otp = enteredOtp, requestId = it)
)
@@ -448,7 +449,7 @@ class GstVerificationPasswordV2Fragment : BaseFragment(), FooterViewV2.FooterInt
binding.textInputField.apply {
typeface = ResourcesCompat.getFont(context, getFontStyle(FontWeightEnum.TT_REGULAR))
setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f)
- setHintTextColor(ResourcesCompat.getColor(resources, R.color.gray_56, null))
+ setHintTextColor(ResourcesCompat.getColor(resources, appR.color.gray_56, null))
}
}
@@ -456,25 +457,25 @@ class GstVerificationPasswordV2Fragment : BaseFragment(), FooterViewV2.FooterInt
binding.textInputField.apply {
typeface = ResourcesCompat.getFont(context, getFontStyle(FontWeightEnum.TT_REGULAR))
setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f)
- setHintTextColor(ResourcesCompat.getColor(resources, R.color.title_color_four, null))
+ setHintTextColor(ResourcesCompat.getColor(resources, appR.color.title_color_four, null))
}
}
private fun setErrorStateInPasswordInput() {
binding.textField.background =
getNaviDrawable(
- strokeWidth = resources.getDimension(R.dimen.layout_dp_1).toInt(),
- strokeColor = ResourcesCompat.getColor(resources, R.color.error_red, null),
- cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt()
+ strokeWidth = resources.getDimension(appR.dimen.layout_dp_1).toInt(),
+ strokeColor = ResourcesCompat.getColor(resources, appR.color.error_red, null),
+ cornerRadius = resources.getDimension(appR.dimen.layout_dp_8).toInt()
)
}
private fun setNormalStateInPasswordInput() {
binding.textField.background =
getNaviDrawable(
- strokeWidth = resources.getDimension(R.dimen.layout_dp_1).toInt(),
- strokeColor = ResourcesCompat.getColor(resources, R.color.zircon_grey, null),
- cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt()
+ strokeWidth = resources.getDimension(appR.dimen.layout_dp_1).toInt(),
+ strokeColor = ResourcesCompat.getColor(resources, appR.color.zircon_grey, null),
+ cornerRadius = resources.getDimension(appR.dimen.layout_dp_8).toInt()
)
}
@@ -507,7 +508,7 @@ class GstVerificationPasswordV2Fragment : BaseFragment(), FooterViewV2.FooterInt
val userName = arguments?.getString(GstVerificationV2Fragment.PORTAL_USER_NAME)
val password = binding.textInputField.text.toString()
if (userName != null && gstIn != null) {
- showLoader(getString(R.string.please_wait))
+ showLoader(getString(appR.string.please_wait))
val gstLoginData = GstLoginData(userName, password, gstIn)
viewModel.loginGstWithCredential(gstLoginData)
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/GstVerificationV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/GstVerificationV2Fragment.kt
similarity index 89%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/GstVerificationV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/GstVerificationV2Fragment.kt
index 292f765222..70b44bf1a8 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/GstVerificationV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/GstVerificationV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -30,13 +30,15 @@ import com.navi.design.font.FontWeightEnum
import com.navi.design.utils.getFontStyle
import com.navi.design.utils.getNaviDrawable
import com.navi.naviwidgets.utils.FORWARD_SLASH
-import com.naviapp.R
+import com.navi.pl.dynamic.activity.IntermediateV2Activity
+import com.navi.pl.dynamic.databinding.PlFragmentGstVerificationV2Binding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
+import com.navi.pl.dynamic.helper.UserIdentificationV2Helper
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.listeners.BackListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
-import com.naviapp.databinding.GstVerificationFragmentV2Binding
import com.naviapp.models.request.GstSendOtpData
import com.naviapp.models.response.GstBanner
import com.naviapp.models.response.GstDetailsResponse
@@ -45,21 +47,17 @@ import com.naviapp.personalloan.getloan.loandetails.fragments.InfoBottomSheetWit
import com.naviapp.personalloan.getloan.loandetails.states.GstOtpGenerationState
import com.naviapp.personalloan.getloan.loandetails.viewmodels.GstDetailsVM
import com.naviapp.personalloanrevamp.common.customview.InfoBottomSheetV2
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
-import com.naviapp.personalloanrevamp.intermediatev2.IntermediateV2Activity
-import com.naviapp.personalloanrevamp.useridentificationv2.helper.UserIdentificationV2Helper.OFFER_IN_REVIEW
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.IconUtils
import com.naviapp.utils.shakeView
-import dagger.hilt.android.AndroidEntryPoint
+import com.naviapp.R as appR
-@AndroidEntryPoint
class GstVerificationV2Fragment :
BaseFragment(), FooterViewV2.FooterInteractionListener, BackListener {
- private lateinit var binding: GstVerificationFragmentV2Binding
+ private lateinit var binding: PlFragmentGstVerificationV2Binding
private val viewModel by lazy { ViewModelProvider(this).get(GstDetailsVM::class.java) }
private var headerListener: NaviHeaderView.InteractionListener? = null
private val plCommonActionEvents by lazy { object : NaviAnalytics.PLCommonActionEvents {} }
@@ -71,7 +69,7 @@ class GstVerificationV2Fragment :
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = GstVerificationFragmentV2Binding.inflate(inflater, container, false)
+ binding = PlFragmentGstVerificationV2Binding.inflate(inflater, container, false)
initError(viewModel, actionErrorV2Enabled = true)
initQueryMap()
initObserver()
@@ -226,20 +224,20 @@ class GstVerificationV2Fragment :
binding.inputUserName.apply {
label = gstDetailsResponse.content?.userNameFieldTitle
hintText = gstDetailsResponse.content?.userNameFieldPlaceHolder
- infoIcon = ResourcesCompat.getDrawable(resources, R.drawable.ic_user_name_info, null)
+ infoIcon = ResourcesCompat.getDrawable(resources, appR.drawable.ic_user_name_info, null)
inputImeOptions = EditorInfo.IME_ACTION_DONE
- setIconAndUsernameMargin(resources.getDimension(R.dimen.layout_dp_8).toInt())
- iconSize = resources.getDimension(R.dimen.layout_dp_14).toInt()
+ setIconAndUsernameMargin(resources.getDimension(appR.dimen.layout_dp_8).toInt())
+ iconSize = resources.getDimension(appR.dimen.layout_dp_14).toInt()
maxCharacterAllowed = USER_NAME_MAX_CHARACTER_ALLOWED
maxNumberOfLineAllowed = 1
setInputTextStyle(
textSizeInSp = 14f,
- textColor = R.color.title_color_one,
+ textColor = appR.color.title_color_one,
fontId = getFontStyle(FontWeightEnum.TT_REGULAR)
)
setHintStyle(
textSizeInSp = 14f,
- hintTextColor = R.color.titleTertiaryColor,
+ hintTextColor = appR.color.titleTertiaryColor,
fontId = getFontStyle(FontWeightEnum.TT_REGULAR)
)
}
@@ -255,8 +253,8 @@ class GstVerificationV2Fragment :
rootItem.background =
getNaviDrawable(
backgroundColor =
- ResourcesCompat.getColor(resources, R.color.container_bg_color, null),
- cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt()
+ ResourcesCompat.getColor(resources, appR.color.container_bg_color, null),
+ cornerRadius = resources.getDimension(appR.dimen.layout_dp_8).toInt()
)
rootItem.isVisible = true
}
@@ -277,7 +275,7 @@ class GstVerificationV2Fragment :
val bottomSheet =
InfoBottomSheetV2.getInstance(
iconCode = it.iconCode ?: IconUtils.ICON_ALERT_BLACK,
- iconTint = R.color.black,
+ iconTint = resources.getColor(appR.color.black),
header = it.title,
subHeader = it.subheader,
description = it.description,
@@ -301,7 +299,7 @@ class GstVerificationV2Fragment :
override fun onFooterBackPressed(backCta: CtaData?) {
backCta?.let {
- if (ctaQueryMap[GST_SCREEN_TYPE]?.equals(OFFER_IN_REVIEW).orFalse()) {
+ if (ctaQueryMap[GST_SCREEN_TYPE]?.equals(UserIdentificationV2Helper.OFFER_IN_REVIEW).orFalse()) {
NaviDeepLinkNavigator.navigate(activity, ctaData = backCta, finish = true)
} else {
if (isAdded && activity is IntermediateV2Activity) {
@@ -318,11 +316,11 @@ class GstVerificationV2Fragment :
}
override fun onBackPressed() {
- if (ctaQueryMap[GST_SCREEN_TYPE]?.equals(OFFER_IN_REVIEW).orFalse()) {
+ if (ctaQueryMap[GST_SCREEN_TYPE]?.equals(UserIdentificationV2Helper.OFFER_IN_REVIEW).orFalse()) {
onBackPressedNavigation(
ctaData = CtaData(
url = NaviDeepLinkNavigator.ELIGIBILITY_V2.plus(Constants.DIVIDER)
- .plus(OFFER_IN_REVIEW)
+ .plus(UserIdentificationV2Helper.OFFER_IN_REVIEW)
)
)
} else {
@@ -331,7 +329,7 @@ class GstVerificationV2Fragment :
CtaData(
url =
NaviDeepLinkNavigator.LOAN_APPLICATION_V2.plus(FORWARD_SLASH.toString())
- .plus(GetLoanV2ViewHelper.FRESH_LOAN_DETAILS_V2)
+ .plus(GetLoanV2Helper.FRESH_LOAN_DETAILS_V2)
)
)
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/InReviewV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/InReviewV2Fragment.kt
similarity index 99%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/InReviewV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/InReviewV2Fragment.kt
index e78ee46508..81cbd6d6e9 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/InReviewV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/InReviewV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/fragment/KycAddressProofV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycAddressProofV2Fragment.kt
similarity index 95%
rename from app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/fragment/KycAddressProofV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycAddressProofV2Fragment.kt
index 01a417a3b0..3555391fac 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/fragment/KycAddressProofV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycAddressProofV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.addressverificationrevamp.fragment
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -17,21 +17,29 @@ import androidx.lifecycle.ViewModelProvider
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.model.CtaData
import com.navi.base.utils.isNotNullAndNotEmpty
+import com.navi.base.utils.orElse
import com.navi.base.utils.orFalse
import com.navi.base.utils.orTrue
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.UPDATE_KYC_DETAILS
import com.navi.common.listeners.LocationUpdateListener
import com.navi.common.model.RequestConfig
import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.utils.ApiPollScheduler
import com.navi.common.utils.observeNonNull
-import com.navi.insurance.util.observeNullable
+import com.navi.common.utils.observeNullable
+import com.navi.pl.dynamic.adapter.CurrentAddressItemsV2Adapter
+import com.navi.pl.dynamic.databinding.PlFragmentKycAddressProofV2Binding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
+import com.navi.pl.dynamic.listener.UpdateKycStateListener
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.FragmentKycAddressProofV2Binding
import com.naviapp.models.FeedbackPageType
import com.naviapp.models.KycUiStatusValue
import com.naviapp.models.response.CurrentAddress
@@ -39,15 +47,9 @@ import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloan.getloan.activities.GetLoanActivity
import com.naviapp.personalloan.getloan.addressverification.viewmodels.AddressVerificationVM
import com.naviapp.personalloan.getloan.kyc.listeners.DocumentUploadListener
-import com.naviapp.personalloanrevamp.addressverificationrevamp.adapter.CurrentAddressItemsV2Adapter
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.InReviewV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
-import com.naviapp.personalloanrevamp.kyc.fragment.KycDocumentListFragmentV2
-import com.naviapp.personalloanrevamp.kyc.listener.UpdateKycStateListener
import com.naviapp.utils.Constants
-import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
-import com.navi.base.utils.orElse
import com.naviapp.utils.Constants.ACTION
+import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.toast
@@ -58,7 +60,7 @@ class KycAddressProofV2Fragment :
FooterViewV2.FooterInteractionListener,
CurrentAddressChangeListener {
- private lateinit var binding: FragmentKycAddressProofV2Binding
+ private lateinit var binding: PlFragmentKycAddressProofV2Binding
private val viewModel by lazy { ViewModelProvider(this)[AddressVerificationVM::class.java] }
private var currentAddressIndex = 0
private var firebaseRequestId: String? = null
@@ -80,7 +82,7 @@ class KycAddressProofV2Fragment :
savedInstanceState: Bundle?
): View {
super.onCreate(savedInstanceState)
- binding = FragmentKycAddressProofV2Binding.inflate(inflater, container, false)
+ binding = PlFragmentKycAddressProofV2Binding.inflate(inflater, container, false)
initError()
initListeners()
initObservers()
@@ -222,8 +224,8 @@ class KycAddressProofV2Fragment :
addressProofResponse?.header?.title?.let {
headerListener?.setProperties(
it,
- infoCta = addressProofResponse.header.infoCta,
- leftIconCode = addressProofResponse.header.leftIconCode
+ infoCta = addressProofResponse.header?.infoCta,
+ leftIconCode = addressProofResponse.header?.leftIconCode
)
}
@@ -276,7 +278,7 @@ class KycAddressProofV2Fragment :
private fun navigateToKycInReviewScreen() {
listener?.navigateTo(
- GetLoanV2ViewHelper.KYC_IN_REVIEW,
+ GetLoanV2Helper.KYC_IN_REVIEW,
bundle =
Bundle().apply {
putString(
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/fragment/KycAddressV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycAddressV2Fragment.kt
similarity index 95%
rename from app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/fragment/KycAddressV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycAddressV2Fragment.kt
index 981b14c487..388ebcc9b6 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/fragment/KycAddressV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycAddressV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.addressverificationrevamp.fragment
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -19,22 +19,34 @@ import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.model.CtaData
+import com.navi.base.utils.orElse
import com.navi.base.utils.orFalse
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.UPDATE_KYC_DETAILS
import com.navi.common.listeners.LocationUpdateListener
import com.navi.common.model.RequestConfig
import com.navi.common.network.models.GenericErrorResponse
import com.navi.common.ui.fragment.BaseFragment
-import com.navi.common.utils.*
+import com.navi.common.utils.ApiPollScheduler
+import com.navi.common.utils.hideKeyboard
+import com.navi.common.utils.observeNonNull
+import com.navi.common.utils.observeNullable
import com.navi.design.font.FontWeightEnum
import com.navi.design.utils.getFontStyle
+import com.navi.pl.dynamic.activity.ErrorScreenV2Activity
+import com.navi.pl.dynamic.databinding.PlFragmentKycAddressV2Binding
+import com.navi.pl.dynamic.helper.AddressHelper.getAddressFromCurrentAddress
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
+import com.navi.pl.dynamic.helper.KycAddressV2Helper
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.navigator.ScreenNavigator
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.FragmentKycAddressV2Binding
import com.naviapp.models.FeedbackPageType
import com.naviapp.models.KycUiStatusValue
import com.naviapp.models.RedirectPageStatus
@@ -44,16 +56,10 @@ import com.naviapp.models.response.CurrentAddress
import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloan.getloan.activities.GetLoanActivity
import com.naviapp.personalloan.getloan.addressverification.viewmodels.AddressVerificationVM
-import com.naviapp.personalloanrevamp.addressverificationrevamp.helper.AddressHelper.getAddressFromCurrentAddress
-import com.naviapp.personalloanrevamp.addressverificationrevamp.helper.KycAddressV2Helper
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.personalloanrevamp.models.ImportantNote
import com.naviapp.utils.Constants
-import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
-import com.navi.base.utils.orElse
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment
import com.naviapp.utils.Constants.ACTION
+import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.toast
@@ -64,7 +70,7 @@ class KycAddressV2Fragment :
View.OnFocusChangeListener,
View.OnClickListener {
- private lateinit var binding: FragmentKycAddressV2Binding
+ private lateinit var binding: PlFragmentKycAddressV2Binding
private val viewModel by lazy { ViewModelProvider(this)[AddressVerificationVM::class.java] }
private var data: CurrentAddress? = null
private var uploadedDocumentTypeAndUrl: Pair? = null
@@ -82,7 +88,7 @@ class KycAddressV2Fragment :
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = FragmentKycAddressV2Binding.inflate(inflater, container, false)
+ binding = PlFragmentKycAddressV2Binding.inflate(inflater, container, false)
initUi()
initListeners()
initObservers()
@@ -181,7 +187,7 @@ class KycAddressV2Fragment :
viewModel.updateKycDetails(KycRequest(address))
} else {
saveCorrespondenceAddressResponse?.footer?.nextCta?.url?.let {
- listener?.navigateTo(GetLoanV2ViewHelper.KYC_ADDRESS_PROOF_VERIFICATION)
+ listener?.navigateTo(GetLoanV2Helper.KYC_ADDRESS_PROOF_VERIFICATION)
}
}
}
@@ -309,8 +315,8 @@ class KycAddressV2Fragment :
addressVerificationDetailsResponse?.header?.title?.let {
headerListener?.setProperties(
it,
- addressVerificationDetailsResponse.header.leftIconCode,
- addressVerificationDetailsResponse.header.infoCta
+ addressVerificationDetailsResponse.header?.leftIconCode,
+ addressVerificationDetailsResponse.header?.infoCta
)
}
@@ -442,7 +448,7 @@ class KycAddressV2Fragment :
}
private fun navigateToKycInReviewScreen() {
- listener?.navigateTo(GetLoanV2ViewHelper.KYC_IN_REVIEW)
+ listener?.navigateTo(GetLoanV2Helper.KYC_IN_REVIEW)
}
private fun navigateToNextScreen() {
@@ -455,7 +461,7 @@ class KycAddressV2Fragment :
?.firstOrNull { item -> item.key == Constants.PERSONAL_LOAN_APPLICATION_ID }
?.value
listener?.navigateTo(
- GetLoanV2ViewHelper.KYC_ADDRESS_PROOF_VERIFICATION,
+ GetLoanV2Helper.KYC_ADDRESS_PROOF_VERIFICATION,
Bundle().apply {
putString(Constants.PERSONAL_LOAN_APPLICATION_ID, loanApplicationId)
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/fragment/KycDocumentListFragmentV2.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycDocumentListFragmentV2.kt
similarity index 92%
rename from app/src/main/java/com/naviapp/personalloanrevamp/kyc/fragment/KycDocumentListFragmentV2.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycDocumentListFragmentV2.kt
index a8a505a8ec..652a8f0bdd 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/fragment/KycDocumentListFragmentV2.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycDocumentListFragmentV2.kt
@@ -1,11 +1,11 @@
/*
*
- * * Copyright © 2019 by Navi Technologies Private Limited
+ * * Copyright © 2019-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
-package com.naviapp.personalloanrevamp.kyc.fragment
+package com.navi.pl.dynamic.fragment
import android.app.Activity
import android.content.Intent
@@ -19,9 +19,9 @@ import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.navi.common.ui.fragment.BaseBottomSheet
import com.navi.common.utils.observeNonNull
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.databinding.PlFragmentKycDocumentListV2Binding
import com.naviapp.analytics.utils.NaviAnalytics
-import com.naviapp.databinding.KycDocumentListFragmentBinding
import com.naviapp.personalloan.getloan.kyc.adapter.KycDocumentListAdapter
import com.naviapp.personalloan.getloan.kyc.listeners.DocumentUploadListener
import com.naviapp.personalloan.getloan.kyc.listeners.KycDocumentItemListener
@@ -35,14 +35,14 @@ import java.io.ByteArrayOutputStream
import java.io.FileInputStream
class KycDocumentListFragmentV2 : BaseBottomSheet(), KycDocumentItemListener {
- private lateinit var binding: KycDocumentListFragmentBinding
+ private lateinit var binding: PlFragmentKycDocumentListV2Binding
private val viewModel by lazy { ViewModelProvider(this).get(KycVM::class.java) }
private var listener: DocumentUploadListener? = null
private var documentSelectedType: String? = null
override fun setContainerView(viewStub: ViewStub) {
- viewStub.layoutResource = R.layout.kyc_document_list_fragment
+ viewStub.layoutResource = R.layout.pl_fragment_kyc_document_list_v2
binding = DataBindingUtil.getBinding(viewStub.inflate())!!
initUi()
initListeners()
@@ -121,4 +121,4 @@ class KycDocumentListFragmentV2 : BaseBottomSheet(), KycDocumentItemListener {
const val TAG = "KYC_DOCUMENT_LIST_FRAGMENT"
private const val REQUEST_KYC_DOCUMENT_CAPTURE = 111
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/fragment/KycV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycV2Fragment.kt
similarity index 94%
rename from app/src/main/java/com/naviapp/personalloanrevamp/kyc/fragment/KycV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycV2Fragment.kt
index 209bed4439..a10318b588 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/fragment/KycV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/KycV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.kyc.fragment
+package com.navi.pl.dynamic.fragment
import android.Manifest
import android.app.Activity
@@ -33,30 +33,50 @@ import com.navi.base.model.StyledTextWithIconCode
import com.navi.base.utils.isNotNull
import com.navi.base.utils.orFalse
import com.navi.base.utils.orTrue
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.AADHAR_VERIFICATION
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.OVD_UPLOAD
+import com.navi.common.firebasedb.PAN_UPLOAD
+import com.navi.common.firebasedb.SELFIE
+import com.navi.common.firebasedb.UPDATE_KYC_DETAILS
+import com.navi.common.firebasedb.VIDEO_KYC
import com.navi.common.listeners.LocationUpdateListener
import com.navi.common.managers.PermissionsManager
import com.navi.common.model.RequestConfig
import com.navi.common.model.UpdateAppDetails
import com.navi.common.ui.fragment.BaseFragment
-import com.navi.common.utils.*
+import com.navi.common.utils.ApiPollScheduler
+import com.navi.common.utils.log
+import com.navi.common.utils.observeNonNull
+import com.navi.common.utils.observeNullable
+import com.navi.payment.utils.ProviderType
+import com.navi.pl.dynamic.adapter.KycItemType
+import com.navi.pl.dynamic.adapter.KycItemsV2Adapter
+import com.navi.pl.dynamic.databinding.PlFragmentKycV2Binding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
+import com.navi.pl.dynamic.helper.VKycHelper
+import com.navi.pl.dynamic.listener.UpdateKycStateListener
import com.naviapp.BuildConfig
-import com.naviapp.R
import com.naviapp.analytics.utils.LoadTimeEventTracker
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.fragment.UpdateInAppDialog
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.KycFragmenttV2Binding
-import com.naviapp.models.*
+import com.naviapp.models.CustomClickConfig
+import com.naviapp.models.CustomClickType
+import com.naviapp.models.FeedbackPageType
+import com.naviapp.models.KycUiStatusValue
+import com.naviapp.models.VideoKycStatusEnum
import com.naviapp.models.request.KycRequest
import com.naviapp.models.request.SelfieSetting
import com.naviapp.models.request.SelfieUploadRequestData
import com.naviapp.models.response.KycAaadharActionType
import com.naviapp.network.ApiConstants
import com.naviapp.network.ApiErrorTagType
-import com.navi.payment.utils.ProviderType
import com.naviapp.permission.fragments.PermissionDeniedFragment
import com.naviapp.permission.utils.getPermissionDeniedData
import com.naviapp.personalloan.getloan.activities.GetLoanActivity
@@ -72,12 +92,6 @@ import com.naviapp.personalloan.getloan.kyc.utils.DocumentType
import com.naviapp.personalloan.getloan.kyc.viewmodels.KycSharedVM
import com.naviapp.personalloan.getloan.kyc.viewmodels.KycVM
import com.naviapp.personalloanrevamp.customview.LoanOfferStickinessBottomSheetV2
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.InReviewV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
-import com.naviapp.personalloanrevamp.kyc.adapter.KycItemType
-import com.naviapp.personalloanrevamp.kyc.adapter.KycItemsV2Adapter
-import com.naviapp.personalloanrevamp.kyc.listener.UpdateKycStateListener
-import com.naviapp.personalloanrevamp.kyc.utils.VKycHelper
import com.naviapp.personalloanrevamp.models.KycItemV2
import com.naviapp.personalloanrevamp.models.KycMultipleActionType
import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
@@ -89,15 +103,20 @@ import com.naviapp.utils.IconUtils
import com.naviapp.utils.PROD
import com.naviapp.utils.isDead
import com.naviapp.utils.toast
-import kotlinx.coroutines.*
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileInputStream
-import java.util.*
+import java.util.Locale
+import com.naviapp.R as appR
class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInteractionListener {
- private lateinit var binding: KycFragmenttV2Binding
+ private lateinit var binding: PlFragmentKycV2Binding
private val viewModel by lazy { ViewModelProvider(this)[KycVM::class.java] }
private val sharedViewModel by lazy { ViewModelProvider(requireActivity())[KycSharedVM::class.java] }
private var firebaseRequestId: String? = null
@@ -152,7 +171,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = KycFragmenttV2Binding.inflate(inflater, container, false)
+ binding = PlFragmentKycV2Binding.inflate(inflater, container, false)
return binding.root
}
@@ -413,7 +432,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
navigateToKycInReviewScreen()
}
else -> {
- context?.toast(R.string.something_went_wrong)
+ context?.toast(appR.string.something_went_wrong)
}
}
}
@@ -432,16 +451,16 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
private fun navigateToKycInReviewScreen() {
listener?.navigateTo(
- GetLoanV2ViewHelper.KYC_IN_REVIEW,
+ GetLoanV2Helper.KYC_IN_REVIEW,
bundle =
Bundle().apply {
putString(
InReviewV2Fragment.TITLE,
- resources.getString(R.string.kyc_verification_pending)
+ resources.getString(appR.string.kyc_verification_pending)
)
putString(
InReviewV2Fragment.DESCRIPTION,
- resources.getString(R.string.kyc_pending_description)
+ resources.getString(appR.string.kyc_pending_description)
)
}
)
@@ -520,10 +539,10 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
kycDetailsResponse.header?.title?.let {
headerListener?.setProperties(
- kycDetailsResponse.header.title,
- kycDetailsResponse.header.leftIconCode,
- kycDetailsResponse.header.infoCta,
- colorInt = R.color.white,
+ it,
+ kycDetailsResponse.header?.leftIconCode,
+ kycDetailsResponse.header?.infoCta,
+ colorInt = appR.color.white,
hideDivider = true
)
}
@@ -585,7 +604,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
}
?.description =
StyledTextWithIconCode(
- text = getString(R.string.verification_incomplete),
+ text = getString(appR.string.verification_incomplete),
iconCode = IconUtils.WARNING_SMALL_ICON,
hexColorCode = "#f7b500"
)
@@ -600,7 +619,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
item?.description =
StyledTextWithIconCode(
- text = getString(R.string.selfie_capture_incomplete),
+ text = getString(appR.string.selfie_capture_incomplete),
iconCode = IconUtils.WARNING_SMALL_ICON,
hexColorCode = "#f7b500"
)
@@ -653,7 +672,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
if (it.errorCode != 11) {
it.errorMessage?.let { errorText -> activity?.toast(errorText, Toast.LENGTH_LONG) }
} else {
- activity?.toast(R.string.something_went_wrong_please_retry, Toast.LENGTH_LONG)
+ activity?.toast(appR.string.something_went_wrong_please_retry, Toast.LENGTH_LONG)
}
}
}
@@ -720,7 +739,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
}
PROVIDER_MOCK -> {
- bitmapImage = BitmapFactory.decodeResource(resources, R.drawable.bank)
+ bitmapImage = BitmapFactory.decodeResource(resources, appR.drawable.bank)
}
else -> {
@@ -805,7 +824,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
}
}
} else {
- listener?.navigateTo(GetLoanV2ViewHelper.VIDEO_KYC_V2_SCREEN)
+ listener?.navigateTo(GetLoanV2Helper.VIDEO_KYC_V2_SCREEN)
}
}
@@ -851,7 +870,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
private fun onClickPanPhoto(showReviewScreen: Boolean?, shouldAutoCapture: Boolean?) {
loadTimeEventTracker.onLoadingStarted(NaviAnalytics.PL_PAN_UPLOAD_TIME)
- val hvDocConfig = vKycHelper.hvDocPANConfig(getString(R.string.pan_capture), showReviewScreen, shouldAutoCapture, context)
+ val hvDocConfig = vKycHelper.hvDocPANConfig(getString(appR.string.pan_capture), showReviewScreen, shouldAutoCapture, context)
HVDocsActivity.start(requireContext(), hvDocConfig, activity as DocCaptureCompletionHandler)
}
@@ -934,7 +953,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
initVkyc(permissionsManager)
} else {
analyticsEventTracker.onStoragePermissionResult(NaviAnalytics.NO)
- toast(getString(R.string.permissions_required_for_video_kyc))
+ toast(getString(appR.string.permissions_required_for_video_kyc))
}
}
@@ -949,7 +968,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
analyticsEventTracker.onCameraPermissionResult(NaviAnalytics.NO)
if (!shouldShowRequestPermissionRationale(PermissionsManager.CAMERA_PERMISSION))
handleDoNotAskAgain(PermissionsManager.CAMERA_PERMISSION)
- else toast(getString(R.string.camera_permission_required_for_selfie))
+ else toast(getString(appR.string.camera_permission_required_for_selfie))
}
}
@@ -961,7 +980,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
analyticsEventTracker.onCameraPermissionResult(NaviAnalytics.NO)
if (!shouldShowRequestPermissionRationale(PermissionsManager.CAMERA_PERMISSION))
handleDoNotAskAgain(PermissionsManager.CAMERA_PERMISSION)
- else toast(getString(R.string.camera_permission_required_for_pan))
+ else toast(getString(appR.string.camera_permission_required_for_pan))
}
}
@@ -979,7 +998,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
analyticsEventTracker.onStoragePermissionResult(NaviAnalytics.NO)
if (!shouldShowRequestPermissionRationale(PermissionsManager.STORAGE_PERMISSION))
handleDoNotAskAgain(PermissionsManager.STORAGE_PERMISSION)
- else toast(getString(R.string.storage_permission_required_for_aadhaar))
+ else toast(getString(appR.string.storage_permission_required_for_aadhaar))
}
}
@@ -1280,7 +1299,7 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
}
override fun onAddressClicked() {
- listener?.navigateTo(GetLoanV2ViewHelper.KYC_ADDRESS_VERIFICATION)
+ listener?.navigateTo(GetLoanV2Helper.KYC_ADDRESS_VERIFICATION)
}
override fun onPause() {
@@ -1318,8 +1337,6 @@ class KycV2Fragment : BaseFragment(), KycItemsListener, FooterViewV2.FooterInter
const val VIDEO_KYC_REQUEST_CODE = 103
const val AADHAR_OTP_REQUEST_CODE = 104
const val COMPLETED = "COMPLETED"
- const val CURRENT_ADDRESS = "CURRENT_ADDRESS"
- const val TEXTFIELD = "TEXTFIELD"
}
override fun onFooterBackPressed(backCta: CtaData?) {
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanDetailsEditorFragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanDetailsEditorFragment.kt
similarity index 94%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanDetailsEditorFragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanDetailsEditorFragment.kt
index 2fec350521..bb5137995d 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanDetailsEditorFragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanDetailsEditorFragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -37,6 +37,7 @@ import com.navi.naviwidgets.callbacks.WidgetCallback
import com.navi.naviwidgets.models.response.Footer
import com.navi.naviwidgets.utils.FORWARD_SLASH
import com.navi.naviwidgets.widgets.textdisplay.Margin
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.navi.uitron.render.UiTronRenderer
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
@@ -55,22 +56,25 @@ import com.naviapp.models.response.LoanDetailsV2AdditionData
import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloan.factory.LoanDetailsV2VHFactoryImpl
import com.naviapp.personalloanrevamp.getloanRevamp.adapters.LoanDetailsV2WidgetAdapter
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
import com.naviapp.personalloanrevamp.getloanRevamp.viewmodels.GetLoanV2SharedVM
import com.naviapp.personalloanrevamp.getloanRevamp.viewmodels.LoanEditorVM
+import com.naviapp.personalloanrevamp.models.CtaType
import com.naviapp.personalloanrevamp.models.response.LoanDetailsV2Response
-import com.naviapp.utils.*
+import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.AUTO_DEBIT_SHOWN
import com.naviapp.utils.Constants.FETCH_FIRST_SELECTED_EMI_DATE_CODE
import com.naviapp.utils.Constants.FLOW_TYPE
import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
-import dagger.hilt.android.AndroidEntryPoint
+import com.naviapp.utils.LOAN_APPLICATION_ID
+import com.naviapp.utils.OFFER_ID
+import com.naviapp.utils.PRODUCT_CODE
+import com.naviapp.utils.appendStrings
+import com.naviapp.utils.setMargin
import kotlinx.coroutines.launch
-@AndroidEntryPoint
class LoanDetailsEditorFragment :
BaseFragment(), LoanDetailsV2WidgetAdapterListener, FooterViewV2.FooterInteractionListener,
BackListener,
@@ -251,9 +255,9 @@ class LoanDetailsEditorFragment :
binding.uitronFooter.visibility = View.VISIBLE
binding.uitronFooter.setContent {
UiTronRenderer(
- loanDetailsV2Response.footer.uiTronFooter.data,
+ loanDetailsV2Response.footer?.uiTronFooter?.data,
viewModel
- ).Render(composeViews = loanDetailsV2Response.footer.uiTronFooter.parentComposeView.orEmpty())
+ ).Render(composeViews = loanDetailsV2Response.footer?.uiTronFooter?.parentComposeView.orEmpty())
}
} ?: initUI()
}
@@ -284,7 +288,7 @@ class LoanDetailsEditorFragment :
requestCode = FETCH_FIRST_SELECTED_EMI_DATE_CODE,
ctaData = CtaData(
url = NaviDeepLinkNavigator.LOAN_APPLICATION_V2.appendStrings(
- FORWARD_SLASH.toString(), GetLoanV2ViewHelper.EMI_SELECTOR_FRAGMENT_V2
+ FORWARD_SLASH.toString(), GetLoanV2Helper.EMI_SELECTOR_FRAGMENT_V2
)
),
finish = false
@@ -361,14 +365,14 @@ class LoanDetailsEditorFragment :
LoanDetailsV2WidgetAdapter(
widgetConfigList = it,
listener = this,
- additionalData = loanDetailsV2Response.content.additionalData,
+ additionalData = loanDetailsV2Response.content?.additionalData,
LoanDetailsV2VHFactoryImpl(viewModel),
this
)
} else {
(binding.loanDetailsEditorRv.adapter as? LoanDetailsV2WidgetAdapter)?.updateData(
widgetConfigList = it,
- additionalData = loanDetailsV2Response.content.additionalData
+ additionalData = loanDetailsV2Response.content?.additionalData
)
}
}
@@ -494,7 +498,7 @@ class LoanDetailsEditorFragment :
NaviDeepLinkNavigator.navigateTo(
activity = activity, ctaData = CtaData(
url = NaviDeepLinkNavigator.LOAN_APPLICATION_V2.appendStrings(
- FORWARD_SLASH.toString(), GetLoanV2ViewHelper.UPCOMING_EMI_DETAIL_V2
+ FORWARD_SLASH.toString(), GetLoanV2Helper.UPCOMING_EMI_DETAIL_V2
)
), bundle = bundle, finish = false
)
@@ -680,7 +684,7 @@ class LoanDetailsEditorFragment :
putString(FLOW_TYPE, TAG)
}
fragmentInteractionListener?.navigateTo(
- screen = GetLoanV2ViewHelper.LOAN_DETAILS_V2_FRAGMENT,
+ screen = GetLoanV2Helper.LOAN_DETAILS_V2_FRAGMENT,
bundle = bundle
)
}
@@ -722,26 +726,6 @@ class LoanDetailsEditorFragment :
fun getInstance() = LoanDetailsEditorFragment()
}
- enum class CtaType(val value: String) {
- CHANGE_EMI_DATE("CHANGE_EMI_DATE"),
- TENURE_SELECTED_TYPE("TENURE_SELECTED_TYPE"),
- SLIDER_SELECTED_TYPE("SLIDER_SELECTED_TYPE"),
- TENURE_SELECTED_VALUE("TENURE_SELECTED_VALUE"),
- MONTHLY_EMI_VALUE("MONTHLY_EMI_VALUE"),
- CUSTOMISE_TENURE("CUSTOMISE_TENURE"),
- TENURE_SLIDER_CHANGE("TENURE_SLIDER_CHANGE"),
- VIEW_EMI_CALENDAR("VIEW_EMI_CALENDAR"),
- KNOW_MORE("KNOW_MORE"),
- SLIDER_END_TYPE("SLIDER_END_TYPE"),
- TENURE_CLICKED_TYPE("TENURE_CLICKED_TYPE"),
- TENURE_DEFAULT_SELECTED("TENURE_DEFAULT_SELECTED"),
- INFO_ICON_CLICK("INFO_ICON_CLICK"),
- FOOTER_NEXT_PRESS("FOOTER_NEXT_PRESS"),
- FOOTER_DESCRIPTION_PRESS("FOOTER_DESCRIPTION_PRESS"),
- APR_CLICK("APR_BOTTOM_SHEET"),
- CLOSE_SNAPPED_HEADER("CLOSE_SNAPPED_HEADER")
- }
-
override fun onBackPressed() {
onFooterBackPressed(null)
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanDetailsV2BaseFragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanDetailsV2BaseFragment.kt
similarity index 99%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanDetailsV2BaseFragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanDetailsV2BaseFragment.kt
index 8bc932b7d6..3ce5c39eec 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanDetailsV2BaseFragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanDetailsV2BaseFragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.annotation.SuppressLint
import android.view.View
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanDetailsV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanDetailsV2Fragment.kt
similarity index 94%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanDetailsV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanDetailsV2Fragment.kt
index 41a6505ac3..0e19baf7e8 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanDetailsV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanDetailsV2Fragment.kt
@@ -5,13 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
-/*
- *
- * * Copyright © 2022 by Navi Technologies Private Limited
- * * All rights reserved. Strictly confidential
- *
- */
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.graphics.Color
@@ -22,7 +16,6 @@ import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.annotation.ColorRes
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.PermissionChecker
import androidx.core.view.isVisible
@@ -40,27 +33,50 @@ import co.hyperverge.hypersnapsdk.model.UIConfig
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.gson.Gson
import com.navi.analytics.utils.NaviTrackEvent
-import com.navi.base.model.*
+import com.navi.base.model.BoldTypeList
+import com.navi.base.model.ClickableTextType
+import com.navi.base.model.CtaData
+import com.navi.base.model.GenericAnalyticsData
+import com.navi.base.model.LineItem
+import com.navi.base.model.NaviClickAction
+import com.navi.base.model.NaviWidgetClickWithActionData
+import com.navi.base.model.StyledTextWithIconCode
import com.navi.base.sharedpref.PreferenceManager
import com.navi.base.utils.orElse
import com.navi.base.utils.orFalse
import com.navi.base.utils.orTrue
import com.navi.base.utils.orZero
import com.navi.chat.utils.ChatPLScreens
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.LOAN_AGREEMENT_SIGN
+import com.navi.common.firebasedb.LOAN_APPLY
+import com.navi.common.firebasedb.OFFER_GENERATE
import com.navi.common.listeners.ClickableTextListener
import com.navi.common.managers.PermissionsManager
import com.navi.common.model.InfoBottomSheetConfig
import com.navi.common.model.RequestConfig
import com.navi.common.network.models.GenericResponseState
import com.navi.common.uitron.model.action.CtaAction
-import com.navi.common.utils.*
+import com.navi.common.utils.ApiPollScheduler
+import com.navi.common.utils.findFirstVisibleItemPosition
+import com.navi.common.utils.log
+import com.navi.common.utils.observeNonNull
+import com.navi.common.utils.observeNullable
+import com.navi.common.utils.setStyledText
+import com.navi.common.utils.toCtaData
import com.navi.design.utils.getNaviDrawable
import com.navi.design.utils.parseColorSafe
import com.navi.naviwidgets.callbacks.WidgetCallback
import com.navi.naviwidgets.utils.FORWARD_SLASH
import com.navi.naviwidgets.utils.setBackgroundColor
import com.navi.naviwidgets.widgets.textdisplay.Margin
+import com.navi.pl.dynamic.databinding.PlFragmentLoanDetailsV2Binding
+import com.navi.pl.dynamic.fragment.KycV2Fragment.Companion.PAN_CAMERA_REQUEST_CODE
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
+import com.navi.pl.dynamic.helper.VKycHelper
import com.navi.uitron.model.action.AnalyticsAction
import com.navi.uitron.model.data.TextData
import com.navi.uitron.render.UiTronRenderer
@@ -75,8 +91,13 @@ import com.naviapp.common.listeners.FooterWithDescriptionListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.LoanDetailsV2FragmentBinding
-import com.naviapp.models.*
+import com.naviapp.models.CustomClickConfig
+import com.naviapp.models.CustomClickType
+import com.naviapp.models.FooterType
+import com.naviapp.models.Offer
+import com.naviapp.models.SubPageStatusType
+import com.naviapp.models.Tenure
+import com.naviapp.models.UserProfile
import com.naviapp.models.request.LoanFeeDetailsRequest
import com.naviapp.models.request.LoanRequest
import com.naviapp.models.request.SliderType
@@ -90,13 +111,12 @@ import com.naviapp.personalloan.getloan.activities.GetLoanActivity
import com.naviapp.personalloan.getloan.kyc.viewmodels.KycSharedVM
import com.naviapp.personalloanrevamp.common.customview.LoanAmountSummaryView
import com.naviapp.personalloanrevamp.getloanRevamp.adapters.LoanDetailsV2WidgetAdapter
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
+import com.naviapp.personalloanrevamp.getloanRevamp.fragments.BankDetailsAutoDebitV2Fragment
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
import com.naviapp.personalloanrevamp.getloanRevamp.repository.LoanDetailsV2Repository
import com.naviapp.personalloanrevamp.getloanRevamp.viewmodels.GetLoanV2SharedVM
import com.naviapp.personalloanrevamp.getloanRevamp.viewmodels.LoanDetailsV2FragmentVM
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment.Companion.PAN_CAMERA_REQUEST_CODE
-import com.naviapp.personalloanrevamp.kyc.utils.VKycHelper
+import com.naviapp.personalloanrevamp.models.CtaType
import com.naviapp.personalloanrevamp.models.LoanDetailsV2WidgetType
import com.naviapp.personalloanrevamp.models.SnappedWidget
import com.naviapp.personalloanrevamp.models.StyledTextTimedCardData
@@ -106,7 +126,6 @@ import com.naviapp.personalloanrevamp.models.response.LoanDetailsV2Content
import com.naviapp.personalloanrevamp.models.response.LoanDetailsV2Response
import com.naviapp.personalloanrevamp.models.response.TransferBottomSheetContent
import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
-import com.naviapp.utils.*
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.AUTO_DEBIT_SHOWN
@@ -125,17 +144,26 @@ import com.naviapp.utils.Constants.REPEAT_LOAN_DETAILS_FLOW
import com.naviapp.utils.Constants.SLASH
import com.naviapp.utils.Constants.TRANSFER_BOTTOMSHEET
import com.naviapp.utils.Constants.ZERO
-import dagger.hilt.android.AndroidEntryPoint
+import com.naviapp.utils.DOT
+import com.naviapp.utils.LOAN_APPLICATION_ID
+import com.naviapp.utils.OFFER_ID
+import com.naviapp.utils.PRODUCT_CODE
+import com.naviapp.utils.appendStrings
+import com.naviapp.utils.dpToPx
+import com.naviapp.utils.formatAmount
+import com.naviapp.utils.isBottomSheetEnabled
+import com.naviapp.utils.isValidEmail
+import com.naviapp.utils.pxToDp
+import com.naviapp.utils.rawToCtaData
+import com.naviapp.utils.setMargin
import getDataId
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
-import javax.inject.Inject
-@AndroidEntryPoint
class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescriptionListener,
ClickableTextListener, LoanDetailsV2WidgetAdapterListener, WidgetCallback, BackListener {
- private lateinit var binding: LoanDetailsV2FragmentBinding
+ private lateinit var binding: PlFragmentLoanDetailsV2Binding
private val viewModel by lazy {
ViewModelProvider(this)[LoanDetailsV2FragmentVM::class.java]
}
@@ -145,9 +173,8 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
private var listener: FragmentInteractionListener? = null
private var vKycHelper = VKycHelper()
- @Inject
lateinit var repository: LoanDetailsV2Repository
- private var updateUIListener: UpdateUiListener? = null
+ private var updateUIListener: BankDetailsAutoDebitV2Fragment.UpdateUiListener? = null
private val widgetNaviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Widget()
private var sharedVM: GetLoanV2SharedVM? = null
private var loanAmountSummaryWidgetPosition: Int? = null
@@ -164,7 +191,8 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
super.onCreateView(inflater, container, savedInstanceState)
- binding = LoanDetailsV2FragmentBinding.inflate(inflater, container, false)
+ binding = PlFragmentLoanDetailsV2Binding.inflate(inflater, container, false)
+ repository = LoanDetailsV2Repository()
initUi()
initError()
initObservers()
@@ -443,7 +471,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
var text = if (sliderAmount == null) {
additionData?.loanAmtPrefix?.text?.let {
if (!description.text?.contains(it).orFalse()) {
- "${additionData.loanAmtPrefix.text} ${description.text}"
+ "${additionData.loanAmtPrefix?.text} ${description.text}"
} else {
"${description.text}"
}
@@ -452,7 +480,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
}
} else {
additionData?.loanAmtPrefix?.text?.let {
- "${additionData.loanAmtPrefix.text} $sliderAmount"
+ "${additionData.loanAmtPrefix?.text} $sliderAmount"
} ?: run {
"$sliderAmount"
}
@@ -538,7 +566,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
it.content?.additionalData?.analyticsData?.viewedData?.eventName?.let { eventName ->
NaviTrackEvent.trackEventOnClickStream(
eventName,
- it.content.additionalData.analyticsData.viewedData?.parameters
+ it.content?.additionalData?.analyticsData?.viewedData?.parameters
)
}
setLayoutMargin(
@@ -642,7 +670,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
viewModel.subsequentKycStatus.observeNonNull(viewLifecycleOwner) { subsequentKycStatus ->
subsequentKycStatus.status?.let {
if (TextUtils.equals(it, FirebaseStatusType.SUCCESS)) {
- statusHandling(status = subsequentKycStatus.status, Constants.EMPTY)
+ statusHandling(status = (subsequentKycStatus.status as String), Constants.EMPTY)
if (subsequentKycStatus.shouldSignLoan.orFalse()) {
signLoanAgreement()
} else {
@@ -712,7 +740,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
FirebaseStatusType.FAILURE
)
) {
- statusHandling(status = subsequentKycStatus.status, Constants.EMPTY)
+ statusHandling(status = (subsequentKycStatus.status as String), Constants.EMPTY)
}
}
}
@@ -814,9 +842,9 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
binding.uitronFooter.visibility = View.VISIBLE
binding.uitronFooter.setContent {
UiTronRenderer(
- loanDetailsV2Response.footer.uiTronFooter.data,
+ loanDetailsV2Response.footer?.uiTronFooter?.data,
viewModel
- ).Render(composeViews = loanDetailsV2Response.footer.uiTronFooter.parentComposeView.orEmpty())
+ ).Render(composeViews = loanDetailsV2Response.footer?.uiTronFooter?.parentComposeView.orEmpty())
}
} ?: enableTitleDescriptionFooter(loanDetailsV2Response)
}
@@ -1231,7 +1259,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
super.onAttach(context)
listener = context as? FragmentInteractionListener
headerListener = context as? NaviHeaderView.InteractionListener
- updateUIListener = context as? UpdateUiListener
+ updateUIListener = context as? BankDetailsAutoDebitV2Fragment.UpdateUiListener
activity?.let { sharedVM = ViewModelProvider(it)[GetLoanV2SharedVM::class.java] }
}
@@ -1491,7 +1519,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
private fun handleCtaType(ctaData: CtaData?) {
when (ctaData?.type) {
- LoanDetailsEditorFragment.CtaType.CHANGE_EMI_DATE.value -> {
+ CtaType.CHANGE_EMI_DATE.value -> {
if (isWebView()) {
val loanFeeDetailsRequest = constructEmiBundleFromCtaParams(ctaData.parameters)
openEmiCalendar(loanFeeDetailsRequest)
@@ -1500,23 +1528,23 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
}
}
- LoanDetailsEditorFragment.CtaType.TENURE_DEFAULT_SELECTED.value -> {
+ CtaType.TENURE_DEFAULT_SELECTED.value -> {
onTenureDefaultSelected(ctaData.parameters)
}
- LoanDetailsEditorFragment.CtaType.TENURE_CLICKED_TYPE.value -> {
+ CtaType.TENURE_CLICKED_TYPE.value -> {
onTenureChanged(ctaData.parameters)
}
- LoanDetailsEditorFragment.CtaType.INFO_ICON_CLICK.value -> {
+ CtaType.INFO_ICON_CLICK.value -> {
openEffectiveInterestCostScreen(ctaData)
}
- LoanDetailsEditorFragment.CtaType.SLIDER_END_TYPE.value -> {
+ CtaType.SLIDER_END_TYPE.value -> {
onTenureSliderSelected(ctaData.parameters)
}
- LoanDetailsEditorFragment.CtaType.VIEW_EMI_CALENDAR.value -> {
+ CtaType.VIEW_EMI_CALENDAR.value -> {
if (isWebView()) {
val loanFeeDetailsRequest = constructEmiBundleFromCtaParams(ctaData.parameters)
launchEmiCalendar(loanFeeDetailsRequest)
@@ -1528,12 +1556,12 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
}
}
- LoanDetailsEditorFragment.CtaType.CLOSE_SNAPPED_HEADER.value -> {
+ CtaType.CLOSE_SNAPPED_HEADER.value -> {
binding.snappedHeaderLl.visibility = View.GONE
binding.snappedHeaderLlNewDesign.visibility = View.GONE
}
- LoanDetailsEditorFragment.CtaType.FOOTER_DESCRIPTION_PRESS.value -> {
+ CtaType.FOOTER_DESCRIPTION_PRESS.value -> {
// To Support Backward compatible using it both in content as well as additional data
onFooterDescriptionPress(
viewModel.loanDetailsV2Response.value?.content?.additionalData?.footerClickableText?.type
@@ -1545,7 +1573,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
)
}
- LoanDetailsEditorFragment.CtaType.APR_CLICK.value -> {
+ CtaType.APR_CLICK.value -> {
onFooterDescriptionPress(
viewModel.loanDetailsV2Response.value?.content?.additionalData?.aprClickableText?.type,
viewModel.loanDetailsV2Response.value?.content?.additionalData?.aprClickableText?.data,
@@ -1553,7 +1581,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
)
}
- LoanDetailsEditorFragment.CtaType.FOOTER_NEXT_PRESS.value -> {
+ CtaType.FOOTER_NEXT_PRESS.value -> {
onFooterNextPress(ctaData)
}
@@ -1561,7 +1589,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
openFooterBottomSheetCta(ctaData.parameters)
}
- LoanTooltipSliderView.LOAN_AMOUNT_SLIDER -> {
+ CtaType.LOAN_AMOUNT_SLIDER.value -> {
setSelectedLoanAmountSliderValue(ctaData.parameters)
}
@@ -1593,7 +1621,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
}
}
- if (LoanDetailsEditorFragment.CtaType.TENURE_SELECTED_TYPE.value == ctaData?.type) {
+ if (CtaType.TENURE_SELECTED_TYPE.value == ctaData?.type) {
loanDetailsEventTracker.onTenurePlanClick(
viewModel.getOfferId(),
isAutoDebitShown(),
@@ -1603,7 +1631,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
)
}
- if (LoanDetailsEditorFragment.CtaType.SLIDER_SELECTED_TYPE.value == ctaData?.type) {
+ if (CtaType.SLIDER_SELECTED_TYPE.value == ctaData?.type) {
loanDetailsEventTracker.onEmiSliderChanged(
viewModel.getOfferId(),
isAutoDebitShown(),
@@ -1677,7 +1705,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
private fun handleClickEvent(it: String) {
var eventName: String? = null
when (it) {
- GetLoanV2ViewHelper.LOAN_DETAILS_EDITOR_FRAGMENT -> eventName =
+ GetLoanV2Helper.LOAN_DETAILS_EDITOR_FRAGMENT -> eventName =
NaviAnalytics.PL_REPEAT_PAGE_EDIT_CLICK
BANK_DETAILS_AUTO_DEBIT_CTA -> eventName = NaviAnalytics.PL_REPEAT_PAGE_AUTO_DEBIT_CLICK
@@ -1757,13 +1785,6 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
super.onDestroy()
}
- interface UpdateUiListener {
- fun changeHeaderBackGround(blackOut: Boolean)
- fun changeHeaderBackgroundColor(@ColorRes color: Int)
- fun showAutoPayAnimation()
- fun setHeaderBackgroundColor(colorString: String)
- }
-
private fun onEmiDateChange(firstEmiDate: String) {
if (!isWebView()) {
viewModel.selectedLoanAmount.value?.let {
@@ -1828,7 +1849,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
requestCode = FETCH_FIRST_SELECTED_EMI_DATE_CODE,
ctaData = CtaData(
url = NaviDeepLinkNavigator.LOAN_APPLICATION_V2.appendStrings(
- FORWARD_SLASH.toString(), GetLoanV2ViewHelper.EMI_SELECTOR_FRAGMENT_V2
+ FORWARD_SLASH.toString(), GetLoanV2Helper.EMI_SELECTOR_FRAGMENT_V2
)
),
finish = false
@@ -1919,7 +1940,7 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
NaviDeepLinkNavigator.navigateTo(
activity = activity, ctaData = CtaData(
url = NaviDeepLinkNavigator.LOAN_APPLICATION_V2.appendStrings(
- FORWARD_SLASH.toString(), GetLoanV2ViewHelper.UPCOMING_EMI_DETAIL_V2
+ FORWARD_SLASH.toString(), GetLoanV2Helper.UPCOMING_EMI_DETAIL_V2
)
), bundle = bundle, finish = false
)
@@ -1928,11 +1949,11 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
private fun onTenureDefaultSelected(parameters: List?) {
parameters?.forEach {
when (it.key) {
- LoanDetailsEditorFragment.CtaType.TENURE_SELECTED_VALUE.value -> {
+ CtaType.TENURE_SELECTED_VALUE.value -> {
viewModel.setSelectedTenure(it.value?.toInt().orZero())
}
- LoanDetailsEditorFragment.CtaType.MONTHLY_EMI_VALUE.value -> {
+ CtaType.MONTHLY_EMI_VALUE.value -> {
viewModel.setSelectedMonthlyEmi(it.value?.toDouble().orZero())
}
}
@@ -1942,15 +1963,15 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
private fun onTenureSliderSelected(parameters: List?) {
parameters?.forEach {
when (it.key) {
- LoanDetailsEditorFragment.CtaType.TENURE_SELECTED_VALUE.value -> {
+ CtaType.TENURE_SELECTED_VALUE.value -> {
viewModel.setSelectedTenure(it.value?.toInt().orZero())
}
- LoanDetailsEditorFragment.CtaType.MONTHLY_EMI_VALUE.value -> {
+ CtaType.MONTHLY_EMI_VALUE.value -> {
viewModel.setSelectedMonthlyEmi(it.value?.toDouble().orZero())
}
- LoanDetailsEditorFragment.CtaType.CUSTOMISE_TENURE.value -> {
+ CtaType.CUSTOMISE_TENURE.value -> {
val isCustomizeTenureSelected = it.value?.toBoolean()?.orFalse()
if (isCustomizeTenureSelected.orFalse()) {
loanDetailsEventTracker.onCustomizeTenureCardClicked(
@@ -1976,15 +1997,15 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
var isCustomizeTenureSelected: Boolean? = false
parameters?.forEach {
when (it.key) {
- LoanDetailsEditorFragment.CtaType.TENURE_SELECTED_VALUE.value -> {
+ CtaType.TENURE_SELECTED_VALUE.value -> {
viewModel.setSelectedTenure(it.value?.toInt().orZero())
}
- LoanDetailsEditorFragment.CtaType.MONTHLY_EMI_VALUE.value -> {
+ CtaType.MONTHLY_EMI_VALUE.value -> {
viewModel.setSelectedMonthlyEmi(it.value?.toDouble().orZero())
}
- LoanDetailsEditorFragment.CtaType.CUSTOMISE_TENURE.value -> {
+ CtaType.CUSTOMISE_TENURE.value -> {
isCustomizeTenureSelected = it.value?.toBoolean()?.orFalse()
if (isCustomizeTenureSelected.orFalse()) {
loanDetailsEventTracker.onCustomizeTenureCardClicked(
@@ -2027,10 +2048,10 @@ class LoanDetailsV2Fragment : LoanDetailsV2BaseFragment(), FooterWithDescription
NaviDeepLinkNavigator.LOAN_APPLICATION_V2.plus(SLASH)
.plus(SubPageStatusType.BANK_DETAILS_V2)
private const val OFFER_UPGRADE_V2 = NaviDeepLinkNavigator.LOAN_APPLICATION_V2.plus(SLASH)
- .plus(GetLoanV2ViewHelper.LOAN_OFFER_UPGRADE_V2)
+ .plus(GetLoanV2Helper.LOAN_OFFER_UPGRADE_V2)
private const val BANK_DETAILS_AUTO_DEBIT_V2_CTA =
NaviDeepLinkNavigator.LOAN_APPLICATION_V2.plus(SLASH)
- .plus(GetLoanV2ViewHelper.BANK_DETAILS_AUTO_DEBIT_V2)
+ .plus(GetLoanV2Helper.BANK_DETAILS_AUTO_DEBIT_V2)
fun newInstance(arguments: Bundle?) =
LoanDetailsV2Fragment().apply { this.arguments = arguments }
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/fragments/LoanOfferUpgradeV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanOfferUpgradeV2Fragment.kt
similarity index 95%
rename from app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/fragments/LoanOfferUpgradeV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanOfferUpgradeV2Fragment.kt
index 140cb25604..8eed66cc24 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/fragments/LoanOfferUpgradeV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanOfferUpgradeV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.intermediatev2.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -19,6 +19,7 @@ import com.navi.base.model.CtaData
import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.ui.fragment.CommonDialogBox
import com.navi.common.utils.observeNonNull
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.FooterViewV2
@@ -27,11 +28,15 @@ import com.naviapp.common.listeners.BackListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.dashboard.listeners.FragmentInteractionListener
import com.naviapp.databinding.FragmentLoanOfferUpgradeV2Binding
-import com.naviapp.models.response.*
+import com.naviapp.models.response.HeaderTitleBody
+import com.naviapp.models.response.HeaderTitleWidgetConfig
+import com.naviapp.models.response.ItemWithTextAndIcon
+import com.naviapp.models.response.OfferUpgradeGreetingResponse
+import com.naviapp.models.response.PopUpInfo
+import com.naviapp.models.response.PopularCards
import com.naviapp.personalloan.getloan.activities.GetLoanActivity
import com.naviapp.personalloan.getloan.loandetails.viewmodels.LoanOfferUpgradeVM
import com.naviapp.personalloanrevamp.getloanRevamp.customview.OfferImprovementCardViewV2
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.EPFO_PAGE_TYPE
@@ -270,10 +275,10 @@ class LoanOfferUpgradeV2Fragment :
override fun onBackPressed() {
when (arguments?.getString(Constants.FLOW_TYPE).orEmpty()) {
REPEAT_LOAN_DETAILS_FLOW -> {
- listener?.navigateTo(GetLoanV2ViewHelper.LOAN_DETAILS_V2_FRAGMENT, Bundle())
+ listener?.navigateTo(GetLoanV2Helper.LOAN_DETAILS_V2_FRAGMENT, Bundle())
}
FRESH_LOAN_DETAILS_FLOW -> {
- listener?.navigateTo(GetLoanV2ViewHelper.FRESH_LOAN_DETAILS_V2, Bundle())
+ listener?.navigateTo(GetLoanV2Helper.FRESH_LOAN_DETAILS_V2, Bundle())
}
else -> {
listener?.navigateTo(NaviDeepLinkNavigator.HOME, Bundle())
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanOfferUpgradeV3Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanOfferUpgradeV3Fragment.kt
similarity index 96%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanOfferUpgradeV3Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanOfferUpgradeV3Fragment.kt
index 6ff1837aff..e2cc279ee4 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/LoanOfferUpgradeV3Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanOfferUpgradeV3Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -24,6 +24,8 @@ import com.navi.base.utils.orZero
import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.ui.fragment.CommonDialogBox
import com.navi.common.uitron.model.action.CtaAction
+import com.navi.pl.dynamic.databinding.PlFragmentLoanOfferUpgradeV3Binding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.navi.uitron.model.data.TextData
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
@@ -32,7 +34,6 @@ import com.naviapp.common.listeners.BackListener
import com.naviapp.common.listeners.FooterWithDescriptionListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.FragmentLoanOfferUpgradeV3Binding
import com.naviapp.models.CustomClickConfig
import com.naviapp.models.CustomClickType
import com.naviapp.models.TextTimerConfig
@@ -42,7 +43,6 @@ import com.naviapp.network.ApiErrorTagType
import com.naviapp.personalloan.factory.LoanDetailsV2VHFactoryImpl
import com.naviapp.personalloan.getloan.activities.GetLoanActivity
import com.naviapp.personalloanrevamp.getloanRevamp.adapters.LoanDetailsV2WidgetAdapter
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.personalloanrevamp.getloanRevamp.viewmodels.LoanOfferUpgradeV3FragmentVM
import com.naviapp.personalloanrevamp.models.response.LoanOfferUpgradeV3Response
import com.naviapp.personalloanrevamp.states.OfferUpgradeResponseState
@@ -57,7 +57,7 @@ import kotlinx.coroutines.launch
class LoanOfferUpgradeV3Fragment :
BaseFragment(), View.OnClickListener, BackListener,
FooterWithDescriptionListener {
- private lateinit var binding: FragmentLoanOfferUpgradeV3Binding
+ private lateinit var binding: PlFragmentLoanOfferUpgradeV3Binding
private val viewModel by lazy { ViewModelProvider(this).get(LoanOfferUpgradeV3FragmentVM::class.java) }
private val analyticsEventTracker by lazy { NaviAnalytics.naviAnalytics.LoanOfferUpgrade() }
private var listener: FragmentInteractionListener? = null
@@ -71,7 +71,7 @@ class LoanOfferUpgradeV3Fragment :
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = FragmentLoanOfferUpgradeV3Binding.inflate(inflater, container, false)
+ binding = PlFragmentLoanOfferUpgradeV3Binding.inflate(inflater, container, false)
initQueryMapFromCtaParameters()
readBundle()
initError(viewModel, actionErrorV2Enabled = true,
@@ -362,10 +362,10 @@ class LoanOfferUpgradeV3Fragment :
override fun onBackPressed() {
when (arguments?.getString(Constants.FLOW_TYPE).orEmpty()) {
Constants.REPEAT_LOAN_DETAILS_FLOW -> {
- listener?.navigateTo(GetLoanV2ViewHelper.LOAN_DETAILS_V2_FRAGMENT, Bundle())
+ listener?.navigateTo(GetLoanV2Helper.LOAN_DETAILS_V2_FRAGMENT, Bundle())
}
Constants.FRESH_LOAN_DETAILS_FLOW -> {
- listener?.navigateTo(GetLoanV2ViewHelper.FRESH_LOAN_DETAILS_V2, Bundle())
+ listener?.navigateTo(GetLoanV2Helper.FRESH_LOAN_DETAILS_V2, Bundle())
}
else -> {
listener?.navigateTo(NaviDeepLinkNavigator.HOME, Bundle())
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/LoanSummaryV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanSummaryV2Fragment.kt
similarity index 93%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/LoanSummaryV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanSummaryV2Fragment.kt
index aaacaa6934..862d51dfe4 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/LoanSummaryV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/LoanSummaryV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -25,15 +25,19 @@ import com.navi.base.utils.BaseUtils
import com.navi.base.utils.isNull
import com.navi.base.utils.orElse
import com.navi.base.utils.orFalse
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.LOAN_AGREEMENT_SIGN
import com.navi.common.listeners.ClickableTextListener
import com.navi.common.model.InfoBottomSheetConfig
import com.navi.common.model.UploadDataAsyncResponse
import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.utils.ApiPollScheduler
import com.navi.common.utils.log
+import com.navi.common.utils.observeNonNull
import com.navi.common.utils.observeNullable
-import com.navi.insurance.util.observeNonNull
import com.navi.naviwidgets.base.BaseInputWidget
import com.navi.naviwidgets.callbacks.WidgetCallback
import com.navi.naviwidgets.databinding.LayoutRewardsInfoBinding
@@ -42,6 +46,8 @@ import com.navi.naviwidgets.widgets.labledtextinput.InputTextWidgetMeta
import com.navi.naviwidgets.widgets.labledtextinput.LabeledTextInputWidgetModelV2
import com.navi.naviwidgets.widgets.labledtextinput.TextInputWidgetData
import com.navi.naviwidgets.widgets.textdisplay.Padding
+import com.navi.pl.dynamic.databinding.PlFragmentLoanSummaryV2Binding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.BoxInputGroup
@@ -52,32 +58,41 @@ import com.naviapp.common.listeners.BackListener
import com.naviapp.common.listeners.FooterWithDescriptionListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.LoanSummaryV2Binding
import com.naviapp.models.UserProfile
import com.naviapp.models.request.LoanFeeDetailsRequest
import com.naviapp.models.request.SendOtpForDisbursementRequest
-import com.naviapp.models.response.*
+import com.naviapp.models.response.LoanBasicDetailsResponse
+import com.naviapp.models.response.LoanDetailsV2AdditionData
+import com.naviapp.models.response.Medium
+import com.naviapp.models.response.NotificationSettingsResponse
+import com.naviapp.models.response.SendDisbursementOtpResponse
+import com.naviapp.models.response.WidgetConfig
import com.naviapp.personalloan.factory.LoanDetailsV2VHFactoryImpl
import com.naviapp.personalloanrevamp.common.customview.StyledDaysCalendarView.Companion.EMI_DATE_SELECTION
import com.naviapp.personalloanrevamp.common.customview.StyledDaysCalendarView.Companion.KEY_SELECTED_DATE
import com.naviapp.personalloanrevamp.common.customview.StyledDaysCalendarView.Companion.KEY_SELECTED_DATE_HEADER
import com.naviapp.personalloanrevamp.common.customview.StyledDaysCalendarView.Companion.NO_DATE_SELECTED
import com.naviapp.personalloanrevamp.getloanRevamp.adapters.LoanDetailsV2WidgetAdapter
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.EmiSelectorV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.FreshLoanDetailsV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.LoanDetailsV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
+import com.naviapp.personalloanrevamp.getloanRevamp.fragments.BankDetailsAutoDebitV2Fragment
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
import com.naviapp.personalloanrevamp.models.StyledTitleWithButtonWidgetBody
import com.naviapp.personalloanrevamp.models.response.EmailCard
import com.naviapp.personalloanrevamp.models.response.LoanSummaryViewResponse
+import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
import com.naviapp.personalloanrevamp.useridentificationv2.viewmodels.LoanSummaryV2ViewModel
-import com.naviapp.utils.*
+import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.FLOW_TYPE
import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.Constants.USER_SELECTED
+import com.naviapp.utils.LOAN_APPLICATION_ID
+import com.naviapp.utils.SELECTED_EMI_DATE
+import com.naviapp.utils.getWidgetPositionFromWidgetId
+import com.naviapp.utils.isValidEmail
+import com.naviapp.utils.navigateToClickableText
+import com.naviapp.utils.setPadding
+import com.naviapp.utils.setTextColorFromString
class LoanSummaryV2Fragment :
BaseFragment(),
@@ -87,13 +102,13 @@ class LoanSummaryV2Fragment :
ClickableTextListener,
LoanDetailsV2WidgetAdapterListener {
- private lateinit var binding: LoanSummaryV2Binding
+ private lateinit var binding: PlFragmentLoanSummaryV2Binding
private val viewModel by lazy { ViewModelProvider(this)[LoanSummaryV2ViewModel::class.java] }
private var loanApplicationId: String? = null
private val eventTracker by lazy { NaviAnalytics.naviAnalytics.GetLoan(screenName) }
private var listener: FragmentInteractionListener? = null
private var headerListener: NaviHeaderView.InteractionListener? = null
- private var updateUIListener: LoanDetailsV2Fragment.UpdateUiListener? = null
+ private var updateUIListener: BankDetailsAutoDebitV2Fragment.UpdateUiListener? = null
override fun onCreateView(
inflater: LayoutInflater,
@@ -101,7 +116,7 @@ class LoanSummaryV2Fragment :
savedInstanceState: Bundle?
): View {
super.onCreateView(inflater, container, savedInstanceState)
- binding = LoanSummaryV2Binding.inflate(inflater, container, false)
+ binding = PlFragmentLoanSummaryV2Binding.inflate(inflater, container, false)
initError(viewModel, actionErrorV2Enabled = true)
initListeners()
initObserver()
@@ -126,7 +141,7 @@ class LoanSummaryV2Fragment :
super.onAttach(context)
listener = context as? FragmentInteractionListener
headerListener = context as? NaviHeaderView.InteractionListener
- updateUIListener = context as? LoanDetailsV2Fragment.UpdateUiListener
+ updateUIListener = context as? BankDetailsAutoDebitV2Fragment.UpdateUiListener
}
private fun apiPollInit(asyncResponse: UploadDataAsyncResponse) {
@@ -273,7 +288,7 @@ class LoanSummaryV2Fragment :
it.otpSize.orElse(BoxInputGroup.OTP_LENGTH_4)
)
bundle.putString(OtpBottomSheet.KEY_SCREEN_NAME, NaviAnalytics.OTP_DISBURSEMENT)
- listener?.navigateTo(GetLoanV2ViewHelper.TRUE_CALLER_AUTHENTICATOR_V2, bundle)
+ listener?.navigateTo(GetLoanV2Helper.TRUE_CALLER_AUTHENTICATOR_V2, bundle)
}
}
@@ -538,7 +553,7 @@ class LoanSummaryV2Fragment :
}
override fun onBackPressed() {
- listener?.navigateTo(GetLoanV2ViewHelper.KYC_V2, Bundle())
+ listener?.navigateTo(GetLoanV2Helper.KYC_V2, Bundle())
}
override fun onClickText(type: String?, data: Any?, subType: String?) {
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/MFIConsentV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/MFIConsentV2Fragment.kt
similarity index 93%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/MFIConsentV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/MFIConsentV2Fragment.kt
index 5b8e2e0ba7..c7ffaec3fc 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/MFIConsentV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/MFIConsentV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -17,16 +17,17 @@ import com.navi.base.model.CtaData
import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.utils.observeNonNull
import com.navi.common.utils.observeNullable
+import com.navi.pl.dynamic.activity.ErrorScreenV2Activity
+import com.navi.pl.dynamic.databinding.PlFragmentMfiConsentV2Binding
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.MfiConsentV2FragmentBinding
import com.naviapp.models.response.MfiConsentResponse
import com.naviapp.personalloan.getloan.mfi.viewmodel.MfiConsentVM
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
+import com.naviapp.personalloanrevamp.useridentificationv2.fragments.ErrorV2InfoBottomSheet
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
@@ -35,7 +36,7 @@ import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class MFIConsentV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
- private lateinit var binding: MfiConsentV2FragmentBinding
+ private lateinit var binding: PlFragmentMfiConsentV2Binding
private val viewModel by lazy {
ViewModelProvider(requireActivity()).get(MfiConsentVM::class.java)
}
@@ -48,7 +49,7 @@ class MFIConsentV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListe
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = MfiConsentV2FragmentBinding.inflate(inflater, container, false)
+ binding = PlFragmentMfiConsentV2Binding.inflate(inflater, container, false)
return binding.root
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/error/fragments/MFIErrorFragmentV2.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/MFIErrorFragmentV2.kt
similarity index 94%
rename from app/src/main/java/com/naviapp/personalloanrevamp/error/fragments/MFIErrorFragmentV2.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/MFIErrorFragmentV2.kt
index 5767f54f51..28334728a8 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/error/fragments/MFIErrorFragmentV2.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/MFIErrorFragmentV2.kt
@@ -1,11 +1,11 @@
/*
*
- * * Copyright © 2022 by Navi Technologies Limited
+ * * Copyright © 2022-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
-package com.naviapp.personalloanrevamp.error.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -30,17 +30,17 @@ import com.navi.design.utils.getNaviDrawable
import com.navi.naviwidgets.adapters.NaviAdapter
import com.navi.naviwidgets.callbacks.WidgetCallback
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
+import com.navi.pl.dynamic.activity.ErrorScreenV2Activity
+import com.navi.pl.dynamic.adapter.RejectionReasonV2Adapter
+import com.navi.pl.dynamic.databinding.PlFragmentMfiErrorV2Binding
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.FragmentMfiErrorBinding
import com.naviapp.errors.adapters.RejectionReasonAdapter
import com.naviapp.errors.utils.getProfileRejectionScreenData
import com.naviapp.personalloan.getloan.creditAssignment.models.ImageBannerData
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.error.adapter.RejectionReasonV2Adapter
import com.naviapp.personalloanrevamp.models.RejectionDetailsV2
import com.naviapp.utils.EMPTY
import com.naviapp.utils.IconUtils
@@ -49,7 +49,7 @@ import kotlin.math.roundToInt
class MFIErrorFragmentV2 : BaseFragment(), WidgetCallback {
- private lateinit var binding: FragmentMfiErrorBinding
+ private lateinit var binding: PlFragmentMfiErrorV2Binding
private val creditAssignmentAnalytics = NaviAnalytics.naviAnalytics.CreditAssignment()
private val widgetNaviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Widget()
private val defaultBannerImageAspectRatio = 2.1918
@@ -62,7 +62,7 @@ class MFIErrorFragmentV2 : BaseFragment(), WidgetCallback {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = FragmentMfiErrorBinding.inflate(inflater, container, false)
+ binding = PlFragmentMfiErrorV2Binding.inflate(inflater, container, false)
initUi()
return binding.root
}
@@ -176,7 +176,7 @@ class MFIErrorFragmentV2 : BaseFragment(), WidgetCallback {
if (imageBannerData.aspectRatio.isNull() || imageBannerData.aspectRatio!! <= 0.0) {
(imageWidth.toDouble() / defaultBannerImageAspectRatio).roundToInt()
} else {
- (imageWidth.toDouble() / imageBannerData.aspectRatio).roundToInt()
+ (imageWidth.toDouble() / (imageBannerData.aspectRatio as Double)).roundToInt()
}
binding.requestLoanImageBanner.layoutParams.height = imageHeight
context?.let { context ->
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/MFIInfoV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/MFIInfoV2Fragment.kt
similarity index 97%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/MFIInfoV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/MFIInfoV2Fragment.kt
index 4aa82158e2..96c4c722aa 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/MFIInfoV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/MFIInfoV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -25,7 +25,7 @@ import com.naviapp.models.response.Header
import com.naviapp.models.response.HouseHoldIncomeContent
import com.naviapp.models.response.IncomeItem
import com.naviapp.personalloan.intermediate.mfiinfo.viewmodel.MfiInfoVM
-import com.naviapp.utils.Constants
+import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import dagger.hilt.android.AndroidEntryPoint
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/NaviWebViewClient.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/NaviWebViewClient.kt
similarity index 95%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/NaviWebViewClient.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/NaviWebViewClient.kt
index c9d7c18c61..27d15c3de5 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/NaviWebViewClient.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/NaviWebViewClient.kt
@@ -1,10 +1,11 @@
/*
*
- * * Copyright © 2023-2023 by Navi Technologies Limited
+ * * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+
+package com.navi.pl.dynamic.fragment
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/fragments/OfferInReviewFragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/OfferInReviewFragment.kt
similarity index 98%
rename from app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/fragments/OfferInReviewFragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/OfferInReviewFragment.kt
index 0ac1c94464..14953be26a 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/fragments/OfferInReviewFragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/OfferInReviewFragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.intermediatev2.fragments
+package com.navi.pl.dynamic.fragment
import android.app.Activity
import android.content.Context
@@ -20,6 +20,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.navi.base.model.CtaData
+import com.navi.base.utils.orElse
import com.navi.base.utils.orFalse
import com.navi.common.model.InfoBottomSheetConfig
import com.navi.common.ui.fragment.BaseFragment
@@ -30,6 +31,7 @@ import com.navi.design.utils.dpToPxInInt
import com.navi.design.utils.getNaviDrawable
import com.navi.design.utils.parseColorSafe
import com.navi.naviwidgets.callbacks.WidgetCallback
+import com.navi.pl.dynamic.helper.UserIdentificationV2Helper
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
@@ -47,8 +49,6 @@ import com.naviapp.personalloan.useridentification.viewmodels.EligibilityShareVM
import com.naviapp.personalloanrevamp.getloanRevamp.adapters.LoanDetailsV2WidgetAdapter
import com.naviapp.personalloanrevamp.getloanRevamp.listeners.LoanDetailsV2WidgetAdapterListener
import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
-import com.naviapp.personalloanrevamp.useridentificationv2.helper.UserIdentificationV2Helper
-import com.navi.base.utils.orElse
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.setVisibilityState
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/OfferUpgradeInfoBottomSheet.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/OfferUpgradeInfoBottomSheet.kt
similarity index 95%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/OfferUpgradeInfoBottomSheet.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/OfferUpgradeInfoBottomSheet.kt
index 67ef204ef5..440151c013 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/OfferUpgradeInfoBottomSheet.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/OfferUpgradeInfoBottomSheet.kt
@@ -1,8 +1,14 @@
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.pl.dynamic.fragment
import android.os.Bundle
import android.view.ViewStub
-import androidx.compose.ui.graphics.Color
import androidx.core.content.res.ResourcesCompat
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.LiveData
@@ -85,4 +91,4 @@ class OfferUpgradeInfoBottomSheet : BaseBottomSheet() {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/PanVerificationBottomSheet.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/PanVerificationBottomSheet.kt
similarity index 79%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/PanVerificationBottomSheet.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/PanVerificationBottomSheet.kt
index 194d99b4bc..7951c890f9 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/PanVerificationBottomSheet.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/PanVerificationBottomSheet.kt
@@ -1,4 +1,11 @@
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.pl.dynamic.fragment
import android.os.Bundle
import android.view.LayoutInflater
@@ -12,19 +19,19 @@ import com.navi.design.utils.dpToPxInInt
import com.navi.design.utils.getNaviDrawable
import com.navi.design.utils.parseColorSafe
import com.navi.naviwidgets.widgets.labledtextinput.ui.LabeledTextInputWidgetV2
-import com.naviapp.R
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.databinding.PlFragmentPanVerificationBottomsheetBinding
+import com.navi.pl.dynamic.databinding.PlLayoutTitleWithDescriptionViewBinding
import com.naviapp.common.navigator.NaviDeepLinkNavigator
-import com.naviapp.databinding.PanVerificationBottomsheetBinding
-import com.naviapp.databinding.TitleWithDescriptionViewBinding
import com.naviapp.models.response.PanVerificationBottomSheetData
import com.naviapp.models.response.SubListItem
class PanVerificationBottomSheet : BaseBottomSheet() {
- private lateinit var binding: PanVerificationBottomsheetBinding
+ private lateinit var binding: PlFragmentPanVerificationBottomsheetBinding
val labeledTextInputWidgetV2 = context?.let { LabeledTextInputWidgetV2(it) }
override fun setContainerView(viewStub: ViewStub) {
- viewStub.layoutResource = R.layout.pan_verification_bottomsheet
+ viewStub.layoutResource = R.layout.pl_fragment_pan_verification_bottomsheet
binding = DataBindingUtil.getBinding(viewStub.inflate())!!
initData()
}
@@ -40,8 +47,8 @@ class PanVerificationBottomSheet : BaseBottomSheet() {
removeAllViews()
items?.forEach { itemData ->
val view = LayoutInflater.from(context)
- .inflate(R.layout.title_with_description_view, binding.container, false)
- val itemBinding: TitleWithDescriptionViewBinding? = DataBindingUtil.bind(view)
+ .inflate(R.layout.pl_layout_title_with_description_view, binding.container, false)
+ val itemBinding: PlLayoutTitleWithDescriptionViewBinding? = DataBindingUtil.bind(view)
itemBinding?.title?.let { setStyledText(it,itemData.title,null) }
itemBinding?.leftText?.let { setStyledText(it,itemData.leftText,null) }
itemBinding?.rightText?.let { setStyledText(it,itemData.rightText,null) }
@@ -73,6 +80,3 @@ class PanVerificationBottomSheet : BaseBottomSheet() {
}
}
}
-
-
-
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/ProfileV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/ProfileV2Fragment.kt
similarity index 89%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/ProfileV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/ProfileV2Fragment.kt
index e194642e42..a91bd3038f 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/ProfileV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/ProfileV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.fragments
+package com.navi.pl.dynamic.fragment
import android.app.Activity
import android.content.Context
@@ -18,7 +18,12 @@ import android.text.TextWatcher
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.View
-import android.view.View.*
+import android.view.View.GONE
+import android.view.View.OnClickListener
+import android.view.View.OnFocusChangeListener
+import android.view.View.OnKeyListener
+import android.view.View.TEXT_ALIGNMENT_TEXT_START
+import android.view.View.VISIBLE
import android.view.ViewGroup
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
@@ -39,15 +44,20 @@ import com.navi.base.utils.orTrue
import com.navi.common.listeners.FragmentInterchangeListener
import com.navi.common.model.UserDetail
import com.navi.common.ui.fragment.BaseFragment
-import com.navi.common.utils.*
+import com.navi.common.utils.hideKeyboard
+import com.navi.common.utils.log
+import com.navi.common.utils.observeNonNull
+import com.navi.common.utils.observeNullable
import com.navi.design.editview.NaviEditText
import com.navi.design.utils.doAnimate
import com.navi.design.utils.ifMeasured
-import com.navi.insurance.util.observeNonNull
import com.navi.naviwidgets.base.BaseInputWidget
import com.navi.naviwidgets.extensions.textChanges
import com.navi.naviwidgets.widgets.labledtextinput.ui.LabeledTextInputWidgetV2
-import com.naviapp.R
+import com.navi.pl.dynamic.activity.ErrorScreenV2Activity
+import com.navi.pl.dynamic.activity.UserIdentificationV2Activity
+import com.navi.pl.dynamic.databinding.PlFragmentProfileV2Binding
+import com.navi.pl.dynamic.helper.ProfileV2FragmentHelper
import com.naviapp.analytics.utils.LoadTimeEventTracker
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.DobEditText
@@ -57,10 +67,8 @@ import com.naviapp.common.listeners.BackListener
import com.naviapp.common.listeners.CtaListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.ProfileV2FragmentBinding
import com.naviapp.devicedata.finoramic.FinoramicHelper
import com.naviapp.devicedata.finoramic.FinoramicHelper.Companion.FINORAMIC_REDIRECT_PATH_V2
-import com.naviapp.devicedata.finoramic.FinoramicHelper.Companion.FINORAMIC_REQ_CODE
import com.naviapp.models.CustomClickConfig
import com.naviapp.models.CustomClickType
import com.naviapp.models.response.PanRequestData
@@ -70,11 +78,7 @@ import com.naviapp.network.ApiErrorTagType.PROFILE_DETAILS_UPLOAD
import com.naviapp.personalloan.useridentification.profile.models.ValidationState
import com.naviapp.personalloan.useridentification.profile.viewmodels.ProfileVM
import com.naviapp.personalloan.useridentification.viewmodels.EligibilityShareVM
-
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.useridentificationv2.activities.UserIdentificationV2Activity
-import com.naviapp.personalloanrevamp.useridentificationv2.helper.ProfileV2FragmentHelper
+import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
import com.naviapp.utils.*
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
@@ -82,10 +86,15 @@ import com.naviapp.utils.Constants.EMPTY
import com.naviapp.utils.Constants.PL_MAX_AGE
import com.naviapp.utils.Constants.PL_MIN_AGE
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
+import com.naviapp.utils.EMPTY_DATE_STRING
+import com.naviapp.utils.convertDpToPx
+import com.naviapp.utils.customToast
+import com.naviapp.utils.getLocationOnScreen
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
-import java.util.*
+import java.util.Locale
+import com.naviapp.R as appR
class ProfileV2Fragment :
BaseFragment(),
@@ -96,7 +105,7 @@ class ProfileV2Fragment :
CtaListener,
BackListener {
- private lateinit var binding: ProfileV2FragmentBinding
+ private lateinit var binding: PlFragmentProfileV2Binding
private val viewModel by lazy { ViewModelProvider(this)[ProfileVM::class.java] }
private var listener: FragmentInterchangeListener? = null
private val naviAnalyticsEventTracker by lazy { NaviAnalytics.naviAnalytics.Profile(screenName) }
@@ -112,7 +121,7 @@ class ProfileV2Fragment :
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = ProfileV2FragmentBinding.inflate(inflater, container, false)
+ binding = PlFragmentProfileV2Binding.inflate(inflater, container, false)
initError()
initWarning()
initUi()
@@ -208,7 +217,7 @@ class ProfileV2Fragment :
uploadStatus = true
}
if (uploadStatus == true) {
- description = getString(R.string.gmail_account_synced)
+ description = getString(appR.string.gmail_account_synced)
}
binding.googleLay.apply {
setData(
@@ -293,7 +302,7 @@ class ProfileV2Fragment :
when (it) {
ValidationState.IS_EMPTY -> setErrorProperties(
binding.dobLt,
- getString(R.string.please_enter_date_of_birth)
+ getString(appR.string.please_enter_date_of_birth)
)
ValidationState.IS_INVALID -> {
@@ -302,7 +311,7 @@ class ProfileV2Fragment :
setErrorProperties(
binding.dobLt,
- resources.getString(R.string.wrong_dob_age_range, minAge, maxAge)
+ resources.getString(appR.string.wrong_dob_age_range, minAge, maxAge)
)
}
@@ -316,15 +325,15 @@ class ProfileV2Fragment :
when (it) {
ValidationState.IS_EMPTY -> setErrorProperties(
binding.fullNameLt,
- getString(R.string.please_enter_full_name)
+ getString(appR.string.please_enter_full_name)
)
ValidationState.IS_INVALID -> setErrorProperties(
binding.fullNameLt,
- getString(R.string.enter_valid_name)
+ getString(appR.string.enter_valid_name)
)
ValidationState.IS_SMALLER_THAN_MIN_LENGTH -> setErrorProperties(
binding.fullNameLt,
- getString(R.string.enter_valid_name)
+ getString(appR.string.enter_valid_name)
)
else -> {} // Do Nothing
}
@@ -336,12 +345,12 @@ class ProfileV2Fragment :
when (it) {
ValidationState.IS_EMPTY -> setErrorProperties(
binding.panNumberLt,
- getString(R.string.please_enter_your_PAN_number)
+ getString(appR.string.please_enter_your_PAN_number)
)
ValidationState.IS_INVALID -> setErrorProperties(
binding.panNumberLt,
- resources.getString(R.string.enter_a_valid_pan_number)
+ resources.getString(appR.string.enter_a_valid_pan_number)
)
else -> {} // Do Nothing
@@ -362,7 +371,7 @@ class ProfileV2Fragment :
uploadStatus = true
}
if (uploadStatus) {
- description = getString(R.string.gmail_account_synced)
+ description = getString(appR.string.gmail_account_synced)
binding.googleLay.apply {
setData(
description,
@@ -440,7 +449,7 @@ class ProfileV2Fragment :
binding.fullNameLt.widgetBinding.plainTextInput.setOnKeyListener(this)
initWidgets()
binding.panTooltipView.setProperties(
- R.style.NaviSansSemiBoldExtraSmall,
+ appR.style.NaviSansSemiBoldExtraSmall,
TEXT_ALIGNMENT_TEXT_START,
Padding(startDp = 12.0f, endDp = 12.0f, topDp = 6.0f, bottomDp = 6.0f)
)
@@ -542,7 +551,7 @@ class ProfileV2Fragment :
}
private fun updateDateBackground() {
- binding.dobLt.setBaseBorderBackground(R.drawable.bg_green_border_rounded_8)
+ binding.dobLt.setBaseBorderBackground(appR.drawable.bg_green_border_rounded_8)
}
private fun updateDateSuccessText() {
@@ -567,9 +576,9 @@ class ProfileV2Fragment :
if (validation.second) {
binding.dobLt.setSuccessText(
validation.first.trim(),
- R.style.NaviSansSemiBoldExtraSmall,
- R.drawable.ic_line_success_svg,
- R.drawable.bg_green_border_rounded_8
+ appR.style.NaviSansSemiBoldExtraSmall,
+ appR.drawable.ic_line_success_svg,
+ appR.drawable.bg_green_border_rounded_8
)
} else {
setErrorProperties(binding.dobLt, validation.first)
@@ -584,27 +593,27 @@ class ProfileV2Fragment :
context?.let { context ->
updateTitleViewInWidget(
binding.fullNameLt.binding.titleTv,
- R.style.NaviSansBoldMedium,
+ appR.style.NaviSansBoldMedium,
context,
- R.color.title_color_two
+ appR.color.title_color_two
)
updateTitleViewInWidget(
binding.fullNameLt.binding.descriptionTv,
- R.style.NaviSansSemiBoldSmall,
+ appR.style.NaviSansSemiBoldSmall,
context,
- R.color.description_color_seven
+ appR.color.description_color_seven
)
updateTitleViewInWidget(
binding.dobLt.binding.titleTv,
- R.style.NaviSansBoldMedium,
+ appR.style.NaviSansBoldMedium,
context,
- R.color.title_color_two
+ appR.color.title_color_two
)
updateTitleViewInWidget(
binding.panNumberLt.binding.titleTv,
- R.style.NaviSansBoldMedium,
+ appR.style.NaviSansBoldMedium,
context,
- R.color.title_color_two
+ appR.color.title_color_two
)
setWidgetBackground()
updateEdittextViewInWidget()
@@ -614,38 +623,38 @@ class ProfileV2Fragment :
private fun updateEdittextViewInWidget() {
TextViewCompat.setTextAppearance(
binding.fullNameLt.widgetBinding.plainTextInput,
- R.style.NaviSansSemiBoldSmall
+ appR.style.NaviSansSemiBoldSmall
)
TextViewCompat.setTextAppearance(
binding.dobLt.widgetBinding.dateInput,
- R.style.NaviSansSemiBoldSmall
+ appR.style.NaviSansSemiBoldSmall
)
TextViewCompat.setTextAppearance(
binding.dobLt.widgetBinding.dayMonthDivider,
- R.style.NaviSansSemiBoldSmall
+ appR.style.NaviSansSemiBoldSmall
)
TextViewCompat.setTextAppearance(
binding.dobLt.widgetBinding.monthInput,
- R.style.NaviSansSemiBoldSmall
+ appR.style.NaviSansSemiBoldSmall
)
TextViewCompat.setTextAppearance(
binding.dobLt.widgetBinding.montYearDivider,
- R.style.NaviSansSemiBoldSmall
+ appR.style.NaviSansSemiBoldSmall
)
TextViewCompat.setTextAppearance(
binding.dobLt.widgetBinding.yearInput,
- R.style.NaviSansSemiBoldSmall
+ appR.style.NaviSansSemiBoldSmall
)
TextViewCompat.setTextAppearance(
binding.panNumberLt.widgetBinding.plainTextInput,
- R.style.NaviSansSemiBoldSmall
+ appR.style.NaviSansSemiBoldSmall
)
}
private fun setWidgetBackground() {
- binding.dobLt.setBaseBorderBackground(R.drawable.bg_view_bg_color_17_bordered_round_8)
- binding.panNumberLt.setBaseBorderBackground(R.drawable.bg_view_bg_color_17_bordered_round_8)
- binding.fullNameLt.setBaseBorderBackground(R.drawable.bg_view_bg_color_17_bordered_round_8)
+ binding.dobLt.setBaseBorderBackground(appR.drawable.bg_view_bg_color_17_bordered_round_8)
+ binding.panNumberLt.setBaseBorderBackground(appR.drawable.bg_view_bg_color_17_bordered_round_8)
+ binding.fullNameLt.setBaseBorderBackground(appR.drawable.bg_view_bg_color_17_bordered_round_8)
}
private fun updateTitleViewInWidget(
@@ -677,7 +686,7 @@ class ProfileV2Fragment :
ProfileV2FragmentHelper.getPanNumberWidget(it, userDetail.panNumber.orEmpty())
)
updatePanInfoLayoutParams(it)
- binding.panNumberLt.binding.info.setImageResource(R.drawable.ic_alert_solid_black)
+ binding.panNumberLt.binding.info.setImageResource(appR.drawable.ic_alert_solid_black)
binding.panNumberLt.binding.info.visibility = VISIBLE
labelWithInputFormatting(binding.panNumberLt)
}
@@ -709,7 +718,7 @@ class ProfileV2Fragment :
val toastView = ProfileV2FragmentHelper.getFilledToastView(test, it)
it.customToast(
customView = toastView,
- offsetY = resources.getDimension(R.dimen.layout_dp_120).toInt()
+ offsetY = resources.getDimension(appR.dimen.layout_dp_120).toInt()
)
}
}
@@ -747,7 +756,7 @@ class ProfileV2Fragment :
null
}
loadTimeEventTracker.onLoadingStarted(NaviAnalytics.PL_BASIC_DETAILS_LOAD_TIME)
- showLoader(context?.resources?.getString(R.string.verifying_your_details))
+ showLoader(context?.resources?.getString(appR.string.verifying_your_details))
viewModel.submitProfileDetails(
name.capitalize(Locale.ENGLISH),
dob,
@@ -785,10 +794,10 @@ class ProfileV2Fragment :
private fun setErrorProperties(ltView: BaseInputWidget, text: String) {
ltView.setError(
text,
- R.style.NaviSansSemiBoldExtraSmall,
- R.color.error_red,
- R.drawable.ic_line_error_svg,
- R.drawable.bg_error_red_border_rounded_8,
+ appR.style.NaviSansSemiBoldExtraSmall,
+ appR.color.error_red,
+ appR.drawable.ic_line_error_svg,
+ appR.drawable.bg_error_red_border_rounded_8,
)
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/StyledTitleDescriptionBottomSheet.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/StyledTitleDescriptionBottomSheet.kt
similarity index 71%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/StyledTitleDescriptionBottomSheet.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/StyledTitleDescriptionBottomSheet.kt
index c632f66bb1..a9ae28b5f1 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/StyledTitleDescriptionBottomSheet.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/StyledTitleDescriptionBottomSheet.kt
@@ -1,4 +1,11 @@
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.pl.dynamic.fragment
import android.os.Bundle
import android.view.ViewStub
@@ -7,19 +14,20 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.navi.base.model.CtaData
import com.navi.common.ui.fragment.BaseBottomSheet
-import com.naviapp.R
-import com.naviapp.databinding.StyledTitleDescriptionBottomSheetLayoutBinding
+import com.navi.pl.dynamic.R
+import com.navi.pl.dynamic.databinding.PlFragmentStyledTitleDescriptionBottomsheetBinding
import com.naviapp.personalloanrevamp.models.StyledTitleDescriptionBottomSheetConfig
+import com.naviapp.R as appR
class StyledTitleDescriptionBottomSheet : BaseBottomSheet() {
- private lateinit var binding: StyledTitleDescriptionBottomSheetLayoutBinding
- private val _cta = MutableLiveData()
- val cta: LiveData
+ private lateinit var binding: PlFragmentStyledTitleDescriptionBottomsheetBinding
+ private val _cta = MutableLiveData()
+ val cta: LiveData
get() = _cta
override fun setContainerView(viewStub: ViewStub) {
- viewStub.layoutResource = R.layout.styled_title_description_bottom_sheet_layout
+ viewStub.layoutResource = R.layout.pl_fragment_styled_title_description_bottomsheet
binding = DataBindingUtil.getBinding(viewStub.inflate())!!
initData()
initUI()
@@ -37,8 +45,8 @@ class StyledTitleDescriptionBottomSheet : BaseBottomSheet() {
binding.binder = it
binding.primaryAbv.setProperties(
binding.binder?.cta?.title,
- R.color.white,
- R.color.outrageous_orange
+ appR.color.white,
+ appR.color.outrageous_orange
)
}
}
@@ -56,4 +64,4 @@ class StyledTitleDescriptionBottomSheet : BaseBottomSheet() {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/fragments/TelcoOtpV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/TelcoOtpV2Fragment.kt
similarity index 94%
rename from app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/fragments/TelcoOtpV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/TelcoOtpV2Fragment.kt
index 1f39b65da2..91bbfe8433 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/intermediatev2/fragments/TelcoOtpV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/TelcoOtpV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.intermediatev2.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.content.IntentFilter
@@ -31,7 +31,7 @@ import com.navi.common.utils.observeNullable
import com.navi.design.font.FontWeightEnum
import com.navi.design.utils.getFontStyle
import com.navi.design.utils.getNaviDrawable
-import com.naviapp.R
+import com.navi.pl.dynamic.databinding.PlFragmentTelcoOtpV2Binding
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.BoxInputGroup
import com.naviapp.common.customview.FooterViewV2
@@ -39,7 +39,6 @@ import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.listeners.BackListener
import com.naviapp.common.navigator.NaviDeepLinkNavigator
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.TelcoOtpV2FragmentBinding
import com.naviapp.models.request.LoginRequest
import com.naviapp.models.request.OtpRequest
import com.naviapp.network.ApiErrorTagType
@@ -47,11 +46,12 @@ import com.naviapp.personalloan.intermediate.telco.viewmodel.TelcoOtpViewModel
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
+import com.naviapp.R as appR
class TelcoOtpV2Fragment :
BaseFragment(), View.OnClickListener, BackListener, FooterViewV2.FooterInteractionListener {
- private lateinit var binding: TelcoOtpV2FragmentBinding
+ private lateinit var binding: PlFragmentTelcoOtpV2Binding
private val naviAnalyticsEventTracker by lazy { NaviAnalytics.naviAnalytics.Telco(screenName) }
private val viewModel by lazy { ViewModelProvider(this).get(TelcoOtpViewModel::class.java) }
private val otpReceiver by lazy { SmsAutoReadReceiver() }
@@ -68,7 +68,7 @@ class TelcoOtpV2Fragment :
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = TelcoOtpV2FragmentBinding.inflate(inflater, container, false)
+ binding = PlFragmentTelcoOtpV2Binding.inflate(inflater, container, false)
initError(viewModel, actionErrorV2Enabled = true)
initWarning(viewModel)
initUi()
@@ -98,7 +98,7 @@ class TelcoOtpV2Fragment :
override fun onClick(v: View?) {
when (v?.id) {
- R.id.resend_otp_tv -> reSendOtp()
+ appR.id.resend_otp_tv -> reSendOtp()
}
}
@@ -160,9 +160,9 @@ class TelcoOtpV2Fragment :
binding.noteContainer.background =
getNaviDrawable(
- cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt(),
+ cornerRadius = resources.getDimension(appR.dimen.layout_dp_8).toInt(),
backgroundColor =
- ResourcesCompat.getColor(resources, R.color.container_bg_color, null)
+ ResourcesCompat.getColor(resources, appR.color.container_bg_color, null)
)
}
@@ -186,7 +186,7 @@ class TelcoOtpV2Fragment :
Constants.SECONDS_PER_MINUTE
if (isAdded)
binding.countdownTimerTv.text =
- " ${String.format(getString(R.string.time_format), minutes, seconds)}"
+ " ${String.format(getString(appR.string.time_format), minutes, seconds)}"
}
override fun onFinish() {
@@ -212,7 +212,7 @@ class TelcoOtpV2Fragment :
)
binding.otpBoxLayout.setFontStyle(
textSize = 16f,
- colorId = R.color.black,
+ colorId = appR.color.black,
fontId = getFontStyle(FontWeightEnum.TT_MEDIUM)
)
@@ -232,7 +232,7 @@ class TelcoOtpV2Fragment :
NaviDeepLinkNavigator.navigate(activity, it, true)
}
} else {
- binding.errorMsgOtpTv.text = resources.getString(R.string.enter_correct_otp)
+ binding.errorMsgOtpTv.text = resources.getString(appR.string.enter_correct_otp)
binding.errorMsgOtpTv.visibility = View.VISIBLE
}
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/TopupLoanIntroV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/TopupLoanIntroV2Fragment.kt
similarity index 96%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/TopupLoanIntroV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/TopupLoanIntroV2Fragment.kt
index 7f4e688a77..a958afc5ef 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/TopupLoanIntroV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/TopupLoanIntroV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.graphics.Color
@@ -19,12 +19,12 @@ import com.moengage.pushbase.internal.ACTION
import com.navi.base.model.CtaData
import com.navi.base.utils.isNotNull
import com.navi.common.ui.fragment.BaseFragment
+import com.navi.naviwidgets.models.response.Footer
import com.navi.naviwidgets.utils.NaviWidgetIconUtils
+import com.navi.pl.dynamic.databinding.PlFragmentTopupLoanIntroV2Binding
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.navigator.NaviDeepLinkNavigator
-import com.naviapp.databinding.FragmentTopupIntroLoanV2Binding
-import com.navi.naviwidgets.models.response.Footer
import com.naviapp.models.response.Header
import com.naviapp.personalloan.factory.LoanDetailsV2VHFactoryImpl
import com.naviapp.personalloanrevamp.getloanRevamp.adapters.LoanDetailsV2WidgetAdapter
@@ -43,7 +43,7 @@ import kotlinx.coroutines.launch
class TopupLoanIntroV2Fragment : BaseFragment(), LoanDetailsV2WidgetAdapterListener {
- private lateinit var binding: FragmentTopupIntroLoanV2Binding
+ private lateinit var binding: PlFragmentTopupLoanIntroV2Binding
private var headerListener: NaviHeaderView.InteractionListener? = null
private val viewModel by lazy { ViewModelProvider(this).get(TopupLoanV2VM::class.java) }
private val naviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.TopUpLoanIntro(screenName)
@@ -54,7 +54,7 @@ class TopupLoanIntroV2Fragment : BaseFragment(), LoanDetailsV2WidgetAdapterListe
savedInstanceState: Bundle?
): View? {
- binding = FragmentTopupIntroLoanV2Binding.inflate(inflater)
+ binding = PlFragmentTopupLoanIntroV2Binding.inflate(inflater)
initObserver()
return binding.root
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/TrueCallerAuthenticatorFragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/TrueCallerAuthenticatorFragment.kt
similarity index 95%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/TrueCallerAuthenticatorFragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/TrueCallerAuthenticatorFragment.kt
index 4af8306471..9a14dc9b3e 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/TrueCallerAuthenticatorFragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/TrueCallerAuthenticatorFragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.content.IntentFilter
@@ -28,6 +28,8 @@ import com.navi.common.utils.observeNullable
import com.navi.design.font.FontWeightEnum
import com.navi.design.utils.getFontStyle
import com.navi.design.utils.getNaviDrawable
+import com.navi.pl.dynamic.databinding.PlFragmentTrueCallerAuthenticatorBinding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.BoxInputGroup
@@ -36,10 +38,8 @@ import com.naviapp.common.fragment.OtpBottomSheet
import com.naviapp.common.listeners.BackListener
import com.naviapp.common.navigator.ScreenNavigator
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.TrueCallerAuthenticatorFragmentBinding
import com.naviapp.models.request.OtpRequest
import com.naviapp.models.request.SendOtpForDisbursementRequest
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
import com.naviapp.personalloanrevamp.getloanRevamp.viewmodels.TrueCallerAuthenticatorVM
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
@@ -47,7 +47,7 @@ import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
class TrueCallerAuthenticatorFragment : BaseFragment(), View.OnClickListener, BackListener {
- private lateinit var binding: TrueCallerAuthenticatorFragmentBinding
+ private lateinit var binding: PlFragmentTrueCallerAuthenticatorBinding
private val viewModel by lazy {
ViewModelProvider(this).get(TrueCallerAuthenticatorVM::class.java)
}
@@ -68,7 +68,7 @@ class TrueCallerAuthenticatorFragment : BaseFragment(), View.OnClickListener, Ba
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = TrueCallerAuthenticatorFragmentBinding.inflate(inflater, container, false)
+ binding = PlFragmentTrueCallerAuthenticatorBinding.inflate(inflater, container, false)
initError(viewModel, actionErrorV2Enabled = true)
initWarning(viewModel)
initUi()
@@ -237,7 +237,7 @@ class TrueCallerAuthenticatorFragment : BaseFragment(), View.OnClickListener, Ba
hideLoader()
if (response?.success.orFalse()) {
eventTracker.onOtpVerified()
- listener?.navigateTo(GetLoanV2ViewHelper.SUMMARY_SCREEN_V2)
+ listener?.navigateTo(GetLoanV2Helper.SUMMARY_SCREEN_V2)
} else {
binding.errorMsgOtpTv.text =
viewModel.pageDetails.value?.content?.errorMessage
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/UPIProgressBlockerFragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/UPIProgressBlockerFragment.kt
similarity index 93%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/UPIProgressBlockerFragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/UPIProgressBlockerFragment.kt
index 2417b919f4..2ded71807d 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/UPIProgressBlockerFragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/UPIProgressBlockerFragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Bundle
@@ -15,22 +15,28 @@ import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import com.google.gson.Gson
import com.navi.base.sharedpref.PreferenceManager
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.MANDATE_COMPLETE
+import com.navi.common.firebasedb.MANDATE_FAILURE
import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.utils.ApiPollScheduler
import com.navi.common.utils.observeNonNull
+import com.navi.payment.utils.ProviderType
+import com.navi.pl.dynamic.databinding.PlFragmentUpiProgressBlockerBinding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.FragmentUpiBlockerBinding
import com.naviapp.models.request.DigioPayload
import com.naviapp.models.request.StatusCheckRegistrationData
import com.naviapp.models.response.AutoDebitMandateDetails
import com.naviapp.models.response.AutoPayStatus
-import com.navi.payment.utils.ProviderType
import com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels.BankDetailsAutoDebitVM
import com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels.EnachSharedVM
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
+import com.naviapp.personalloanrevamp.getloanRevamp.fragments.BankDetailsAutoDebitV2Fragment
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
@@ -38,14 +44,14 @@ import com.naviapp.utils.LOAN_APPLICATION_ID
class UPIProgressBlockerFragment : BaseFragment() {
- private var binding: FragmentUpiBlockerBinding? = null
+ private var binding: PlFragmentUpiProgressBlockerBinding? = null
private val viewModel by lazy {
ViewModelProvider(this)[BankDetailsAutoDebitVM::class.java]
}
private var listener: FragmentInteractionListener? = null
private var headerListener: NaviHeaderView.InteractionListener? = null
- private var updateUIListener: LoanDetailsV2Fragment.UpdateUiListener? = null
+ private var updateUIListener: BankDetailsAutoDebitV2Fragment.UpdateUiListener? = null
private var loanApplicationId: String? = null
private val naviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.BankDetails()
@@ -64,7 +70,7 @@ class UPIProgressBlockerFragment : BaseFragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- binding = FragmentUpiBlockerBinding.inflate(inflater, container, false)
+ binding = PlFragmentUpiProgressBlockerBinding.inflate(inflater, container, false)
return binding?.root
}
@@ -330,7 +336,7 @@ class UPIProgressBlockerFragment : BaseFragment() {
bundle?.putString(Constants.PERSONAL_LOAN_APPLICATION_ID,
loanApplicationId)
listener?.navigateTo(
- GetLoanV2ViewHelper.BANK_DETAILS_AUTO_DEBIT_V2,
+ GetLoanV2Helper.BANK_DETAILS_AUTO_DEBIT_V2,
bundle
)
}
@@ -340,7 +346,7 @@ class UPIProgressBlockerFragment : BaseFragment() {
super.onAttach(context)
listener = context as? FragmentInteractionListener
headerListener = context as? NaviHeaderView.InteractionListener
- updateUIListener = context as? LoanDetailsV2Fragment.UpdateUiListener
+ updateUIListener = context as? BankDetailsAutoDebitV2Fragment.UpdateUiListener
}
override fun onDetach() {
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/UpcomingEmiDetailsV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/UpcomingEmiDetailsV2Fragment.kt
similarity index 91%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/UpcomingEmiDetailsV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/UpcomingEmiDetailsV2Fragment.kt
index 894ecb28c3..b2cb78b1a7 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/fragments/UpcomingEmiDetailsV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/UpcomingEmiDetailsV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.fragments
+package com.navi.pl.dynamic.fragment
import android.app.Activity
import android.content.Context
@@ -20,18 +20,17 @@ import com.navi.common.model.Money
import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.utils.setCornerRadius
import com.navi.naviwidgets.models.response.Footer
+import com.navi.pl.dynamic.databinding.PlFragmentUpcomingEmiDetailsV2Binding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.listeners.BackListener
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.UpcomingEmiDetailsFragmentV2Binding
import com.naviapp.models.request.LoanFeeDetailsRequest
import com.naviapp.models.response.EmiDatesData
import com.naviapp.models.response.Header
import com.naviapp.personalloan.getloan.loandetails.viewmodels.EmiSelectorVM
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.LoanSummaryV2Fragment
import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
@@ -40,7 +39,7 @@ import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class UpcomingEmiDetailsV2Fragment : BaseFragment(), BackListener {
- private lateinit var binding: UpcomingEmiDetailsFragmentV2Binding
+ private lateinit var binding: PlFragmentUpcomingEmiDetailsV2Binding
private val viewModel by lazy { ViewModelProvider(this).get(EmiSelectorVM::class.java) }
private val analyticsEventTracker by lazy { NaviAnalytics.naviAnalytics.EmiSelector(screenName) }
private var headerListener: NaviHeaderView.InteractionListener? = null
@@ -52,7 +51,7 @@ class UpcomingEmiDetailsV2Fragment : BaseFragment(), BackListener {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = UpcomingEmiDetailsFragmentV2Binding.inflate(layoutInflater, container, false)
+ binding = PlFragmentUpcomingEmiDetailsV2Binding.inflate(layoutInflater, container, false)
initError(viewModel, actionErrorV2Enabled = true)
initArguments()
initObserver()
@@ -163,7 +162,7 @@ class UpcomingEmiDetailsV2Fragment : BaseFragment(), BackListener {
return@setOnClickListener
}
listener?.navigateTo(
- GetLoanV2ViewHelper.EMI_SELECTOR_FRAGMENT_V2,
+ GetLoanV2Helper.EMI_SELECTOR_FRAGMENT_V2,
getFormattedBundle()
)
}
@@ -179,7 +178,7 @@ class UpcomingEmiDetailsV2Fragment : BaseFragment(), BackListener {
activity?.finish()
} else {
listener?.navigateTo(
- GetLoanV2ViewHelper.EMI_SELECTOR_FRAGMENT_V2,
+ GetLoanV2Helper.EMI_SELECTOR_FRAGMENT_V2,
getFormattedBundle()
)
}
@@ -187,7 +186,7 @@ class UpcomingEmiDetailsV2Fragment : BaseFragment(), BackListener {
private fun moveToLoanSummaryScreen() {
listener?.navigateTo(
- GetLoanV2ViewHelper.SUMMARY_SCREEN_V2,
+ GetLoanV2Helper.SUMMARY_SCREEN_V2,
Bundle()
)
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/fragment/VideoKycV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/VideoKycV2Fragment.kt
similarity index 92%
rename from app/src/main/java/com/naviapp/personalloanrevamp/kyc/fragment/VideoKycV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/VideoKycV2Fragment.kt
index 5b5c01241d..5d4292f0ee 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/fragment/VideoKycV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/VideoKycV2Fragment.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.kyc.fragment
+package com.navi.pl.dynamic.fragment
import android.Manifest
import android.content.Context
@@ -30,22 +30,32 @@ import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.model.CtaData
import com.navi.base.utils.orFalse
import com.navi.base.utils.orTrue
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.VIDEO_KYC
import com.navi.common.managers.PermissionsManager
import com.navi.common.model.ModuleName
import com.navi.common.ui.fragment.BaseFragment
-import com.navi.common.utils.*
+import com.navi.common.utils.ApiPollScheduler
+import com.navi.common.utils.observeNonNull
+import com.navi.common.utils.observeNullable
import com.navi.payment.utils.ProviderType
+import com.navi.pl.dynamic.adapter.KycItemType
+import com.navi.pl.dynamic.adapter.KycItemsV2Adapter
+import com.navi.pl.dynamic.databinding.PlFragmentKycV2Binding
+import com.navi.pl.dynamic.helper.GetLoanV2Helper
+import com.navi.pl.dynamic.helper.VKycHelper
+import com.navi.pl.dynamic.listener.UpdateKycStateListener
import com.navi.vkyc.presentation.activity.VKYCActivity
import com.naviapp.BuildConfig
-import com.naviapp.R
import com.naviapp.analytics.utils.LoadTimeEventTracker
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.listeners.BackListener
import com.naviapp.dashboard.listeners.FragmentInteractionListener
-import com.naviapp.databinding.KycFragmenttV2Binding
import com.naviapp.models.KycUiStatusValue
import com.naviapp.models.VideoKycStatusEnum
import com.naviapp.permission.fragments.PermissionDeniedFragment
@@ -55,13 +65,6 @@ import com.naviapp.personalloan.getloan.kyc.models.SupportedOvd
import com.naviapp.personalloan.getloan.kyc.utils.DocumentType.PAN_CARD
import com.naviapp.personalloan.getloan.kyc.viewmodels.KycSharedVM
import com.naviapp.personalloan.getloan.kyc.viewmodels.VideoKycVM
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.InReviewV2Fragment
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper
-import com.naviapp.personalloanrevamp.getloanRevamp.helper.GetLoanV2ViewHelper.KYC_V2
-import com.naviapp.personalloanrevamp.kyc.adapter.KycItemType
-import com.naviapp.personalloanrevamp.kyc.adapter.KycItemsV2Adapter
-import com.naviapp.personalloanrevamp.kyc.listener.UpdateKycStateListener
-import com.naviapp.personalloanrevamp.kyc.utils.VKycHelper
import com.naviapp.personalloanrevamp.models.EMPTY_ERROR_CODE_BY_3rd_PARTY
import com.naviapp.personalloanrevamp.models.EMPTY_REASON_BY_3rd_PARTY
import com.naviapp.utils.Constants
@@ -69,14 +72,19 @@ import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.EMPTY
import com.naviapp.utils.toast
-import kotlinx.coroutines.*
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
import java.io.ByteArrayOutputStream
import java.io.File
+import com.naviapp.R as appR
class VideoKycV2Fragment :
BaseFragment(), BackListener, KycItemsListener, FooterViewV2.FooterInteractionListener {
- private lateinit var binding: KycFragmenttV2Binding
+ private lateinit var binding: PlFragmentKycV2Binding
private val viewModel by lazy { ViewModelProvider(this)[VideoKycVM::class.java] }
private var listener: FragmentInteractionListener? = null
private val analyticsEventTracker by lazy { NaviAnalytics.naviAnalytics.Kyc(screenName) }
@@ -111,7 +119,7 @@ class VideoKycV2Fragment :
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = KycFragmenttV2Binding.inflate(inflater, container, false)
+ binding = PlFragmentKycV2Binding.inflate(inflater, container, false)
return binding.root
}
@@ -138,15 +146,15 @@ class VideoKycV2Fragment :
kycDetailsResponse.header?.title?.let {
headerListener?.setProperties(
title = it,
- infoCta = kycDetailsResponse.header.infoCta,
- leftIconCode = kycDetailsResponse.header.leftIconCode
+ infoCta = kycDetailsResponse.header?.infoCta,
+ leftIconCode = kycDetailsResponse.header?.leftIconCode
)
}
if (kycDetailsResponse.videoKycDetails?.isFooterEnabled?.orFalse() == true) {
binding.footerView.visibility = View.GONE
binding.actionConnectNow.visibility = View.VISIBLE
- kycDetailsResponse.videoKycDetails.kycItemList?.get(0)?.selected = false
+ kycDetailsResponse.videoKycDetails?.kycItemList?.get(0)?.selected = false
binding.actionConnectNow.setProperties(
title = kycDetailsResponse.footer?.nextCta?.title
)
@@ -241,16 +249,16 @@ class VideoKycV2Fragment :
private fun navigateToKycInReviewScreen() {
listener?.navigateTo(
- GetLoanV2ViewHelper.KYC_IN_REVIEW,
+ GetLoanV2Helper.KYC_IN_REVIEW,
bundle =
Bundle().apply {
putString(
InReviewV2Fragment.TITLE,
- resources.getString(R.string.kyc_verification_pending)
+ resources.getString(appR.string.kyc_verification_pending)
)
putString(
InReviewV2Fragment.DESCRIPTION,
- resources.getString(R.string.kyc_pending_description)
+ resources.getString(appR.string.kyc_pending_description)
)
}
)
@@ -369,7 +377,7 @@ class VideoKycV2Fragment :
analyticsEventTracker.onCameraPermissionResult(NaviAnalytics.NO)
if (!shouldShowRequestPermissionRationale(PermissionsManager.CAMERA_PERMISSION))
handleDoNotAskAgain()
- else toast(getString(R.string.camera_permission_required_for_, KycItemType.PAN.name))
+ else toast(getString(appR.string.camera_permission_required_for_, KycItemType.PAN.name))
}
}
@@ -391,7 +399,7 @@ class VideoKycV2Fragment :
)
)
handleDoNotAskAgain()
- else toast(getString(R.string.camera_permission_required_for_video_kyc))
+ else toast(getString(appR.string.camera_permission_required_for_video_kyc))
}
}
Manifest.permission.RECORD_AUDIO -> {
@@ -400,7 +408,7 @@ class VideoKycV2Fragment :
} else {
allPermissionsGranted = false
analyticsEventTracker.onMicPermissionResult(NaviAnalytics.NO)
- toast(getString(R.string.mic_permission_required_for_video_kyc))
+ toast(getString(appR.string.mic_permission_required_for_video_kyc))
}
}
Manifest.permission.ACCESS_FINE_LOCATION -> {
@@ -413,7 +421,7 @@ class VideoKycV2Fragment :
}
?: run { allPermissionsGranted = false }
analyticsEventTracker.onLocationPermissionResult(NaviAnalytics.NO)
- toast(getString(R.string.location_permission_required_for_video_kyc))
+ toast(getString(appR.string.location_permission_required_for_video_kyc))
}
}
Manifest.permission.ACCESS_COARSE_LOCATION -> {
@@ -426,7 +434,7 @@ class VideoKycV2Fragment :
}
?: run { allPermissionsGranted = false }
analyticsEventTracker.onCoarseLocationPermissionResult(NaviAnalytics.NO)
- toast(getString(R.string.location_permission_required_for_video_kyc))
+ toast(getString(appR.string.location_permission_required_for_video_kyc))
}
}
}
@@ -593,7 +601,7 @@ class VideoKycV2Fragment :
private fun onClickUploadIdPhoto(showReviewScreen: Boolean?, shouldAutoCapture: Boolean?) {
loadTimeEventTracker.onLoadingStarted(NaviAnalytics.PL_PAN_UPLOAD_TIME)
- val hvDocConfig = vKycHelper.hvDocPANConfig(getString(R.string.pan_capture), showReviewScreen, shouldAutoCapture, context)
+ val hvDocConfig = vKycHelper.hvDocPANConfig(getString(appR.string.pan_capture), showReviewScreen, shouldAutoCapture, context)
HVDocsActivity.start(requireContext(), hvDocConfig, docCaptureHandlerForPAN())
}
@@ -657,7 +665,7 @@ class VideoKycV2Fragment :
override fun onBackPressed() {
queryMap.clear()
- listener?.navigateTo(getRedirectionUrl() ?: KYC_V2)
+ listener?.navigateTo(getRedirectionUrl() ?: GetLoanV2Helper.KYC_V2)
}
private fun getRedirectionUrl(): String? {
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/WorkV2Fragment.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/WorkV2Fragment.kt
similarity index 89%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/WorkV2Fragment.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/WorkV2Fragment.kt
index 47c3a2bbaf..1d69c71c53 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/fragments/WorkV2Fragment.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/fragment/WorkV2Fragment.kt
@@ -5,14 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.fragments
-
-/*
- *
- * * Copyright © 2022 by Navi Technologies Private Limited
- * * All rights reserved. Strictly confidential
- *
- */
+package com.navi.pl.dynamic.fragment
import android.content.Context
import android.os.Build
@@ -23,7 +16,10 @@ import android.text.TextUtils
import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
-import android.view.View.*
+import android.view.View.GONE
+import android.view.View.OnClickListener
+import android.view.View.TEXT_ALIGNMENT_TEXT_START
+import android.view.View.VISIBLE
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
@@ -41,7 +37,11 @@ import com.navi.base.sharedpref.PreferenceManager
import com.navi.base.utils.orElse
import com.navi.base.utils.orFalse
import com.navi.base.utils.orTrue
-import com.navi.common.firebasedb.*
+import com.navi.common.firebasedb.FirebaseDataHelper
+import com.navi.common.firebasedb.FirebaseDataReceiveListener
+import com.navi.common.firebasedb.FirebaseResponse
+import com.navi.common.firebasedb.FirebaseStatusType
+import com.navi.common.firebasedb.WORK_DETAILS
import com.navi.common.listeners.FragmentInterchangeListener
import com.navi.common.model.RequestConfig
import com.navi.common.model.UserDetail
@@ -53,32 +53,39 @@ import com.navi.design.utils.ifMeasured
import com.navi.naviwidgets.base.BaseInputWidget
import com.navi.naviwidgets.utils.NaviWidgetIconUtils
import com.navi.naviwidgets.widgets.labledtextinput.ui.LabeledTextInputWidgetV2
-import com.naviapp.R
+import com.navi.pl.dynamic.activity.ErrorScreenV2Activity
+import com.navi.pl.dynamic.databinding.PlFragmentWorkV2Binding
+import com.navi.pl.dynamic.helper.WorkV2FragmentHelper
import com.naviapp.analytics.utils.NaviAnalytics
import com.naviapp.common.customview.BoxWithIconView
import com.naviapp.common.customview.FooterViewV2
import com.naviapp.common.customview.NaviHeaderView
import com.naviapp.common.navigator.ScreenNavigator
-import com.naviapp.databinding.WorkDetailsV2FragmentBinding
import com.naviapp.models.response.EmploymentTypeResponse
import com.naviapp.models.response.WorkDetailsResponse
import com.naviapp.network.ApiErrorTagType
import com.naviapp.network.ApiErrorTagType.WORK_DETAILS_UPLOAD
import com.naviapp.personalloan.useridentification.profile.models.ValidationState
import com.naviapp.personalloan.useridentification.work.viewmodels.WorkVM
-import com.naviapp.personalloanrevamp.error.activity.ErrorScreenV2Activity
-import com.naviapp.personalloanrevamp.useridentificationv2.helper.WorkV2FragmentHelper
-import com.naviapp.utils.*
+import com.naviapp.personalloanrevamp.useridentificationv2.fragments.InformationBottomSheet
+import com.naviapp.utils.COMMA
+import com.naviapp.utils.Constants
import com.naviapp.utils.Constants.ACTION
import com.naviapp.utils.Constants.EPFO_PAGE_TYPE
import com.naviapp.utils.Constants.PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS
import com.naviapp.utils.Constants.PL_SCREEN_ACTIVITY
import com.naviapp.utils.Constants.WORK
import com.naviapp.utils.Constants.ZERO
+import com.naviapp.utils.constructBundleWithCtaData
+import com.naviapp.utils.convertDpToPx
+import com.naviapp.utils.getLocationOnScreen
+import com.naviapp.utils.getMoney
+import com.naviapp.utils.stringToDouble
+import com.naviapp.R as appR
class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
- private lateinit var binding: WorkDetailsV2FragmentBinding
+ private lateinit var binding: PlFragmentWorkV2Binding
private val viewModel by lazy { ViewModelProvider(this)[WorkVM::class.java] }
private var userDetailForAnalytics: UserDetail? = null
private val naviAnalyticsEventTracker by lazy { NaviAnalytics.naviAnalytics.Work(screenName) }
@@ -89,7 +96,7 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = WorkDetailsV2FragmentBinding.inflate(inflater, container, false)
+ binding = PlFragmentWorkV2Binding.inflate(inflater, container, false)
initError()
initUI()
initWarning()
@@ -115,31 +122,31 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
private fun initUI() {
binding.incomeTooltipView.setProperties(
- R.style.NaviSansSemiBoldExtraSmall,
+ appR.style.NaviSansSemiBoldExtraSmall,
TEXT_ALIGNMENT_TEXT_START,
Padding(startDp = 12.0f, endDp = 12.0f, topDp = 6.0f, bottomDp = 6.0f)
)
context?.let {
binding.monthlyIncomeLt.widgetBinding.fixedHint.setTextColor(
- ContextCompat.getColor(it, R.color.title_color_four)
+ ContextCompat.getColor(it, appR.color.title_color_four)
)
binding.panNumberLt.binding.titleTv.setTextColor(
- ContextCompat.getColor(it, R.color.title_color_two)
+ ContextCompat.getColor(it, appR.color.title_color_two)
)
}
TextViewCompat.setTextAppearance(
binding.monthlyIncomeLt.widgetBinding.fixedHint,
- R.style.NaviSansSemiBoldSmall
+ appR.style.NaviSansSemiBoldSmall
)
TextViewCompat.setTextAppearance(
binding.monthlyIncomeLt.widgetBinding.plainTextInput,
- R.style.NaviSansSemiBoldSmall
+ appR.style.NaviSansSemiBoldSmall
)
TextViewCompat.setTextAppearance(
binding.panNumberLt.widgetBinding.plainTextInput,
- R.style.NaviSansSemiBoldSmall
+ appR.style.NaviSansSemiBoldSmall
)
- binding.panNumberLt.setBaseBorderBackground(R.drawable.bg_view_bg_color_17_bordered_round_8)
+ binding.panNumberLt.setBaseBorderBackground(appR.drawable.bg_view_bg_color_17_bordered_round_8)
}
private fun onEmploymentTypeIvClicked() {
@@ -194,7 +201,7 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
if (value == null || value == 0.0) {
setErrorProperties(
binding.monthlyIncomeLt,
- getString(R.string.please_enter_a_valid_income)
+ getString(appR.string.please_enter_a_valid_income)
)
}
}
@@ -211,7 +218,7 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
}
private fun onBoxClicked(view: BoxWithIconView, itemIndex: Int) {
- view.elevation = resources.getDimension(R.dimen.layout_dp_3)
+ view.elevation = resources.getDimension(appR.dimen.layout_dp_3)
resetEmploymentSelection()
(view as? BoxWithIconView)?.setSelected()
viewModel.workDetailsResponse.value?.content?.employmentTypes?.getOrNull(itemIndex)?.let {
@@ -265,12 +272,12 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
ValidationState.IS_EMPTY,
ValidationState.IS_INVALID -> setErrorProperties(
binding.monthlyIncomeLt,
- getString(R.string.please_enter_a_valid_income)
+ getString(appR.string.please_enter_a_valid_income)
)
ValidationState.IS_SMALLER_THAN_MIN_LENGTH -> setErrorProperties(
binding.monthlyIncomeLt,
- getString(R.string.minimum_monthly_income)
+ getString(appR.string.minimum_monthly_income)
)
else -> {}
@@ -283,12 +290,12 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
when (it) {
ValidationState.IS_EMPTY -> setErrorProperties(
binding.panNumberLt,
- getString(R.string.please_enter_your_PAN_number)
+ getString(appR.string.please_enter_your_PAN_number)
)
ValidationState.IS_INVALID -> setErrorProperties(
binding.panNumberLt,
- resources.getString(R.string.enter_a_valid_pan_number)
+ resources.getString(appR.string.enter_a_valid_pan_number)
)
else -> {} // Do Nothing
@@ -301,10 +308,10 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
}
private fun BoxWithIconView.setDefaultStyling() {
- elevation = resources.getDimension(R.dimen.layout_dp_0)
+ elevation = resources.getDimension(appR.dimen.layout_dp_0)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
- outlineSpotShadowColor = ContextCompat.getColor(context, R.color.shadow_color)
- outlineAmbientShadowColor = ContextCompat.getColor(context, R.color.shadow_color)
+ outlineSpotShadowColor = ContextCompat.getColor(context, appR.color.shadow_color)
+ outlineAmbientShadowColor = ContextCompat.getColor(context, appR.color.shadow_color)
}
}
@@ -410,8 +417,8 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
)
data.content?.panDetails?.panNumber?.let {
binding.panNumberLt.setSuccessText(
- data.content.panDetails.successText,
- NaviWidgetIconUtils.getImageFromIconCode(data.content.panDetails.successIcon)
+ data.content?.panDetails?.successText,
+ NaviWidgetIconUtils.getImageFromIconCode(data.content?.panDetails?.successIcon)
)
}
data.content?.panToolTip.let { binding.panTooltipView.setTooltipTitle(it.toString()) }
@@ -420,9 +427,9 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
updateInfoLayoutParams(it, binding.panNumberLt.binding.info)
updateTitleViewInWidget(binding.monthlyIncomeLt.binding.titleTv, it)
}
- binding.monthlyIncomeLt.binding.info.setImageResource(R.drawable.ic_alert_solid_black)
+ binding.monthlyIncomeLt.binding.info.setImageResource(appR.drawable.ic_alert_solid_black)
binding.monthlyIncomeLt.binding.info.visibility = VISIBLE
- binding.panNumberLt.binding.info.setImageResource(R.drawable.ic_alert_solid_black)
+ binding.panNumberLt.binding.info.setImageResource(appR.drawable.ic_alert_solid_black)
binding.panNumberLt.binding.info.visibility = VISIBLE
labelWithInputFormatting(binding.panNumberLt)
data.content?.employmentTypes?.forEachIndexed { index, employmentTypeResponse ->
@@ -439,7 +446,7 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
naviAnalyticsEventTracker.onPanEdit()
binding.panNumberLt.binding.errorText.visibility = GONE
binding.panNumberLt.binding.errorIcon.visibility = GONE
- binding.panNumberLt.setBaseBorderBackground(R.drawable.bg_view_bg_color_17_bordered_round_8)
+ binding.panNumberLt.setBaseBorderBackground(appR.drawable.bg_view_bg_color_17_bordered_round_8)
}
}
@@ -666,10 +673,10 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
private fun setErrorProperties(ltView: BaseInputWidget, text: String) {
ltView.setError(
text,
- R.style.NaviSansSemiBoldExtraSmall,
- R.color.error_red,
- R.drawable.ic_line_error_svg,
- R.drawable.bg_error_red_border_rounded_8,
+ appR.style.NaviSansSemiBoldExtraSmall,
+ appR.color.error_red,
+ appR.drawable.ic_line_error_svg,
+ appR.drawable.bg_error_red_border_rounded_8,
)
}
@@ -686,8 +693,8 @@ class WorkV2Fragment : BaseFragment(), FooterViewV2.FooterInteractionListener {
}
private fun updateTitleViewInWidget(titleTv: TextView, it: Context) {
- TextViewCompat.setTextAppearance(titleTv, R.style.NaviSansBoldMedium)
- titleTv.setTextColor(ContextCompat.getColor(it, R.color.title_color_two))
+ TextViewCompat.setTextAppearance(titleTv, appR.style.NaviSansBoldMedium)
+ titleTv.setTextColor(ContextCompat.getColor(it, appR.color.title_color_two))
}
override fun onFooterBackPressed(backCta: CtaData?) {
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/helper/AddressHelper.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/AddressHelper.kt
similarity index 55%
rename from app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/helper/AddressHelper.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/AddressHelper.kt
index f25a93bac3..3c003f1d76 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/helper/AddressHelper.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/AddressHelper.kt
@@ -5,15 +5,12 @@
*
*/
-package com.naviapp.personalloanrevamp.addressverificationrevamp.helper
+package com.navi.pl.dynamic.helper
-import com.navi.naviwidgets.models.response.Action
-import com.navi.common.network.models.GenericErrorResponse
-import com.naviapp.R
-import com.naviapp.app.NaviApplication
+import com.navi.pl.dynamic.fragment.KycV2Fragment
import com.naviapp.models.request.Address
+import com.naviapp.models.request.AddressType
import com.naviapp.models.response.CurrentAddress
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment
object AddressHelper {
fun getAddressFromCurrentAddress(currentAddress: CurrentAddress, current: Boolean): Address {
@@ -26,7 +23,7 @@ object AddressHelper {
pinCode = currentAddress.pinCode,
documentType = currentAddress.documentType,
documentTempUrl = currentAddress.documentUrl,
- type = CORRESPONDENCE,
+ type = AddressType.CORRESPONDENCE.name,
current = current
)
}
@@ -41,18 +38,4 @@ object AddressHelper {
KycV2Fragment.AADHAR_OTP_REQUEST_CODE
)
- fun getUploadDocumentErrorData(): GenericErrorResponse {
- val context = NaviApplication.instance
- return GenericErrorResponse(
- listOf(Action(context.getString(R.string.upload_proof))),
- null,
- context.getString(R.string.upload_document_error_description),
- context.getString(R.string.document_not_uploaded),
- null,
- NO_ADDRESS_SELECTED_BOTTOM_SHEET
- )
- }
-
- const val CORRESPONDENCE = "CORRESPONDENCE"
- const val NO_ADDRESS_SELECTED_BOTTOM_SHEET = "NO_ADDRESS_SELECTED_BOTTOM_SHEET"
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/helper/GetLoanV2Helper.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/GetLoanV2Helper.kt
similarity index 77%
rename from app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/helper/GetLoanV2Helper.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/GetLoanV2Helper.kt
index 48f7fdbe4b..9cfd828c59 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/getloanRevamp/helper/GetLoanV2Helper.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/GetLoanV2Helper.kt
@@ -5,50 +5,63 @@
*
*/
-package com.naviapp.personalloanrevamp.getloanRevamp.helper
+package com.navi.pl.dynamic.helper
import android.os.Bundle
import androidx.fragment.app.Fragment
+import com.navi.pl.dynamic.fragment.DelayedDisbursementV2Fragment
+import com.navi.pl.dynamic.fragment.EffectiveInterestCostV2Fragment
+import com.navi.pl.dynamic.fragment.EmiSelectorV2Fragment
+import com.navi.pl.dynamic.fragment.FreshLoanDetailsV2Fragment
+import com.navi.pl.dynamic.fragment.GstVerificationV2Fragment
+import com.navi.pl.dynamic.fragment.InReviewV2Fragment
+import com.navi.pl.dynamic.fragment.KycAddressProofV2Fragment
+import com.navi.pl.dynamic.fragment.KycAddressV2Fragment
+import com.navi.pl.dynamic.fragment.KycV2Fragment
+import com.navi.pl.dynamic.fragment.LoanDetailsEditorFragment
+import com.navi.pl.dynamic.fragment.LoanDetailsV2Fragment
+import com.navi.pl.dynamic.fragment.LoanOfferUpgradeV2Fragment
+import com.navi.pl.dynamic.fragment.LoanOfferUpgradeV3Fragment
+import com.navi.pl.dynamic.fragment.LoanSummaryV2Fragment
+import com.navi.pl.dynamic.fragment.MFIConsentV2Fragment
+import com.navi.pl.dynamic.fragment.MFIInfoV2Fragment
+import com.navi.pl.dynamic.fragment.TrueCallerAuthenticatorFragment
+import com.navi.pl.dynamic.fragment.UPIProgressBlockerFragment
+import com.navi.pl.dynamic.fragment.UpcomingEmiDetailsV2Fragment
+import com.navi.pl.dynamic.fragment.VideoKycV2Fragment
import com.naviapp.analytics.utils.NaviAnalytics
-import com.naviapp.personalloanrevamp.addressverificationrevamp.fragment.KycAddressProofV2Fragment
-import com.naviapp.personalloanrevamp.addressverificationrevamp.fragment.KycAddressV2Fragment
import com.naviapp.personalloanrevamp.bankDetailsPostKyc.fragment.BankDetailsPostKycFragment
-import com.naviapp.personalloanrevamp.getloanRevamp.fragments.*
-import com.naviapp.personalloanrevamp.intermediatev2.fragments.LoanOfferUpgradeV2Fragment
-import com.naviapp.personalloanrevamp.kyc.fragment.KycV2Fragment
-import com.naviapp.personalloanrevamp.kyc.fragment.VideoKycV2Fragment
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.LoanSummaryV2Fragment
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.MFIConsentV2Fragment
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.MFIInfoV2Fragment
+import com.naviapp.personalloanrevamp.getloanRevamp.fragments.BankDetailsAutoDebitV2Fragment
+import com.naviapp.personalloanrevamp.getloanRevamp.fragments.BankDetailsV2Fragment
import com.naviapp.utils.EMPTY
-object GetLoanV2ViewHelper {
+object GetLoanV2Helper {
- const val KYC_IN_REVIEW: String = "KYC_IN_REVIEW_V2"
+ const val KYC_IN_REVIEW = "KYC_IN_REVIEW_V2"
const val LOAN_DETAILS_EDITOR_FRAGMENT = "LOAN_DETAILS_EDITOR"
const val LOAN_OFFER_UPGRADE_V2 = "LOAN_OFFER_UPGRADE_V2"
const val VIDEO_KYC_V2_SCREEN = "VIDEO_KYC_V2"
const val KYC_ADDRESS_VERIFICATION = "KYC_ADDRESS_VERIFICATION_V2"
const val KYC_ADDRESS_PROOF_VERIFICATION = "KYC_ADDRESS_PROOF_VERIFICATION_V2"
const val LOAN_DETAILS_V2_FRAGMENT = "LOAN_DETAILS_REPEAT_V2"
- const val BANK_DETAILS_V2 = "BANK_DETAILS_V2"
- const val BANK_DETAILS_POST_KYC = "BANK_DETAILS_POST_KYC"
- const val UPI_STATUS_V2 = "UPI_STATUS_V2"
+ private const val BANK_DETAILS_V2 = "BANK_DETAILS_V2"
+ private const val BANK_DETAILS_POST_KYC = "BANK_DETAILS_POST_KYC"
+ private const val UPI_STATUS_V2 = "UPI_STATUS_V2"
const val BANK_DETAILS_AUTO_DEBIT_V2 = "BANK_DETAILS_AUTO_DEBIT_V2"
- const val MFI_CONSENT_V2 = "MFI_CONSENT_V2"
- const val INCOME_INFO_V2 = "INCOME_INFO_V2"
+ private const val MFI_CONSENT_V2 = "MFI_CONSENT_V2"
+ private const val INCOME_INFO_V2 = "INCOME_INFO_V2"
const val EMI_SELECTOR_FRAGMENT_V2 = "EMI_SELECTOR_FRAGMENT_V2"
const val UPCOMING_EMI_DETAIL_V2 = "UPCOMING_EMI_DETAIL_V2"
- const val GST_VERIFICATION_V2 = "GST_VERIFICATION_V2"
+ private const val GST_VERIFICATION_V2 = "GST_VERIFICATION_V2"
const val SUMMARY_SCREEN_V2 = "SUMMARY_SCREEN_V2"
const val KYC_V2 = "KYC_V2"
- const val LOAN_AGREEMENT_V2 = "LOAN_AGREEMENT_V2"
+ private const val LOAN_AGREEMENT_V2 = "LOAN_AGREEMENT_V2"
const val FRESH_LOAN_DETAILS_V2 = "LOAN_DETAILS_V2"
const val TRUE_CALLER_AUTHENTICATOR_V2 = "TRUE_CALLER_AUTHENTICATOR_V2"
const val MONEY_DISBURSEMENT_STATUS_V2 = "MONEY_DISBURSEMENT_STATUS_V2"
private const val EFFECTIVE_INTEREST_COST_V2 = "EFFECTIVE_INTEREST_COST_V2"
private const val FRESH_LOAN_DETAIL_WEB_VIEW = "FRESH_LOAN_DETAIL_WEB_VIEW"
- const val LOAN_OFFER_UPGRADE_V3 = "LOAN_OFFER_UPGRADE_V3"
+ private const val LOAN_OFFER_UPGRADE_V3 = "LOAN_OFFER_UPGRADE_V3"
fun getTag(screen: String): String {
return when (screen) {
diff --git a/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/IntermediateV2Helper.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/IntermediateV2Helper.kt
new file mode 100644
index 0000000000..ef583b606b
--- /dev/null
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/IntermediateV2Helper.kt
@@ -0,0 +1,45 @@
+/*
+ *
+ * * Copyright © 2022-2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.pl.dynamic.helper
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import com.navi.pl.dynamic.fragment.BankStatementV2Fragment
+import com.navi.pl.dynamic.fragment.EmploymentOtpVerificationFragment
+import com.navi.pl.dynamic.fragment.EmploymentVerificationV2Fragment
+import com.navi.pl.dynamic.fragment.GstVerificationPasswordV2Fragment
+import com.navi.pl.dynamic.fragment.GstVerificationV2Fragment
+import com.navi.pl.dynamic.fragment.TelcoOtpV2Fragment
+import com.navi.pl.dynamic.fragment.TopupLoanIntroV2Fragment
+import com.naviapp.personalloanrevamp.getloanRevamp.fragments.SelectBankV3Fragment
+
+object IntermediateV2Helper {
+
+ private const val GST_VERIFICATION_V2 = "GST_VERIFICATION_V2"
+ private const val GST_VERIFICATION_PASSWORD_V2 = "GST_VERIFICATION_PASSWORD_V2"
+ private const val TELCO_OTP_VERIFICATION_V2 = "TELCO_OTP_VERIFICATION_V2"
+ private const val SELECT_BANK_V3 = "SELECT_BANK_V3_SCREEN"
+ private const val BANK_STATEMENT_VERIFICATION_V2 = "BANK_STATEMENT_VERIFICATION_V2"
+ const val EPFO_V2 = "EPFO_V2"
+ const val EPFO_OTP_VERIFICATION_V2 = "EPFO_OTP_VERIFICATION_V2"
+ private const val TOP_UP_INTRO_V2 = "TOP_UP_INTRO"
+
+ fun getFragment(screen: String, bundle: Bundle? = null): Fragment {
+ return when (screen) {
+ GST_VERIFICATION_V2 -> GstVerificationV2Fragment.getInstance(bundle)
+ GST_VERIFICATION_PASSWORD_V2 -> GstVerificationPasswordV2Fragment.getInstance(bundle)
+ TELCO_OTP_VERIFICATION_V2 -> TelcoOtpV2Fragment.getInstance(bundle)
+ BANK_STATEMENT_VERIFICATION_V2 -> BankStatementV2Fragment.getInstance(bundle)
+ EPFO_V2 -> EmploymentVerificationV2Fragment.getInstance(bundle)
+ EPFO_OTP_VERIFICATION_V2 -> EmploymentOtpVerificationFragment.getInstance(bundle)
+ TOP_UP_INTRO_V2 -> TopupLoanIntroV2Fragment.getInstance(bundle)
+ SELECT_BANK_V3 -> SelectBankV3Fragment.getInstance(bundle)
+ else -> BankStatementV2Fragment.getInstance(bundle)
+ }
+ }
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/helper/KycAddressV2Helper.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/KycAddressV2Helper.kt
similarity index 95%
rename from app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/helper/KycAddressV2Helper.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/KycAddressV2Helper.kt
index f28f872ff2..c4eff5a563 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/addressverificationrevamp/helper/KycAddressV2Helper.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/KycAddressV2Helper.kt
@@ -1,4 +1,11 @@
-package com.naviapp.personalloanrevamp.addressverificationrevamp.helper
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.pl.dynamic.helper
import android.content.Context
import com.navi.naviwidgets.widgets.TextInputUtil
@@ -93,4 +100,4 @@ object KycAddressV2Helper {
)
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/ProfileV2FragmentHelper.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/ProfileV2FragmentHelper.kt
similarity index 97%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/ProfileV2FragmentHelper.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/ProfileV2FragmentHelper.kt
index 42346bdc09..53617faa43 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/ProfileV2FragmentHelper.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/ProfileV2FragmentHelper.kt
@@ -1,4 +1,11 @@
-package com.naviapp.personalloanrevamp.useridentificationv2.helper
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.pl.dynamic.helper
import android.content.Context
import android.view.LayoutInflater
@@ -135,4 +142,4 @@ object ProfileV2FragmentHelper {
private fun isViewFilled(string: String, length: Int) =
string.length == length
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/UserIdentificationV2Helper.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/UserIdentificationV2Helper.kt
similarity index 52%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/UserIdentificationV2Helper.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/UserIdentificationV2Helper.kt
index eee618c2f1..6411a1a735 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/UserIdentificationV2Helper.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/UserIdentificationV2Helper.kt
@@ -5,36 +5,24 @@
*
*/
-package com.naviapp.personalloanrevamp.useridentificationv2.helper
+package com.navi.pl.dynamic.helper
import android.os.Bundle
import androidx.fragment.app.Fragment
-import com.naviapp.personalloanrevamp.intermediatev2.fragments.OfferInReviewFragment
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.EmploymentOtpVerificationFragment
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.EmploymentVerificationV2Fragment
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.ProfileV2Fragment
-import com.naviapp.personalloanrevamp.useridentificationv2.fragments.WorkV2Fragment
+import com.navi.pl.dynamic.fragment.EmploymentOtpVerificationFragment
+import com.navi.pl.dynamic.fragment.EmploymentVerificationV2Fragment
+import com.navi.pl.dynamic.fragment.OfferInReviewFragment
+import com.navi.pl.dynamic.fragment.ProfileV2Fragment
+import com.navi.pl.dynamic.fragment.WorkV2Fragment
object UserIdentificationV2Helper {
const val BASIC_DETAILS_V2 = "BASIC_DETAILS_V2"
private const val WORK_DETAILS_V2 = "WORK_DETAILS_V2"
- const val EPFO_V2 = "EPFO_V2"
- const val EPFO_OTP_VERIFICATION_V2 = "EPFO_OTP_VERIFICATION_V2"
- private const val PERSONAL_LOAN_TRACKER = "PERSONAL_LOAN_TRACKER"
+ private const val EPFO_V2 = "EPFO_V2"
+ private const val EPFO_OTP_VERIFICATION_V2 = "EPFO_OTP_VERIFICATION_V2"
const val OFFER_IN_REVIEW = "OFFER_IN_REVIEW"
- fun getTag(screen: String): String {
- return when (screen) {
- BASIC_DETAILS_V2 -> ProfileV2Fragment.TAG
- WORK_DETAILS_V2 -> WorkV2Fragment.TAG
- EPFO_V2 -> EmploymentVerificationV2Fragment.TAG
- EPFO_OTP_VERIFICATION_V2 -> EmploymentOtpVerificationFragment.TAG
- OFFER_IN_REVIEW -> OfferInReviewFragment.TAG
- else -> ""
- }
- }
-
fun getFragment(screen: String, bundle: Bundle? = null): Fragment? {
return when (screen) {
BASIC_DETAILS_V2 -> ProfileV2Fragment.getInstance(bundle)
@@ -54,4 +42,4 @@ object UserIdentificationV2Helper {
else -> ""
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/utils/VKycHelper.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/VKycHelper.kt
similarity index 94%
rename from app/src/main/java/com/naviapp/personalloanrevamp/kyc/utils/VKycHelper.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/VKycHelper.kt
index f921ab864e..29f61f6f21 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/utils/VKycHelper.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/VKycHelper.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.kyc.utils
+package com.navi.pl.dynamic.helper
import android.app.Activity
import android.content.Context
@@ -17,9 +17,9 @@ import com.google.gson.Gson
import com.navi.common.model.ModuleName
import com.navi.design.font.FontWeightEnum
import com.navi.design.utils.getFontStyle
+import com.navi.pl.dynamic.fragment.VideoKycV2Fragment
import com.navi.vkyc.presentation.activity.VKYCActivity
import com.naviapp.BuildConfig
-import com.naviapp.personalloanrevamp.kyc.fragment.VideoKycV2Fragment
import com.naviapp.R
class VKycHelper {
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/WorkV2FragmentHelper.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/WorkV2FragmentHelper.kt
similarity index 93%
rename from app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/WorkV2FragmentHelper.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/WorkV2FragmentHelper.kt
index d0ea04e615..8028d4aae7 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/useridentificationv2/helper/WorkV2FragmentHelper.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/helper/WorkV2FragmentHelper.kt
@@ -1,4 +1,11 @@
-package com.naviapp.personalloanrevamp.useridentificationv2.helper
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.pl.dynamic.helper
import com.navi.naviwidgets.widgets.TextInputUtil
import com.navi.naviwidgets.widgets.fixedhinttextinput.InputTextFixedHintItemMeta
@@ -54,4 +61,3 @@ object WorkV2FragmentHelper {
)
}
}
-
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/listener/MultipleKycItemListeners.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/listener/MultipleKycItemListeners.kt
similarity index 86%
rename from app/src/main/java/com/naviapp/personalloanrevamp/kyc/listener/MultipleKycItemListeners.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/listener/MultipleKycItemListeners.kt
index b75431dce6..6958dc1e7a 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/listener/MultipleKycItemListeners.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/listener/MultipleKycItemListeners.kt
@@ -5,7 +5,7 @@
*
*/
-package com.naviapp.personalloanrevamp.kyc.listener
+package com.navi.pl.dynamic.listener
interface MultipleKycItemListeners {
@@ -15,5 +15,4 @@ interface MultipleKycItemListeners {
isPanVerified: Boolean? = false,
vendor: String? = null
)
-
}
diff --git a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/listener/UpdateKycStateListener.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/listener/UpdateKycStateListener.kt
similarity index 76%
rename from app/src/main/java/com/naviapp/personalloanrevamp/kyc/listener/UpdateKycStateListener.kt
rename to navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/listener/UpdateKycStateListener.kt
index db107a7ced..e5ebdd6efe 100644
--- a/app/src/main/java/com/naviapp/personalloanrevamp/kyc/listener/UpdateKycStateListener.kt
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/listener/UpdateKycStateListener.kt
@@ -1,11 +1,11 @@
/*
*
- * * Copyright © 2022 by Navi Technologies Limited
+ * * Copyright © 2022-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
-package com.naviapp.personalloanrevamp.kyc.listener
+package com.navi.pl.dynamic.listener
import com.navi.common.network.models.GenericErrorResponse
import com.naviapp.models.RedirectPageStatus
diff --git a/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/util/BindingAdapterUtil.kt b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/util/BindingAdapterUtil.kt
new file mode 100644
index 0000000000..526b588ff2
--- /dev/null
+++ b/navi_pl_dynamic/src/main/java/com/navi/pl/dynamic/util/BindingAdapterUtil.kt
@@ -0,0 +1,206 @@
+/*
+ *
+ * * Copyright © 2023 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.pl.dynamic.util
+
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import androidx.core.widget.TextViewCompat
+import androidx.databinding.BindingAdapter
+import androidx.databinding.DataBindingUtil
+import com.navi.base.utils.orFalse
+import com.navi.base.utils.orTrue
+import com.navi.design.textview.NaviTextView
+import com.navi.design.textview.model.TextWithStyle
+import com.navi.design.utils.setSpannableString
+import com.navi.naviwidgets.models.response.Footer
+import com.navi.naviwidgets.utils.NaviWidgetIconUtils
+import com.navi.naviwidgets.utils.setMargin
+import com.navi.naviwidgets.widgets.textdisplay.Margin
+import com.naviapp.R
+import com.naviapp.common.customview.BoxInputGroup
+import com.naviapp.common.customview.FooterViewV2
+import com.naviapp.common.customview.FooterViewWithTitleDescription
+import com.naviapp.common.listeners.BindingDataListener
+import com.naviapp.common.listeners.FooterWithDescriptionListener
+import com.naviapp.common.listeners.Navigator
+import com.naviapp.databinding.DividerViewBinding
+import com.naviapp.databinding.StyledKeyValueViewBinding
+import com.naviapp.models.CustomClickConfig
+import com.naviapp.models.FooterWithTitleDescription
+import com.naviapp.models.response.CurrentAddress
+import com.naviapp.models.response.Header
+import com.naviapp.personalloanrevamp.common.customview.HeaderDescriptionView
+import com.naviapp.personalloanrevamp.models.StyledKeyValue
+import com.naviapp.utils.IconUtils
+
+object BindingAdapterUtil {
+ @BindingAdapter(
+ "setFooterViewV2",
+ "setFooterListener",
+ "setCustomClickConfig",
+ requireAll = false
+ )
+ @JvmStatic
+ fun setFooterViewV2(
+ footerViewV2: FooterViewV2,
+ footer: Footer?,
+ footerListener: FooterViewV2.FooterInteractionListener?,
+ customClickConfig: CustomClickConfig?
+ ) {
+ footerViewV2.setProperties(footer, footerListener, customClickConfig)
+ }
+
+ @BindingAdapter("setHeaderDescriptionView")
+ @JvmStatic
+ fun setHeaderDescriptionView(headerDescriptionView: HeaderDescriptionView, header: Header?) {
+ headerDescriptionView.setProperties(header)
+ }
+
+ @BindingAdapter("otpSize", "requestFocus", "onClickListener", requireAll = false)
+ @JvmStatic
+ fun otpSizeBoxInputGroup(
+ boxInputGroup: BoxInputGroup,
+ otpSize: Int?,
+ requestFocus: Boolean?,
+ onClickListener: View.OnClickListener?
+ ) {
+ otpSize?.let { boxInputGroup.setProperties(it, requestFocus.orTrue(), onClickListener) }
+ }
+
+ @BindingAdapter(
+ "setFooterTitleDescriptionProperties",
+ "setFooterDescriptionListener",
+ requireAll = false
+ )
+ @JvmStatic
+ fun setFooterTitleDescriptionProperties(
+ footerViewWithTitleDescription: FooterViewWithTitleDescription,
+ footerWithTitleDescription: FooterWithTitleDescription?,
+ footerWithDescriptionListener: FooterWithDescriptionListener?
+ ) {
+ footerViewWithTitleDescription.setProperties(
+ footerWithTitleDescription,
+ footerWithDescriptionListener
+ )
+ }
+
+ @BindingAdapter(
+ "setStyledKeyValueItems",
+ "setMargin",
+ "setDivider",
+ "setBindingDataListener",
+ "setTextStyle",
+ "keyStyle",
+ "valueStyle",
+ "setNavigator",
+ requireAll = false
+ )
+ @JvmStatic
+ fun setStyledKeyValueItems(
+ linearLayout: LinearLayout,
+ styledKeyValues: List?,
+ margin: Margin?,
+ divider: Boolean?,
+ bindingDataListener: BindingDataListener?,
+ style: Int?,
+ keyStyle: Int?,
+ valueStyle: Int?,
+ navigator: Navigator?
+ ) {
+ linearLayout.removeAllViews()
+ styledKeyValues?.let {
+ it.forEachIndexed { index, styledKeyValue ->
+ val styledKeyValueView =
+ LayoutInflater.from(linearLayout.context)
+ .inflate(R.layout.styled_key_value_view, linearLayout, false)
+ styledKeyValueView.setMargin(margin)
+ val viewLoanDetailItemBinding: StyledKeyValueViewBinding? =
+ DataBindingUtil.bind(styledKeyValueView)
+ viewLoanDetailItemBinding?.styledKeyValueBinder = styledKeyValue
+ style?.let {
+ viewLoanDetailItemBinding?.let {
+ TextViewCompat.setTextAppearance(
+ viewLoanDetailItemBinding.styledKeyTv,
+ style
+ )
+ TextViewCompat.setTextAppearance(
+ viewLoanDetailItemBinding.styledValueTv,
+ style
+ )
+ }
+ }
+ keyStyle?.let {
+ viewLoanDetailItemBinding?.let {
+ TextViewCompat.setTextAppearance(
+ viewLoanDetailItemBinding.styledKeyTv,
+ keyStyle
+ )
+ }
+ }
+ valueStyle?.let {
+ viewLoanDetailItemBinding?.let {
+ TextViewCompat.setTextAppearance(
+ viewLoanDetailItemBinding.styledValueTv,
+ valueStyle
+ )
+ }
+ }
+ styledKeyValue.styledKey?.iconCode?.let { iconCode ->
+ viewLoanDetailItemBinding?.iconIv?.visibility = View.VISIBLE
+ viewLoanDetailItemBinding
+ ?.iconIv
+ ?.setImageResource(NaviWidgetIconUtils.getIconResourceId(iconCode))
+ styledKeyValue.styledKey?.iconCta?.let { ctaData ->
+ viewLoanDetailItemBinding?.iconIv?.setOnClickListener {
+ navigator?.navigateTo(ctaData)
+ }
+ }
+ }
+ ?: run { viewLoanDetailItemBinding?.iconIv?.visibility = View.GONE }
+ linearLayout.addView(viewLoanDetailItemBinding?.root)
+ if (divider.orFalse()) {
+ if (index < it.size - 1) {
+ val dividerView =
+ LayoutInflater.from(linearLayout.context)
+ .inflate(R.layout.divider_view, linearLayout, false)
+ val dividerViewBinding: DividerViewBinding? =
+ DataBindingUtil.bind(dividerView)
+ linearLayout.addView(dividerViewBinding?.root)
+ }
+ }
+ }
+ bindingDataListener?.onDataLoadSuccess()
+ }
+ }
+
+ @BindingAdapter("setCurrentAddress")
+ @JvmStatic
+ fun concatenateAddress(textView: TextView, currentAddress: CurrentAddress?) {
+ var address = ""
+ currentAddress?.houseNumber?.let { houseNumber -> address += houseNumber }
+ currentAddress?.street?.let { street -> address += ", $street" }
+ currentAddress?.locality?.let { locality -> address += ", $locality" }
+ currentAddress?.pinCode?.let { pinCode -> address += ", $pinCode" }
+ currentAddress?.city?.let { city -> address += ", $city" }
+ currentAddress?.state?.let { state -> address += ", $state" }
+ textView.text = address
+ }
+
+ @BindingAdapter("setImageFromIconCode")
+ @JvmStatic
+ fun setImageFromIconCode(imageView: ImageView, iconCode: String?) {
+ iconCode?.let {
+ imageView.visibility = View.VISIBLE
+ IconUtils.updateIcon(it, imageView)
+ }
+ ?: run { imageView.visibility = View.GONE }
+ }
+}
diff --git a/navi_pl_dynamic/src/main/res/drawable/bg_border_1_e3e5e5.xml b/navi_pl_dynamic/src/main/res/drawable/bg_border_1_e3e5e5.xml
new file mode 100644
index 0000000000..c26880eb64
--- /dev/null
+++ b/navi_pl_dynamic/src/main/res/drawable/bg_border_1_e3e5e5.xml
@@ -0,0 +1,11 @@
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/navi_pl_dynamic/src/main/res/drawable/bg_border_orange_rounded_8.xml b/navi_pl_dynamic/src/main/res/drawable/bg_border_orange_rounded_8.xml
new file mode 100644
index 0000000000..6fe04e0e83
--- /dev/null
+++ b/navi_pl_dynamic/src/main/res/drawable/bg_border_orange_rounded_8.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_error_screen_v2.xml b/navi_pl_dynamic/src/main/res/layout/pl_activity_error_screen_v2.xml
similarity index 100%
rename from app/src/main/res/layout/activity_error_screen_v2.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_activity_error_screen_v2.xml
diff --git a/app/src/main/res/layout/activity_get_loan_v2.xml b/navi_pl_dynamic/src/main/res/layout/pl_activity_get_loan_v2.xml
similarity index 98%
rename from app/src/main/res/layout/activity_get_loan_v2.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_activity_get_loan_v2.xml
index 039d66417b..9909aaca18 100644
--- a/app/src/main/res/layout/activity_get_loan_v2.xml
+++ b/navi_pl_dynamic/src/main/res/layout/pl_activity_get_loan_v2.xml
@@ -91,7 +91,7 @@
+ layout="@layout/pl_layout_notification_header" />
+
+
+
@@ -27,7 +35,7 @@
android:layout_height="@dimen/layout_dp_0"
android:layout_marginTop="@dimen/layout_dp_8"
android:layout_marginBottom="@dimen/layout_dp_16"
- app:layout_constraintBottom_toTopOf="@id/next_btn"
+ app:layout_constraintBottom_toTopOf="@id/checkbox_ll"
app:layout_constraintTop_toTopOf="parent">
-
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
-
+
diff --git a/app/src/main/res/layout/activity_user_identification_v2.xml b/navi_pl_dynamic/src/main/res/layout/pl_activity_user_identification_v2.xml
similarity index 100%
rename from app/src/main/res/layout/activity_user_identification_v2.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_activity_user_identification_v2.xml
diff --git a/app/src/main/res/layout/bank_statement_v2_layout.xml b/navi_pl_dynamic/src/main/res/layout/pl_fragment_bank_statement_v2.xml
similarity index 100%
rename from app/src/main/res/layout/bank_statement_v2_layout.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_fragment_bank_statement_v2.xml
diff --git a/app/src/main/res/layout/delayed_disbursement_v2_layout.xml b/navi_pl_dynamic/src/main/res/layout/pl_fragment_delayed_disbursement_v2.xml
similarity index 100%
rename from app/src/main/res/layout/delayed_disbursement_v2_layout.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_fragment_delayed_disbursement_v2.xml
diff --git a/app/src/main/res/layout/effective_interest_cost_v2_fragment.xml b/navi_pl_dynamic/src/main/res/layout/pl_fragment_effective_interest_cost_v2.xml
similarity index 99%
rename from app/src/main/res/layout/effective_interest_cost_v2_fragment.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_fragment_effective_interest_cost_v2.xml
index 670efce651..3612dea0cf 100644
--- a/app/src/main/res/layout/effective_interest_cost_v2_fragment.xml
+++ b/navi_pl_dynamic/src/main/res/layout/pl_fragment_effective_interest_cost_v2.xml
@@ -240,7 +240,7 @@
+ layout="@layout/pl_layout_important_note" />
+ layout="@layout/pl_layout_transfer_bottomsheet" />
@@ -148,7 +148,7 @@
+ layout="@layout/pl_layout_banner_with_tip_and_title" />
diff --git a/app/src/main/res/layout/fragment_kyc_address_proof_v2.xml b/navi_pl_dynamic/src/main/res/layout/pl_fragment_kyc_address_proof_v2.xml
similarity index 97%
rename from app/src/main/res/layout/fragment_kyc_address_proof_v2.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_fragment_kyc_address_proof_v2.xml
index 643195a75b..83e95b2777 100644
--- a/app/src/main/res/layout/fragment_kyc_address_proof_v2.xml
+++ b/navi_pl_dynamic/src/main/res/layout/pl_fragment_kyc_address_proof_v2.xml
@@ -44,7 +44,7 @@
diff --git a/navi_pl_dynamic/src/main/res/layout/pl_fragment_kyc_document_list_v2.xml b/navi_pl_dynamic/src/main/res/layout/pl_fragment_kyc_document_list_v2.xml
new file mode 100644
index 0000000000..fbb66768cd
--- /dev/null
+++ b/navi_pl_dynamic/src/main/res/layout/pl_fragment_kyc_document_list_v2.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/kyc_fragmentt_v2.xml b/navi_pl_dynamic/src/main/res/layout/pl_fragment_kyc_v2.xml
similarity index 98%
rename from app/src/main/res/layout/kyc_fragmentt_v2.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_fragment_kyc_v2.xml
index 44132e4642..38fcd1c80d 100644
--- a/app/src/main/res/layout/kyc_fragmentt_v2.xml
+++ b/navi_pl_dynamic/src/main/res/layout/pl_fragment_kyc_v2.xml
@@ -82,7 +82,7 @@
diff --git a/app/src/main/res/layout/loan_details_v2_fragment.xml b/navi_pl_dynamic/src/main/res/layout/pl_fragment_loan_details_v2.xml
similarity index 97%
rename from app/src/main/res/layout/loan_details_v2_fragment.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_fragment_loan_details_v2.xml
index f07e1c32e6..8edcc42679 100644
--- a/app/src/main/res/layout/loan_details_v2_fragment.xml
+++ b/navi_pl_dynamic/src/main/res/layout/pl_fragment_loan_details_v2.xml
@@ -36,7 +36,7 @@
+ layout="@layout/pl_layout_transfer_bottomsheet" />
@@ -154,7 +154,7 @@
diff --git a/app/src/main/res/layout/work_details_v2_fragment.xml b/navi_pl_dynamic/src/main/res/layout/pl_fragment_work_v2.xml
similarity index 100%
rename from app/src/main/res/layout/work_details_v2_fragment.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_fragment_work_v2.xml
diff --git a/app/src/main/res/layout/address_radio_button_v2.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_address_radio_button_v2.xml
similarity index 100%
rename from app/src/main/res/layout/address_radio_button_v2.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_address_radio_button_v2.xml
diff --git a/app/src/main/res/layout/address_status_layout_v2.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_address_status_v2.xml
similarity index 96%
rename from app/src/main/res/layout/address_status_layout_v2.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_address_status_v2.xml
index 71c5f84924..004fe99236 100644
--- a/app/src/main/res/layout/address_status_layout_v2.xml
+++ b/navi_pl_dynamic/src/main/res/layout/pl_layout_address_status_v2.xml
@@ -34,7 +34,7 @@
tools:itemCount="@integer/integer_2"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintStart_toStartOf="parent"
- tools:listitem="@layout/address_radio_button_v2"
+ tools:listitem="@layout/pl_layout_address_radio_button_v2"
app:layout_constraintTop_toBottomOf="@+id/tv_fetched_from_records" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navi_pl_dynamic/src/main/res/layout/pl_layout_effective_interest_cost_calculation_card_item.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_effective_interest_cost_calculation_card_item.xml
new file mode 100644
index 0000000000..03c7a56504
--- /dev/null
+++ b/navi_pl_dynamic/src/main/res/layout/pl_layout_effective_interest_cost_calculation_card_item.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/layout_footer_timed_banner.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_footer_timed_banner.xml
similarity index 100%
rename from app/src/main/res/layout/layout_footer_timed_banner.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_footer_timed_banner.xml
diff --git a/app/src/main/res/layout/layout_header_timed_banner.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_header_timed_banner.xml
similarity index 100%
rename from app/src/main/res/layout/layout_header_timed_banner.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_header_timed_banner.xml
diff --git a/navi_pl_dynamic/src/main/res/layout/pl_layout_important_note.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_important_note.xml
new file mode 100644
index 0000000000..3fb7b61754
--- /dev/null
+++ b/navi_pl_dynamic/src/main/res/layout/pl_layout_important_note.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_loan_feature.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_item_loan_feature.xml
similarity index 100%
rename from app/src/main/res/layout/item_loan_feature.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_item_loan_feature.xml
diff --git a/app/src/main/res/layout/kyc_address_layout_v2.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_kyc_address_v2.xml
similarity index 100%
rename from app/src/main/res/layout/kyc_address_layout_v2.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_kyc_address_v2.xml
diff --git a/app/src/main/res/layout/kyc_failed_layout.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_kyc_failed.xml
similarity index 100%
rename from app/src/main/res/layout/kyc_failed_layout.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_kyc_failed.xml
diff --git a/app/src/main/res/layout/loan_summary_emi_layout.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_loan_summary_emi.xml
similarity index 92%
rename from app/src/main/res/layout/loan_summary_emi_layout.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_loan_summary_emi.xml
index 98b638b3ac..24c08831ae 100644
--- a/app/src/main/res/layout/loan_summary_emi_layout.xml
+++ b/navi_pl_dynamic/src/main/res/layout/pl_layout_loan_summary_emi.xml
@@ -25,7 +25,7 @@
@@ -40,7 +40,7 @@
@@ -55,7 +55,7 @@
diff --git a/navi_pl_dynamic/src/main/res/layout/pl_layout_notification_header.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_notification_header.xml
new file mode 100644
index 0000000000..bb682b1534
--- /dev/null
+++ b/navi_pl_dynamic/src/main/res/layout/pl_layout_notification_header.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/title_with_description_view.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_title_with_description_view.xml
similarity index 100%
rename from app/src/main/res/layout/title_with_description_view.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_title_with_description_view.xml
diff --git a/app/src/main/res/layout/tracker_screen_layout.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_tracker_screen.xml
similarity index 100%
rename from app/src/main/res/layout/tracker_screen_layout.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_tracker_screen.xml
diff --git a/app/src/main/res/layout/transfer_bottomsheet_view.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_transfer_bottomsheet.xml
similarity index 100%
rename from app/src/main/res/layout/transfer_bottomsheet_view.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_transfer_bottomsheet.xml
diff --git a/app/src/main/res/layout/layout_try_again_after.xml b/navi_pl_dynamic/src/main/res/layout/pl_layout_try_again_after.xml
similarity index 100%
rename from app/src/main/res/layout/layout_try_again_after.xml
rename to navi_pl_dynamic/src/main/res/layout/pl_layout_try_again_after.xml
diff --git a/navi_pl_dynamic/src/main/res/values/strings.xml b/navi_pl_dynamic/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..8786303648
--- /dev/null
+++ b/navi_pl_dynamic/src/main/res/values/strings.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ +91 %1$s
+
diff --git a/navi-pl/src/test/java/com/navi/pl/ExampleUnitTest.kt b/navi_pl_dynamic/src/test/java/com/navi/pl/dynamic/ExampleUnitTest.kt
similarity index 74%
rename from navi-pl/src/test/java/com/navi/pl/ExampleUnitTest.kt
rename to navi_pl_dynamic/src/test/java/com/navi/pl/dynamic/ExampleUnitTest.kt
index 5d5ba1dd1a..240887d0d5 100644
--- a/navi-pl/src/test/java/com/navi/pl/ExampleUnitTest.kt
+++ b/navi_pl_dynamic/src/test/java/com/navi/pl/dynamic/ExampleUnitTest.kt
@@ -1,13 +1,13 @@
/*
*
- * * Copyright © 2019-2023 by Navi Technologies Limited
+ * * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
-package com.navi.pl
+package com.navi.pl.dynamic
-import org.junit.Assert.*
+import org.junit.Assert.assertEquals
import org.junit.Test
/**
diff --git a/settings.gradle b/settings.gradle
index 9340d59704..de901ee888 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -27,5 +27,5 @@ buildCache {
}
include ':navi-base'
include ':navi-hl'
-include ':navi-pl'
include ':navi-payment'
+include ':navi_pl_dynamic'