From 7ba2c5404bcf58d30f4c7f98413db554ebbb61ef Mon Sep 17 00:00:00 2001 From: Shivam Goyal Date: Fri, 3 Jan 2025 13:44:15 +0530 Subject: [PATCH] NTP-1234 | Refactor & Cleanup (#14416) --- android/.gitignore | 3 - android/app/build.gradle | 1 - android/app/src/main/AndroidManifest.xml | 19 - android/app/src/main/baseline-prof.txt | 4 - .../naviapp/analytics/utils/NaviAnalytics.kt | 118 +-- .../naviapp/common/adapter/CheckBoxAdapter.kt | 86 -- .../naviapp/common/adapter/CouponAdapter.kt | 41 - .../common/adapter/CreditAnalysisAdapter.kt | 74 -- .../adapter/IconTextVerticalDividerAdapter.kt | 38 - .../adapter/NaviCalendarDayViewAdapter.kt | 38 - .../naviapp/common/adapter/NpsGridAdapter.kt | 98 --- .../common/adapter/TopupInfoAdapter.kt | 45 -- .../ActionCardBannerWithPaddingView.kt | 113 --- .../common/customview/AnimatedTagView.kt | 92 --- .../common/customview/ColorBoxGroupView.kt | 113 --- .../naviapp/common/customview/ColorBoxView.kt | 93 --- .../common/customview/ConsentDetailView.kt | 66 -- .../naviapp/common/customview/CouponTag.kt | 30 - .../naviapp/common/customview/CouponView.kt | 80 -- .../customview/DescExpandableCardView.kt | 111 --- .../customview/EMICalendarDetailView.kt | 33 - .../customview/FixedClickableTextView.kt | 59 -- .../common/customview/InfoBannerView.kt | 43 - .../customview/InputWithErrorLabelView.kt | 142 ---- .../customview/NaviCalendarDayItemView.kt | 79 -- .../customview/RadioButtonWithNoteCardView.kt | 72 -- .../customview/RadioSelectorItemView.kt | 235 ------ .../common/customview/SelectorTileItemView.kt | 96 --- .../customview/SelectorTileViewGroup.kt | 524 ------------ .../common/customview/SelectorViewGroup.kt | 335 -------- .../customview/SingleImageWidgetView.kt | 166 ---- .../customview/StyledDaysCalendarView.kt | 223 ----- .../customview/StyledKeyValueCardView.kt | 81 -- .../common/customview/StyledNoteView.kt | 92 --- ...StyledTitleWithDescriptionAndButtonView.kt | 66 -- .../common/customview/TitleWithButtonView.kt | 57 -- .../common/fragment/CreditAnalysisFragment.kt | 94 --- .../fragment/NetPromoterScoreFragment.kt | 222 ----- .../listeners/NaviCalendarDayClickListener.kt | 14 - ...viderWithImageTitleSubtitleWidgetConfig.kt | 27 - .../model/EmiTenureSummaryWidgetConfig.kt | 24 - .../common/model/InfoBannerWidgetConfig.kt | 24 - .../common/model/LoanEMITenureWidgetConfig.kt | 29 - .../model/OfferUpgradeCardV2WidgetConfig.kt | 23 - .../model/OfferUpgradeCardWidgetConfig.kt | 30 - .../model/RadioButtonWidgetListConfig.kt | 28 - .../common/model/RewardsWidgetConfig.kt | 45 -- .../model/SelectorTileWidgetListConfig.kt | 59 -- .../common/model/SingleImageWidgetConfig.kt | 19 - .../SliderWithTooltipTitleWidgetConfig.kt | 37 - .../model/StyledDaysCalendarWidgetConfig.kt | 69 -- .../model/StyledKeyValueCardWidgetConfig.kt | 46 -- .../naviapp/common/model/StyledTextConfig.kt | 20 - .../StyledTitleWithButtonWidgetConfig.kt | 25 - .../model/TitleWithButtonWidgetConfig.kt | 25 - .../common/model/TopUpSummaryWidgetConfig.kt | 25 - .../common/model/TopupInfoWidgetConfig.kt | 36 - .../common/model/UpgradeCardWidgetConfig.kt | 25 - .../common/model/ValueAdditionWidgetConfig.kt | 30 - .../common/model/ViewCtaWidgetConfig.kt | 20 - .../model/ViewDescriptionCtaWidgetConfig.kt | 22 - .../common/navigator/NaviDeepLinkNavigator.kt | 30 +- .../common/navigator/ScreenNavigator.kt | 7 +- .../repository/ActiveLoanDetailsRepository.kt | 17 - .../repository/CreditAnalysisRepository.kt | 15 - .../common/viewholders/NaviCalendarDayVH.kt | 21 - .../common/viewmodel/ActiveLoanDetailsVM.kt | 36 - .../viewmodel/CreditAnalysisViewModel.kt | 41 - .../crosssell/di/modules/CrossSellModule.kt | 33 - .../listeners/FeedbackEventListener.kt | 17 - .../crosssell/models/CrossSellResponse.kt | 18 - .../repository/CrossSellRepository.kt | 27 - .../repository/PostDisbursalRepository.kt | 23 - .../naviapp/crosssell/ui/CrossSellActivity.kt | 294 ------- .../ui/PostDisbursalFeedbackBottomSheet.kt | 214 ----- .../crosssell/viewmodel/CrossSellVM.kt | 42 - .../crosssell/viewmodel/PostDisbursalVM.kt | 38 - .../dashboard/DashboardBaseActivity.kt | 5 +- .../activities/BankChangeActivity.kt | 86 -- .../fragments/BankChangeDetailsFragment.kt | 178 ---- .../repo/BankDetailsRepository.kt | 17 - .../viewmodels/BankChangeDetailsViewModel.kt | 37 - .../documentlist/DocumentListFragment.kt | 175 ---- .../documentlist/DropDownBottomSheet.kt | 75 -- .../DropDownBottomSheetAdapter.kt | 49 -- .../activity/DocumentListActivity.kt | 94 --- .../adapter/DocumentListAdapter.kt | 236 ------ .../documentlist/models/DocumentData.kt | 54 -- .../documentlist/models/DocumentType.kt | 17 - .../repository/DocumentListRepository.kt | 20 - .../documentlist/viewmodel/DocumentListVM.kt | 52 -- .../emicalendar/adapters/DueDetailsAdapter.kt | 39 - .../emicalendar/adapters/EMIDateAdapter.kt | 46 -- .../adapters/EMIUpdatedCalendarAdapter.kt | 42 - .../adapters/EmiStatusCalendarAdapter.kt | 160 ---- .../bottomsheet/EmiDateChangeBottomSheet.kt | 95 --- .../fragments/EMIDateChangeFragment.kt | 601 -------------- .../fragments/EMIUpdatedCalendarFragment.kt | 471 ----------- .../fragments/EmiStatusCalendarFragment.kt | 358 -------- .../layouts/EmiCalendarDueDetailsLayout.kt | 106 --- .../emicalendar/models/EmiCalendarResponse.kt | 18 - .../models/EmiDateChangeBottomSheetData.kt | 26 - .../emicalendar/models/EmiInstallment.kt | 84 -- .../emicalendar/models/EmiStatus.kt | 18 - .../repo/EMIDateChangeRepository.kt | 46 -- .../emicalendar/repo/EmiRepository.kt | 16 - .../emicalendar/states/OnScrollState.kt | 18 - .../viewmodel/EMIDateChangeFragmentVM.kt | 68 -- .../viewmodel/EMIUpdatedCalendarFragmentVM.kt | 132 --- .../emicalendar/viewmodel/EmiViewModel.kt | 70 -- .../models/InterestCertificateURIDetail.kt | 12 - .../models/YearDetails.kt | 20 - .../dashboard/viewmodels/DashboardSharedVM.kt | 6 +- .../devicedata/finoramic/FinoramicHelper.kt | 53 -- .../home/common/handler/EffectHandler.kt | 34 +- .../home/compose/activity/HomePageActivity.kt | 78 +- .../adapter/ClosedLoanViewPagerAdapter.kt | 35 - .../home/dashboard/di/DashboardModule.kt | 8 +- .../models/response/ClosedLoansResponse.kt | 40 - .../dashboard/repo/ClosedLoansRepository.kt | 23 - .../home/dashboard/ui/ClosedLoansActivity.kt | 31 - .../ui/ClosedLoansContentFragment.kt | 115 --- .../home/dashboard/ui/ClosedLoansFragment.kt | 179 ---- .../home/dashboard/ui/ProductFragment.kt | 6 +- .../viewmodels/ClosedLoansSharedVM.kt | 58 -- .../com/naviapp/home/reducer/HomeReducer.kt | 4 +- .../ActionCardWithPaddingWidgetConfig.kt | 41 - .../models/BankNameCardWidgetConfig.kt | 29 - .../models/BankNameV2CardWidgetConfig.kt | 40 - .../com/naviapp/models/CreditDataResponse.kt | 19 - .../models/DashboardPolicyBenefitData.kt | 6 +- .../naviapp/models/EMIDateChangeResponse.kt | 59 -- .../models/EMIUpdatedCalendarResponse.kt | 51 -- .../java/com/naviapp/models/EmiSchedule.kt | 20 - .../main/java/com/naviapp/models/EnachData.kt | 26 - .../java/com/naviapp/models/EnachMetadata.kt | 18 - .../java/com/naviapp/models/LastUpdateData.kt | 19 - .../models/LoanAmountSummaryWidgetConfig.kt | 35 - .../java/com/naviapp/models/LoanFeeDetails.kt | 36 - .../RadioButtonWithNoteCardWidgetConfig.kt | 22 - .../SecurityTextWithIconWidgetConfig.kt | 20 - .../com/naviapp/models/SubPageStatusType.kt | 10 +- .../com/naviapp/models/TextWithCtaData.kt | 14 - .../models/request/LoanFeeDetailsRequest.kt | 3 +- .../response/ActiveLoanDetailsResponse.kt | 15 - .../naviapp/models/response/AdditionalData.kt | 51 +- .../models/response/ApplyCouponResponse.kt | 12 - .../models/response/BankDataResponse.kt | 27 - .../models/response/BankDetailsPostKyc.kt | 90 --- .../com/naviapp/models/response/BannerInfo.kt | 43 - .../models/response/CibilFailureResponse.kt | 17 - .../naviapp/models/response/CouponResponse.kt | 32 - .../models/response/CreditAnalysisData.kt | 20 - .../response/EnachMandateDetailsResponse.kt | 44 - .../models/response/EnachWidgetResponse.kt | 16 - .../FixedClickableTextWidgetConfig.kt | 18 - .../com/naviapp/models/response/FormFooter.kt | 27 - .../com/naviapp/models/response/FormHeader.kt | 25 - .../models/response/GstDetailsResponse.kt | 117 --- .../response/HeaderTitleWidgetConfig.kt | 2 +- .../models/response/HomeFeatureResponse.kt | 7 +- .../response/HomeLoanCoApplicantResponse.kt | 27 - .../response/HomeLoanSubStepResponse.kt | 12 - .../response/HomeLoanUploadNoteDetails.kt | 18 - .../InputWithErrorLabelWidgetConfig.kt | 22 - .../models/response/InsuranceDetail.kt | 25 - .../response/LoanBasicDetailsResponse.kt | 18 - .../models/response/LoanDetailsResponse.kt | 24 - .../LoanDisbursementStatusMessageResponse.kt | 22 - .../response/MandateProviderResponse.kt | 17 - .../response/NetPromoterScoreResponse.kt | 54 -- .../models/response/OfferDetailsResponse.kt | 3 +- .../models/response/OfferInReviewResponse.kt | 43 - .../models/response/OfferUpgradeResponse.kt | 71 +- .../PanVerificationBottomSheetData.kt | 34 - .../response/PermissionDetailsResponse.kt | 4 +- .../naviapp/models/response/ProductDetails.kt | 44 - .../models/response/SkipMandateResponse.kt | 15 - .../models/response/SubmitSurveyResponse.kt | 16 - .../models/response/TopUpIntroResponse.kt | 21 - .../response/UpcomingEmiDatesResponse.kt | 53 -- .../models/response/UpiInProgressData.kt | 28 - .../models/response/VideoKycStatusResponse.kt | 16 - .../models/response/WidgetGenericResponse.kt | 8 +- .../network/retrofit/RetrofitService.kt | 81 +- .../naviapp/nps/repositories/NpsRepository.kt | 17 - .../java/com/naviapp/nps/viewmodel/NpsVM.kt | 31 - .../naviapp/part_prepayment/FragmentMapper.kt | 18 +- .../activities/PermissionActivity.kt | 30 +- .../activities/PermissionV2Activity.kt | 22 +- .../java/com/naviapp/utils/AnimationUtils.kt | 19 +- .../com/naviapp/utils/BindingAdapterUtil.kt | 400 +-------- .../main/java/com/naviapp/utils/Constants.kt | 90 +-- .../utils/ContentProviderContractConstants.kt | 12 - .../naviapp/utils/CustomJsonDeserializers.kt | 146 +--- .../java/com/naviapp/utils/DownloadUtil.kt | 60 -- .../src/main/java/com/naviapp/utils/Ext.kt | 75 +- .../naviapp/utils/LoanDetailsV2WidgetType.kt | 39 +- .../res/anim/activity_bottom_to_top_slide.xml | 11 - android/app/src/main/res/anim/app_nothing.xml | 4 - .../layout/action_card_with_padding_view.xml | 102 --- .../main/res/layout/activity_bank_change.xml | 24 - .../main/res/layout/activity_closed_loans.xml | 27 - .../main/res/layout/activity_cross_sell.xml | 81 -- .../res/layout/activity_list_of_documents.xml | 27 - .../layout/box_with_icon_title_view_v2.xml | 64 -- .../layout/divider_title_subtitle_v2_view.xml | 74 -- .../app/src/main/res/layout/divider_view.xml | 29 - .../divider_with_title_subtitle_view.xml | 74 -- .../src/main/res/layout/due_detail_view.xml | 63 -- .../src/main/res/layout/emi_calendar_item.xml | 73 -- .../layout/emi_date_change_bottom_sheet.xml | 1 - .../res/layout/emi_date_change_fragment.xml | 230 ------ .../main/res/layout/emi_split_up_layout.xml | 83 -- .../res/layout/emi_status_calendar_view.xml | 69 -- .../res/layout/emi_status_overdue_view.xml | 156 ---- .../main/res/layout/emi_status_paid_view.xml | 119 --- .../layout/emi_status_partially_paid_view.xml | 154 ---- .../res/layout/emi_status_scheduled_view.xml | 116 --- .../res/layout/emi_status_unpaid_view.xml | 119 --- .../layout/emi_updated_calendar_fragment.xml | 166 ---- .../res/layout/expandable_title_desc_view.xml | 99 --- .../main/res/layout/fragment_closed_loans.xml | 110 --- .../layout/fragment_closed_loans_content.xml | 39 - .../res/layout/fragment_credit_analysis.xml | 69 -- .../res/layout/icon_text_steps_layout.xml | 67 -- .../src/main/res/layout/info_banner_view.xml | 95 --- .../res/layout/layout_consent_details.xml | 239 ------ .../res/layout/layout_net_promoter_score.xml | 181 ----- .../src/main/res/layout/otp_input_layout.xml | 90 --- .../post_disbursal_feedback_bottom_sheet.xml | 116 --- .../radio_button_with_note_card_view.xml | 44 - .../res/layout/selector_tile_item_view.xml | 95 --- .../styled_days_calendar_footer_view.xml | 122 --- .../res/layout/styled_days_calendar_view.xml | 98 --- .../res/layout/styled_key_value_card_view.xml | 108 --- .../main/res/layout/styled_key_value_view.xml | 71 -- .../layout/styled_title_wtth_button_view.xml | 72 -- .../res/layout/title_subtitle_v2_view.xml | 69 -- .../main/res/layout/title_subtitle_view.xml | 69 -- .../res/layout/title_with_button_view.xml | 103 --- .../value_addition_card_key_value_view.xml | 64 -- .../app/src/main/res/layout/view_coupon.xml | 141 ---- .../src/main/res/layout/view_coupon_tag.xml | 45 -- android/app/src/main/res/values/strings.xml | 10 - android/app/src/main/res/values/styles.xml | 8 - .../app/src/main/AndroidManifest.xml | 11 - .../application-platform/navi-ap/build.gradle | 1 - .../navi-ap/src/main/AndroidManifest.xml | 11 - .../navi/ap/common/handler/ActionsHandler.kt | 8 +- .../ap/common/handler/SdkActionHandler.kt | 16 +- .../common/handler/UploadDataActionHandler.kt | 21 +- .../ap/common/sdk/handler/FinoramicHandler.kt | 69 -- .../navi/ap/common/sdk/handler/SdkHandler.kt | 8 +- .../ap/common/sdk/helper/FinoramicHelper.kt | 112 --- .../ap/common/sdk/model/FinoramicPostData.kt | 18 - .../common/ui/ApplicationPlatformActivity.kt | 21 +- .../navi/ap/utils/constants/ApConstants.kt | 7 +- .../navi/ap/utils/constants/EnumsConstant.kt | 9 +- .../navi/ap/utils/constants/SDKConstants.kt | 9 +- android/application-platform/settings.gradle | 4 - android/finoramic-androidx-sdk/build.gradle | 2 - .../finoramic-androidx-sdk.aar | Bin 50416 -> 0 bytes .../amc/kyc/model/KycPermissionsResponse.kt | 4 +- android/navi-common/build.gradle | 5 - .../models/AccountAggregatorResponse.kt | 17 - .../models/FinarkeinConsentRequest.kt | 19 - .../models/FinarkeinConsentResponse.kt | 18 - .../models/FinarkeinEventRequest.kt | 18 - .../models/FinarkeinSessionResponse.kt | 12 - .../models/FinarkeinStatusRequest.kt | 21 - .../models/FinarkeinStatusResponse.kt | 21 - .../repository/FinarkeinRepository.kt | 44 - .../states/AccountAggregatorResponseState.kt | 20 - .../FinancialDataStatusAsyncResponseState.kt | 20 - .../states/FinarkeinConsentResponseState.kt | 20 - .../states/FinarkeinPollingResponse.kt | 18 - .../states/FinarkeinStatusResponseState.kt | 20 - .../viewmodel/FinarkeinVM.kt | 179 ---- .../navi/common/analytics/NaviAnalytics.kt | 71 +- .../FirebaseRemoteConfigHelper.kt | 24 +- .../common/model/CommonPermissionContent.kt | 3 +- .../navi/common/model/NaviProviderConfig.kt | 19 +- .../java/com/navi/common/model/UserDetail.kt | 10 +- .../navi/common/network/ApiErrorTagType.kt | 4 +- .../network/retrofit/RetrofitService.kt | 37 +- .../UiTronSDKActionDeserializer.kt | 5 +- .../UiTronUploadDataDeserializer.kt | 5 +- .../model/action/ThirdPartySdkAction.kt | 5 +- .../uitron/model/action/UploadDataAction.kt | 5 +- .../serializer/UiTronSDKActionSerializer.kt | 5 +- .../serializer/UiTronUploadDataSerializer.kt | 9 +- .../java/com/navi/common/utils/Constants.kt | 27 +- .../src/main/res/values/strings.xml | 1 - .../src/main/AndroidManifest.xml | 28 +- .../analytics/InsuranceAnalyticsConstants.kt | 6 +- .../analytics/NaviInsuranceAnalytics.kt | 765 +----------------- .../fragment/RequestCallbackFragment.kt | 4 +- .../common/widgets/BannerInfoWidget.kt | 5 +- .../common/widgets/NaviWidgetViewDataExt.kt | 5 +- .../health/activity/GiAboutUsActivity.kt | 47 -- .../health/adapter/LandingPageStateAdapter.kt | 30 - .../fragment/AboutUsBottomSheetFragment.kt | 208 ----- .../health/fragment/AboutUsFragment.kt | 232 ------ .../health/fragment/AboutUsV2Fragment.kt | 242 ------ .../fragment/LandingPageVpItemFragment.kt | 168 ---- .../insurance/location/NaviLocationManager.kt | 4 +- .../com/navi/insurance/models/AboutUsData.kt | 15 - .../models/response/LoginResponse.kt | 17 - .../insurance/models/response/OtpResponse.kt | 18 - .../navi/insurance/notifications/Screen.kt | 7 +- .../insurance/quoteredesign/QuoteActivity.kt | 6 +- .../sharedpref/NaviPreferenceManager.kt | 6 +- .../java/com/navi/insurance/util/Constants.kt | 4 +- .../util/GiFirebaseRemoteConfigConstants.kt | 41 +- .../com/navi/insurance/util/StatusCode.kt | 6 +- .../java/com/navi/insurance/util/Utility.kt | 164 +--- .../main/res/layout/fragment_quote_about.xml | 38 - .../main/res/layout/gi_activity_about_us.xml | 24 - .../res/layout/layout_team_member_item.xml | 69 -- .../naviwidgets/actions/NaviClickAction.kt | 4 +- .../com/navi/naviwidgets/utils/Constants.kt | 3 +- .../widgets/TextActionWidgetLayout.kt | 4 +- android/one-money-sdk/.gitignore | 1 - android/one-money-sdk/build.gradle | 2 - android/one-money-sdk/onemoneysdk_custom.aar | Bin 278820 -> 0 bytes android/settings.gradle | 2 - 327 files changed, 139 insertions(+), 19473 deletions(-) delete mode 100644 android/app/src/main/java/com/naviapp/common/adapter/CheckBoxAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/adapter/CouponAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/adapter/CreditAnalysisAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/adapter/IconTextVerticalDividerAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/adapter/NaviCalendarDayViewAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/adapter/NpsGridAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/adapter/TopupInfoAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/ActionCardBannerWithPaddingView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/AnimatedTagView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/ColorBoxGroupView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/ColorBoxView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/ConsentDetailView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/CouponTag.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/CouponView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/DescExpandableCardView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/EMICalendarDetailView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/FixedClickableTextView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/InfoBannerView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/InputWithErrorLabelView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/NaviCalendarDayItemView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/RadioButtonWithNoteCardView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/RadioSelectorItemView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/SelectorTileItemView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/SelectorTileViewGroup.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/SelectorViewGroup.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/SingleImageWidgetView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/StyledDaysCalendarView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/StyledKeyValueCardView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/StyledNoteView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/StyledTitleWithDescriptionAndButtonView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/customview/TitleWithButtonView.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/fragment/CreditAnalysisFragment.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/fragment/NetPromoterScoreFragment.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/listeners/NaviCalendarDayClickListener.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/DividerWithImageTitleSubtitleWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/EmiTenureSummaryWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/InfoBannerWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/LoanEMITenureWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/OfferUpgradeCardV2WidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/OfferUpgradeCardWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/RadioButtonWidgetListConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/RewardsWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/SelectorTileWidgetListConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/SingleImageWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/SliderWithTooltipTitleWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/StyledDaysCalendarWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/StyledKeyValueCardWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/StyledTextConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/StyledTitleWithButtonWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/TitleWithButtonWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/TopUpSummaryWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/TopupInfoWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/UpgradeCardWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/ValueAdditionWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/ViewCtaWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/model/ViewDescriptionCtaWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/repository/ActiveLoanDetailsRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/repository/CreditAnalysisRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/viewholders/NaviCalendarDayVH.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/viewmodel/ActiveLoanDetailsVM.kt delete mode 100644 android/app/src/main/java/com/naviapp/common/viewmodel/CreditAnalysisViewModel.kt delete mode 100644 android/app/src/main/java/com/naviapp/crosssell/di/modules/CrossSellModule.kt delete mode 100644 android/app/src/main/java/com/naviapp/crosssell/listeners/FeedbackEventListener.kt delete mode 100644 android/app/src/main/java/com/naviapp/crosssell/models/CrossSellResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/crosssell/repository/CrossSellRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/crosssell/repository/PostDisbursalRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/crosssell/ui/CrossSellActivity.kt delete mode 100644 android/app/src/main/java/com/naviapp/crosssell/ui/PostDisbursalFeedbackBottomSheet.kt delete mode 100644 android/app/src/main/java/com/naviapp/crosssell/viewmodel/CrossSellVM.kt delete mode 100644 android/app/src/main/java/com/naviapp/crosssell/viewmodel/PostDisbursalVM.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/activities/BankChangeActivity.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/fragments/BankChangeDetailsFragment.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/repo/BankDetailsRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/viewmodels/BankChangeDetailsViewModel.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DocumentListFragment.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DropDownBottomSheet.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DropDownBottomSheetAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/activity/DocumentListActivity.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/adapter/DocumentListAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/models/DocumentData.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/models/DocumentType.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/repository/DocumentListRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/viewmodel/DocumentListVM.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/DueDetailsAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EMIDateAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EMIUpdatedCalendarAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EmiStatusCalendarAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/bottomsheet/EmiDateChangeBottomSheet.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EMIDateChangeFragment.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EMIUpdatedCalendarFragment.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EmiStatusCalendarFragment.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/layouts/EmiCalendarDueDetailsLayout.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiCalendarResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiDateChangeBottomSheetData.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiInstallment.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiStatus.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/repo/EMIDateChangeRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/repo/EmiRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/states/OnScrollState.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EMIDateChangeFragmentVM.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EMIUpdatedCalendarFragmentVM.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EmiViewModel.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/models/InterestCertificateURIDetail.kt delete mode 100644 android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/models/YearDetails.kt delete mode 100644 android/app/src/main/java/com/naviapp/devicedata/finoramic/FinoramicHelper.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/dashboard/adapter/ClosedLoanViewPagerAdapter.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/dashboard/models/response/ClosedLoansResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/dashboard/repo/ClosedLoansRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansActivity.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansContentFragment.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansFragment.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/dashboard/viewmodels/ClosedLoansSharedVM.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/ActionCardWithPaddingWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/BankNameCardWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/BankNameV2CardWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/CreditDataResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/EMIDateChangeResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/EMIUpdatedCalendarResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/EmiSchedule.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/EnachData.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/EnachMetadata.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/LastUpdateData.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/LoanAmountSummaryWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/LoanFeeDetails.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/RadioButtonWithNoteCardWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/SecurityTextWithIconWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/TextWithCtaData.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/ActiveLoanDetailsResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/ApplyCouponResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/BankDataResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/BankDetailsPostKyc.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/BannerInfo.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/CibilFailureResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/CouponResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/CreditAnalysisData.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/EnachMandateDetailsResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/FixedClickableTextWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/FormFooter.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/FormHeader.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/GstDetailsResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/HomeLoanCoApplicantResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/HomeLoanSubStepResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/HomeLoanUploadNoteDetails.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/InputWithErrorLabelWidgetConfig.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/InsuranceDetail.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/LoanBasicDetailsResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/LoanDetailsResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/LoanDisbursementStatusMessageResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/MandateProviderResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/NetPromoterScoreResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/OfferInReviewResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/PanVerificationBottomSheetData.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/ProductDetails.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/SkipMandateResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/SubmitSurveyResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/TopUpIntroResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/UpcomingEmiDatesResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/UpiInProgressData.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/response/VideoKycStatusResponse.kt delete mode 100644 android/app/src/main/java/com/naviapp/nps/repositories/NpsRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/nps/viewmodel/NpsVM.kt delete mode 100644 android/app/src/main/java/com/naviapp/utils/ContentProviderContractConstants.kt delete mode 100644 android/app/src/main/java/com/naviapp/utils/DownloadUtil.kt delete mode 100644 android/app/src/main/res/anim/activity_bottom_to_top_slide.xml delete mode 100644 android/app/src/main/res/anim/app_nothing.xml delete mode 100644 android/app/src/main/res/layout/action_card_with_padding_view.xml delete mode 100644 android/app/src/main/res/layout/activity_bank_change.xml delete mode 100644 android/app/src/main/res/layout/activity_closed_loans.xml delete mode 100644 android/app/src/main/res/layout/activity_cross_sell.xml delete mode 100644 android/app/src/main/res/layout/activity_list_of_documents.xml delete mode 100644 android/app/src/main/res/layout/box_with_icon_title_view_v2.xml delete mode 100644 android/app/src/main/res/layout/divider_title_subtitle_v2_view.xml delete mode 100644 android/app/src/main/res/layout/divider_view.xml delete mode 100644 android/app/src/main/res/layout/divider_with_title_subtitle_view.xml delete mode 100644 android/app/src/main/res/layout/due_detail_view.xml delete mode 100644 android/app/src/main/res/layout/emi_calendar_item.xml delete mode 100644 android/app/src/main/res/layout/emi_date_change_fragment.xml delete mode 100644 android/app/src/main/res/layout/emi_split_up_layout.xml delete mode 100644 android/app/src/main/res/layout/emi_status_calendar_view.xml delete mode 100644 android/app/src/main/res/layout/emi_status_overdue_view.xml delete mode 100644 android/app/src/main/res/layout/emi_status_paid_view.xml delete mode 100644 android/app/src/main/res/layout/emi_status_partially_paid_view.xml delete mode 100644 android/app/src/main/res/layout/emi_status_scheduled_view.xml delete mode 100644 android/app/src/main/res/layout/emi_status_unpaid_view.xml delete mode 100644 android/app/src/main/res/layout/emi_updated_calendar_fragment.xml delete mode 100644 android/app/src/main/res/layout/expandable_title_desc_view.xml delete mode 100644 android/app/src/main/res/layout/fragment_closed_loans.xml delete mode 100644 android/app/src/main/res/layout/fragment_closed_loans_content.xml delete mode 100644 android/app/src/main/res/layout/fragment_credit_analysis.xml delete mode 100644 android/app/src/main/res/layout/icon_text_steps_layout.xml delete mode 100644 android/app/src/main/res/layout/info_banner_view.xml delete mode 100644 android/app/src/main/res/layout/layout_consent_details.xml delete mode 100644 android/app/src/main/res/layout/layout_net_promoter_score.xml delete mode 100644 android/app/src/main/res/layout/otp_input_layout.xml delete mode 100644 android/app/src/main/res/layout/post_disbursal_feedback_bottom_sheet.xml delete mode 100644 android/app/src/main/res/layout/radio_button_with_note_card_view.xml delete mode 100644 android/app/src/main/res/layout/selector_tile_item_view.xml delete mode 100644 android/app/src/main/res/layout/styled_days_calendar_footer_view.xml delete mode 100644 android/app/src/main/res/layout/styled_days_calendar_view.xml delete mode 100644 android/app/src/main/res/layout/styled_key_value_card_view.xml delete mode 100644 android/app/src/main/res/layout/styled_key_value_view.xml delete mode 100644 android/app/src/main/res/layout/styled_title_wtth_button_view.xml delete mode 100644 android/app/src/main/res/layout/title_subtitle_v2_view.xml delete mode 100644 android/app/src/main/res/layout/title_subtitle_view.xml delete mode 100644 android/app/src/main/res/layout/title_with_button_view.xml delete mode 100644 android/app/src/main/res/layout/value_addition_card_key_value_view.xml delete mode 100644 android/app/src/main/res/layout/view_coupon.xml delete mode 100644 android/app/src/main/res/layout/view_coupon_tag.xml delete mode 100644 android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/sdk/handler/FinoramicHandler.kt delete mode 100644 android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/sdk/helper/FinoramicHelper.kt delete mode 100644 android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/sdk/model/FinoramicPostData.kt delete mode 100644 android/finoramic-androidx-sdk/build.gradle delete mode 100644 android/finoramic-androidx-sdk/finoramic-androidx-sdk.aar delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/models/AccountAggregatorResponse.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/models/FinarkeinConsentRequest.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/models/FinarkeinConsentResponse.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/models/FinarkeinEventRequest.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/models/FinarkeinSessionResponse.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/models/FinarkeinStatusRequest.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/models/FinarkeinStatusResponse.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/repository/FinarkeinRepository.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/states/AccountAggregatorResponseState.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/states/FinancialDataStatusAsyncResponseState.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/states/FinarkeinConsentResponseState.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/states/FinarkeinPollingResponse.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/states/FinarkeinStatusResponseState.kt delete mode 100644 android/navi-common/src/main/java/com/navi/common/account_aggregator/viewmodel/FinarkeinVM.kt delete mode 100644 android/navi-insurance/src/main/java/com/navi/insurance/health/activity/GiAboutUsActivity.kt delete mode 100644 android/navi-insurance/src/main/java/com/navi/insurance/health/adapter/LandingPageStateAdapter.kt delete mode 100644 android/navi-insurance/src/main/java/com/navi/insurance/health/fragment/AboutUsBottomSheetFragment.kt delete mode 100644 android/navi-insurance/src/main/java/com/navi/insurance/health/fragment/AboutUsFragment.kt delete mode 100644 android/navi-insurance/src/main/java/com/navi/insurance/health/fragment/AboutUsV2Fragment.kt delete mode 100644 android/navi-insurance/src/main/java/com/navi/insurance/health/fragment/LandingPageVpItemFragment.kt delete mode 100644 android/navi-insurance/src/main/java/com/navi/insurance/models/AboutUsData.kt delete mode 100644 android/navi-insurance/src/main/java/com/navi/insurance/models/response/LoginResponse.kt delete mode 100644 android/navi-insurance/src/main/java/com/navi/insurance/models/response/OtpResponse.kt delete mode 100644 android/navi-insurance/src/main/res/layout/fragment_quote_about.xml delete mode 100644 android/navi-insurance/src/main/res/layout/gi_activity_about_us.xml delete mode 100644 android/navi-insurance/src/main/res/layout/layout_team_member_item.xml delete mode 100644 android/one-money-sdk/.gitignore delete mode 100644 android/one-money-sdk/build.gradle delete mode 100644 android/one-money-sdk/onemoneysdk_custom.aar diff --git a/android/.gitignore b/android/.gitignore index 8c18962c61..06a6984382 100644 --- a/android/.gitignore +++ b/android/.gitignore @@ -15,11 +15,8 @@ *.class *.iml *.log -finoramic-android-sdk/build -finoramic-androidx-sdk/build/ local.env npci-upi-cl/build/ -one-money-sdk/build vcs.xml visit-sdk/build # Local build cache diff --git a/android/app/build.gradle b/android/app/build.gradle index b744b48232..552fbd2062 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -257,7 +257,6 @@ publishing { } dependencies { - implementation project(":finoramic-androidx-sdk") implementation project(":navi-amc") implementation project(":navi-ap") implementation project(":navi-bbps") diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 40e2a71db3..4e8e15f40a 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -62,10 +62,6 @@ android:screenOrientation="portrait" android:theme="@style/BaseThemeStyle" android:windowSoftInputMode="adjustPan" /> - - - - (Ljava/lang/String;Ljava/lang/Stri Lcom/navi/common/model/DialogBoxResponse; Lcom/navi/common/model/FeedbackResponse; Lcom/navi/common/model/Field; -Lcom/navi/common/model/FinoramicData; -Lcom/navi/common/model/FinoramicStatus; Lcom/navi/common/model/GenericMenuItem; Lcom/navi/common/model/HardwareDetail; SPLcom/navi/common/model/HardwareDetail;->()V @@ -53678,8 +53676,6 @@ SPLcom/navi/common/model/UserDataWrapper;->(Ljava/lang/Integer;Ljava/lang/ Lcom/navi/common/model/UserDetail; SPLcom/navi/common/model/UserDetail;->()V SPLcom/navi/common/model/UserDetail;->()V -SPLcom/navi/common/model/UserDetail;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/navi/common/model/Money;Lcom/navi/common/model/Money;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Boolean;Lcom/navi/common/model/FinoramicStatus;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Lcom/navi/naviwidgets/models/response/ToastWidget;Lcom/navi/common/model/PanInfo;Ljava/lang/String;Lcom/navi/common/model/InfoBottomSheetConfig;Ljava/lang/Boolean;)V -SPLcom/navi/common/model/UserDetail;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/navi/common/model/Money;Lcom/navi/common/model/Money;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Boolean;Lcom/navi/common/model/FinoramicStatus;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Lcom/navi/naviwidgets/models/response/ToastWidget;Lcom/navi/common/model/PanInfo;Ljava/lang/String;Lcom/navi/common/model/InfoBottomSheetConfig;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V Lcom/navi/common/model/UserSms; SPLcom/navi/common/model/UserSms;->()V SPLcom/navi/common/model/UserSms;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V diff --git a/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt b/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt index 2fa48a64c6..ae5aa47644 100644 --- a/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt +++ b/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2020-2024 by Navi Technologies Limited + * * Copyright © 2020-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -61,8 +61,6 @@ class NaviAnalytics private constructor() { } inner class Faq : ThirdPartyError(), PLCommonActionEvents { - fun onFaqIconTap(screenName: String) = NaviTrackEvent.trackEvent(screenName + "_faq") - fun sendEvent(eventName: String) { NaviTrackEvent.trackEvent(eventName) } @@ -674,13 +672,6 @@ class NaviAnalytics private constructor() { } } - inner class BankChangeDetails { - fun onPageLand() = NaviTrackEvent.trackEvent("PL_PP_changebank_steps_pageland") - - fun onBankChangeDetailsContinueClick() = - NaviTrackEvent.trackEvent("PL_PP_changebank_steps_continue_click") - } - inner class PaymentTransaction { fun onEmiPaymentsClick() { NaviTrackEvent.trackEvent(HL_TRANCHE_EMI_PAYMENTS_TAB_CLICK) @@ -839,70 +830,6 @@ class NaviAnalytics private constructor() { } inner class GetLoan(val screenName: String? = null) : PLCommonActionEvents { - fun wrongLoanApplicationIdReceived() = - NaviTrackEvent.trackEventOnClickStream( - "loan_application_id_received_is_wrong", - attributeMapWithScreenName(screenName.orEmpty()) - ) - - fun loanApplicationIdReceived() = - NaviTrackEvent.trackEventOnClickStream( - "loan_application_id_received_is_valid", - attributeMapWithScreenName(screenName.orEmpty()) - ) - - fun onEmiDateChangePage(loanType: String) { - if (loanType == Constants.TYPE_PERSONAL_LOAN) { - NaviTrackEvent.trackEventOnClickStream(PL_EMIChange_EMI_CALENDER_PAGELAND) - } - } - - fun onDateClickedOnCalender(date: String, loanType: String) { - if (loanType == Constants.TYPE_PERSONAL_LOAN) { - NaviTrackEvent.trackEventOnClickStream( - PL_EMICHANGE_DATE_CLICK, - mapOf(Pair("date", date)) - ) - } - } - - fun onChangeEmiDateCTA(date: String, reason: String?, loanType: String) { - if (loanType == Constants.TYPE_PERSONAL_LOAN) { - NaviTrackEvent.trackEventOnClickStream( - PL_EMICHANGE_EMI_DT_CHNG_CLICK, - mapOf(Pair("date", date), Pair("reason", reason.orEmpty())) - ) - } - } - - fun onNewEMICalenderPage(loanType: String) { - if (loanType == Constants.TYPE_PERSONAL_LOAN) { - NaviTrackEvent.trackEventOnClickStream(PL_EMICHANGE_NEW_CAL_PAGELAND) - } - } - - fun onViewAllCTA(loanType: String) { - if (loanType == Constants.TYPE_PERSONAL_LOAN) { - NaviTrackEvent.trackEventOnClickStream(PL_EMICHANGE_VIEW_ALL_CLICK) - } - } - - fun onConfirmButtonClicked(emiAmountStatus: String?, amount: String?, loanType: String?) { - if (loanType == Constants.TYPE_PERSONAL_LOAN) { - NaviTrackEvent.trackEventOnClickStream( - PL_EMICHANGE_CONFIRM_CLICK, - mapOf( - Pair("emiAmountStatus", emiAmountStatus.orEmpty()), - Pair("amount", amount.orEmpty()) - ) - ) - } - } - - fun emiDateChangeEMIPaidEvent() { - NaviTrackEvent.trackEventOnClickStream(PL_PP_EMI_Paid) - } - fun onEmiDateSelected(selectedEmiDate: String?) { NaviTrackEvent.trackEventOnClickStream( PL_LS_EMI_date_selected, @@ -1093,24 +1020,6 @@ class NaviAnalytics private constructor() { } } - inner class Nps { - fun onSubmitButtonTap() { - NaviTrackEvent.trackEvent("nps_submit") - } - - fun onCloseIconTap() { - NaviTrackEvent.trackEvent("nps_cross_tap") - } - - fun onNpsScoreTap(score: Int) { - NaviTrackEvent.trackEvent("nps_score_tap", mapOf(Pair("score", score.toString()))) - } - - fun onOptionsSelected(selectedOptions: Map) { - NaviTrackEvent.trackEvent("nps_selected_options", selectedOptions) - } - } - inner class Permission(val screenName: String? = null) : PLCommonActionEvents { fun onPageLands() = @@ -1526,8 +1435,6 @@ class NaviAnalytics private constructor() { const val OTP_NUMBER = "otp_screen" const val PROFILE = "profile" const val EPFO = "epfo" - const val PAN = "pan" - const val NPS = "nps" const val KYC = "kyc" const val KYC_V2 = "kyc_v2" const val VIDEO_KYC_V2 = "video_kyc_v2" @@ -1548,7 +1455,6 @@ class NaviAnalytics private constructor() { const val NEW_INSURANCE_CLICKED = "NaviApp_Nav_Insurance_Clicked" const val NAV_INVESTMENT_CLICKED = "NaviApp_Nav_Investment_Clicked" const val NAV_LOAN_CLICKED = "NaviApp_Nav_Loan_Clicked" - const val NEW_CLOSED_LOAN_SCREEN = "NaviApp_Closed_Loan_Lands" const val NEW_HOME_ACTIVITY = "new_home_activity" const val LOANS_TAB = "loans_tab" const val PROFILE_SCREEN = "profile_screen" @@ -1603,8 +1509,6 @@ class NaviAnalytics private constructor() { const val PART_PRE_PAYMENT_EMI_CALENDAR_SCREEN = "part_pre_payment_emi_calendar_screen" const val UPFRONT_PAYMENT_SCREEN = "upfront_payment_screen" const val PAYMENT_SCREEN = "payment_screen" - const val CREDIT_ANALYSIS_SCREEN = "credit_analysis_screen" - const val EMI_STATUS_CALENDAR_FRAGMENT = "emi_calendar_status_screen" const val COMMON_BOTTOM_SHEET = "common_bottom_sheet" const val HOME_AUTO_DEBIT_PENDING_SHEET = "home_auto_debit_pending_sheet" const val BANK_STATEMENT_PAGE_LANDS = "PL_BankStatement_Page_Lands" @@ -1615,7 +1519,6 @@ class NaviAnalytics private constructor() { const val FULL_SCREEN_OFFER_DIALOG = "full_screen_offer_dialog" const val PL_TOP_UP_INTRO_SCREEN = "pl_top_up_intro_screen" const val COMMON_DIALOG_BOX = "common_dialog_box" - const val FEEDBACK_OFFER_DIALOG = "feedback_offer_dialog" const val TELCO_OTP_SCREEN = "telco_otp_screen" const val TELCO_OTP_SCREEN_V2 = "telco_otp_screen_v2" const val EMAIL_ACTIVITY = "email_activity" @@ -1626,8 +1529,6 @@ class NaviAnalytics private constructor() { const val COMMON_REJECTED_FRAGMENT_V2 = "COMMON_REJECTED_FRAGMENT_V2" const val PAYMENT_ACTIVITY = "payment_activity" const val SEND_EMAIL_SCREEN_SUCCESS = "send_email_success" - const val EMI_DATE_CHANGE = "emi_date_change_screen" - const val EMI_UPDATED_CALENDAR = "emi_updated_calendar_screen" const val PL_GETLOAN_PAGE_LANDS_V2 = "loan_agreement_v2" const val UNIVERSAL_BOTTOMSHEET = "universal_bottomsheet" const val LOAN_REPAYMENT_BOTTOMSHEET = "loan_repayment_bottomsheet" @@ -1649,7 +1550,6 @@ class NaviAnalytics private constructor() { const val PL_PPP_FAQ_LAUNCH = "PL_ppp_FAQ_page_lands" const val HL_PPP_BACK_BTN_CLICK = "HL_ppp_FAQ_back_click" const val PL_PPP_BACK_BTN_CLICK = "PL_ppp_FAQ_back_click" - const val PL_GLOBAL_THIRD_PARTY_ERROR = "pl_global_3rd_party_errors" const val PL_GLOBAL_THIRD_PARTY_INIT = "pl_global_3rd_party_init" const val GLOBAL_APP_CRASH = "global_app_crash" const val GLOBAL_ANR = "global_screen_freeze" @@ -1678,11 +1578,6 @@ class NaviAnalytics private constructor() { const val PERMISSIONS_V2_SCREEN = "permission_V2" const val PERMISSIONS_V2_LOC_EXP_SCREEN = "permission_V2_loc_exp" - const val POST_DISBURSAL_FEEDBACK_BOTTOM_SHEET = "post_disbursal_feedback_bottom_sheet" - const val CROSS_SELL_SCREEN = "cross_sell_screen" - - const val CROSS_SELL_LAND_SCREEN_EVENT_NAME = "PL_LoanApproval_Page_Lands" - const val FORECLOSE_LOAN_BOTTOM_SHEET = "foreclose_loan_bottom_sheet" const val TERMS_AND_CONDITIONS_BOTTOM_SHEET = "terms_and_conditons_bottom_sheet" const val TERMS_AND_CONDITIONS_POPUP_PAGE_LAND = "termsAndConditionsPopUp_pageLand" @@ -1711,13 +1606,6 @@ class NaviAnalytics private constructor() { const val PL_HELP_BOTTOMSHEET_CHAT_CLICK = "PL_Help_BottomSheet_Chat_Click" const val PL_HELP_BOTTOMSHEET_CALL_CLICK = "PL_Help_BottomSheet_Call_Click" const val PL_HELP_BOTTOMSHEET_SEND_EMAIL_CLICK = "PL_Help_BottomSheet_SendEmail_Click" - const val DOCUMENT_LIST = "document_list" - const val PL_EMIChange_EMI_CALENDER_PAGELAND = "PL_EMIChange_EMI_calendar_pageland" - const val PL_EMICHANGE_DATE_CLICK = "PL_EMIChange_Date_click" - const val PL_EMICHANGE_EMI_DT_CHNG_CLICK = "PL_EMIChange_EMI_Dt_Chng_click" - const val PL_EMICHANGE_NEW_CAL_PAGELAND = "PL_EMIChange_New_Cal_pageland" - const val PL_EMICHANGE_VIEW_ALL_CLICK = "PL_EMIChange_View_All_click" - const val PL_EMICHANGE_CONFIRM_CLICK = "PL_EMIChange_Confirm_click" const val PL_EMI_First_Pill_Click = "PL_EMI_First_Pill_Click" const val PL_EMI_Second_Pill_Click = "PL_EMI_Second_Pill_Click" @@ -1730,7 +1618,6 @@ class NaviAnalytics private constructor() { const val CHECK_LIST_WITH_ICON_BOTTOMSHEET = "check_list_with_icon_bottomsheet" val naviAnalytics: NaviAnalytics by lazy { Holder.INSTANCE } const val DASHBOARD_INSURANCE_BOTTOMSHEET_DATA = "dashboard_insurance_bottomsheet_data" - const val HL_DOCUMENTS_PAGELAND = "HL_Documents_PageLand" const val POST_PAYMENT_MESSAGING_SCREEN = "Post_Payment_Messaging_Screen" const val POST_PAYMENT_MESSAGING_SCREEN_V2 = "Post_Payment_Messaging_Screen_v2" @@ -1742,10 +1629,8 @@ class NaviAnalytics private constructor() { const val PAYMENT_BEHAVIOUR_ACTIVITY = "payment_behaviour_activity" const val PAYMENT_BEHAVIOUR_SCREEN = "payment_behaviour_screen" - const val BANK_ACCOUNT_CHANGE = "BANK_ACCOUNT_CHANGE" const val DISBURSEMENT_PAGE_LAND = "disbursementsPageLand" - const val PL_PP_EMI_Paid = "PL_PP_EMI_Paid" const val PL_APPLICATION_IN_PROGRESS = "PL_Application_In_Progress" @@ -1758,7 +1643,6 @@ class NaviAnalytics private constructor() { const val PROP_IDENTIFIER = "identifier" const val FLOW_PAYMENT_POST_PURCHASE = "FLOW_PAYMENT_POST_PURCHASE" const val NAVI_APP_DARK_MODE = "navi_app_dark_mode" - const val NFS = "NFS" const val NOTIFICATION_ENABLED = "notification_enabled" const val NOTIFICATION_DISABLED = "notification_disabled" diff --git a/android/app/src/main/java/com/naviapp/common/adapter/CheckBoxAdapter.kt b/android/app/src/main/java/com/naviapp/common/adapter/CheckBoxAdapter.kt deleted file mode 100644 index 942a657aa4..0000000000 --- a/android/app/src/main/java/com/naviapp/common/adapter/CheckBoxAdapter.kt +++ /dev/null @@ -1,86 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.BaseAdapter -import androidx.core.widget.TextViewCompat -import com.navi.common.R as CommonR -import com.navi.naviwidgets.models.response.GeneralTextResponse -import com.naviapp.R -import com.naviapp.crosssell.ui.FreeTextBoxListener -import com.naviapp.databinding.CheckboxFeedbackLayoutBinding - -class CheckBoxAdapter( - private val freeTextBoxListener: FreeTextBoxListener?, - private val context: Context -) : BaseAdapter() { - private val reasons = arrayListOf() - - fun setReasons(data: List) { - this.reasons.clear() - this.reasons.addAll(data) - notifyDataSetChanged() - } - - override fun getCount(): Int { - return reasons.size - } - - override fun getItem(position: Int): Any { - return reasons[position] - } - - override fun getItemId(position: Int): Long { - return position.toLong() - } - - override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { - val data = reasons[position] - var view = convertView - val viewHolder: CheckboxViewHolder - if (view == null) { - val inflater = LayoutInflater.from(context) - val binding = CheckboxFeedbackLayoutBinding.inflate(inflater, parent, false) - viewHolder = CheckboxViewHolder(binding) - view = binding.root - viewHolder.checkbox = binding.checkBox - viewHolder.title = binding.title - view.tag = viewHolder - } else { - viewHolder = view.tag as CheckboxViewHolder - } - if (data.isChecked) { - view.setBackgroundResource(CommonR.drawable.bg_rounded_white_red_border_8) - viewHolder.checkbox.isChecked = true - TextViewCompat.setTextAppearance(viewHolder.title, CommonR.style.AgreementFontStyle) - } else { - view.setBackgroundResource(CommonR.drawable.bg_rounded_white_grey_border_8) - viewHolder.checkbox.isChecked = false - TextViewCompat.setTextAppearance(viewHolder.title, R.style.DescriptionFontStyle) - } - view.setOnClickListener { - data.isChecked = data.isChecked.not() - freeTextBoxListener?.onOptionSelect(data) - notifyDataSetChanged() - } - - viewHolder.title.text = data.text - return view - } - - companion object { - class CheckboxViewHolder(binding: CheckboxFeedbackLayoutBinding) { - var checkbox = binding.checkBox - var title = binding.title - } - } -} diff --git a/android/app/src/main/java/com/naviapp/common/adapter/CouponAdapter.kt b/android/app/src/main/java/com/naviapp/common/adapter/CouponAdapter.kt deleted file mode 100644 index 63e22e1169..0000000000 --- a/android/app/src/main/java/com/naviapp/common/adapter/CouponAdapter.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.adapter - -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.naviapp.common.customview.CouponListener -import com.naviapp.common.customview.CouponView -import com.naviapp.common.customview.TimerViewListener -import com.naviapp.models.response.Coupon - -class CouponAdapter( - private var coupons: List, - private val couponListener: CouponListener, - private val timerViewListener: TimerViewListener -) : RecyclerView.Adapter() { - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CouponViewHolder { - return CouponViewHolder(CouponView(parent.context)) - } - - override fun getItemCount(): Int { - return coupons.size - } - - override fun onBindViewHolder(holder: CouponViewHolder, position: Int) { - val coupon = coupons[position] - holder.couponView.setCoupon(coupon, couponListener, timerViewListener) - } - - fun updateData(coupons: List) { - this.coupons = coupons - notifyDataSetChanged() - } -} - -class CouponViewHolder(val couponView: CouponView) : RecyclerView.ViewHolder(couponView) diff --git a/android/app/src/main/java/com/naviapp/common/adapter/CreditAnalysisAdapter.kt b/android/app/src/main/java/com/naviapp/common/adapter/CreditAnalysisAdapter.kt deleted file mode 100644 index 80fcb75ec1..0000000000 --- a/android/app/src/main/java/com/naviapp/common/adapter/CreditAnalysisAdapter.kt +++ /dev/null @@ -1,74 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.adapter - -import android.graphics.Color -import android.graphics.drawable.GradientDrawable -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.navi.base.utils.isValidIndex -import com.naviapp.R -import com.naviapp.databinding.CreditScoreItemBinding -import com.naviapp.models.ScoreDetails -import com.naviapp.utils.IconUtils -import com.naviapp.utils.dpToPx - -class CreditAnalysisAdapter(var list: List) : - RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CreditAnalysisViewHolder { - return CreditAnalysisViewHolder( - CreditScoreItemBinding.inflate(LayoutInflater.from(parent.context), parent, false), - this - ) - } - - override fun getItemCount(): Int { - return list.size - } - - override fun onBindViewHolder(holder: CreditAnalysisViewHolder, position: Int) { - if (!isValidIndex(position, itemCount)) return - val data = list[position] - holder.binding.data = data - data.iconCode?.let { IconUtils.updateIcon(it, holder.binding.iconIv) } - data.tip?.iconCode?.let { IconUtils.updateIcon(it, holder.binding.tipLay.tipIv) } - holder.binding.tipLay.tipTv.text = data.tip?.text - holder.binding.tipLay.tipTv.setTextColor( - holder.binding.root.resources.getColor(R.color.description_color_one) - ) - val shape = GradientDrawable() - shape.cornerRadius = dpToPx(12).toFloat() - shape.setColor(Color.parseColor(data.tag?.colorCode)) - holder.binding.scoreTv.background = shape - } - - fun updateData(list: List) { - this.list = list - notifyDataSetChanged() - } -} - -class CreditAnalysisViewHolder( - val binding: CreditScoreItemBinding, - private val adapter: CreditAnalysisAdapter -) : RecyclerView.ViewHolder(binding.root), View.OnClickListener { - init { - binding.root.setOnClickListener(this) - } - - override fun onClick(v: View?) { - if (isValidIndex(adapterPosition, adapter.itemCount)) { - val binder = adapter.list[adapterPosition] - binder.expanded = binder.expanded.not() - adapter.notifyItemChanged(adapterPosition) - } - } -} diff --git a/android/app/src/main/java/com/naviapp/common/adapter/IconTextVerticalDividerAdapter.kt b/android/app/src/main/java/com/naviapp/common/adapter/IconTextVerticalDividerAdapter.kt deleted file mode 100644 index f4997f471b..0000000000 --- a/android/app/src/main/java/com/naviapp/common/adapter/IconTextVerticalDividerAdapter.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.adapter - -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.naviapp.common.customview.IconTextVerticalDividerView -import com.naviapp.models.response.ItemWithTextAndIcon - -class IconTextVerticalDividerAdapter( - private val itemWithTextAndIconList: List -) : RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IconTextVerticalDividerVH { - return IconTextVerticalDividerVH(IconTextVerticalDividerView(parent.context, null)) - } - - override fun getItemCount(): Int { - return itemWithTextAndIconList.size - } - - override fun onBindViewHolder(holder: IconTextVerticalDividerVH, position: Int) { - val item = itemWithTextAndIconList[position] - holder.iconTextVerticalDividerView.setProperties( - item.symbol, - item.title, - (position != (itemWithTextAndIconList.size - 1)) - ) - } - - class IconTextVerticalDividerVH(val iconTextVerticalDividerView: IconTextVerticalDividerView) : - RecyclerView.ViewHolder(iconTextVerticalDividerView) -} diff --git a/android/app/src/main/java/com/naviapp/common/adapter/NaviCalendarDayViewAdapter.kt b/android/app/src/main/java/com/naviapp/common/adapter/NaviCalendarDayViewAdapter.kt deleted file mode 100644 index a80028ad81..0000000000 --- a/android/app/src/main/java/com/naviapp/common/adapter/NaviCalendarDayViewAdapter.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.adapter - -import android.annotation.SuppressLint -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.naviapp.common.customview.NaviCalendarDayItemView -import com.naviapp.common.listeners.NaviCalendarDayClickListener -import com.naviapp.common.model.DayContent -import com.naviapp.common.viewholders.NaviCalendarDayVH - -class NaviCalendarDayViewAdapter( - var list: List, - val listener: NaviCalendarDayClickListener? = null, -) : RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return NaviCalendarDayVH(NaviCalendarDayItemView(parent.context)) - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - (holder as NaviCalendarDayVH).bind(list[position], listener) - } - - override fun getItemCount(): Int = list.size - - @SuppressLint("NotifyDataSetChanged") - fun updateList(list: List) { - this.list = list - notifyDataSetChanged() - } -} diff --git a/android/app/src/main/java/com/naviapp/common/adapter/NpsGridAdapter.kt b/android/app/src/main/java/com/naviapp/common/adapter/NpsGridAdapter.kt deleted file mode 100644 index 82997ca72c..0000000000 --- a/android/app/src/main/java/com/naviapp/common/adapter/NpsGridAdapter.kt +++ /dev/null @@ -1,98 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.BaseAdapter -import androidx.core.content.ContextCompat -import androidx.core.widget.TextViewCompat -import com.navi.common.R as CommonR -import com.naviapp.R -import com.naviapp.common.fragment.ReasonClickListener -import com.naviapp.databinding.NpsReasonBinding -import com.naviapp.models.response.GeneralTextResponse - -class NpsGridAdapter( - private val context: Context, - private val reasonClickListener: ReasonClickListener? -) : BaseAdapter() { - private val reasons = arrayListOf() - - fun setReasons(data: List) { - this.reasons.clear() - this.reasons.addAll(data) - notifyDataSetChanged() - } - - override fun getCount(): Int { - return reasons.size - } - - override fun getItem(position: Int): Any { - return reasons[position] - } - - override fun getItemId(position: Int): Long { - return position.toLong() - } - - override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { - val data = reasons[position] - var view = convertView - val viewHolder: NpsReasonViewHolder - - if (view == null) { - val inflater = LayoutInflater.from(context) - val binding = NpsReasonBinding.inflate(inflater, parent, false) - viewHolder = NpsReasonViewHolder(binding) - view = binding.root - viewHolder.tick = binding.tick - viewHolder.title = binding.title - view.tag = viewHolder - } else { - viewHolder = view.tag as NpsReasonViewHolder - } - - if (data.isChecked) { - view.setBackgroundResource(R.drawable.bg_rounded_red_8_with_red_border) - viewHolder.tick.setColorFilter(ContextCompat.getColor(context, R.color.red)) - TextViewCompat.setTextAppearance(viewHolder.title, CommonR.style.AgreementFontStyle) - } else { - view.setBackgroundResource(R.drawable.grey_fill_background) - viewHolder.tick.setColorFilter(ContextCompat.getColor(context, R.color.santas_gray)) - TextViewCompat.setTextAppearance(viewHolder.title, R.style.DescriptionFontStyle) - } - - view.setOnClickListener { - if (data.isChecked.not()) { - view.setBackgroundResource(R.drawable.bg_rounded_red_8_with_red_border) - viewHolder.tick.setColorFilter(ContextCompat.getColor(context, R.color.red)) - TextViewCompat.setTextAppearance(viewHolder.title, CommonR.style.AgreementFontStyle) - } else { - view.setBackgroundResource(R.drawable.grey_fill_background) - viewHolder.tick.setColorFilter(ContextCompat.getColor(context, R.color.santas_gray)) - TextViewCompat.setTextAppearance(viewHolder.title, R.style.DescriptionFontStyle) - } - data.isChecked = data.isChecked.not() - reasonClickListener?.onOptionSelect(data) - } - - viewHolder.title.text = data.text - return view - } - - companion object { - class NpsReasonViewHolder(binding: NpsReasonBinding) { - var tick = binding.tick - var title = binding.title - } - } -} diff --git a/android/app/src/main/java/com/naviapp/common/adapter/TopupInfoAdapter.kt b/android/app/src/main/java/com/naviapp/common/adapter/TopupInfoAdapter.kt deleted file mode 100644 index 00cc7d6541..0000000000 --- a/android/app/src/main/java/com/naviapp/common/adapter/TopupInfoAdapter.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.adapter - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.naviapp.common.model.SubItemData -import com.naviapp.databinding.IconTextStepsLayoutBinding - -class TopupInfoAdapter(val data: List) : - RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TopupInfoVH { - return TopupInfoVH( - IconTextStepsLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false) - ) - } - - override fun onBindViewHolder(holder: TopupInfoVH, position: Int) { - holder.bind(data.get(position)) - } - - override fun getItemCount(): Int = data.size - - inner class TopupInfoVH(val binding: IconTextStepsLayoutBinding) : - RecyclerView.ViewHolder(binding.root) { - fun bind(itemData: SubItemData?) { - itemData?.let { item -> - binding.topupItemBinder = item - if (data.size == absoluteAdapterPosition + 1) { - binding.divider.visibility = View.GONE - } else { - binding.title.setMargin(0, 0, 0, 24) - } - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/ActionCardBannerWithPaddingView.kt b/android/app/src/main/java/com/naviapp/common/customview/ActionCardBannerWithPaddingView.kt deleted file mode 100644 index 8dd73acb54..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/ActionCardBannerWithPaddingView.kt +++ /dev/null @@ -1,113 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.os.Build -import android.util.AttributeSet -import android.view.LayoutInflater -import android.widget.LinearLayout -import androidx.core.content.ContextCompat -import androidx.core.view.isVisible -import com.navi.base.utils.orFalse -import com.navi.common.utils.setStyledText -import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.moveViewWithDistance -import com.navi.design.utils.parseColorSafe -import com.navi.insurance.R as InsuranceR -import com.naviapp.R -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.databinding.ActionCardWithPaddingViewBinding -import com.naviapp.models.ActionCardWithPaddingWidgetConfig -import com.naviapp.models.response.LoanDetailsV2AdditionData -import com.naviapp.utils.BindingAdapterUtil.setImageFromIconCode -import com.naviapp.utils.Constants -import com.naviapp.utils.setMargin - -class ActionCardBannerWithPaddingView(context: Context, attrs: AttributeSet? = null) : - LinearLayout(context, attrs) { - - private var binding = - ActionCardWithPaddingViewBinding.inflate(LayoutInflater.from(context), this, true) - private var data: ActionCardWithPaddingWidgetConfig? = null - - init { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - - 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) - elevation = resources.getDimension(InsuranceR.dimen.dp_4) - } - } - - fun setProperties( - actionCardWithPaddingWidgetConfig: ActionCardWithPaddingWidgetConfig?, - listener: LoanDetailsV2WidgetAdapterListener?, - additionalData: LoanDetailsV2AdditionData? = null - ) { - data = actionCardWithPaddingWidgetConfig - actionCardWithPaddingWidgetConfig?.apply { - widgetLayoutParams?.margin?.let { setMargin(it) } - widgetBody?.let { widgetBody -> - binding.cardBinder = widgetBody - binding.titleTv.isVisible = widgetBody.title != null - binding.ctaIv.isVisible = widgetBody.rightIcon != null - setStyledText(binding.titleTv, widgetBody.title, null) - setImageFromIconCode(binding.ctaIv, widgetBody.rightIcon) - } - widgetBody?.borderColor?.let { - binding.cardViewBanner.background = - getNaviDrawable( - cornerRadius = resources.getDimension(InsuranceR.dimen.dp_4).toInt(), - strokeWidth = resources.getDimension(InsuranceR.dimen.dp_1).toInt(), - strokeColor = it.parseColorSafe() - ) - } - } - binding.cardViewBanner.setOnClickListener { - listener?.onCtaClick(actionCardWithPaddingWidgetConfig?.widgetBody?.cta) - } - binding.cardViewBanner.setOnClickListener { - listener?.onCtaClick(actionCardWithPaddingWidgetConfig?.widgetBody?.cta) - } - - if (actionCardWithPaddingWidgetConfig?.widgetBody?.enableShimmer.orFalse()) { - binding.pgvShimmer.visibility = VISIBLE - moveViewWithDistance( - binding.pgvShimmer, - binding.cardViewBanner.width, - animDuration = - actionCardWithPaddingWidgetConfig?.widgetBody?.shimmerDuration - ?: Constants.OFFER_UPGRADE_CARD_V2_ANIMATION_DURATION, - repeatDelay = actionCardWithPaddingWidgetConfig?.widgetBody?.repeatDelay - ) - } else { - binding.pgvShimmer.visibility = GONE - } - - if ( - additionalData?.widgetValidationRequired == true && - data?.widgetBody?.errorState?.valuePrefill == false - ) { - data?.widgetBody?.errorState?.let { - binding.cardViewBanner.background = - getNaviDrawable( - cornerRadius = resources.getDimension(InsuranceR.dimen.dp_4).toInt(), - strokeWidth = resources.getDimension(R.dimen.layout_dp_1).toInt(), - strokeColor = it.errorColor.parseColorSafe(), - backgroundColor = data?.widgetBody?.bgColor.parseColorSafe() - ) - binding.titleTv.setTextColor(it.errorColor.parseColorSafe()) - binding.errorTextView.isVisible = true - setStyledText(binding.errorTextView, it.title, null) - setImageFromIconCode(binding.ctaIv, it.iconCode) - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/AnimatedTagView.kt b/android/app/src/main/java/com/naviapp/common/customview/AnimatedTagView.kt deleted file mode 100644 index 7a722af304..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/AnimatedTagView.kt +++ /dev/null @@ -1,92 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.graphics.PorterDuff -import android.graphics.PorterDuffColorFilter -import android.util.AttributeSet -import android.view.LayoutInflater -import android.widget.LinearLayout -import androidx.databinding.DataBindingUtil -import com.airbnb.lottie.LottieProperty -import com.airbnb.lottie.model.KeyPath -import com.navi.base.utils.orFalse -import com.navi.base.utils.orZero -import com.navi.common.R as CommonR -import com.navi.common.utils.parseColor -import com.navi.common.utils.setStyledText -import com.navi.design.utils.dpToPx -import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.parseColorSafe -import com.navi.naviwidgets.widgets.textdisplay.Padding -import com.naviapp.R -import com.naviapp.databinding.AnimatedTagViewBinding -import com.naviapp.models.CardDataV2 - -class AnimatedTagView(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs) { - private var binding: AnimatedTagViewBinding - - init { - val inflater = LayoutInflater.from(context) - binding = DataBindingUtil.inflate(inflater, R.layout.animated_tag_view, this, true) - } - - fun setProperties(cardDataV2: CardDataV2? = null, padding: Padding? = null) { - setStyledText(binding.numberTv, cardDataV2?.title, null) - setPadding(padding) - cardDataV2?.title?.backgroundColor?.let { - binding.parentView.background = - getNaviDrawable( - backgroundColor = cardDataV2.title.backgroundColor.parseColorSafe(), - cornerRadius = - if (cardDataV2.radius != null) dpToPx(cardDataV2.radius).toInt() - else resources.getDimension(CommonR.dimen.layout_dp_100).toInt() - ) - } - - if (cardDataV2?.showLottie.orFalse()) { - binding.lottieView.post { - binding.lottieView.visibility = VISIBLE - binding.lottieView.setAnimation("${cardDataV2?.lottieCode}$JSON_EXTENSION") - binding.lottieView.playAnimation() - binding.lottieView.addValueCallback(KeyPath("**"), LottieProperty.COLOR_FILTER) { - PorterDuffColorFilter( - cardDataV2?.title?.hexColorCode?.parseColor().orZero(), - PorterDuff.Mode.SRC_ATOP - ) - } - } - } else { - binding.lottieView.visibility = GONE - } - } - - fun setPadding(padding: Padding? = null) { - padding?.let { - binding.numberTv.setPadding( - it.startDp.toInt(), - it.topDp.toInt(), - it.endDp.toInt(), - it.bottomDp.toInt() - ) - } - ?: run { - binding.numberTv.setPadding( - resources.getDimension(R.dimen.layout_dp_8).toInt(), - resources.getDimension(R.dimen.layout_dp_4).toInt(), - resources.getDimension(R.dimen.layout_dp_8).toInt(), - resources.getDimension(R.dimen.layout_dp_4).toInt() - ) - } - } - - companion object { - const val JSON_EXTENSION = ".json" - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/ColorBoxGroupView.kt b/android/app/src/main/java/com/naviapp/common/customview/ColorBoxGroupView.kt deleted file mode 100644 index 00a17c98ff..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/ColorBoxGroupView.kt +++ /dev/null @@ -1,113 +0,0 @@ -/* - * - * * Copyright © 2021-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.animation.ValueAnimator -import android.content.Context -import android.graphics.Color -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.TextView -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.databinding.DataBindingUtil -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.naviapp.R -import com.naviapp.databinding.ColorBoxGroupLayoutBinding -import com.naviapp.models.response.ColorBoxPair -import com.naviapp.models.response.ColorRangeTags - -class ColorBoxGroupView(context: Context, attrs: AttributeSet?) : ConstraintLayout(context, attrs) { - - private val binding: ColorBoxGroupLayoutBinding - - private val _onRatingSelect = MutableLiveData() - val onRatingSelect: LiveData - get() = _onRatingSelect - - init { - val inflater = LayoutInflater.from(context) - binding = DataBindingUtil.inflate(inflater, R.layout.color_box_group_layout, this, true) - } - - fun setProperties(colorList: List, viewWidth: Int) { - colorList.forEachIndexed { index, element -> - val colorBoxView = ColorBoxView(context, null, (viewWidth / colorList.size)) - colorBoxView.apply { - id = index - when (index) { - 0 -> setProperties(element, Position.START, true) - colorList.size - 1 -> setProperties(element, Position.END, false) - else -> setProperties(element, Position.MIDDLE, true) - } - setOnClickListener { view -> - ValueAnimator.ofFloat(1f, 1.27f).apply { - addUpdateListener { - view.scaleY = it.animatedValue as Float - view.findViewById(R.id.number_tv).scaleY = - 1f.div(it.animatedValue as Float) - } - duration = 100 - start() - } - - scaleDownColorBoxGroup(colorList) - - val leftColorBoxView: ColorBoxView = - binding.colorBoxGroupLayout.findViewById(if (id == 0) 0 else id - 1) - as ColorBoxView - scaleUpColorBox(element, leftColorBoxView) - - _onRatingSelect.value = id + 1 - } - } - - binding.colorBoxGroupLayout.addView( - colorBoxView, - binding.colorBoxGroupLayout.childCount - ) - } - } - - private fun scaleDownColorBoxGroup(colorList: List) { - colorList.forEachIndexed { index, element -> - val position = getPosition(index, colorList.size) - val colorBoxView: ColorBoxView = - binding.colorBoxGroupLayout.findViewById(index) as ColorBoxView - colorBoxView.scaleDownColorBox(element, position) - } - } - - private fun getPosition(index: Int, size: Int): Position { - return when (index) { - 0 -> Position.START - size - 1 -> Position.END - else -> Position.MIDDLE - } - } - - fun addColorTags(colorRangeMessage: ColorRangeTags) { - binding.startTv.apply { - visibility = View.VISIBLE - text = colorRangeMessage.startTag - setTextColor(Color.parseColor(colorRangeMessage.startTagColor)) - } - binding.endTv.apply { - visibility = View.VISIBLE - text = colorRangeMessage.endTag - setTextColor(Color.parseColor(colorRangeMessage.endTagColor)) - } - } -} - -enum class Position { - START, - END, - MIDDLE -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/ColorBoxView.kt b/android/app/src/main/java/com/naviapp/common/customview/ColorBoxView.kt deleted file mode 100644 index 33ca83cb3c..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/ColorBoxView.kt +++ /dev/null @@ -1,93 +0,0 @@ -/* - * - * * Copyright © 2021-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.graphics.Color -import android.graphics.drawable.GradientDrawable -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.LinearLayout -import androidx.core.content.ContextCompat -import androidx.databinding.DataBindingUtil -import com.navi.insurance.R as InsuranceR -import com.naviapp.R -import com.naviapp.databinding.ColorBoxLayoutBinding -import com.naviapp.models.response.ColorBoxPair - -class ColorBoxView(context: Context, attrs: AttributeSet?, width: Int) : - LinearLayout(context, attrs) { - private val binding: ColorBoxLayoutBinding - - init { - val inflater = LayoutInflater.from(context) - binding = DataBindingUtil.inflate(inflater, R.layout.color_box_layout, this, true) - val layoutParams = binding.parentView.layoutParams - layoutParams.width = width - binding.parentView.layoutParams = layoutParams - } - - fun setProperties(colorId: ColorBoxPair?, position: Position, endBorder: Boolean) { - binding.numberTv.text = colorId?.text - binding.numberTv.setTextColor(ContextCompat.getColor(context, R.color.santas_gray)) - val indexList = getRadiiIndexes(position) - setCornersRadius(colorId, indexList, endBorder, false) - } - - private fun setCornersRadius( - colorId: ColorBoxPair?, - indexList: ArrayList, - endBorderRequired: Boolean, - onClick: Boolean - ) { - val gradientDrawable = GradientDrawable() - val radii = FloatArray(8) - indexList.forEach { radii[it] = resources.getDimension(InsuranceR.dimen.dp_8) } - gradientDrawable.cornerRadii = radii - if (onClick) { - gradientDrawable.setColor(Color.parseColor(colorId?.clickColor)) - } else { - gradientDrawable.setColor(Color.parseColor(colorId?.displayColor)) - } - if (endBorderRequired) { - colorId?.endLineColor?.let { binding.lineView.setBackgroundColor(Color.parseColor(it)) } - binding.lineView.visibility = View.VISIBLE - } else { - binding.lineView.visibility = View.GONE - } - binding.parentView.background = gradientDrawable - } - - fun scaleUpColorBox(colorId: ColorBoxPair?, previousColorBoxView: ColorBoxView) { - binding.numberTv.setTextColor(ContextCompat.getColor(context, R.color.white)) - previousColorBoxView.binding.lineView.visibility = View.GONE - val indexList = arrayListOf(0, 1, 2, 3, 4, 5, 6, 7) - setCornersRadius(colorId, indexList, endBorderRequired = false, onClick = true) - } - - fun scaleDownColorBox(color: ColorBoxPair, position: Position) { - val endBorderRequired = position != Position.END - this.apply { - binding.numberTv.text = color.text - binding.numberTv.setTextColor(ContextCompat.getColor(context, R.color.santas_gray)) - scaleY = 1f - binding.numberTv.scaleY = 1f - } - val indexList = getRadiiIndexes(position) - setCornersRadius(color, indexList, endBorderRequired, false) - } - - private fun getRadiiIndexes(position: Position): ArrayList { - return when (position) { - Position.START -> arrayListOf(0, 1, 6, 7) - Position.END -> arrayListOf(2, 3, 4, 5) - else -> arrayListOf() - } - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/ConsentDetailView.kt b/android/app/src/main/java/com/naviapp/common/customview/ConsentDetailView.kt deleted file mode 100644 index 1fcf2d2e7c..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/ConsentDetailView.kt +++ /dev/null @@ -1,66 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.databinding.DataBindingUtil -import com.navi.design.R as DesignR -import com.navi.insurance.R as InsuranceR -import com.naviapp.R -import com.naviapp.databinding.LayoutConsentDetailsBinding -import com.naviapp.utils.setCornerRadius -import com.onemoney.custom.models.output.ConsentDetail -import java.text.SimpleDateFormat -import java.util.* - -class ConsentDetailView(context: Context, attrs: AttributeSet?) : ConstraintLayout(context, attrs) { - private var binding: LayoutConsentDetailsBinding - private var isExpanded: Boolean = false - - init { - val inflater = LayoutInflater.from(context) - binding = DataBindingUtil.inflate(inflater, R.layout.layout_consent_details, this, true) - binding.detailsWrapper.setCornerRadius( - resources.getDimensionPixelSize(com.navi.amc.R.dimen._4dp) - ) - setExpanded(false) - binding.clickerView.setOnClickListener { setExpanded(!isExpanded) } - } - - fun setProperties(consentDetail: ConsentDetail) { - val sourceFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH) - sourceFormat.timeZone = TimeZone.getTimeZone("GMT") - val resultFormat = SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH) - val startTime = sourceFormat.parse(consentDetail.fiDataRange.from) - val endTime = sourceFormat.parse(consentDetail.fiDataRange.to) - binding.fromValueTv.text = resultFormat.format(startTime) - binding.toValueTv.text = resultFormat.format(endTime) - binding.purposeValueTv.text = consentDetail.purpose.text - binding.frequencyValueTv.text = - consentDetail.fetchType ?: resources.getString(R.string.periodic) - binding.datalifeValueTv.text = - "${consentDetail.dataLife.value} ${consentDetail.dataLife.unit}" - binding.consentValueTv.text = - resultFormat.format(sourceFormat.parse(consentDetail.consentExpiry)) - } - - fun setExpanded(isExpanded: Boolean) { - if (isExpanded) { - binding.detailsWrapper.visibility = View.VISIBLE - binding.arrowIv.setImageResource(DesignR.drawable.arrow_up) - } else { - binding.detailsWrapper.visibility = View.GONE - binding.arrowIv.setImageResource(InsuranceR.drawable.arrow_down_without_tail) - } - this.isExpanded = isExpanded - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/CouponTag.kt b/android/app/src/main/java/com/naviapp/common/customview/CouponTag.kt deleted file mode 100644 index a31b2bfa4f..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/CouponTag.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.databinding.DataBindingUtil -import com.naviapp.R -import com.naviapp.databinding.ViewCouponTagBinding - -class CouponTag(context: Context, attrs: AttributeSet? = null) : ConstraintLayout(context, attrs) { - private var binding: ViewCouponTagBinding - - init { - val inflater = LayoutInflater.from(context) - binding = DataBindingUtil.inflate(inflater, R.layout.view_coupon_tag, this, true) - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setCouponCode(couponCode: String) { - binding.couponTv.text = couponCode - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/CouponView.kt b/android/app/src/main/java/com/naviapp/common/customview/CouponView.kt deleted file mode 100644 index ae76bf59d0..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/CouponView.kt +++ /dev/null @@ -1,80 +0,0 @@ -/* - * - * * Copyright © 2019-2022 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.content.ContextCompat -import androidx.databinding.DataBindingUtil -import com.navi.common.decorator.TopMarginItemDecoration -import com.naviapp.R -import com.naviapp.common.adapter.IconTextAdapter -import com.naviapp.common.adapter.IconTextStyle -import com.naviapp.databinding.ViewCouponBinding -import com.naviapp.models.response.Coupon - -class CouponView(context: Context, attrs: AttributeSet? = null) : ConstraintLayout(context, attrs) { - private var binding: ViewCouponBinding - - init { - val inflater = LayoutInflater.from(context) - binding = DataBindingUtil.inflate(inflater, R.layout.view_coupon, this, true) - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setCoupon( - coupon: Coupon, - couponListener: CouponListener, - timerViewListener: TimerViewListener? = null - ) { - coupon.couponCode?.let { binding.couponTag.setCouponCode(it) } - binding.titleTv.text = coupon.title - binding.subtitleTv.text = coupon.description - binding.termsConditionsTv.text = coupon.tncLabel - val tncList = coupon.tncList - if (tncList.isNullOrEmpty()) binding.moreTv.visibility = View.GONE - else { - if (binding.termsConditionsRv.adapter == null) { - val colorForTheTermsAndConditions = - ContextCompat.getColor(context, R.color.gray_dark_1) - binding.termsConditionsRv.adapter = - IconTextAdapter( - tncList, - IconTextStyle( - iconColor = colorForTheTermsAndConditions, - textColor = colorForTheTermsAndConditions, - titleSize = IconTextStyle.FONT_EXTRA_SMALL - ) - ) - binding.termsConditionsRv.addItemDecoration( - TopMarginItemDecoration(context.resources.getDimension(R.dimen.layout_dp_8)) - ) - } else { - (binding.termsConditionsRv.adapter as? IconTextAdapter)?.setData(tncList) - } - } - coupon.expiryTime?.let { binding.timerView.setTimer(it, timerViewListener) } - binding.actionTv.text = coupon.actionText - binding.moreTv.setOnClickListener { - binding.moreTv.visibility = View.GONE - binding.termsConditionsGroup.visibility = View.VISIBLE - } - binding.lessTv.setOnClickListener { - binding.termsConditionsGroup.visibility = View.GONE - binding.moreTv.visibility = View.VISIBLE - } - binding.actionTv.setOnClickListener { couponListener.onCouponTap(coupon) } - } -} - -interface CouponListener { - fun onCouponTap(coupon: Coupon) -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/DescExpandableCardView.kt b/android/app/src/main/java/com/naviapp/common/customview/DescExpandableCardView.kt deleted file mode 100644 index 3de2072f3e..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/DescExpandableCardView.kt +++ /dev/null @@ -1,111 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.cardview.widget.CardView -import androidx.databinding.DataBindingUtil -import com.navi.analytics.utils.NaviTrackEvent -import com.navi.naviwidgets.R as WidgetsR -import com.navi.naviwidgets.callbacks.WidgetCallback -import com.navi.naviwidgets.extensions.setTextFieldData -import com.naviapp.R -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.DescExpandableItemBinder -import com.naviapp.databinding.ExpandableTitleDescViewBinding -import com.naviapp.utils.* - -class DescExpandableCardView -@JvmOverloads -constructor(context: Context, attrs: AttributeSet? = null) : CardView(context, attrs) { - private var binding: ExpandableTitleDescViewBinding - private var widgetCallback: WidgetCallback? = null - - init { - val inflater = LayoutInflater.from(context) - binding = DataBindingUtil.inflate(inflater, R.layout.expandable_title_desc_view, this, true) - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - radius = resources.getDimension(R.dimen.layout_dp_8) - elevation = resources.getDimension(R.dimen.layout_dp_0) - preventCornerOverlap = true - } - - fun setData(descExpandableItemBinder: DescExpandableItemBinder) { - binding.apply { - emiInstallmentData = descExpandableItemBinder - root.tag = ExpandableTag.COLLAPSED - tvTitle.setTextFieldData(descExpandableItemBinder.infoTitle) { - widgetCallback?.onClick(it) - } - tvDescription.setTextFieldData(descExpandableItemBinder.infoDescription) { - widgetCallback?.onClick(it) - } - if (descExpandableItemBinder.cardType == MESSAGE_CARD) { - collapsibleIcon.visibility = GONE - descExpandableItemBinder.infoDescription?.let { tvDescription.visibility = VISIBLE } - } - rootExpandableView.setOnClickListener { - if (descExpandableItemBinder.cardType == STATUS_CARD) { - val rootTag = root.tag - if (rootTag is ExpandableTag) { - when (rootTag) { - ExpandableTag.EXPANDED -> { - root.tag = ExpandableTag.COLLAPSED - toggleExpandableState(ExpandableTag.COLLAPSED) - } - ExpandableTag.COLLAPSED -> { - root.tag = ExpandableTag.EXPANDED - toggleExpandableState(ExpandableTag.EXPANDED) - } - } - } - descExpandableItemBinder.eventName?.let { NaviTrackEvent.trackEvent(it) } - } - } - descExpandableItemBinder.infoIcon?.let { IconUtils.updateIcon(it, expandableIvIcon) } - } - } - - fun setWidgetCallback(widgetCallback: WidgetCallback) { - this.widgetCallback = widgetCallback - } - - private fun getIconIdFromIcon(icon: String?): Int? { - return when (icon) { - ICON_DOWN_ARROW_GREY -> WidgetsR.drawable.ic_down_arrow_grey_svg - ICON_UP_ARROW_MAGENTA -> R.drawable.ic_up_arrow_magenta - else -> null - } - } - - enum class ExpandableTag { - EXPANDED, - COLLAPSED - } - - private fun toggleExpandableState(tag: ExpandableTag) { - when (tag) { - ExpandableTag.COLLAPSED -> { - binding.tvDescription.visibility = GONE - val iconId = getIconIdFromIcon(ICON_DOWN_ARROW_GREY) - iconId?.let { binding.collapsibleIcon.setImageResource(it) } - } - ExpandableTag.EXPANDED -> { - binding.tvDescription.visibility = VISIBLE - val iconId = getIconIdFromIcon(ICON_UP_ARROW_MAGENTA) - iconId?.let { binding.collapsibleIcon.setImageResource(it) } - } - } - } - - companion object { - private const val MESSAGE_CARD = "MessageCard" - private const val STATUS_CARD = "StatusCard" - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/EMICalendarDetailView.kt b/android/app/src/main/java/com/naviapp/common/customview/EMICalendarDetailView.kt deleted file mode 100644 index 81e12d65a7..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/EMICalendarDetailView.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.widget.LinearLayout -import androidx.databinding.DataBindingUtil -import com.naviapp.R -import com.naviapp.databinding.EmiCalendarItemBinding -import com.naviapp.models.EMIDateContent - -class EMICalendarDetailView(context: Context, attr: AttributeSet? = null) : - LinearLayout(context, attr) { - - private val binding: EmiCalendarItemBinding - - init { - val inflater = LayoutInflater.from(context) - binding = DataBindingUtil.inflate(inflater, R.layout.emi_calendar_item, this, true) - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setProperties(emiDateContent: EMIDateContent) { - binding.emiDateBinder = emiDateContent - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/FixedClickableTextView.kt b/android/app/src/main/java/com/naviapp/common/customview/FixedClickableTextView.kt deleted file mode 100644 index 427f1aeabc..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/FixedClickableTextView.kt +++ /dev/null @@ -1,59 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview -/* - * - * * Copyright © 2022 by Navi Technologies Private Limited - * * All rights reserved. Strictly confidential - * - */ - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.content.res.ResourcesCompat -import com.navi.design.utils.getNaviDrawable -import com.naviapp.R -import com.naviapp.databinding.FixedClickableTextViewBinding -import com.naviapp.models.response.FixedClickableTextWidgetConfig -import com.naviapp.utils.setMargin - -class FixedClickableTextView -@JvmOverloads -constructor(context: Context, attrs: AttributeSet? = null) : ConstraintLayout(context, attrs) { - - private val binding = - FixedClickableTextViewBinding.inflate(LayoutInflater.from(context), this, true) - - init { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - binding.rootItem.background = - getNaviDrawable( - backgroundColor = ResourcesCompat.getColor(resources, R.color.white, null), - cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt(), - strokeWidth = resources.getDimension(R.dimen.layout_dp_1).toInt(), - strokeColor = - ResourcesCompat.getColor( - resources, - R.color.view_background_color_seventeen, - null - ) - ) - } - - fun setProperties(widgetConfig: FixedClickableTextWidgetConfig?) { - widgetConfig?.widgetLayoutParams?.let { setMargin(it.margin) } - widgetConfig?.widgetBody?.title?.let { binding.title = it } - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - binding.unbind() - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/InfoBannerView.kt b/android/app/src/main/java/com/naviapp/common/customview/InfoBannerView.kt deleted file mode 100644 index 268fd7655d..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/InfoBannerView.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.constraintlayout.widget.ConstraintLayout -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.common.model.InfoBannerWidgetConfig -import com.naviapp.databinding.InfoBannerViewBinding -import com.naviapp.utils.setMargin - -class InfoBannerView(context: Context, attrs: AttributeSet? = null) : - ConstraintLayout(context, attrs) { - - private val binding = InfoBannerViewBinding.inflate(LayoutInflater.from(context), this, true) - - init { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setProperties( - widgetConfig: InfoBannerWidgetConfig?, - widgetCallback: LoanDetailsV2WidgetAdapterListener? = null - ) { - widgetConfig?.widgetBody?.let { widgetBody -> - binding.infoBannerBinder = widgetBody - binding.ctaTv.setOnClickListener { widgetCallback?.onCtaClick(widgetBody.ctaText?.cta) } - } - widgetConfig?.widgetLayoutParams?.let { setMargin(it.margin) } - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - binding.unbind() - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/InputWithErrorLabelView.kt b/android/app/src/main/java/com/naviapp/common/customview/InputWithErrorLabelView.kt deleted file mode 100644 index 17ddd72639..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/InputWithErrorLabelView.kt +++ /dev/null @@ -1,142 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.content.res.ResourcesCompat -import androidx.core.view.isVisible -import androidx.core.widget.doOnTextChanged -import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.hideCutCopyMenuPopUp -import com.navi.design.utils.parseColorSafe -import com.naviapp.R -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.databinding.InputWithErrorLabelViewBinding -import com.naviapp.models.response.InputWithErrorLabelWidgetBody -import com.naviapp.models.response.InputWithErrorLabelWidgetConfig -import com.naviapp.models.response.LoanDetailsV2AdditionData -import com.naviapp.utils.isValidEmail -import com.naviapp.utils.setMargin - -class InputWithErrorLabelView -@JvmOverloads -constructor(context: Context, attrs: AttributeSet? = null) : ConstraintLayout(context, attrs) { - - private var widgetData: InputWithErrorLabelWidgetBody? = null - private var listener: LoanDetailsV2WidgetAdapterListener? = null - private var bgColor: String? = null - - private val binding = - InputWithErrorLabelViewBinding.inflate(LayoutInflater.from(context), this, true) - - init { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setProperties( - widgetConfig: InputWithErrorLabelWidgetConfig?, - additionalData: LoanDetailsV2AdditionData?, - listener: LoanDetailsV2WidgetAdapterListener? - ) { - this.listener = listener - widgetData = widgetConfig?.widgetBody - widgetConfig?.widgetLayoutParams?.let { setMargin(it.margin) } - binding.inputView.hideCutCopyMenuPopUp() - binding.inputView.hint = widgetData?.hint - binding.errorLabel.text = widgetData?.errorLabel - bgColor = widgetConfig?.widgetBody?.bgColor - setNormalState() - additionalData?.email?.let { binding.inputView.setText(it) } - ?: kotlin.run { binding.inputView.setText(widgetData?.inputValue) } - checkInputValidation() - initListeners() - } - - private fun checkInputValidation(): Boolean { - val text = binding.inputView.text.toString() - if (text.isEmpty()) return true - binding.errorLabel.text = widgetData?.invalidEmailErrorLabel - return text.isValidEmail() - } - - private fun initListeners() { - listener?.onEmailChange(binding.inputView.text.toString()) - binding.inputView.doOnTextChanged { text, start, before, count -> - val charCount = binding.inputView.text.toString().length - listener?.onEmailChange(binding.inputView.text.toString()) - if (charCount > 0) { - setNormalState() - binding.inputView.apply { - setTextColor( - ResourcesCompat.getColor(resources, R.color.title_color_four, null) - ) - } - } else { - binding.errorLabel.text = widgetData?.errorLabel - setErrorState() - binding.inputView.apply { - setTextColor( - ResourcesCompat.getColor(resources, R.color.title_color_four, null) - ) - } - } - } - } - - fun checkValidation(): Boolean { - val isValid = binding.inputView.text.toString().isNotEmpty() - val isEmailValid = binding.inputView.text.toString().isValidEmail() - if (isValid) { - if (isEmailValid) { - setNormalState() - } else { - setErrorState() - binding.errorLabel.text = widgetData?.invalidEmailErrorLabel - } - } else { - binding.errorLabel.text = widgetData?.errorLabel - setErrorState() - } - return isValid && isEmailValid - } - - private fun setNormalState() { - binding.errorLabel.isVisible = false - binding.inputContainer.background = - getNaviDrawable( - strokeColor = - ResourcesCompat.getColor( - resources, - R.color.view_background_color_seventeen, - null - ), - backgroundColor = bgColor?.parseColorSafe("#00000000"), - strokeWidth = resources.getDimension(R.dimen.layout_dp_1).toInt(), - cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt() - ) - } - - private fun setErrorState() { - binding.errorLabel.isVisible = true - binding.inputContainer.background = - getNaviDrawable( - strokeColor = ResourcesCompat.getColor(resources, R.color.error_red, null), - backgroundColor = bgColor?.parseColorSafe("#00000000"), - strokeWidth = resources.getDimension(R.dimen.layout_dp_1).toInt(), - cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt() - ) - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - binding.unbind() - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/NaviCalendarDayItemView.kt b/android/app/src/main/java/com/naviapp/common/customview/NaviCalendarDayItemView.kt deleted file mode 100644 index 6637fbd0c8..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/NaviCalendarDayItemView.kt +++ /dev/null @@ -1,79 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.content.ContextCompat -import com.navi.base.utils.orFalse -import com.navi.design.databinding.NaviCalendarItemViewBinding -import com.navi.design.utils.DrawableShape -import com.navi.design.utils.getNaviDrawable -import com.navi.naviwidgets.extensions.setTextFieldData -import com.naviapp.R -import com.naviapp.common.listeners.NaviCalendarDayClickListener -import com.naviapp.common.model.DayContent -import com.naviapp.common.model.DayStatus - -class NaviCalendarDayItemView -@JvmOverloads -constructor(context: Context, attrs: AttributeSet? = null) : ConstraintLayout(context, attrs) { - - private val binding = - NaviCalendarItemViewBinding.inflate(LayoutInflater.from(context), this, true) - - fun setProperties( - dayContent: DayContent, - listener: NaviCalendarDayClickListener? = null, - position: Int - ) { - setDayConfig(dayContent) - binding.dateTv.setOnClickListener { - if (dayContent.clickable.orFalse()) { - listener?.onDayClick(dayContent, position) - } - } - } - - private fun setDayConfig(dayContent: DayContent) { - when (dayContent.status) { - DayStatus.SELECTED -> { - setSelectedDay(dayContent) - } - DayStatus.DEFAULT, - DayStatus.DISABLED -> { - setDefaultDay(dayContent) - } - else -> { - setDefaultDay(dayContent) - } - } - } - - private fun setDefaultDay(dayContent: DayContent) { - binding.dateTv.setTextFieldData(dayContent.defaultDay?.text) - binding.dateTv.background = - getNaviDrawable( - shape = DrawableShape.OVAL, - cornerRadius = R.dimen.layout_dp_16, - backgroundColor = ContextCompat.getColor(context, R.color.white) - ) - } - - private fun setSelectedDay(dayContent: DayContent) { - binding.dateTv.setTextFieldData(dayContent.selectedDay?.text) - binding.dateTv.background = - getNaviDrawable( - shape = DrawableShape.OVAL, - cornerRadius = R.dimen.layout_dp_16, - backgroundColor = ContextCompat.getColor(context, R.color.outrageous_orange) - ) - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/RadioButtonWithNoteCardView.kt b/android/app/src/main/java/com/naviapp/common/customview/RadioButtonWithNoteCardView.kt deleted file mode 100644 index b64b70b957..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/RadioButtonWithNoteCardView.kt +++ /dev/null @@ -1,72 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.view.isVisible -import androidx.lifecycle.Observer -import com.navi.base.utils.isNotNull -import com.navi.base.utils.orFalse -import com.navi.base.utils.orZero -import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.parseColorSafe -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.databinding.RadioButtonWithNoteCardViewBinding -import com.naviapp.models.RadioButtonWithNoteCardWidgetConfig -import com.naviapp.models.response.RadioButtonResponse -import com.naviapp.utils.dpToPx -import com.naviapp.utils.setMargin - -class RadioButtonWithNoteCardView(context: Context, attrs: AttributeSet? = null) : - ConstraintLayout(context, attrs) { - - private val binding = - RadioButtonWithNoteCardViewBinding.inflate(LayoutInflater.from(context), this, true) - private var widgetCallback: LoanDetailsV2WidgetAdapterListener? = null - private val observer: Observer = Observer { - if (it.checked.orFalse()) { - widgetCallback?.onCtaClick(it.cta) - } - binding.radioNoteView.isVisible = it.note.isNotNull() - binding.radioNoteView.setProperties(it.note) - } - - init { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setProperties( - widgetConfig: RadioButtonWithNoteCardWidgetConfig?, - widgetCallback: LoanDetailsV2WidgetAdapterListener? = null, - ) { - widgetConfig?.widgetLayoutParams?.margin?.let { setMargin(it) } - this.widgetCallback = widgetCallback - widgetConfig?.widgetBody?.let { widgetBody -> - binding.verificationCard = widgetBody - binding.root.background = - getNaviDrawable( - cornerRadius = dpToPx(widgetBody.cardProperties?.borderRadius.orZero()), - strokeWidth = dpToPx(widgetBody.cardProperties?.strokeWidth.orZero()), - strokeColor = widgetBody.cardProperties?.strokeColor.parseColorSafe() - ) - } - } - - override fun onAttachedToWindow() { - super.onAttachedToWindow() - binding.mandateOptionsRv.selectedLabelLiveData.observeForever(observer) - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - binding.mandateOptionsRv.selectedLabelLiveData.removeObserver(observer) - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/RadioSelectorItemView.kt b/android/app/src/main/java/com/naviapp/common/customview/RadioSelectorItemView.kt deleted file mode 100644 index 71b2eee0f8..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/RadioSelectorItemView.kt +++ /dev/null @@ -1,235 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview -/* - * - * * Copyright © 2022 by Navi Technologies Private Limited - * * All rights reserved. Strictly confidential - * - */ - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.widget.LinearLayout -import androidx.core.view.isVisible -import androidx.core.widget.TextViewCompat -import com.navi.base.utils.orTrue -import com.naviapp.R -import com.naviapp.common.model.RadioButtonParentConfigBody -import com.naviapp.databinding.RadioSelectorItemViewBinding -import com.naviapp.models.response.LoanDetailsV2AdditionData -import com.naviapp.models.response.PossibleTenure -import com.naviapp.utils.formatCurrency -import com.naviapp.utils.formatTenure -import com.naviapp.utils.getEmiValue - -class RadioSelectorItemView -@JvmOverloads -constructor(context: Context, attrs: AttributeSet? = null) : - LinearLayout(context, attrs), SliderWithTooltipView.TooltipChangeListener { - - var viewSelected = true - var selectedTenure: Int? = 0 - var emiAsPerTenure: Double? = 0.0 - - private var shouldSliderVisible: Boolean = false - private var additionalData: LoanDetailsV2AdditionData? = null - private var listener: TenureChangeListener? = null - - private val binding = - RadioSelectorItemViewBinding.inflate(LayoutInflater.from(context), this, true) - - init { - isClickable = true - isFocusable = true - orientation = VERTICAL - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setShouldShowSlider(shouldSliderVisible: Boolean) { - this.shouldSliderVisible = shouldSliderVisible - } - - fun getShouldShowSlider(): Boolean { - return shouldSliderVisible - } - - fun setData( - widgetData: RadioButtonParentConfigBody, - additionalData: LoanDetailsV2AdditionData? - ) { - binding.titleTv.text = widgetData.body?.tenureTitle - this.additionalData = additionalData - selectedTenure = widgetData.body?.tenureValue - val loanAmount = - additionalData?.emiCalculationLoanAmount?.amount ?: additionalData?.loanAmount?.amount - loanAmount?.let { amount -> - additionalData?.rateOfInterest?.let { rateOfInterest -> - widgetData.body?.tenureValue?.let { tenureValue -> - val emi = - additionalData.possibleTenure - ?.firstOrNull { it.tenure == tenureValue } - ?.emi - ?.toBigDecimal() ?: getEmiValue(amount, rateOfInterest, tenureValue) - emi?.let { - emiAsPerTenure = emi.toDouble() - binding.amountTv.visibility = VISIBLE - binding.amountTv.text = - emi.toDouble().formatCurrency(getRupeeSymbolRequiredFlag()) - } ?: kotlin.run { binding.amountTv.visibility = GONE } - } - } - } - } - - fun setSliderType(sliderType: SliderWithTooltipView.SliderType): RadioSelectorItemView { - binding.sliderTooltipView.setSliderType(sliderType) - return this - } - - fun setChecked() { - viewSelected = true - binding.radioBtn.isChecked = true - binding.sliderTooltipView.isVisible = shouldSliderVisible - TextViewCompat.setTextAppearance(binding.titleTv, R.style.BoldSmallTitleColorFour) - TextViewCompat.setTextAppearance(binding.amountTv, R.style.BoldMediumTitleColorFour) - if (shouldSliderVisible) { - binding.amountTv.isVisible = true - } - } - - fun setUnchecked() { - viewSelected = false - binding.radioBtn.isChecked = false - binding.sliderTooltipView.isVisible = false - TextViewCompat.setTextAppearance(binding.titleTv, R.style.RegularSmallDescriptionColorSeven) - TextViewCompat.setTextAppearance( - binding.amountTv, - R.style.RegularMediumDescriptionColorSeven - ) - if (shouldSliderVisible) { - binding.amountTv.isVisible = false - } - } - - fun setTenureChangeListener(listener: TenureChangeListener) { - this.listener = listener - } - - fun setRanges(minValue: Double = 0.0, maxValue: Double = 0.0): RadioSelectorItemView { - binding.sliderTooltipView.setRanges(minValue, maxValue) - return this - } - - fun setMinMaxTitleValues( - minvalue: Double, - maxValue: Double, - ): RadioSelectorItemView { - binding.sliderTooltipView.setMinMaxTitleValues( - minvalue.toInt().formatTenure(), - maxValue.toInt().formatTenure() - ) - return this - } - - fun setProgressInFraction(progressInFraction: Double): RadioSelectorItemView { - binding.sliderTooltipView.setProgressInFraction(progressInFraction) - return this - } - - fun setSelectedValue(selectedValue: Int, minValue: Int, maxValue: Int) { - val progress = - additionalData?.possibleTenure?.indexOfFirst { it.tenure == selectedValue } - ?: (selectedValue - minValue) - binding.sliderTooltipView.setSelectedTenureValue(progress) - } - - fun setInterval(interval: Int?): RadioSelectorItemView { - binding.sliderTooltipView.setInterval(interval) - return this - } - - fun setPossibleTenures(possibleTenures: List?): RadioSelectorItemView { - binding.sliderTooltipView.setPossibleTenures(possibleTenures) - return this - } - - fun build() { - binding.sliderTooltipView.apply { - setTooltipChangeListener(this@RadioSelectorItemView) - build() - } - } - - override fun onProgressChanged( - progress: Int, - tenureInMonth: Double, - fromUser: Boolean?, - emiAmount: String? - ) { - val loanAmount = - additionalData?.emiCalculationLoanAmount?.amount ?: additionalData?.loanAmount?.amount - loanAmount?.let { amount -> - additionalData?.rateOfInterest?.let { rateOfInterest -> - selectedTenure = tenureInMonth.toInt() - val emi = - emiAmount?.toBigDecimal() - ?: getEmiValue(amount, rateOfInterest, tenureInMonth.toInt()) - emi?.let { - emiAsPerTenure = emi.toDouble() - binding.amountTv.visibility = VISIBLE - binding.amountTv.text = - emi.toDouble().formatCurrency(getRupeeSymbolRequiredFlag()) - listener?.onTenureChanged(selectedTenure, emiAsPerTenure) - } ?: kotlin.run { binding.amountTv.visibility = GONE } - } - } - } - - override fun onProgressEnd( - progress: Int, - tenureInMonth: Double, - currentProgressPercentage: Double, - emiAmount: String? - ) { - val loanAmount = - additionalData?.emiCalculationLoanAmount?.amount ?: additionalData?.loanAmount?.amount - loanAmount?.let { amount -> - additionalData?.rateOfInterest?.let { rateOfInterest -> - selectedTenure = tenureInMonth.toInt() - val emi = - emiAmount?.toBigDecimal() - ?: getEmiValue(amount, rateOfInterest, tenureInMonth.toInt()) - emi?.let { - emiAsPerTenure = emi.toDouble() - binding.amountTv.visibility = VISIBLE - binding.amountTv.text = - emi.toDouble().formatCurrency(getRupeeSymbolRequiredFlag()) - listener?.onTenureSliderEnd( - selectedTenure, - emiAsPerTenure, - currentProgressPercentage - ) - } ?: kotlin.run { binding.amountTv.visibility = GONE } - } - } - } - - private fun getRupeeSymbolRequiredFlag() = additionalData?.isRupeeSymbolRequired.orTrue() - - interface TenureChangeListener { - fun onTenureChanged(tenureValue: Int?, monthlyEmi: Double?) - - fun onTenureSliderEnd( - tenureValue: Int?, - monthlyEmi: Double?, - currentProgressPercentage: Double - ) - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/SelectorTileItemView.kt b/android/app/src/main/java/com/naviapp/common/customview/SelectorTileItemView.kt deleted file mode 100644 index 5632a564b7..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/SelectorTileItemView.kt +++ /dev/null @@ -1,96 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.os.Build -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.content.res.ResourcesCompat -import androidx.core.view.isVisible -import com.navi.base.utils.orZero -import com.navi.common.utils.parseColor -import com.navi.design.utils.dpToPx -import com.navi.design.utils.dpToPxInInt -import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.parseColorSafe -import com.naviapp.R -import com.naviapp.common.model.SelectorTileParentConfigBody -import com.naviapp.databinding.SelectorTileItemViewBinding - -class SelectorTileItemView -@JvmOverloads -constructor(context: Context, attrs: AttributeSet? = null) : ConstraintLayout(context, attrs) { - - private var viewSelected: Boolean = true - private var shouldSliderVisible: Boolean = false - var selectedTenure: Int? = 0 - - private val binding = - SelectorTileItemViewBinding.inflate(LayoutInflater.from(context), this, true) - - init { - isClickable = true - isFocusable = true - layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT) - } - - fun setData(widgetData: SelectorTileParentConfigBody) { - val currentConfig = - if (viewSelected) widgetData.body?.selectedConfig else widgetData.body?.unselectedConfig - binding.currentConfigBinder = currentConfig - currentConfig?.borderColor?.let { - binding.rootLl.background = - getNaviDrawable( - cornerRadius = dpToPxInInt(currentConfig.cornerRadius ?: 8), - backgroundColor = ResourcesCompat.getColor(resources, R.color.white, null), - strokeWidth = dpToPxInInt(currentConfig.strokeWidth ?: 1), - strokeColor = it.parseColorSafe() - ) - } - currentConfig?.shadowColor?.let { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - binding.rootLl.outlineSpotShadowColor = it.parseColor() - binding.rootLl.outlineAmbientShadowColor = it.parseColor() - } - } - binding.rootLl.elevation = dpToPx(currentConfig?.elevation.orZero()) - widgetData.body?.tag?.let { - binding.tagView.isVisible = true - binding.tagView.setBgDrawable( - getNaviDrawable( - cornerRadius = dpToPxInInt(20), - backgroundColor = it.backgroundColor.parseColorSafe(), - ) - ) - binding.tagView.setSpannableString(it.copy(backgroundColor = null)) - binding.tagView.setPadding() - } ?: kotlin.run { binding.tagView.isVisible = false } - - selectedTenure = widgetData.body?.tenureValue - } - - fun selectTile(widgetData: SelectorTileParentConfigBody) { - viewSelected = true - setData(widgetData) - } - - fun unselectTile(widgetData: SelectorTileParentConfigBody) { - viewSelected = false - setData(widgetData) - } - - fun setShouldShowSlider(shouldSliderVisible: Boolean) { - this.shouldSliderVisible = shouldSliderVisible - } - - fun getShouldShowSlider(): Boolean { - return shouldSliderVisible - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/SelectorTileViewGroup.kt b/android/app/src/main/java/com/naviapp/common/customview/SelectorTileViewGroup.kt deleted file mode 100644 index 7ee6b5b0de..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/SelectorTileViewGroup.kt +++ /dev/null @@ -1,524 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.graphics.Color -import android.util.AttributeSet -import android.view.LayoutInflater -import android.widget.LinearLayout -import androidx.core.content.res.ResourcesCompat -import androidx.core.view.isVisible -import com.navi.base.model.CtaData -import com.navi.base.model.LineItem -import com.navi.base.utils.isNotNullAndNotEmpty -import com.navi.base.utils.orFalse -import com.navi.base.utils.orTrue -import com.navi.base.utils.orZero -import com.navi.design.utils.dpToPxInInt -import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.ifMeasured -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.common.model.SelectorTileParentConfigBody -import com.naviapp.common.model.SelectorTileWidgetListConfig -import com.naviapp.databinding.SelectorTileViewGroupBinding -import com.naviapp.models.response.LoanDetailsV2AdditionData -import com.naviapp.models.response.PossibleTenure -import com.naviapp.utils.Constants.CtaType -import com.naviapp.utils.Constants.EMPTY -import com.naviapp.utils.LoanDetailsV2WidgetType -import com.naviapp.utils.formatCurrency -import com.naviapp.utils.getEmiValue -import com.naviapp.utils.setMargin - -class SelectorTileViewGroup -@JvmOverloads -constructor(context: Context, attrs: AttributeSet? = null) : - LinearLayout(context, attrs), SliderWithTooltipView.TooltipChangeListener { - - private var selectedTileIndex = 0 - private var additionalData: LoanDetailsV2AdditionData? = null - private var listener: LoanDetailsV2WidgetAdapterListener? = null - private var prevSliderTenureValue: Long? = null - private val eventTracker = NaviAnalytics.naviAnalytics.NaviWidgetAnalytics() - private var emiAsPerTenure: Double? = 0.0 - var selectedTenure: Int? = 0 - - private var widgetData: SelectorTileWidgetListConfig? = null - - private val binding = - SelectorTileViewGroupBinding.inflate(LayoutInflater.from(context), this, true) - - init { - orientation = VERTICAL - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setProperties( - widgetConfig: SelectorTileWidgetListConfig?, - additionalData: LoanDetailsV2AdditionData? = null, - listener: LoanDetailsV2WidgetAdapterListener? - ) { - binding.selectorContainer.removeAllViews() - widgetData = widgetConfig - widgetConfig?.widgetLayoutParams?.let { setMargin(it.margin) } - - this.additionalData = additionalData - this.listener = listener - widgetConfig?.widgetBody?.forEachIndexed { index, widgetData -> - val itemView = getItemView(widgetData, index, listener) - setSelectorTileItemViewWidth( - itemView, - widgetConfig.widgetBody.size, - additionalData?.widthComputation - ) - widgetData.body?.tooltipColor?.let { - binding.sliderTooltipView.setTooltipColor(Color.parseColor(it)) - } - binding.selectorContainer.addView(itemView, binding.selectorContainer.childCount) - widgetData.body?.sliderConfig?.let { sliderConfig -> - if ( - itemView.getShouldShowSlider() && - sliderConfig.minTenureValue != null && - sliderConfig.maxTenureValue != null - ) { - binding.sliderTooltipView.background = - getNaviDrawable( - cornerRadius = dpToPxInInt(4), - backgroundColor = - ResourcesCompat.getColor(resources, R.color.white, null), - strokeWidth = dpToPxInInt(1), - strokeColor = - ResourcesCompat.getColor( - resources, - R.color.view_background_color_seventeen, - null - ) - ) - - setRanges( - sliderConfig.minTenureValue.toDouble(), - sliderConfig.maxTenureValue.toDouble() - ) - .setMinMaxTitle(sliderConfig.minTenureTitle, sliderConfig.maxTenureTitle) - .setMinMaxTitleValues( - sliderConfig.minTenureValue, - sliderConfig.maxTenureValue - ) - .setProgressInFraction(additionalData?.loanTenureProgressPercentage ?: 1.0) - .setSliderType(SliderWithTooltipView.SliderType.EMI_TENURE_SLIDER) - .setInterval(1) - .setPossibleTenure(additionalData?.possibleTenure) - .build() - - sliderConfig.selectedTenureValue?.let { - itemView.ifMeasured { setSelectedValue(it, sliderConfig.minTenureValue) } - } - } - } - } - } - - private fun getItemView( - widgetData: SelectorTileParentConfigBody, - index: Int, - listener: LoanDetailsV2WidgetAdapterListener? - ): SelectorTileItemView = - SelectorTileItemView(context).apply { - setShouldShowSlider( - widgetData.type == LoanDetailsV2WidgetType.SELECTOR_TILE_WITH_SLIDER.value - ) - binding.sliderTooltipViewWithTriangle.isVisible = - widgetData.body?.defaultSelected.orFalse() && getShouldShowSlider() - widgetData.body?.progressColor?.let { - binding.sliderTooltipView.setSeekbarProgressAndThumbColor(Color.parseColor(it)) - } - widgetData.body?.displayVerticalBars?.let { - binding.sliderTooltipView.shouldShowDividerBars(it) - } - setData(widgetData) - - if (widgetData.body?.defaultSelected?.orFalse() == true) { - selectedTileIndex = index - selectTile(widgetData) - setEmiAsPerTenureValue(widgetData, additionalData) - onTenureSelected(listener, selectedTenure, emiAsPerTenure, getShouldShowSlider()) - val tenureAndEmi = - getTenureAndEmiForTenure(selectedTenure, emiAsPerTenure, getShouldShowSlider()) - onTenureClicked( - listener, - tenureAndEmi.first, - tenureAndEmi.second, - getShouldShowSlider(), - CtaType.TENURE_DEFAULT_SELECTED.value - ) - } else { - unselectTile(widgetData) - } - - setOnClickListener { - binding.sliderTooltipViewWithTriangle.isVisible = getShouldShowSlider() - selectedTileIndex = index - markSelected(index) - onTenureSelected(listener, selectedTenure, emiAsPerTenure, getShouldShowSlider()) - val tenureAndEmi = - getTenureAndEmiForTenure(selectedTenure, emiAsPerTenure, getShouldShowSlider()) - val eventName = getEventNameFromIndex(selectedTileIndex) - eventName?.let { eventTracker.onEventClick(eventName) } - if (getShouldShowSlider()) { - eventTracker.onEventClick(NaviAnalytics.PL_EMI_Custom_Pill_Click) - } - onTenureClicked( - listener, - tenureAndEmi.first, - tenureAndEmi.second, - getShouldShowSlider(), - CtaType.TENURE_CLICKED_TYPE.value - ) - } - - if (getShouldShowSlider()) { - prevSliderTenureValue = widgetData.body?.sliderConfig?.selectedTenureValue?.toLong() - } - - if (index != 0) (layoutParams as MarginLayoutParams).marginStart = dpToPxInInt(20) - } - - private fun setEmiAsPerTenureValue( - widgetData: SelectorTileParentConfigBody, - additionalData: LoanDetailsV2AdditionData? - ) { - additionalData?.loanAmount?.amount?.let { amount -> - additionalData.rateOfInterest?.let { rateOfInterest -> - widgetData.body?.tenureValue?.let { tenureValue -> - val emi = getEmiValue(amount, rateOfInterest, tenureValue) - emiAsPerTenure = emi?.toDouble() - } - } - } - } - - private fun getEventNameFromIndex(selectedTileIndex: Int): String? { - - return when (selectedTileIndex) { - 0 -> NaviAnalytics.PL_EMI_First_Pill_Click - 1 -> NaviAnalytics.PL_EMI_Second_Pill_Click - else -> null - } - } - - private fun setSelectorTileItemViewWidth( - selectorTileItemView: SelectorTileItemView, - widgetCount: Int, - widthComputation: String? - ) { - widthComputation?.let { - val layoutParams = selectorTileItemView.layoutParams - layoutParams.width = it.toInt() - selectorTileItemView.layoutParams = layoutParams - } - ?: kotlin.run { - binding.selectorContainer.ifMeasured { - val itemDimension = - (binding.selectorContainer.width - dpToPxInInt(20) * (widgetCount - 1)) / - widgetCount - val layoutParams = selectorTileItemView.layoutParams as LayoutParams - layoutParams.width = itemDimension - selectorTileItemView.layoutParams = layoutParams - val parameters = arrayListOf() - parameters.add(LineItem(WIDTH_DIMENSION, itemDimension.toString())) - listener?.onCtaClick( - CtaData(type = WIDGET_WIDTH_COMPUTATION, parameters = parameters) - ) - } - } - } - - private fun getTenureAndEmiForTenure( - selectedTenure: Int?, - emiAsPerTenure: Double?, - shouldShowSlider: Boolean - ): Pair { - var tenureValue = selectedTenure - var emiForTenureValue = emiAsPerTenure - if (shouldShowSlider) { - tenureValue = additionalData?.tenureInMonths - val loanAmount = - additionalData?.emiCalculationLoanAmount?.amount - ?: additionalData?.loanAmount?.amount - loanAmount?.let { amount -> - additionalData?.rateOfInterest?.let { rateOfInterest -> - tenureValue?.let { tenureValue -> - emiForTenureValue = - getEmiValue(amount, rateOfInterest, tenureValue)?.toDouble() - } - } - } - } - return Pair(tenureValue, emiForTenureValue) - } - - private fun onTenureChanged(tenureValue: Int?, monthlyEmi: Double?) { - onSliderChange(listener, tenureValue, monthlyEmi) - } - - private fun onTenureSliderEnd(tenureValue: Int?, monthlyEmi: Double?) { - onSliderEnd(listener, tenureValue, monthlyEmi) - } - - private fun markSelected(index: Int) { - (0 until binding.selectorContainer.childCount).forEach { ind -> - val childView = binding.selectorContainer.getChildAt(ind) as? SelectorTileItemView - if (index == ind) { - widgetData?.widgetBody?.getOrNull(ind)?.let { childView?.selectTile(it) } - } else { - widgetData?.widgetBody?.getOrNull(ind)?.let { childView?.unselectTile(it) } - } - } - } - - private fun onSliderChange( - listener: LoanDetailsV2WidgetAdapterListener?, - tenureValue: Int?, - monthlyEmi: Double?, - ) { - listener?.onCtaClick( - CtaData( - type = CtaType.SLIDER_SELECTED_TYPE.value, - parameters = - listOf( - LineItem( - CtaType.TENURE_SELECTED_VALUE.value, - tenureValue.orZero().toString() - ), - LineItem(CtaType.MONTHLY_EMI_VALUE.value, monthlyEmi.orZero().toString()), - LineItem(CtaType.TENURE_SLIDER_CHANGE.value, EMPTY) - ) - ) - ) - } - - private fun onSliderEnd( - listener: LoanDetailsV2WidgetAdapterListener?, - tenureValue: Int?, - monthlyEmi: Double? - ) { - eventTracker.onWidgetListWithRadioButtonSliderChanged( - prevSliderTenureValue.toString(), - tenureValue.toString() - ) - listener?.onCtaClick( - CtaData( - type = CtaType.SLIDER_END_TYPE.value, - parameters = - listOf( - LineItem( - CtaType.TENURE_SELECTED_VALUE.value, - tenureValue.orZero().toString() - ), - LineItem(CtaType.MONTHLY_EMI_VALUE.value, monthlyEmi.orZero().toString()), - LineItem(CtaType.TENURE_SLIDER_CHANGE.value, EMPTY) - ) - ) - ) - } - - private fun onTenureSelected( - listener: LoanDetailsV2WidgetAdapterListener?, - tenureValue: Int?, - monthlyEmi: Double?, - isCustomizeYourTenure: Boolean = false - ) { - listener?.onCtaClick( - CtaData( - type = CtaType.TENURE_SELECTED_TYPE.value, - parameters = - listOf( - LineItem( - CtaType.TENURE_SELECTED_VALUE.value, - tenureValue.orZero().toString() - ), - LineItem(CtaType.MONTHLY_EMI_VALUE.value, monthlyEmi.orZero().toString()), - LineItem(CtaType.CUSTOMISE_TENURE.value, isCustomizeYourTenure.toString()) - ) - ), - ) - } - - private fun onTenureClicked( - listener: LoanDetailsV2WidgetAdapterListener?, - tenureValue: Int?, - monthlyEmi: Double?, - isCustomizeYourTenure: Boolean = false, - type: String - ) { - listener?.onCtaClick( - CtaData( - type = type, - parameters = - listOf( - LineItem( - CtaType.TENURE_SELECTED_VALUE.value, - tenureValue.orZero().toString() - ), - LineItem(CtaType.MONTHLY_EMI_VALUE.value, monthlyEmi.orZero().toString()), - LineItem(CtaType.CUSTOMISE_TENURE.value, isCustomizeYourTenure.toString()) - ) - ), - ) - } - - private fun setRanges(minValue: Double = 0.0, maxValue: Double = 0.0): SelectorTileViewGroup { - binding.sliderTooltipView.setRanges(minValue, maxValue) - return this - } - - private fun setMinMaxTitleValues( - minValue: Int, - maxValue: Int, - ): SelectorTileViewGroup { - binding.sliderTooltipView.setMinMaxTitleValues(minValue.toString(), maxValue.toString()) - return this - } - - private fun setMinMaxTitle( - minTitle: String?, - maxTitle: String?, - ): SelectorTileViewGroup { - if (minTitle != null && maxTitle != null) - binding.sliderTooltipView.setMinMaxTitle(minTitle, maxTitle) - return this - } - - private fun setProgressInFraction(progressInFraction: Double): SelectorTileViewGroup { - binding.sliderTooltipView.setProgressInFraction(progressInFraction) - return this - } - - fun setSliderType(sliderType: SliderWithTooltipView.SliderType): SelectorTileViewGroup { - binding.sliderTooltipView.setSliderType(sliderType) - return this - } - - fun setInterval(interval: Int?): SelectorTileViewGroup { - binding.sliderTooltipView.setInterval(interval) - return this - } - - fun setPossibleTenure(possibleTenures: List?): SelectorTileViewGroup { - binding.sliderTooltipView.setPossibleTenures(possibleTenures) - return this - } - - fun build() { - binding.sliderTooltipView.apply { - setTooltipChangeListener(this@SelectorTileViewGroup) - build() - } - } - - private fun setSelectedValue(selectedValue: Int, minValue: Int) { - val progress = - additionalData?.possibleTenure?.indexOfFirst { it.tenure == selectedValue } - ?: (selectedValue - minValue) - binding.sliderTooltipView.setSelectedTenureValue(progress) - } - - override fun onProgressChanged( - progress: Int, - value: Double, - fromUser: Boolean?, - emiAmount: String? - ) { - val loanAmount = - additionalData?.emiCalculationLoanAmount?.amount ?: additionalData?.loanAmount?.amount - loanAmount?.let { amount -> - additionalData?.rateOfInterest?.let { rateOfInterest -> - selectedTenure = value.toInt() - val emi = - emiAmount?.toBigDecimal() ?: getEmiValue(amount, rateOfInterest, value.toInt()) - emiAsPerTenure = emi?.toDouble() - if ( - selectedTenure == additionalData?.tenureInMonths.orZero() && - additionalData?.defaultEmiAmount.isNotNullAndNotEmpty() - ) { - binding.sliderTooltipView.setSelectedValueText( - additionalData - ?.defaultEmiAmount - ?.toDouble() - ?.formatCurrency( - getRupeeSymbolRequiredFlag(), - additionalData?.emiAmtCommaSeparated.orTrue() - ) - ) - emiAsPerTenure = additionalData?.defaultEmiAmount?.toDouble() - } else { - binding.sliderTooltipView.setSelectedValueText( - emi?.toDouble() - ?.formatCurrency( - getRupeeSymbolRequiredFlag(), - additionalData?.emiAmtCommaSeparated.orTrue() - ) - ) - } - onTenureChanged(selectedTenure, emiAsPerTenure) - } - } - } - - override fun onProgressEnd( - progress: Int, - value: Double, - currentProgressPercentage: Double, - emiAmount: String? - ) { - val loanAmount = - additionalData?.emiCalculationLoanAmount?.amount ?: additionalData?.loanAmount?.amount - loanAmount?.let { amount -> - additionalData?.rateOfInterest?.let { rateOfInterest -> - selectedTenure = value.toInt() - val emi = - emiAmount?.toBigDecimal() ?: getEmiValue(amount, rateOfInterest, value.toInt()) - emiAsPerTenure = emi?.toDouble() - if ( - selectedTenure == additionalData?.tenureInMonths.orZero() && - additionalData?.defaultEmiAmount.isNotNullAndNotEmpty() - ) { - binding.sliderTooltipView.setSelectedValueText( - additionalData - ?.defaultEmiAmount - ?.toDouble() - ?.formatCurrency( - getRupeeSymbolRequiredFlag(), - additionalData?.emiAmtCommaSeparated.orTrue() - ) - ) - emiAsPerTenure = additionalData?.defaultEmiAmount?.toDouble() - } else { - binding.sliderTooltipView.setSelectedValueText( - emi?.toDouble() - ?.formatCurrency( - getRupeeSymbolRequiredFlag(), - additionalData?.emiAmtCommaSeparated.orTrue() - ) - ) - } - onTenureSliderEnd(selectedTenure, emiAsPerTenure) - } - } - } - - private fun getRupeeSymbolRequiredFlag() = additionalData?.isRupeeSymbolRequired.orTrue() - - companion object { - const val WIDGET_WIDTH_COMPUTATION = "WIDGET_WIDTH_COMPUTATION" - const val WIDTH_DIMENSION = "WIDTH_DIMENSION" - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/SelectorViewGroup.kt b/android/app/src/main/java/com/naviapp/common/customview/SelectorViewGroup.kt deleted file mode 100644 index 2789293f3b..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/SelectorViewGroup.kt +++ /dev/null @@ -1,335 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview -/* - * - * * Copyright © 2022 by Navi Technologies Private Limited - * * All rights reserved. Strictly confidential - * - */ - -import android.animation.LayoutTransition -import android.content.Context -import android.os.Build -import android.util.AttributeSet -import android.widget.LinearLayout -import androidx.core.content.ContextCompat -import androidx.core.content.res.ResourcesCompat -import com.navi.base.model.CtaData -import com.navi.base.model.LineItem -import com.navi.base.utils.orFalse -import com.navi.base.utils.orZero -import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.ifMeasured -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.common.model.RadioButtonParentConfigBody -import com.naviapp.common.model.RadioButtonWidgetListConfig -import com.naviapp.models.response.LoanDetailsV2AdditionData -import com.naviapp.models.response.PossibleTenure -import com.naviapp.utils.Constants.CtaType -import com.naviapp.utils.EMPTY -import com.naviapp.utils.LoanDetailsV2WidgetType -import com.naviapp.utils.getEmiValue -import com.naviapp.utils.setMargin - -class SelectorViewGroup @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : - LinearLayout(context, attrs), RadioSelectorItemView.TenureChangeListener { - - private var selectedRadioIndex = 0 - private var additionalData: LoanDetailsV2AdditionData? = null - private var listener: LoanDetailsV2WidgetAdapterListener? = null - private var prevSliderTenureValue: Long? = null - private val eventTracker = NaviAnalytics.naviAnalytics.NaviWidgetAnalytics() - - init { - orientation = VERTICAL - layoutTransition = LayoutTransition() - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - elevation = resources.getDimension(R.dimen.layout_dp_6) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - outlineSpotShadowColor = ContextCompat.getColor(context, R.color.shadow_color) - } - background = - getNaviDrawable( - backgroundColor = ResourcesCompat.getColor(resources, R.color.white, null), - cornerRadius = resources.getDimension(R.dimen.layout_dp_8).toInt(), - strokeWidth = resources.getDimension(R.dimen.layout_dp_1).toInt(), - strokeColor = ResourcesCompat.getColor(resources, R.color.divider_gray, null) - ) - } - - fun setProperties( - widgetConfig: RadioButtonWidgetListConfig?, - additionalData: LoanDetailsV2AdditionData? = null, - listener: LoanDetailsV2WidgetAdapterListener? - ) { - removeAllViews() - widgetConfig?.widgetLayoutParams?.let { setMargin(it.margin) } - this.additionalData = additionalData - this.listener = listener - - widgetConfig?.widgetBody?.forEachIndexed { index, widgetData -> - val itemView = getItemView(widgetData, index, listener) - addView(itemView, childCount) - - if ( - itemView.getShouldShowSlider() && - additionalData?.minTenureInMonths != null && - additionalData.maxTenureInMonths != null - ) { - itemView - .setRanges( - additionalData.minTenureInMonths.toDouble(), - additionalData.maxTenureInMonths.toDouble() - ) - .setMinMaxTitleValues( - additionalData.minTenureInMonths.toDouble(), - additionalData.maxTenureInMonths.toDouble(), - ) - .setProgressInFraction(additionalData.loanTenureProgressPercentage ?: 1.0) - .setSliderType(SliderWithTooltipView.SliderType.EMI_TENURE_SLIDER) - .setInterval(1) - .setPossibleTenures(additionalData.possibleTenure) - .build() - - widgetData.body?.selectedTenureValue?.let { - itemView.setChecked() - itemView.ifMeasured { - itemView.setSelectedValue( - widgetData.body.selectedTenureValue, - additionalData.minTenureInMonths, - additionalData.maxTenureInMonths - ) - } - } - } - } - } - - private fun getItemView( - widgetData: RadioButtonParentConfigBody, - index: Int, - listener: LoanDetailsV2WidgetAdapterListener? - ): RadioSelectorItemView { - val itemView = - RadioSelectorItemView(context).apply { - setTenureChangeListener(this@SelectorViewGroup) - setShouldShowSlider( - (widgetData.type == - LoanDetailsV2WidgetType.SELECTOR_WITH_SLIDER_RADIO_BUTTON.value) - ) - setData(widgetData, additionalData) - - if (widgetData.body?.defaultSelected?.orFalse() == true) { - selectedRadioIndex = index - setChecked() - onTenureSelected( - listener, - selectedTenure, - emiAsPerTenure, - getShouldShowSlider(), - ) - - val tenureAndEmi = - getTenureAndEmiForTenure( - selectedTenure, - emiAsPerTenure, - getShouldShowSlider(), - additionalData?.possibleTenure - ) - - onTenureClicked( - listener, - tenureAndEmi.first, - tenureAndEmi.second, - getShouldShowSlider(), - CtaType.TENURE_DEFAULT_SELECTED.value - ) - } else { - setUnchecked() - } - - setOnClickListener { - selectedRadioIndex = index - markChecked(index) - onTenureSelected( - listener, - selectedTenure, - emiAsPerTenure, - getShouldShowSlider() - ) - val tenureAndEmi = - getTenureAndEmiForTenure( - selectedTenure, - emiAsPerTenure, - getShouldShowSlider(), - additionalData?.possibleTenure - ) - onTenureClicked( - listener, - tenureAndEmi.first, - tenureAndEmi.second, - getShouldShowSlider(), - CtaType.TENURE_CLICKED_TYPE.value - ) - } - - if (getShouldShowSlider()) { - prevSliderTenureValue = widgetData.body?.selectedTenureValue?.toLong() - } - } - return itemView - } - - private fun getTenureAndEmiForTenure( - selectedTenure: Int?, - emiAsPerTenure: Double?, - shouldShowSlider: Boolean, - possibleTenure: List? - ): Pair { - var tenureValue = selectedTenure - var emiForTenureValue = emiAsPerTenure - possibleTenure?.firstOrNull { it.tenure == tenureValue }?.let { emiForTenureValue = it.emi } - ?: run { - if (shouldShowSlider) { - tenureValue = additionalData?.tenureInMonths - val loanAmount = - additionalData?.emiCalculationLoanAmount?.amount - ?: additionalData?.loanAmount?.amount - loanAmount?.let { amount -> - additionalData?.rateOfInterest?.let { rateOfInterest -> - tenureValue?.let { tenureValue -> - emiForTenureValue = - getEmiValue(amount, rateOfInterest, tenureValue.toInt()) - ?.toDouble() - } - } - } - } - } - return Pair(tenureValue, emiForTenureValue) - } - - override fun onTenureChanged(tenureValue: Int?, monthlyEmi: Double?) { - onSliderChange(listener, tenureValue, monthlyEmi) - } - - override fun onTenureSliderEnd( - tenureValue: Int?, - monthlyEmi: Double?, - currentProgressPercentage: Double - ) { - onSliderEnd(listener, tenureValue, monthlyEmi, currentProgressPercentage) - } - - private fun markChecked(index: Int) { - (0 until childCount).forEach { - val childView = getChildAt(it) as? RadioSelectorItemView - if (index == it) { - childView?.setChecked() - } else { - childView?.setUnchecked() - } - } - } - - private fun onSliderChange( - listener: LoanDetailsV2WidgetAdapterListener?, - tenureValue: Int?, - monthlyEmi: Double?, - ) { - listener?.onCtaClick( - CtaData( - type = CtaType.SLIDER_SELECTED_TYPE.value, - parameters = - listOf( - LineItem( - CtaType.TENURE_SELECTED_VALUE.value, - tenureValue.orZero().toString() - ), - LineItem(CtaType.MONTHLY_EMI_VALUE.value, monthlyEmi.orZero().toString()), - LineItem(CtaType.TENURE_SLIDER_CHANGE.value, EMPTY) - ) - ) - ) - } - - private fun onSliderEnd( - listener: LoanDetailsV2WidgetAdapterListener?, - tenureValue: Int?, - monthlyEmi: Double?, - currentProgressPercentage: Double - ) { - val progress = currentProgressPercentage - eventTracker.onWidgetListWithRadioButtonSliderChanged( - prevSliderTenureValue.toString(), - tenureValue.toString() - ) - listener?.onCtaClick( - CtaData( - type = CtaType.SLIDER_END_TYPE.value, - parameters = - listOf( - LineItem( - CtaType.TENURE_SELECTED_VALUE.value, - tenureValue.orZero().toString() - ), - LineItem(CtaType.MONTHLY_EMI_VALUE.value, monthlyEmi.orZero().toString()), - LineItem(CtaType.TENURE_SLIDER_CHANGE.value, EMPTY) - ) - ) - ) - } - - private fun onTenureSelected( - listener: LoanDetailsV2WidgetAdapterListener?, - tenureValue: Int?, - monthlyEmi: Double?, - isCustomizeYourTenure: Boolean = false - ) { - listener?.onCtaClick( - CtaData( - type = CtaType.TENURE_SELECTED_TYPE.value, - parameters = - listOf( - LineItem( - CtaType.TENURE_SELECTED_VALUE.value, - tenureValue.orZero().toString() - ), - LineItem(CtaType.MONTHLY_EMI_VALUE.value, monthlyEmi.orZero().toString()), - LineItem(CtaType.CUSTOMISE_TENURE.value, isCustomizeYourTenure.toString()) - ) - ), - ) - } - - private fun onTenureClicked( - listener: LoanDetailsV2WidgetAdapterListener?, - tenureValue: Int?, - monthlyEmi: Double?, - isCustomizeYourTenure: Boolean = false, - type: String - ) { - listener?.onCtaClick( - CtaData( - type = type, - parameters = - listOf( - LineItem( - CtaType.TENURE_SELECTED_VALUE.value, - tenureValue.orZero().toString() - ), - LineItem(CtaType.MONTHLY_EMI_VALUE.value, monthlyEmi.orZero().toString()), - LineItem(CtaType.CUSTOMISE_TENURE.value, isCustomizeYourTenure.toString()) - ) - ), - ) - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/SingleImageWidgetView.kt b/android/app/src/main/java/com/naviapp/common/customview/SingleImageWidgetView.kt deleted file mode 100644 index d5627107dd..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/SingleImageWidgetView.kt +++ /dev/null @@ -1,166 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.annotation.SuppressLint -import android.content.Context -import android.graphics.drawable.Drawable -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.cardview.widget.CardView -import androidx.core.view.isVisible -import com.airbnb.lottie.LottieAnimationView -import com.airbnb.lottie.LottieCompositionFactory -import com.bumptech.glide.Glide -import com.bumptech.glide.load.DataSource -import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.bumptech.glide.load.engine.GlideException -import com.bumptech.glide.request.RequestListener -import com.bumptech.glide.request.target.Target -import com.navi.base.utils.orZero -import com.navi.common.utils.getScreenWidth -import com.navi.design.R as DesignR -import com.navi.design.utils.dpToPxInInt -import com.navi.insurance.R as InsuranceR -import com.navi.naviwidgets.R -import com.navi.naviwidgets.utils.setBackgroundColor -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.common.model.SingleImageWidgetConfig -import com.naviapp.databinding.SingleImageWidgetViewLayoutBinding -import com.naviapp.models.response.LoanDetailsV2AdditionData -import com.naviapp.utils.setCornerRadius -import com.naviapp.utils.setMargin -import kotlin.math.roundToInt - -class SingleImageWidgetView(context: Context, attrs: AttributeSet? = null) : - CardView(context, attrs) { - - private val binding = - SingleImageWidgetViewLayoutBinding.inflate(LayoutInflater.from(context), this, true) - - private val ALPHA_INVISIBLE = 0.0F - private val ALPHA_VISIBLE = 1.0F - private val defaultAspectRatio = 1.5f - - init { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - elevation = resources.getDimension(InsuranceR.dimen.dp_0) - } - - fun setProperties( - widgetConfig: SingleImageWidgetConfig?, - additionData: LoanDetailsV2AdditionData? = null, - widgetCallback: LoanDetailsV2WidgetAdapterListener?, - ) { - widgetConfig?.let { - it.widgetLayoutParams?.margin?.let { this.setMargin(it) } - widgetConfig.let { - val horizontalMargins = - it.widgetLayoutParams?.margin?.let { it.startDp + it.endDp }.orZero() - - widgetConfig.widgetBody?.let { - binding.imageView.layoutParams.width = - (getScreenWidth() - horizontalMargins).roundToInt() - - binding.imageView.layoutParams.height = - ((getScreenWidth() - horizontalMargins).toDouble() / - (it.aspectRatio ?: defaultAspectRatio).toDouble()) - .roundToInt() - - setCornerRadius( - dpToPxInInt( - it.cornerRadius ?: resources.getDimension(DesignR.dimen.dp_12).toInt() - ) - ) - - if (TYPE_LOTTIE == it.type) { - setLottieData(animationCode = it.imageUrl, lottieView = binding.lottie) - binding.placeholderImage.alpha = ALPHA_INVISIBLE - binding.imageView.alpha = ALPHA_INVISIBLE - binding.lottie.isVisible = true - binding.lottie.setOnClickListener { view -> - it.cta?.let { ctaData -> widgetCallback?.onCtaClick(ctaData) } - } - } else { - loadImageFromUrl(binding, it.imageUrl) - binding.imageView.setOnClickListener { view -> - it.cta?.let { ctaData -> widgetCallback?.onCtaClick(ctaData) } - } - } - } - } - } - additionData?.pageBgColor?.let { binding.rootLayout.setBackgroundColor(it) } - } - - private fun setLottieData(animationCode: String?, lottieView: LottieAnimationView) { - if (animationCode.isNullOrEmpty()) return - context?.let { context -> - val rawFileResourceId: Int = - context.resources.getIdentifier( - "common_${animationCode}", - "raw", - context.packageName - ) - if (rawFileResourceId != -1) { - lottieView.removeAllAnimatorListeners() - LottieCompositionFactory.fromRawRes(context, rawFileResourceId).addListener { - lottieView.setComposition(it) - lottieView.playAnimation() - } - } - } - } - - @SuppressLint("UseCompatLoadingForDrawables") - private fun loadImageFromUrl( - viewBinding: SingleImageWidgetViewLayoutBinding, - imageUrl: String? - ) { - // Display placeholder image - viewBinding.imageView.alpha = ALPHA_INVISIBLE - viewBinding.placeholderImage.alpha = ALPHA_VISIBLE - Glide.with(context) - .load(imageUrl) - .placeholder( - context.applicationContext.getDrawable(R.drawable.widget_image_placeholder) - ) - .diskCacheStrategy(DiskCacheStrategy.DATA) - .listener( - object : RequestListener { - override fun onLoadFailed( - e: GlideException?, - model: Any?, - target: Target?, - isFirstResource: Boolean - ): Boolean { - return false - } - - override fun onResourceReady( - resource: Drawable?, - model: Any?, - target: Target?, - dataSource: DataSource?, - isFirstResource: Boolean - ): Boolean { - // Display image - viewBinding.imageView.alpha = ALPHA_VISIBLE - viewBinding.placeholderImage.alpha = ALPHA_INVISIBLE - viewBinding.imageView.setImageDrawable(resource) - return false - } - } - ) - .into(viewBinding.imageView) - } - - companion object { - const val TYPE_LOTTIE = "TYPE_LOTTIE" - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/StyledDaysCalendarView.kt b/android/app/src/main/java/com/naviapp/common/customview/StyledDaysCalendarView.kt deleted file mode 100644 index fca3843791..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/StyledDaysCalendarView.kt +++ /dev/null @@ -1,223 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import androidx.constraintlayout.widget.ConstraintLayout -import com.google.gson.Gson -import com.navi.base.model.CtaData -import com.navi.base.model.LineItem -import com.navi.naviwidgets.extensions.setTextFieldData -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.adapter.NaviCalendarDayViewAdapter -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.common.listeners.NaviCalendarDayClickListener -import com.naviapp.common.model.DayContent -import com.naviapp.common.model.DayStatus -import com.naviapp.common.model.StyledDaysCalendarFooterCardConfig -import com.naviapp.common.model.StyledDaysCalendarWidgetBody -import com.naviapp.common.model.StyledDaysCalendarWidgetConfig -import com.naviapp.databinding.StyledDaysCalendarViewBinding -import com.naviapp.models.response.WidgetConfigLayoutParams -import com.naviapp.utils.Constants -import com.naviapp.utils.IconUtils -import com.naviapp.utils.setCardPropertiesFromWidgetLayoutParams -import com.naviapp.utils.setMargin - -class StyledDaysCalendarView(context: Context, attrs: AttributeSet? = null) : - ConstraintLayout(context, attrs) { - - private var widgetConfig: StyledDaysCalendarWidgetConfig? = null - private val binding = - StyledDaysCalendarViewBinding.inflate(LayoutInflater.from(context), this, true) - private val eventTracker by lazy { NaviAnalytics.naviAnalytics.GetLoan() } - - init { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setProperties( - widgetConfig: StyledDaysCalendarWidgetConfig?, - widgetCallback: LoanDetailsV2WidgetAdapterListener? = null, - ) { - this.widgetConfig = widgetConfig - setMargin(widgetConfig?.widgetLayoutParams?.margin) - setCardPropertiesFromWidgetLayoutParams(binding.rootItem, widgetConfig?.widgetLayoutParams) - widgetConfig?.widgetBody?.let { widgetBody -> - binding.binder = widgetBody - binding.calendarFooterView.rootItem.setMargin( - widgetBody.footerCardConfig?.widgetLayoutParams?.margin - ) - initCalendarDaysAdapter(widgetBody, widgetCallback) - setCardPropertiesFromWidgetLayoutParams( - binding.calendarFooterView.rootItem, - widgetBody.footerCardConfig?.widgetLayoutParams - ) - val selectedDayConfig = getSelectedDayConfig(widgetBody.days) - setSelectedDayConfig(selectedDayConfig, widgetBody, widgetCallback, Constants.DEFAULT) - } - } - - private fun initCalendarDaysAdapter( - widgetBody: StyledDaysCalendarWidgetBody, - widgetCallback: LoanDetailsV2WidgetAdapterListener? - ) { - widgetBody.days?.let { days -> - binding.calendarDaysRv.adapter = - NaviCalendarDayViewAdapter( - days, - object : NaviCalendarDayClickListener { - override fun onDayClick(selectedDate: DayContent, position: Int) { - eventTracker.onEmiDateSelected(selectedDate.date) - setSelectedDayConfig( - selectedDate, - widgetBody, - widgetCallback, - Constants.USER_SELECTED - ) - updateSelectedDayInAdapter(position, widgetBody) - } - } - ) - } - } - - private fun getSelectedDayCtaTypeConfig( - selectedDate: DayContent, - widgetBody: StyledDaysCalendarWidgetBody, - flowType: String? - ): CtaData? { - widgetBody.selectedHeaderConfig?.let { - val selectedHeaderValue = Gson().toJson(widgetBody.selectedHeaderConfig) - val params = - arrayListOf().apply { - add(LineItem(key = KEY_SELECTED_DATE, value = selectedDate.date)) - add(LineItem(key = KEY_SELECTED_DATE_HEADER, value = selectedHeaderValue)) - add(LineItem(key = Constants.FLOW_TYPE, value = flowType)) - } - - return CtaData(type = EMI_DATE_SELECTION, parameters = params) - } - return null - } - - private fun getNoDaySelectedCtaTypeConfig(): CtaData { - return CtaData(type = EMI_DATE_SELECTION) - } - - private fun updateSelectedDayInAdapter( - position: Int, - widgetBody: StyledDaysCalendarWidgetBody - ) { - val days = widgetBody.days - days?.let { - if (position >= 0 && position < days.size) { - days.forEachIndexed { index, dayContent -> - if (index == position) { - dayContent.status = DayStatus.SELECTED - } else if ( - dayContent.status != null && dayContent.status == DayStatus.SELECTED - ) { - dayContent.status = DayStatus.DEFAULT - } - } - (binding.calendarDaysRv.adapter as NaviCalendarDayViewAdapter).updateList(days) - } - } - } - - private fun setSelectedDayConfig( - selectedDayConfig: DayContent?, - widgetBody: StyledDaysCalendarWidgetBody, - widgetCallback: LoanDetailsV2WidgetAdapterListener? = null, - flowType: String? = null - ) { - selectedDayConfig?.let { - binding.errorIv.visibility = View.GONE - binding.errorTv.visibility = View.GONE - setCardPropertiesFromWidgetLayoutParams( - binding.rootItem, - widgetConfig?.widgetLayoutParams - ) - binding.calendarFooterView.binder = - getFooterConfigWithSelectedValue(it, widgetBody.footerCardConfig) - binding.calendarFooterLl.visibility = VISIBLE - widgetCallback?.onCtaClick( - getSelectedDayCtaTypeConfig(selectedDayConfig, widgetBody, flowType) - ) - } - ?: kotlin.run { - binding.calendarFooterLl.visibility = GONE - widgetCallback?.onCtaClick(getNoDaySelectedCtaTypeConfig()) - } - } - - private fun getFooterConfigWithSelectedValue( - day: DayContent, - footerCardConfig: StyledDaysCalendarFooterCardConfig? - ): StyledDaysCalendarFooterCardConfig? { - footerCardConfig?.headerValue = day.footerValue?.header - footerCardConfig?.descriptionValue = day.footerValue?.description - return footerCardConfig - } - - private fun getSelectedDayConfig(days: List?): DayContent? { - days?.forEach { day -> - if (day.status != null && day.status == DayStatus.SELECTED) { - return day - } - } - return null - } - - fun checkValidation(): Boolean { - val selectedDayConfig = getSelectedDayConfig(widgetConfig?.widgetBody?.days) - selectedDayConfig?.let { - return true - } - ?: run { - setErrorConfig() - return false - } - } - - private fun setErrorConfig() { - binding.errorIv.visibility = View.VISIBLE - binding.errorTv.visibility = View.VISIBLE - val errorConfig = widgetConfig?.widgetBody?.errorConfig - errorConfig?.iconUrl?.let { IconUtils.updateIcon(it, binding.errorIv) } - binding.errorTv.setTextFieldData(errorConfig?.title) - val widgetLayoutParams = - WidgetConfigLayoutParams( - margin = widgetConfig?.widgetLayoutParams?.margin, - borderColor = errorConfig?.borderColor, - borderWidth = widgetConfig?.widgetLayoutParams?.borderWidth, - borderRadius = widgetConfig?.widgetLayoutParams?.borderRadius, - shadowColor = widgetConfig?.widgetLayoutParams?.shadowColor, - elevation = widgetConfig?.widgetLayoutParams?.elevation, - backgroundColor = - errorConfig?.backgroundColor - ?: widgetConfig?.widgetLayoutParams?.backgroundColor - ) - setCardPropertiesFromWidgetLayoutParams(binding.rootItem, widgetLayoutParams) - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - binding.unbind() - } - - companion object { - const val KEY_SELECTED_DATE = "KEY_SELECTED_DATE" - const val KEY_SELECTED_DATE_HEADER = "KEY_SELECTED_DATE_HEADER" - const val EMI_DATE_SELECTION = "EMI_DATE_SELECTION" - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/StyledKeyValueCardView.kt b/android/app/src/main/java/com/naviapp/common/customview/StyledKeyValueCardView.kt deleted file mode 100644 index ec7b948b8a..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/StyledKeyValueCardView.kt +++ /dev/null @@ -1,81 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.os.Build -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.cardview.widget.CardView -import androidx.core.content.ContextCompat -import com.navi.base.model.CtaData -import com.navi.base.utils.orZero -import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.parseColorSafe -import com.navi.naviwidgets.widgets.textdisplay.Margin -import com.naviapp.R -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.common.listeners.Navigator -import com.naviapp.common.model.StyledKeyValueCardWidgetConfig -import com.naviapp.databinding.StyledKeyValueCardViewBinding -import com.naviapp.utils.EMPTY -import com.naviapp.utils.dpToPx -import com.naviapp.utils.setMargin - -class StyledKeyValueCardView(context: Context, attrs: AttributeSet? = null) : - CardView(context, attrs), Navigator { - - private var binding = - StyledKeyValueCardViewBinding.inflate(LayoutInflater.from(context), this, true) - - private var listener: LoanDetailsV2WidgetAdapterListener? = null - - init { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - elevation = resources.getDimension(R.dimen.layout_dp_6) - radius = resources.getDimension(R.dimen.layout_dp_8) - 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) - } - binding.navigator = this - } - - fun setProperties( - styledKeyValueCardWidgetConfig: StyledKeyValueCardWidgetConfig?, - listener: LoanDetailsV2WidgetAdapterListener? - ) { - styledKeyValueCardWidgetConfig?.let { widgetConfig -> - widgetConfig.widgetLayoutParams?.margin?.let { margin -> this.setMargin(margin) } - widgetConfig.widgetBody?.let { widgetBody -> - val margin = Margin(topDp = 16.0f) - binding.detailsMargin = margin - binding.styledCardBinder = widgetBody - binding.root.background = - getNaviDrawable( - cornerRadius = dpToPx(widgetBody.cardProperty?.borderRadius.orZero()), - strokeWidth = dpToPx(widgetBody.cardProperty?.strokeWidth.orZero()), - strokeColor = widgetBody.cardProperty?.strokeColor.parseColorSafe() - ) - } - } - this.listener = listener - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - binding.unbind() - } - - override val screenNameForNavigation: String - get() = EMPTY - - override fun navigateTo(ctaData: CtaData?, finish: Boolean) { - listener?.onCtaClick(ctaData) - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/StyledNoteView.kt b/android/app/src/main/java/com/naviapp/common/customview/StyledNoteView.kt deleted file mode 100644 index c7ac5a035c..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/StyledNoteView.kt +++ /dev/null @@ -1,92 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.LinearLayout -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.databinding.DataBindingUtil -import com.navi.base.utils.orZero -import com.navi.common.utils.setStyledText -import com.navi.design.utils.DrawableShape -import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.parseColorSafe -import com.navi.naviwidgets.utils.getGradientDrawable -import com.navi.naviwidgets.widgets.textdisplay.Margin -import com.naviapp.R -import com.naviapp.databinding.ViewCommonNoteBinding -import com.naviapp.models.response.StyledBottom -import com.naviapp.utils.IconUtils -import com.naviapp.utils.setMargin - -class StyledNoteView(context: Context?, attrs: AttributeSet? = null) : - LinearLayout(context, attrs) { - - private val binding: ViewCommonNoteBinding - - init { - val inflater = LayoutInflater.from(context) - binding = DataBindingUtil.inflate(inflater, R.layout.view_common_note, this, true) - layoutParams = - ConstraintLayout.LayoutParams( - ConstraintLayout.LayoutParams.MATCH_PARENT, - ConstraintLayout.LayoutParams.WRAP_CONTENT - ) - } - - fun setProperties(styledNote: StyledBottom?) { - setStyledText(binding.infoTv, styledNote?.text, null) - - styledNote?.bgGradient?.let { - binding.parentView.background = - getGradientDrawable( - context, - styledNote.bgGradient, - styledNote.cornerRadius.orZero() - ) - } - ?: run { - binding.parentView.background = - getNaviDrawable( - shape = DrawableShape.RECTANGLE, - cornerRadius = styledNote?.cornerRadius, - backgroundColor = styledNote?.bgColor?.parseColorSafe(), - strokeWidth = styledNote?.strokeWidth, - strokeColor = styledNote?.strokeColor.parseColorSafe() - ) - } - - styledNote?.iconCode?.let { - IconUtils.updateIcon(it, binding.iconIv) - binding.iconIv.visibility = View.VISIBLE - } ?: run { binding.iconIv.visibility = View.GONE } - - styledNote?.iconMargin?.let { binding.iconIv.setMargin(it) } - ?: run { - binding.iconIv.setMargin( - Margin(0f, resources.getDimension(R.dimen.layout_dp_12), 0f, 0f) - ) - } - - styledNote?.padding?.let { - binding.parentView.setPadding( - styledNote.padding.startDp.toInt(), - styledNote.padding.topDp.toInt(), - styledNote.padding.endDp.toInt(), - styledNote.padding.bottomDp.toInt(), - ) - } - } - - fun setBackground(drawableResource: Int) { - binding.parentView.setBackgroundResource(drawableResource) - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/StyledTitleWithDescriptionAndButtonView.kt b/android/app/src/main/java/com/naviapp/common/customview/StyledTitleWithDescriptionAndButtonView.kt deleted file mode 100644 index 17941cec50..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/StyledTitleWithDescriptionAndButtonView.kt +++ /dev/null @@ -1,66 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.widget.LinearLayout -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.common.model.StyledTitleWithButtonWidgetBody -import com.naviapp.common.model.StyledTitleWithButtonWidgetConfig -import com.naviapp.databinding.StyledTitleWtthButtonViewBinding -import com.naviapp.models.response.LoanDetailsV2AdditionData -import com.naviapp.utils.setMargin - -class StyledTitleWithDescriptionAndButtonView(context: Context?, attrs: AttributeSet? = null) : - LinearLayout(context, attrs) { - - private var binding = - StyledTitleWtthButtonViewBinding.inflate(LayoutInflater.from(context), this, true) - - init { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setProperties( - titleWithButtonWidgetConfig: StyledTitleWithButtonWidgetConfig?, - listener: LoanDetailsV2WidgetAdapterListener?, - additionData: LoanDetailsV2AdditionData? = null - ) { - titleWithButtonWidgetConfig?.let { widgetConfig -> - widgetConfig.widgetLayoutParams?.margin?.let { setMargin(it) } - val updatedWidgetBody = getUpdatedWidgetBody(widgetConfig, additionData) - updatedWidgetBody?.let { widgetBody -> binding.titleBinder = widgetBody } - binding.descriptionTv.setOnClickListener { - listener?.onCtaClick(updatedWidgetBody?.description?.cta) - } - } - } - - private fun getUpdatedWidgetBody( - widgetConfig: StyledTitleWithButtonWidgetConfig, - additionData: LoanDetailsV2AdditionData? - ): StyledTitleWithButtonWidgetBody? { - additionData?.selectedHeader?.let { header -> - if ( - header.id.isNullOrEmpty().not() && - widgetConfig.widgetId.isNullOrEmpty().not() && - (header.id == widgetConfig.widgetId) - ) { - return header - } - } - return widgetConfig.widgetBody - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - binding.unbind() - } -} diff --git a/android/app/src/main/java/com/naviapp/common/customview/TitleWithButtonView.kt b/android/app/src/main/java/com/naviapp/common/customview/TitleWithButtonView.kt deleted file mode 100644 index 02687b0c8c..0000000000 --- a/android/app/src/main/java/com/naviapp/common/customview/TitleWithButtonView.kt +++ /dev/null @@ -1,57 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.customview -/* - * - * * Copyright © 2022 by Navi Technologies Private Limited - * * All rights reserved. Strictly confidential - * - */ - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.widget.LinearLayout -import com.naviapp.common.listeners.LoanDetailsV2WidgetAdapterListener -import com.naviapp.common.model.TitleWithButtonWidgetConfig -import com.naviapp.databinding.TitleWithButtonViewBinding -import com.naviapp.utils.setMargin - -class TitleWithButtonView(context: Context?, attrs: AttributeSet? = null) : - LinearLayout(context, attrs) { - - private var binding = - TitleWithButtonViewBinding.inflate(LayoutInflater.from(context), this, true) - - init { - layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) - } - - fun setProperties( - titleWithButtonWidgetConfig: TitleWithButtonWidgetConfig?, - listener: LoanDetailsV2WidgetAdapterListener? - ) { - titleWithButtonWidgetConfig?.apply { - widgetLayoutParams?.margin?.let { setMargin(it) } - widgetBody?.let { widgetBody -> binding.titleBinder = widgetBody } - } - binding.descriptionIv.setOnClickListener { - listener?.onCtaClick( - titleWithButtonWidgetConfig?.widgetBody?.styledDescription?.iconCta - ) - } - binding.btnTv.setOnClickListener { - listener?.onCtaClick(titleWithButtonWidgetConfig?.widgetBody?.cta) - } - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - binding.unbind() - } -} diff --git a/android/app/src/main/java/com/naviapp/common/fragment/CreditAnalysisFragment.kt b/android/app/src/main/java/com/naviapp/common/fragment/CreditAnalysisFragment.kt deleted file mode 100644 index b20ddc23b2..0000000000 --- a/android/app/src/main/java/com/naviapp/common/fragment/CreditAnalysisFragment.kt +++ /dev/null @@ -1,94 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.fragment - -import android.content.Context -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.lifecycle.ViewModelProvider -import com.navi.common.listeners.HeaderInteractionListener -import com.navi.common.ui.fragment.BaseFragment -import com.navi.common.utils.observeNullable -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.adapter.CreditAnalysisAdapter -import com.naviapp.common.viewmodel.CreditAnalysisViewModel -import com.naviapp.databinding.FragmentCreditAnalysisBinding -import com.naviapp.models.response.ImageDetail -import com.naviapp.utils.IconUtils - -class CreditAnalysisFragment : BaseFragment() { - private val viewModel by lazy { - ViewModelProvider(this).get(CreditAnalysisViewModel::class.java) - } - private lateinit var binding: FragmentCreditAnalysisBinding - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - binding = FragmentCreditAnalysisBinding.inflate(inflater, container, false) - initUI() - initError(viewModel) - initWarning(viewModel) - initObservers() - fetchCreditData() - return binding.root - } - - override fun onAttach(context: Context) { - super.onAttach(context) - headerInteractionListener = context as? HeaderInteractionListener - } - - private fun fetchCreditData() { - showLoader() - viewModel.fetchCreditData() - } - - private fun initObservers() { - viewModel.creditData.observeNullable(this) { response -> - hideLoader() - response?.creditScoreData?.let { binding.creditScore.setProperties(it) } - response?.lastUpdateInfo?.let { - binding.lastUpdateTv.text = it.title - it.iconCode?.let { - binding.iconIv.visibility = View.VISIBLE - IconUtils.updateIcon(ImageDetail(it, it), binding.iconIv) - } - } - response?.scoreDetails?.let { - (binding.recyclerView.adapter as CreditAnalysisAdapter).updateData(it) - } - } - } - - private fun initUI() { - headerInteractionListener?.setProperties(getString(R.string.my_credit_analysis)) - headerInteractionListener?.updateHeader( - IconUtils.ICON_BACK_ARROW, - R.style.TextDescMediumFontStyle, - true - ) - binding.recyclerView.adapter = CreditAnalysisAdapter(emptyList()) - } - - override val screenName: String - get() = NaviAnalytics.CREDIT_ANALYSIS_SCREEN - - companion object { - const val TAG = "CreditAnalysisFragment" - - fun newInstance(): CreditAnalysisFragment { - return CreditAnalysisFragment() - } - } -} diff --git a/android/app/src/main/java/com/naviapp/common/fragment/NetPromoterScoreFragment.kt b/android/app/src/main/java/com/naviapp/common/fragment/NetPromoterScoreFragment.kt deleted file mode 100644 index a08e05cc65..0000000000 --- a/android/app/src/main/java/com/naviapp/common/fragment/NetPromoterScoreFragment.kt +++ /dev/null @@ -1,222 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.fragment - -import android.content.Context -import android.os.Bundle -import android.view.Gravity -import android.view.View -import android.view.WindowManager -import androidx.core.view.isVisible -import androidx.lifecycle.ViewModelProvider -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.R as CommonR -import com.navi.common.constants.GI -import com.navi.common.ui.dialog.BaseDialogFragment -import com.navi.common.utils.observeNonNull -import com.navi.insurance.navigator.NaviInsuranceDeeplinkNavigator -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.adapter.NpsGridAdapter -import com.naviapp.dashboard.listeners.FragmentInteractionListener -import com.naviapp.databinding.LayoutNetPromoterScoreBinding -import com.naviapp.models.request.NetPromoterScoreRequest -import com.naviapp.models.response.ColorBoxPair -import com.naviapp.models.response.GeneralTextResponse -import com.naviapp.models.response.NetPromoterScoreResponse -import com.naviapp.models.response.RatingsData -import com.naviapp.nps.viewmodel.NpsVM -import com.naviapp.utils.* - -class NetPromoterScoreFragment : - BaseDialogFragment( - R.layout.layout_net_promoter_score, - CommonR.style.FullScreenDialogFragment - ), - ReasonClickListener { - - var response: NetPromoterScoreResponse? = null - var moduleType: String? = null - var adapter: NpsGridAdapter? = null - private val viewModel by lazy { ViewModelProvider(requireActivity()).get(NpsVM::class.java) } - private var listener: FragmentInteractionListener? = null - private val analyticsEventTracker = NaviAnalytics.naviAnalytics.Nps() - private var currentRatingData: RatingsData? = null - - override fun initUI() { - initListeners() - initObservers() - adapter = NpsGridAdapter(requireContext(), this) - binding.gridReasons.adapter = adapter - binding.reactionImageIv.visibility = View.VISIBLE - setButtonData() - } - - private fun setButtonData() { - binding.primaryAbv.setViewBg( - cornerRadiusId = R.integer.value_110, - elevation = resources.getDimension(R.dimen.layout_dp_0) - ) - binding.primaryAbv.apply { - setTextGravity(Gravity.CENTER) - setButtonHeight(resources.getDimension(R.dimen.layout_dp_46)) - setStateWithOrangeColor(false) - } - } - - private fun initListeners() { - binding.primaryAbv.setOnClickListener { - analyticsEventTracker.onSubmitButtonTap() - submitNpsDetails() - response?.footer?.nextCta?.let { dismiss() } - } - - binding.closeIv.setOnClickListener { - analyticsEventTracker.onCloseIconTap() - dismiss() - if (moduleType == GI) { - NaviInsuranceDeeplinkNavigator.navigate( - requireActivity(), - CtaData( - url = - giDeeplink( - NaviInsuranceDeeplinkNavigator.DASHBOARD.plus(Constants.DIVIDER) - .plus(NaviInsuranceDeeplinkNavigator.HOME) - ) - ), - true - ) - } - } - } - - private fun initObservers() { - observeNpsDetails() - observeSelectedRating() - } - - private fun observeSelectedRating() { - binding.colorBoxGroup.onRatingSelect.observeNonNull(this) { - analyticsEventTracker.onNpsScoreTap(it) - onRatingSelect(it) - binding.reactionImageIv.visibility = View.GONE - binding.subtitleTv.visibility = View.VISIBLE - } - } - - private fun observeNpsDetails() { - response?.content?.title?.let { title -> binding.titleTv.text = title } - response?.content?.iconCode?.let { iconCode -> - IconUtils.updateIcon(iconCode, binding.reactionImageIv) - } - response?.content?.colorList?.let { addSelectorView(it) } - response?.content?.colorRangeTags?.let { binding.colorBoxGroup.addColorTags(it) } - response?.footer?.nextCta?.title?.let { title -> binding.primaryAbv.setProperties(title) } - response?.content?.ratingsInfo?.hint.let { binding.explanationEt.hint = it } - } - - private fun addSelectorView(colorList: List) { - val horizontalMargin = - binding.contentLayout.paddingLeft + binding.contentLayout.paddingRight - val deviceWidthInPixels = resources.displayMetrics.widthPixels - binding.colorBoxGroup.setProperties(colorList, deviceWidthInPixels - horizontalMargin) - } - - private fun onRatingSelect(rating: Int) { - response?.content?.ratingsInfo?.let { - binding.explanationEt.isVisible = it.showFreeText == true - } - - response?.content?.ratingsInfo?.ratingsData?.getOrNull(rating - 1)?.let { - binding.subtitleTv.text = it.title - currentRatingData = it - handleSubmitBtn() - it.optionsList?.let { optionsList -> adapter?.setReasons(optionsList) } - } - } - - private fun submitNpsDetails() { - val analyticsOptionsList = mutableMapOf() - val responseList = mutableListOf() - response - ?.content - ?.ratingsInfo - ?.ratingsData - ?.getOrNull(binding.colorBoxGroup.onRatingSelect.value.orZero() - 1) - ?.let { - it.optionsList?.forEach { response -> - if (response.isChecked) { - response.id?.let { responseId -> - analyticsOptionsList.put(response.text.orEmpty(), responseId) - responseList.add(responseId) - } - } - } - } - analyticsEventTracker.onOptionsSelected(analyticsOptionsList) - viewModel.submitNpsDetails( - NetPromoterScoreRequest( - ratingSelectedIndex = binding.colorBoxGroup.onRatingSelect.value.toString(), - followUpResponse = responseList, - responseReferenceId = response?.content?.npsResponseReferenceId, - questionReferenceId = response?.content?.questionReferenceId, - freeTextResponse = binding.explanationEt.text.toString() - ) - ) - } - - override val screenName: String - get() = NaviAnalytics.NPS - - override fun onAttach(context: Context) { - super.onAttach(context) - listener = context as? FragmentInteractionListener - activity?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) - } - - override fun onDetach() { - super.onDetach() - activity?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - if (screenName.isNotBlank()) { - NaviTrackEvent.startScreen(screenName) - } - } - - private fun handleSubmitBtn() { - binding.primaryAbv.setStateWithOrangeColor( - currentRatingData?.optionsList?.any { response -> response.isChecked }.orFalse() - ) - } - - override fun onClick(p0: View?) {} - - companion object { - const val TAG = "NetPromoterScoreDialog" - - fun getInstance(response: NetPromoterScoreResponse?, type: String? = null) = - NetPromoterScoreFragment().apply { - this.response = response - this.moduleType = type - } - } - - override fun onOptionSelect(generalTextResponse: GeneralTextResponse) { - handleSubmitBtn() - } -} - -interface ReasonClickListener { - fun onOptionSelect(data: GeneralTextResponse) -} diff --git a/android/app/src/main/java/com/naviapp/common/listeners/NaviCalendarDayClickListener.kt b/android/app/src/main/java/com/naviapp/common/listeners/NaviCalendarDayClickListener.kt deleted file mode 100644 index f773ab8e5b..0000000000 --- a/android/app/src/main/java/com/naviapp/common/listeners/NaviCalendarDayClickListener.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.listeners - -import com.naviapp.common.model.DayContent - -interface NaviCalendarDayClickListener { - fun onDayClick(selectedDate: DayContent, position: Int) -} diff --git a/android/app/src/main/java/com/naviapp/common/model/DividerWithImageTitleSubtitleWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/DividerWithImageTitleSubtitleWidgetConfig.kt deleted file mode 100644 index d9503b4c41..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/DividerWithImageTitleSubtitleWidgetConfig.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class DividerWithImageTitleSubtitleWidgetConfig( - @SerializedName("body") val widgetBody: DividerWithImageTitleSubtitleWidgetBody? = null -) : WidgetConfig() - -data class DividerWithImageTitleSubtitleWidgetBody( - @SerializedName("dividerItems") val dividerItems: List? = null, - @SerializedName("footerTag") val footerTagData: StyledTextWithIconCode? = null -) { - data class DividerItemsData( - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("iconCode") val iconCode: String? - ) -} diff --git a/android/app/src/main/java/com/naviapp/common/model/EmiTenureSummaryWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/EmiTenureSummaryWidgetConfig.kt deleted file mode 100644 index 62b20c37c3..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/EmiTenureSummaryWidgetConfig.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.StyledTitleSubtitleConfig -import com.naviapp.models.response.WidgetConfig - -data class EmiTenureSummaryWidgetConfig( - @SerializedName("body") val widgetBody: EmiTenureSummaryWidgetBody? = null -) : WidgetConfig() - -data class EmiTenureSummaryWidgetBody( - @SerializedName("summaryItems") val summaryItems: List? = null, - @SerializedName("footerTag") val footerTag: StyledTextWithIconCode? = null, - @SerializedName("footerDescription") - val footerDescription: StyledTitleDescriptionBottomSheetConfig? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/InfoBannerWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/InfoBannerWidgetConfig.kt deleted file mode 100644 index 657032cb7f..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/InfoBannerWidgetConfig.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class InfoBannerWidgetConfig( - @SerializedName("body") val widgetBody: InfoBannerWidgetBody? = null -) : WidgetConfig() - -data class InfoBannerWidgetBody( - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("description") val description: StyledTextWithIconCode? = null, - @SerializedName("ctaText") val ctaText: StyledTextWithIconCode? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/LoanEMITenureWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/LoanEMITenureWidgetConfig.kt deleted file mode 100644 index 952274f1e5..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/LoanEMITenureWidgetConfig.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.response.TextFieldData -import com.naviapp.models.response.WidgetConfig - -data class LoanEMITenureWidgetConfig( - @SerializedName("body") val widgetBody: LoanEMITenureWidgetBody? = null -) : WidgetConfig() - -data class LoanEMITenureWidgetBody( - @SerializedName("header") val header: TextFieldData? = null, - @SerializedName("options") val options: List? = null, - @SerializedName("footer") val footer: TextFieldData? = null, - @SerializedName("footerbgColor") val footerbgColor: String? = null -) - -data class TitleDescriptionIconOption( - @SerializedName("title") val title: TextFieldData? = null, - @SerializedName("description") val description: TextFieldData? = null, - @SerializedName("iconUrl") val iconUrl: String? = null, -) diff --git a/android/app/src/main/java/com/naviapp/common/model/OfferUpgradeCardV2WidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/OfferUpgradeCardV2WidgetConfig.kt deleted file mode 100644 index f2262194ef..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/OfferUpgradeCardV2WidgetConfig.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class OfferUpgradeCardV2WidgetConfig( - @SerializedName("body") val widgetBody: OfferUpgradeCardV2WidgetBody? = null -) : WidgetConfig() - -data class OfferUpgradeCardV2WidgetBody( - @SerializedName("styledTitle") val title: StyledTextWithIconCode? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("cta") val cta: CtaData? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/OfferUpgradeCardWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/OfferUpgradeCardWidgetConfig.kt deleted file mode 100644 index 20f00c4024..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/OfferUpgradeCardWidgetConfig.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model -/* - * - * * Copyright © 2022 by Navi Technologies Private Limited - * * All rights reserved. Strictly confidential - * - */ - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class OfferUpgradeCardWidgetConfig( - @SerializedName("body") val widgetBody: OfferUpgradeCardWidgetBody? = null -) : WidgetConfig() - -data class OfferUpgradeCardWidgetBody( - @SerializedName("styledTitle") val title: StyledTextWithIconCode? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("cta") val cta: CtaData? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/RadioButtonWidgetListConfig.kt b/android/app/src/main/java/com/naviapp/common/model/RadioButtonWidgetListConfig.kt deleted file mode 100644 index b7da390890..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/RadioButtonWidgetListConfig.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.naviapp.models.response.WidgetConfig - -data class RadioButtonWidgetListConfig( - @SerializedName("body") val widgetBody: List? = null, -) : WidgetConfig() - -open class RadioButtonParentConfigBody( - @SerializedName("type") val type: String? = null, - @SerializedName("body") val body: SelectorWithRadioButtonData? = null -) - -data class SelectorWithRadioButtonData( - @SerializedName("tenureValue") val tenureValue: Int? = null, - @SerializedName("tenureTitle") val tenureTitle: String? = null, - @SerializedName("defaultSelected") val defaultSelected: Boolean? = false, - @SerializedName("interestRate") val interestRate: Double? = null, - @SerializedName("selectedTenureValue") val selectedTenureValue: Int? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/RewardsWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/RewardsWidgetConfig.kt deleted file mode 100644 index d8460c4dbc..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/RewardsWidgetConfig.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.ActionData -import com.navi.base.model.GenericAnalyticsData -import com.navi.naviwidgets.interfaces.RewardsInfoWidgetInfo -import com.navi.naviwidgets.models.NaviTextComponent -import com.navi.naviwidgets.models.response.RewardsInfoWidgetData -import com.navi.naviwidgets.models.response.TagInfo -import com.naviapp.models.response.WidgetConfig -import java.io.Serializable - -data class RewardsWidgetConfig( - @SerializedName("body") val widgetData: RewardsInfoWidgetData? = null, -) : WidgetConfig(), Serializable, RewardsInfoWidgetInfo { - - override fun widgetId(): String? = widgetId - - override fun iconUrl(): String? = widgetData?.iconUrl - - override fun dividerColor(): String? = widgetData?.dividerColor - - override fun bgColor(): String? = widgetData?.bgColor - - override fun title(): NaviTextComponent? = widgetData?.title - - override fun enableShimmer(): Boolean? = widgetData?.enableShimmer - - override fun tagInfo(): TagInfo? = widgetData?.tagInfo - - override fun actionData(): ActionData? = widgetData?.actionData - - override fun viewedMetaData(): GenericAnalyticsData? = widgetData?.genericAnalytics?.viewedData - - override fun rewardType(): String? { - return widgetData?.rewardType - } -} diff --git a/android/app/src/main/java/com/naviapp/common/model/SelectorTileWidgetListConfig.kt b/android/app/src/main/java/com/naviapp/common/model/SelectorTileWidgetListConfig.kt deleted file mode 100644 index 2f72402897..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/SelectorTileWidgetListConfig.kt +++ /dev/null @@ -1,59 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig -import kotlinx.parcelize.Parcelize - -@Parcelize -data class SelectorTileWidgetListConfig( - @SerializedName("body") val widgetBody: List? = null, -) : Parcelable, WidgetConfig() - -@Parcelize -open class SelectorTileParentConfigBody( - @SerializedName("type") val type: String? = null, - @SerializedName("body") val body: SelectorTileConfig? = null, -) : Parcelable - -@Parcelize -data class SelectorTileConfig( - @SerializedName("selectedConfig") val selectedConfig: SelectorTileDataConfig? = null, - @SerializedName("unselectedConfig") val unselectedConfig: SelectorTileDataConfig? = null, - @SerializedName("sliderConfig") val sliderConfig: SelectorTileSliderConfig? = null, - @SerializedName("tag") val tag: StyledTextWithIconCode? = null, - @SerializedName("tenureValue") val tenureValue: Int? = null, - @SerializedName("defaultSelected") val defaultSelected: Boolean? = false, - @SerializedName("progressColor") val progressColor: String? = null, - @SerializedName("displayVerticalBars") val displayVerticalBars: Boolean? = null, - @SerializedName("tooltipColor") val tooltipColor: String? = null -) : Parcelable - -@Parcelize -data class SelectorTileDataConfig( - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("borderColor") val borderColor: String? = null, - @SerializedName("shadowColor") val shadowColor: String? = null, - @SerializedName("elevation") val elevation: Int? = null, - @SerializedName("cornerRadius") val cornerRadius: Int? = null, - @SerializedName("strokeWidth") val strokeWidth: Int? = null, -) : Parcelable - -@Parcelize -data class SelectorTileSliderConfig( - @SerializedName("minTenureTitle") val minTenureTitle: String? = null, - @SerializedName("maxTenureTitle") val maxTenureTitle: String? = null, - @SerializedName("minTenureValue") val minTenureValue: Int? = null, - @SerializedName("maxTenureValue") val maxTenureValue: Int? = null, - @SerializedName("selectedTenureValue") val selectedTenureValue: Int? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/common/model/SingleImageWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/SingleImageWidgetConfig.kt deleted file mode 100644 index 00f83ef0c3..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/SingleImageWidgetConfig.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.response.SingleImageWidgetBody -import com.naviapp.models.response.WidgetConfig -import kotlinx.parcelize.Parcelize - -@Parcelize -data class SingleImageWidgetConfig( - @SerializedName("body") val widgetBody: SingleImageWidgetBody? = null -) : WidgetConfig(), Parcelable diff --git a/android/app/src/main/java/com/naviapp/common/model/SliderWithTooltipTitleWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/SliderWithTooltipTitleWidgetConfig.kt deleted file mode 100644 index 60b90b8a85..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/SliderWithTooltipTitleWidgetConfig.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.naviapp.models.response.WidgetConfig - -data class SliderWithTooltipTitleWidgetConfig( - @SerializedName("body") val widgetBody: SliderWithTooltipTitleWidgetBody? = null -) : WidgetConfig() - -data class SliderWithTooltipTitleWidgetBody( - @SerializedName("selectedAmount") val selectedAmount: TitleWithMoneyData? = null, - @SerializedName("minimumAmount") val minimumAmount: TitleWithMoneyData? = null, - @SerializedName("maximumAmount") val maximumAmount: TitleWithMoneyData? = null, - @SerializedName("experimentEnabled") val isExperimentEnabled: Boolean? = null, - @SerializedName("displayLoanAmount") val displayLoanAmount: Boolean? = null, - @SerializedName("displayVerticalBars") val displayVerticalBars: Boolean? = null, - @SerializedName("progressColor") val progressColor: String? = null, - @SerializedName("uiTronLayoutIds") val uiTronLayoutIds: List? = null -) - -data class TitleWithMoneyData( - @SerializedName("title") val title: String? = null, - @SerializedName("money") val money: MoneyData? = null -) - -data class MoneyData( - @SerializedName("currency") val currencySymbol: String? = null, - @SerializedName("amount") val amount: Double? = null, - @SerializedName("symbol") val symbol: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/StyledDaysCalendarWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/StyledDaysCalendarWidgetConfig.kt deleted file mode 100644 index 8f54f04916..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/StyledDaysCalendarWidgetConfig.kt +++ /dev/null @@ -1,69 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.response.TextFieldData -import com.naviapp.models.response.WidgetConfig -import com.naviapp.models.response.WidgetConfigLayoutParams - -data class StyledDaysCalendarWidgetConfig( - @SerializedName("body") val widgetBody: StyledDaysCalendarWidgetBody? = null -) : WidgetConfig() - -data class StyledDaysCalendarWidgetBody( - @SerializedName("days") val days: List? = null, - @SerializedName("footerCardConfig") - val footerCardConfig: StyledDaysCalendarFooterCardConfig? = null, - @SerializedName("errorConfig") val errorConfig: StyledDaysCalendarErrorConfig? = null, - @SerializedName("selectedHeaderConfig") - val selectedHeaderConfig: StyledTitleWithButtonWidgetBody? = null -) - -data class DayContent( - @SerializedName("clickable") val clickable: Boolean? = false, - @SerializedName("date") val date: String? = null, - @SerializedName("defaultDay") val defaultDay: DayConfig? = null, - @SerializedName("selectedDay") val selectedDay: DayConfig? = null, - @SerializedName("status") var status: DayStatus? = null, - @SerializedName("displayText") val displayText: String? = null, - @SerializedName("footerValue") val footerValue: StyledDaysCalendarFooter? = null -) - -data class StyledDaysCalendarFooter( - @SerializedName("header") val header: TextFieldData? = null, - @SerializedName("description") val description: TextFieldData? = null, -) - -data class StyledDaysCalendarErrorConfig( - @SerializedName("iconUrl") val iconUrl: String? = null, - @SerializedName("borderColor") val borderColor: String? = null, - @SerializedName("title") val title: TextFieldData? = null, - @SerializedName("backgroundColor") val backgroundColor: String? = null, -) - -enum class DayStatus { - DEFAULT, - DISABLED, - SELECTED -} - -data class DayConfig( - @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("text") val text: TextFieldData? = null -) - -data class StyledDaysCalendarFooterCardConfig( - @SerializedName("widgetLayoutParams") val widgetLayoutParams: WidgetConfigLayoutParams? = null, - @SerializedName("header") val header: TextFieldData? = null, - @SerializedName("headerValue") var headerValue: TextFieldData? = null, - @SerializedName("description") val description: TextFieldData? = null, - @SerializedName("descriptionValue") var descriptionValue: TextFieldData? = null, - @SerializedName("descriptionIconUrl") val descriptionIconUrl: String? = null, - @SerializedName("descriptionBg") val descriptionBg: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/StyledKeyValueCardWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/StyledKeyValueCardWidgetConfig.kt deleted file mode 100644 index af2e5a78de..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/StyledKeyValueCardWidgetConfig.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.base.model.StyledTextWithIconCode -import com.navi.naviwidgets.models.response.CardProperties -import com.naviapp.models.response.WidgetConfig -import kotlinx.parcelize.Parcelize - -data class StyledKeyValueCardWidgetConfig( - @SerializedName("body") val widgetBody: StyledKeyValueCardWidgetBody? = null -) : WidgetConfig() - -data class StyledTextWidgetConfig( - @SerializedName("body") val widgetBody: StyledTextWithIconCode? = null -) : WidgetConfig() - -data class StyledKeyValueCardWidgetBody( - @SerializedName("details") val details: List? = null, - @SerializedName("footer") val footer: StyledKeyValue? = null, - @SerializedName("cardTag") val cardTag: CardData? = null, - @SerializedName("cardProperty") val cardProperty: CardProperties? = null -) - -@Parcelize -data class StyledKeyValue( - @SerializedName("styledKey") val styledKey: StyledTextWithIconCode? = null, - @SerializedName("styledValue") val styledValue: StyledTextWithIconCode? = null -) : Parcelable - -@Parcelize -data class CardData( - @SerializedName("text") val text: String? = null, - @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("textColor") val textColor: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("cta") val cta: CtaData? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/common/model/StyledTextConfig.kt b/android/app/src/main/java/com/naviapp/common/model/StyledTextConfig.kt deleted file mode 100644 index 4fa7209ed8..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/StyledTextConfig.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class StyledTextConfig(@SerializedName("body") val styledTextBody: StyledTextBody? = null) : - WidgetConfig() - -data class StyledTextBody( - @SerializedName("styledText") val styledText: StyledTextWithIconCode? = null, - @SerializedName("identifierKey") val identifierKey: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/StyledTitleWithButtonWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/StyledTitleWithButtonWidgetConfig.kt deleted file mode 100644 index 0538e66840..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/StyledTitleWithButtonWidgetConfig.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class StyledTitleWithButtonWidgetConfig( - @SerializedName("body") val widgetBody: StyledTitleWithButtonWidgetBody? = null -) : WidgetConfig() - -data class StyledTitleWithButtonWidgetBody( - @SerializedName("id") val id: String? = null, - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("description") val description: StyledTextWithIconCode? = null, - @SerializedName("cta") val cta: CtaData? = null, -) diff --git a/android/app/src/main/java/com/naviapp/common/model/TitleWithButtonWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/TitleWithButtonWidgetConfig.kt deleted file mode 100644 index 4a0f3a898e..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/TitleWithButtonWidgetConfig.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class TitleWithButtonWidgetConfig( - @SerializedName("body") val widgetBody: TitleWithButtonWidgetBody? = null -) : WidgetConfig() - -data class TitleWithButtonWidgetBody( - @SerializedName("title") val title: String? = null, - @SerializedName("subtitle") val subtitle: String? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("styledDescription") val styledDescription: StyledTextWithIconCode? = null, - @SerializedName("cta") val cta: CtaData? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/TopUpSummaryWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/TopUpSummaryWidgetConfig.kt deleted file mode 100644 index 7351b2d1fd..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/TopUpSummaryWidgetConfig.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class TopUpSummaryWidgetConfig( - @SerializedName("body") val widgetBody: TopUpSummaryWidgetBody? = null -) : WidgetConfig() - -data class TopUpSummaryWidgetBody( - @SerializedName("lottieCode") val lottieCode: String? = null, - @SerializedName("lottieLoop") val lottieLoop: Boolean? = true, - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("description") var description: StyledTextWithIconCode? = null, - @SerializedName("valueAddition") var valueAddition: ValueAdditionWidgetBody? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/TopupInfoWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/TopupInfoWidgetConfig.kt deleted file mode 100644 index e4fd06177e..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/TopupInfoWidgetConfig.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class TopupInfoWidgetConfig( - @SerializedName("body") val widgetBody: TopupInfoWidgetBody? = null -) : WidgetConfig() - -data class TopupInfoWidgetBody( - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("animationId") val animationId: String? = null, - @SerializedName("description") val description: Description? = null -) - -data class Description( - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("rightIcon") val rightIcon: String? = null, - @SerializedName("showDivider") val showDivider: Boolean? = null, - @SerializedName("items") val items: List? = null -) - -data class SubItemData( - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("textHeader") val textHeader: StyledTextWithIconCode? = null, - @SerializedName("title") val title: StyledTextWithIconCode? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/UpgradeCardWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/UpgradeCardWidgetConfig.kt deleted file mode 100644 index 66bc9f2988..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/UpgradeCardWidgetConfig.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -class UpgradeCardWidgetConfig( - @SerializedName("body") val widgetBody: UpgradeCardWidgetBody? = null -) : WidgetConfig() - -data class UpgradeCardWidgetBody( - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("styledTitle") val styledTitle: StyledTextWithIconCode? = null, - @SerializedName("loanAmount") val loanAmount: String? = null, - @SerializedName("loanAmountTitle") val loanAmountTitle: String? = null, - @SerializedName("interestRate") val interestRate: String? = null, - @SerializedName("interestRateTitle") val interestRateTitle: String? = null, -) diff --git a/android/app/src/main/java/com/naviapp/common/model/ValueAdditionWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/ValueAdditionWidgetConfig.kt deleted file mode 100644 index 5a127756ba..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/ValueAdditionWidgetConfig.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class ValueAdditionWidgetConfig( - @SerializedName("body") val widgetBody: ValueAdditionWidgetBody? = null -) : WidgetConfig() - -data class ValueAdditionWidgetBody( - @SerializedName("factorOneValue") val factorOneValue: Double? = null, - @SerializedName("factorTwoValue") val factorTwoValue: Double? = null, - @SerializedName("factorThreeValue") val factorThreeValue: Double? = null, - @SerializedName("factorOne") var factorOne: ValueAdditionWidgetKeyValue? = null, - @SerializedName("factorTwo") var factorTwo: ValueAdditionWidgetKeyValue? = null, - @SerializedName("factorThree") var factorThree: ValueAdditionWidgetKeyValue? = null -) - -data class ValueAdditionWidgetKeyValue( - @SerializedName("styledKey") val styledKey: StyledTextWithIconCode? = null, - @SerializedName("styledValue") val styledValue: StyledTextWithIconCode? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/ViewCtaWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/ViewCtaWidgetConfig.kt deleted file mode 100644 index c84f7ca4fd..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/ViewCtaWidgetConfig.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.naviapp.models.response.WidgetConfig - -data class ViewCtaWidgetConfig(@SerializedName("body") val widgetBody: ViewCtaBody? = null) : - WidgetConfig() - -data class ViewCtaBody( - @SerializedName("title") val title: String? = null, - @SerializedName("cta") val viewCta: CtaData? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/model/ViewDescriptionCtaWidgetConfig.kt b/android/app/src/main/java/com/naviapp/common/model/ViewDescriptionCtaWidgetConfig.kt deleted file mode 100644 index 54a5b6e85c..0000000000 --- a/android/app/src/main/java/com/naviapp/common/model/ViewDescriptionCtaWidgetConfig.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.model - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.models.response.WidgetConfig - -data class ViewDescriptionCtaWidgetConfig( - @SerializedName("body") val widgetBody: ViewDescriptionCtaWidgetBody? = null -) : WidgetConfig() - -data class ViewDescriptionCtaWidgetBody( - @SerializedName("description") val description: StyledTextWithIconCode? = null, - @SerializedName("cta") val cta: StyledTextWithIconCode? = null, - @SerializedName("backgroundColor") val backgroundColor: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt b/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt index 35011dab31..cada92d262 100644 --- a/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt +++ b/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -110,10 +110,7 @@ import com.naviapp.app.NaviApplication import com.naviapp.appsettings.activity.AppSettingsActivity import com.naviapp.appupdate.activities.UpdateAppActivity import com.naviapp.common.fragment.CustomerSupportFragment -import com.naviapp.crosssell.ui.CrossSellActivity import com.naviapp.custom_payments.CustomPaymentActivity -import com.naviapp.dashboard.loanapplicationdetails.bank_account_change.activities.BankChangeActivity -import com.naviapp.dashboard.loanapplicationdetails.documentlist.activity.DocumentListActivity import com.naviapp.dashboard.menu.customersupport.activities.AboutUsActivity import com.naviapp.dashboard.menu.customersupport.activities.CustomerSupportActivity import com.naviapp.dashboard.menu.utils.openCallDialScreen @@ -122,7 +119,6 @@ import com.naviapp.email.activity.EmailActivity import com.naviapp.forge.ui.ForgeActivity import com.naviapp.forge.util.ForgeConstants.CtaUrlIdentifiers.FORGE import com.naviapp.home.compose.activity.HomePageActivity -import com.naviapp.home.dashboard.ui.ClosedLoansActivity import com.naviapp.home.dashboard.ui.R11PaymentBottomSheet import com.naviapp.lending_permission.ui.LendingPermissionActivity import com.naviapp.nux.ui.NewUserExperienceActivity @@ -140,7 +136,6 @@ import com.naviapp.releaselog.activity.ReleaseLogActivity import com.naviapp.utils.Constants import com.naviapp.utils.Constants.CYCS_REQUEST_CODE import com.naviapp.utils.Constants.HPC -import com.naviapp.utils.Constants.LOAN_ACCOUNT_NUMBER import com.naviapp.utils.Constants.NAVI_BBPS_REQUEST_CODE import com.naviapp.utils.Constants.NAVI_PAY_REQUEST_CODE import com.naviapp.utils.Constants.URL @@ -201,7 +196,6 @@ object NaviDeepLinkNavigator : DeepLinkListener { private const val OFFER_GENERATION_V2 = "OFFER_GENERATION_V2" private const val PERMISSION_V2 = "permission_V2" private const val PERMISSION_V3 = "permission_V3" - const val INTERMEDIATE_V2 = "intermediate_V2" private const val BOTTOM_SHEET = "bottom_sheet" private const val BOTTOM_SHEET_R11_PAYMENT = "r11_payment" private const val ICON_TITLE_DESC_BOTTOMSHEET = "icon_title_desc_bottomsheet" @@ -209,22 +203,18 @@ object NaviDeepLinkNavigator : DeepLinkListener { const val WEB_URL = "webUrl" private const val NAVI_WEB_VIEW = "NAVI_WEB_VIEW" private const val CUSTOMER_SUPPORT = "CUSTOMER_SUPPORT" - private const val DOCUMENT_LIST = "documentList" private const val OPEN_EMAIL = "openEmail" const val VIEW_VIDEO = "view_video" private const val FEEDBACK_SCREEN = "feedback_screen" private const val DIGITAL_GOLD_FTUE = "digitalGoldFTUE" private const val PAYMENT_BEHAVIOUR = "PAYMENT_BEHAVIOUR" - private const val BANK_ACCOUNT_CHANGE = "bank_account_change" private const val PAYMENT_HANDLER = "PAYMENT_HANDLER" private const val COIN = "coin" - private const val CROSS_SELL_SCREEN = "CROSS_SELL_SCREEN" const val PROFILE = "profile" private const val PAYMENT_ACTIVITY = "PAYMENT_ACTIVITY" private const val ALL_TICKETS_V2 = "ALL_TICKETS_V2" const val HELP_CENTER = "HELP_CENTER" private const val PRODUCT_HELP_PAGE = "PRODUCT_HELP_PAGE" - private const val CLOSED_LOANS = "CLOSED_LOANS" private const val NAVIPAY_DELETE_USER_DATA = "NAVIPAY_DELETE" private const val AP_FINISH_OK = "AP_FINISH_OK" private const val AP_FINISH = "AP_FINISH" @@ -233,7 +223,6 @@ object NaviDeepLinkNavigator : DeepLinkListener { private const val WEB = "web" private const val PLATFORM_TYPE = "platformType" - private const val TARGET_PLATFORM = "targetPlatform" private const val ANDROID = "Android" private const val CREDIT_CARD_DETAILS = "creditCardDetails" @@ -418,14 +407,6 @@ object NaviDeepLinkNavigator : DeepLinkListener { CUSTOM_PAYMENT -> { intent = Intent(activity, CustomPaymentActivity::class.java) } - DOCUMENT_LIST -> { - var loanAccountNumber: String? = null - ctaData.parameters?.forEach { keyValue -> - loanAccountNumber = keyValue.value - } - bundle.putString(LOAN_ACCOUNT_NUMBER, loanAccountNumber) - intent = Intent(activity, DocumentListActivity::class.java) - } FEEDBACK_SCREEN -> { intent = Intent(activity, FeedbackActivity::class.java) } @@ -729,18 +710,9 @@ object NaviDeepLinkNavigator : DeepLinkListener { BuildConfig.YOUTUBE_KEY ) } - BANK_ACCOUNT_CHANGE -> { - intent = Intent(activity, BankChangeActivity::class.java) - } PAYMENT_HANDLER -> { intent = Intent(activity, LEPaymentHandlerActivity::class.java) } - CROSS_SELL_SCREEN -> { - intent = Intent(activity, CrossSellActivity::class.java) - } - CLOSED_LOANS -> { - intent = Intent(activity, ClosedLoansActivity::class.java) - } LOGOUT -> { deleteCacheAndOpenLoginPage() } diff --git a/android/app/src/main/java/com/naviapp/common/navigator/ScreenNavigator.kt b/android/app/src/main/java/com/naviapp/common/navigator/ScreenNavigator.kt index fb8013d99c..eeac8d6119 100644 --- a/android/app/src/main/java/com/naviapp/common/navigator/ScreenNavigator.kt +++ b/android/app/src/main/java/com/naviapp/common/navigator/ScreenNavigator.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2020-2024 by Navi Technologies Limited + * * Copyright © 2020-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -18,7 +18,6 @@ import com.navi.base.utils.orFalse import com.navi.base.utils.orZero import com.navi.common.ui.activity.NaviWebViewActivity import com.navi.rr.rewards.ui.activity.RewardDelightActivity -import com.naviapp.crosssell.ui.CrossSellActivity import com.naviapp.email.activity.EmailActivity import com.naviapp.home.compose.activity.HomePageActivity import com.naviapp.registration.RegistrationActivity @@ -84,9 +83,6 @@ class ScreenNavigator { REGISTRATION_SCREEN -> { intent = Intent(currentActivity, RegistrationActivity::class.java) } - CROSS_SELL_SCREEN -> { - intent = Intent(currentActivity, CrossSellActivity::class.java) - } REWARDS_DELIGHT_SCREEN -> { intent = Intent(currentActivity, RewardDelightActivity::class.java) } @@ -120,7 +116,6 @@ class ScreenNavigator { const val REGISTRATION_SCREEN = "REGISTRATION_SCREEN" const val NAVI_WEB_VIEW = "NAVI_WEB_VIEW" const val EMAIL_US_SCREEN = "EMAIL_US_SCREEN" - const val CROSS_SELL_SCREEN = "CROSS_SELL_SCREEN" const val HOME = "HOME" const val FAQS_SCREEN = "FAQS_SCREEN" val instance: ScreenNavigator by lazy { Holder.INSTANCE } diff --git a/android/app/src/main/java/com/naviapp/common/repository/ActiveLoanDetailsRepository.kt b/android/app/src/main/java/com/naviapp/common/repository/ActiveLoanDetailsRepository.kt deleted file mode 100644 index fc420fb52c..0000000000 --- a/android/app/src/main/java/com/naviapp/common/repository/ActiveLoanDetailsRepository.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.repository - -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.utils.retrofitService - -class ActiveLoanDetailsRepository : ResponseCallback() { - - suspend fun fetchActiveLoanDetails() = - apiResponseCallback(retrofitService().fetchActiveLoanDetails()) -} diff --git a/android/app/src/main/java/com/naviapp/common/repository/CreditAnalysisRepository.kt b/android/app/src/main/java/com/naviapp/common/repository/CreditAnalysisRepository.kt deleted file mode 100644 index 2a6ff9c1e6..0000000000 --- a/android/app/src/main/java/com/naviapp/common/repository/CreditAnalysisRepository.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.repository - -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.utils.retrofitService - -class CreditAnalysisRepository : ResponseCallback() { - suspend fun fetchCreditData() = apiResponseCallback(retrofitService().fetchCreditData()) -} diff --git a/android/app/src/main/java/com/naviapp/common/viewholders/NaviCalendarDayVH.kt b/android/app/src/main/java/com/naviapp/common/viewholders/NaviCalendarDayVH.kt deleted file mode 100644 index 98f2a898c6..0000000000 --- a/android/app/src/main/java/com/naviapp/common/viewholders/NaviCalendarDayVH.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.viewholders - -import androidx.recyclerview.widget.RecyclerView -import com.naviapp.common.customview.NaviCalendarDayItemView -import com.naviapp.common.listeners.NaviCalendarDayClickListener -import com.naviapp.common.model.DayContent - -class NaviCalendarDayVH(private val naviCalendarDayItemView: NaviCalendarDayItemView) : - RecyclerView.ViewHolder(naviCalendarDayItemView) { - - fun bind(dayContent: DayContent, listener: NaviCalendarDayClickListener? = null) { - naviCalendarDayItemView.setProperties(dayContent, listener, this.layoutPosition) - } -} diff --git a/android/app/src/main/java/com/naviapp/common/viewmodel/ActiveLoanDetailsVM.kt b/android/app/src/main/java/com/naviapp/common/viewmodel/ActiveLoanDetailsVM.kt deleted file mode 100644 index efc4858ec1..0000000000 --- a/android/app/src/main/java/com/naviapp/common/viewmodel/ActiveLoanDetailsVM.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.viewmodel - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.navi.common.viewmodel.BaseVM -import com.naviapp.common.repository.ActiveLoanDetailsRepository -import com.naviapp.models.response.ActiveLoanDetailsResponse -import kotlinx.coroutines.launch - -class ActiveLoanDetailsVM( - private val activeLoanDetailsRepository: ActiveLoanDetailsRepository = - ActiveLoanDetailsRepository() -) : BaseVM() { - - private val _activeLoanDetails = MutableLiveData() - val activeLoanDetails: LiveData - get() = _activeLoanDetails - - fun fetchActiveLoanDetails() { - coroutineScope.launch { - val response = activeLoanDetailsRepository.fetchActiveLoanDetails() - if (response.error == null && response.errors.isNullOrEmpty()) { - _activeLoanDetails.value = response.data - } else { - setErrorData(response.errors, response.error) - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/common/viewmodel/CreditAnalysisViewModel.kt b/android/app/src/main/java/com/naviapp/common/viewmodel/CreditAnalysisViewModel.kt deleted file mode 100644 index a6ed36c496..0000000000 --- a/android/app/src/main/java/com/naviapp/common/viewmodel/CreditAnalysisViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.common.viewmodel - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.navi.common.network.models.ErrorMetaData -import com.navi.common.utils.Constants.FLOW_COUPON -import com.navi.common.viewmodel.BaseVM -import com.naviapp.common.repository.CreditAnalysisRepository -import com.naviapp.models.CreditDataResponse -import kotlinx.coroutines.launch - -class CreditAnalysisViewModel( - private val repository: CreditAnalysisRepository = CreditAnalysisRepository() -) : BaseVM(false) { - private val _creditData = MutableLiveData() - val creditData: LiveData - get() = _creditData - - fun fetchCreditData() { - coroutineScope.launch { - val response = repository.fetchCreditData() - if (response.error == null && response.errors.isNullOrEmpty()) { - _creditData.value = response.data - } else { - setErrorData( - response.errors, - response.error, - errorMetaData = - ErrorMetaData(flowName = FLOW_COUPON, methodName = ::fetchCreditData.name) - ) - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/crosssell/di/modules/CrossSellModule.kt b/android/app/src/main/java/com/naviapp/crosssell/di/modules/CrossSellModule.kt deleted file mode 100644 index cec061c667..0000000000 --- a/android/app/src/main/java/com/naviapp/crosssell/di/modules/CrossSellModule.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.crosssell.di.modules - -import com.naviapp.crosssell.repository.CrossSellRepository -import com.naviapp.crosssell.repository.PostDisbursalRepository -import com.naviapp.network.di.SuperAppRetroFit -import com.naviapp.network.retrofit.RetrofitService -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.android.components.ViewModelComponent -import dagger.hilt.android.scopes.ViewModelScoped - -@Module -@InstallIn(ViewModelComponent::class) -object CrossSellModule { - - @ViewModelScoped - @Provides - fun providesCrossSellRepository(@SuperAppRetroFit retrofitService: RetrofitService) = - CrossSellRepository(retrofitService = retrofitService) - - @ViewModelScoped - @Provides - fun providesPostDisbursalRepository(@SuperAppRetroFit retrofitService: RetrofitService) = - PostDisbursalRepository(retrofitService = retrofitService) -} diff --git a/android/app/src/main/java/com/naviapp/crosssell/listeners/FeedbackEventListener.kt b/android/app/src/main/java/com/naviapp/crosssell/listeners/FeedbackEventListener.kt deleted file mode 100644 index a38f142992..0000000000 --- a/android/app/src/main/java/com/naviapp/crosssell/listeners/FeedbackEventListener.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.crosssell.listeners - -import com.navi.naviwidgets.models.response.NpsWidgetData -import com.naviapp.models.response.SubmitSurveyResponse - -interface FeedbackEventListener { - fun submitBottomSheet(submitSurveyResponse: SubmitSurveyResponse) - - fun dismissBottomSheet(npsWidgetData: NpsWidgetData?) -} diff --git a/android/app/src/main/java/com/naviapp/crosssell/models/CrossSellResponse.kt b/android/app/src/main/java/com/naviapp/crosssell/models/CrossSellResponse.kt deleted file mode 100644 index 67e60d8cb5..0000000000 --- a/android/app/src/main/java/com/naviapp/crosssell/models/CrossSellResponse.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.crosssell.models - -import com.google.gson.annotations.SerializedName -import com.navi.common.model.common.Header -import com.navi.naviwidgets.models.NaviWidget - -data class CrossSellResponse( - @SerializedName("headerContent") val header: Header? = null, - @SerializedName("contentWidget") val contentWidget: List? = null, - @SerializedName("footerWidget") val footerWidget: List? = null -) diff --git a/android/app/src/main/java/com/naviapp/crosssell/repository/CrossSellRepository.kt b/android/app/src/main/java/com/naviapp/crosssell/repository/CrossSellRepository.kt deleted file mode 100644 index 7f7f19c8d9..0000000000 --- a/android/app/src/main/java/com/naviapp/crosssell/repository/CrossSellRepository.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.crosssell.repository - -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.network.retrofit.RetrofitService -import javax.inject.Inject - -class CrossSellRepository -@Inject -constructor( - private val retrofitService: RetrofitService, -) : ResponseCallback() { - - suspend fun fetchCrossSellDetails(screenName: String, loanApplicationId: String) = - apiResponseCallback( - retrofitService.fetchCrossSellDetails( - screenName = screenName, - loanApplicationId = loanApplicationId - ) - ) -} diff --git a/android/app/src/main/java/com/naviapp/crosssell/repository/PostDisbursalRepository.kt b/android/app/src/main/java/com/naviapp/crosssell/repository/PostDisbursalRepository.kt deleted file mode 100644 index c23a3a2150..0000000000 --- a/android/app/src/main/java/com/naviapp/crosssell/repository/PostDisbursalRepository.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.crosssell.repository - -import com.naviapp.models.request.NetPromoterScoreRequest -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.network.retrofit.RetrofitService -import javax.inject.Inject - -class PostDisbursalRepository -@Inject -constructor( - private val retrofitService: RetrofitService, -) : ResponseCallback() { - - suspend fun submitNpsDetails(netPromoterScoreRequest: NetPromoterScoreRequest) = - apiResponseCallback(retrofitService.submitNpsDetails(netPromoterScoreRequest)) -} diff --git a/android/app/src/main/java/com/naviapp/crosssell/ui/CrossSellActivity.kt b/android/app/src/main/java/com/naviapp/crosssell/ui/CrossSellActivity.kt deleted file mode 100644 index aaadc0d003..0000000000 --- a/android/app/src/main/java/com/naviapp/crosssell/ui/CrossSellActivity.kt +++ /dev/null @@ -1,294 +0,0 @@ -/* - * - * * Copyright © 2022-2025 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.crosssell.ui - -import android.os.Bundle -import android.view.animation.AnimationUtils -import androidx.core.view.isVisible -import androidx.databinding.DataBindingUtil -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.LinearLayoutManager -import com.navi.amc.utils.orValue -import com.navi.base.model.* -import com.navi.base.sharedpref.PreferenceManager -import com.navi.base.utils.orFalse -import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper -import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.IS_PLAYSTORE_RATING_ENABLED_FOR_PL_JOURNEY -import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.MIN_NPS_TO_INITIATE_PLAYSTORE_RATING -import com.navi.common.model.ModuleNameV2 -import com.navi.common.ui.activity.BaseActivity -import com.navi.common.utils.Constants.EIGHT -import com.navi.common.utils.PlayStoreInAppRatingHelper -import com.navi.common.utils.observeNonNull -import com.navi.common.utils.toCtaData -import com.navi.insurance.util.isFalse -import com.navi.naviwidgets.actions.DismissFeedback -import com.navi.naviwidgets.actions.InformationWidgetCloseClickAction -import com.navi.naviwidgets.actions.NavigateClickAction -import com.navi.naviwidgets.adapters.NaviAdapter -import com.navi.naviwidgets.callbacks.WidgetCallback -import com.navi.naviwidgets.extensions.showWhenDataIsAvailable -import com.navi.naviwidgets.models.ActionButtonWidget -import com.navi.naviwidgets.models.NaviWidget -import com.navi.naviwidgets.models.PostDisbursalSuccessWidget -import com.navi.naviwidgets.models.WidgetChangedData -import com.navi.naviwidgets.models.response.InformationWidget -import com.navi.naviwidgets.models.response.NpsWidget -import com.navi.naviwidgets.models.response.NpsWidgetData -import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE -import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.analytics.utils.NaviAnalytics.Companion.CROSS_SELL_LAND_SCREEN_EVENT_NAME -import com.naviapp.common.navigator.NaviDeepLinkNavigator -import com.naviapp.crosssell.listeners.FeedbackEventListener -import com.naviapp.crosssell.models.CrossSellResponse -import com.naviapp.crosssell.viewmodel.CrossSellVM -import com.naviapp.databinding.ActivityCrossSellBinding -import com.naviapp.home.analytics.LandingScreenAnalytics -import com.naviapp.models.response.SubmitSurveyResponse -import com.naviapp.utils.Constants.DISBURSED -import com.naviapp.utils.Constants.PL_EVENT_NAME -import com.naviapp.utils.EMPTY -import com.naviapp.utils.LOAN_APPLICATION_ID -import dagger.hilt.android.AndroidEntryPoint - -@AndroidEntryPoint -class CrossSellActivity : BaseActivity(), WidgetCallback, FeedbackEventListener { - - private lateinit var binding: ActivityCrossSellBinding - private val widgetNaviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Widget() - private val naviAdapter by lazy { - NaviAdapter(widgetCallback = this, factory = ViewHolderFactoryImpl()) - } - private val crossSellVM by lazy { ViewModelProvider(this).get(CrossSellVM::class.java) } - private var isFeedBackDismiss: Boolean = false - private var playStoreInAppRatingHelper: PlayStoreInAppRatingHelper? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = DataBindingUtil.setContentView(this, R.layout.activity_cross_sell) - setContentView(binding.root) - if ( - FirebaseRemoteConfigHelper.getBoolean(IS_PLAYSTORE_RATING_ENABLED_FOR_PL_JOURNEY) - .orFalse() - ) { - playStoreInAppRatingHelper = PlayStoreInAppRatingHelper(this, source = PL_EVENT_NAME) - } - initUI() - overridePendingTransition(R.anim.activity_bottom_to_top_slide, R.anim.app_nothing) - initObserver() - initError( - viewModel = crossSellVM, - dialogDismissClicked = { fetchCrossSell() }, - showFullScreenError = true - ) - widgetAnalytics(GenericAnalyticsData(eventName = CROSS_SELL_LAND_SCREEN_EVENT_NAME)) - fetchCrossSell() - } - - private fun fetchCrossSell() { - showShimmer() - val loanApplicationId = PreferenceManager.getStringPreference(LOAN_APPLICATION_ID) - crossSellVM.fetchCrossSellDetails( - screenName = DISBURSED, - loanApplicationId = loanApplicationId ?: EMPTY - ) - } - - private fun initUI() { - binding.rvCrossSellItems.apply { - layoutManager = - LinearLayoutManager(this@CrossSellActivity, LinearLayoutManager.VERTICAL, false) - adapter = naviAdapter - } - } - - private fun processHeader(response: CrossSellResponse?) { - response?.header?.let { header -> - binding.backBtn.showWhenDataIsAvailable(header.leftIconData?.iconCode) - binding.backBtn.setOnClickListener { - NaviDeepLinkNavigator.navigate( - activity = this, - ctaData = - CtaData( - url = header.leftIconData?.actionData?.url, - parameters = header.leftIconData?.actionData?.parameters - ), - finish = true - ) - } - } - } - - private fun initObserver() { - lifecycleScope.launchWhenResumed { - crossSellVM.crossSellResponse.observeNonNull(this@CrossSellActivity) { crossSellResponse - -> - stopShimmer(crossSellResponse) - processHeader(crossSellResponse) - crossSellResponse.contentWidget?.let { contentWidgets -> - naviAdapter.list = contentWidgets - } - crossSellResponse.footerWidget?.let { footerWidget -> - binding.tvAction.apply { - if (footerWidget.isNotEmpty() && footerWidget[0] is ActionButtonWidget) { - val actionButtonWidget = footerWidget[0] as ActionButtonWidget - text = actionButtonWidget.widgetData?.actionData?.title - setOnClickListener { - widgetAnalytics( - actionButtonWidget.widgetData?.actionData?.metaData?.clickedData - ) - onClick( - NavigateClickAction( - url = actionButtonWidget.widgetData?.actionData?.url, - isFinishActivity = true, - parameters = - actionButtonWidget.widgetData?.actionData?.parameters - ) - ) - } - } - } - } - } - } - } - - override fun onClick(naviClickAction: NaviClickAction, widgetId: String?) { - when (naviClickAction) { - is InformationWidgetCloseClickAction -> { - naviAdapter.removeSameIndexItemTwice(naviClickAction.position) - } - is ActionData -> { - widgetNaviAnalyticsEventTracker.onWidgetClickEvent(naviClickAction) - NaviDeepLinkNavigator.navigate(this, naviClickAction.toCtaData(), finish = true) - } - is NavigateClickAction -> { - NaviDeepLinkNavigator.navigate( - activity = this, - ctaData = - CtaData(url = naviClickAction.url, parameters = naviClickAction.parameters), - finish = naviClickAction.isFinishActivity - ) - } - is NaviWidgetClickWithActionData -> { - naviClickAction.actionData?.let { - widgetNaviAnalyticsEventTracker.onWidgetClickEvent(it) - NaviDeepLinkNavigator.navigate(this, it.toCtaData()) - } - } - is NpsWidgetData -> { - val postDisbursalFeedbackBottomSheet = - PostDisbursalFeedbackBottomSheet.newInstance(naviClickAction, this) - safelyShowBottomSheet( - postDisbursalFeedbackBottomSheet, - PostDisbursalFeedbackBottomSheet.TAG - ) - val selectedRatingValue = naviClickAction.selectedRatingValue - if ( - selectedRatingValue != null && - selectedRatingValue > - FirebaseRemoteConfigHelper.getLong(MIN_NPS_TO_INITIATE_PLAYSTORE_RATING) - .toInt() - .orValue(EIGHT) && - FirebaseRemoteConfigHelper.getBoolean( - IS_PLAYSTORE_RATING_ENABLED_FOR_PL_JOURNEY - ) - .orFalse() - ) { - playStoreInAppRatingHelper?.inAppRating(this) - } - } - is DismissFeedback -> { - if (isFeedBackDismiss.isFalse()) { - naviAdapter.removeSameIndexItemTwice(index = naviClickAction.position) - binding.rvCrossSellItems.startAnimation( - AnimationUtils.loadAnimation(this, R.anim.post_disbursal_anim) - ) - isFeedBackDismiss = true - } - } - } - } - - override fun widgetAnalytics(genericAnalyticsData: GenericAnalyticsData?) { - genericAnalyticsData?.let { data -> - LandingScreenAnalytics.sendEventsToClickStream(data.eventName, data.parameters) - } - } - - private fun updateWidgets(listOfWidgets: List) { - if (naviAdapter.list[1] is InformationWidget) { - naviAdapter.removeSameIndexItemTwice(index = 1) - } - var npsWidgetIndex = 0 - var isPostDisbursalSuccessWidget = false - naviAdapter.list.forEachIndexed { index, _ -> - if (naviAdapter.list[index] is NpsWidget) { - npsWidgetIndex = index - } - if (naviAdapter.list[index] is PostDisbursalSuccessWidget) { - isPostDisbursalSuccessWidget = true - } - } - if (isPostDisbursalSuccessWidget) { - naviAdapter.removeSameIndexItemTwice(index = npsWidgetIndex - 1) - } - naviAdapter.removeSameIndexItemTwice(index = npsWidgetIndex) - if (isPostDisbursalSuccessWidget) { - naviAdapter.insertNewItemAtIndex(0, listOfWidgets) - } else { - naviAdapter.insertNewItemAtIndex(1, listOfWidgets) - } - binding.rvCrossSellItems.scrollToPosition(0) - } - - private fun showShimmer() { - binding.shimmerLayout.startShimmer() - binding.shimmerLayout.isVisible = true - binding.rvCrossSellItems.isVisible = false - binding.tvAction.isVisible = false - } - - private fun stopShimmer(crossSellResponse: CrossSellResponse?) { - binding.shimmerLayout.stopShimmer() - crossSellResponse?.header?.let { binding.headerView.isVisible = true } - binding.shimmerLayout.isVisible = false - binding.rvCrossSellItems.isVisible = true - binding.tvAction.isVisible = true - } - - override fun submitBottomSheet(submitSurveyResponse: SubmitSurveyResponse) { - submitSurveyResponse.contentWidget?.let { naviWidgets -> updateWidgets(naviWidgets) } - } - - override fun dismissBottomSheet(npsWidgetData: NpsWidgetData?) { - npsWidgetData?.widgetPosition?.let { - naviAdapter.notifyItemChanged( - it, - WidgetChangedData( - widgetAction = WIDGET_STATE_CHANGE, - payload = naviAdapter.list[it] - ) - ) - } - } - - override val screenName: String - get() = NaviAnalytics.CROSS_SELL_SCREEN - - override val moduleName: ModuleNameV2 - get() = ModuleNameV2.LE - - override fun onDestroy() { - super.onDestroy() - playStoreInAppRatingHelper = null - } -} diff --git a/android/app/src/main/java/com/naviapp/crosssell/ui/PostDisbursalFeedbackBottomSheet.kt b/android/app/src/main/java/com/naviapp/crosssell/ui/PostDisbursalFeedbackBottomSheet.kt deleted file mode 100644 index e336f697fa..0000000000 --- a/android/app/src/main/java/com/naviapp/crosssell/ui/PostDisbursalFeedbackBottomSheet.kt +++ /dev/null @@ -1,214 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.crosssell.ui - -import android.content.DialogInterface -import android.os.Bundle -import android.view.Gravity -import android.view.ViewStub -import androidx.core.view.isVisible -import androidx.databinding.DataBindingUtil -import androidx.lifecycle.ViewModelProvider -import com.navi.analytics.utils.NaviTrackEvent -import com.navi.base.utils.isNotNull -import com.navi.base.utils.orFalse -import com.navi.common.ui.fragment.BaseBottomSheet -import com.navi.common.utils.observeNonNull -import com.navi.naviwidgets.models.response.GeneralTextResponse -import com.navi.naviwidgets.models.response.NpsWidgetConstraint -import com.navi.naviwidgets.models.response.NpsWidgetData -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.adapter.CheckBoxAdapter -import com.naviapp.crosssell.listeners.FeedbackEventListener -import com.naviapp.crosssell.viewmodel.PostDisbursalVM -import com.naviapp.databinding.PostDisbursalFeedbackBottomSheetBinding -import com.naviapp.models.request.NetPromoterScoreRequest -import com.naviapp.utils.Constants -import com.naviapp.utils.Constants.CHECKED -import com.naviapp.utils.Constants.KEY_REFERENCE_ID -import com.naviapp.utils.Constants.UN_CHECKED -import com.naviapp.utils.EMPTY -import dagger.hilt.android.AndroidEntryPoint - -@AndroidEntryPoint -class PostDisbursalFeedbackBottomSheet : BaseBottomSheet(), FreeTextBoxListener { - private lateinit var binding: PostDisbursalFeedbackBottomSheetBinding - var adapter: CheckBoxAdapter? = null - private var feedbackEventListener: FeedbackEventListener? = null - private val postDisbursalVM by lazy { ViewModelProvider(this).get(PostDisbursalVM::class.java) } - var npsWidgetData: NpsWidgetData? = null - var npsWidgetConstraint: NpsWidgetConstraint? = null - - override fun setContainerView(viewStub: ViewStub) { - viewStub.layoutResource = R.layout.post_disbursal_feedback_bottom_sheet - binding = DataBindingUtil.getBinding(viewStub.inflate())!! - initUI() - } - - private fun initUI() { - npsWidgetData = arguments?.getParcelable(DATA) - npsWidgetConstraint = - (npsWidgetData?.selectIndex?.let { npsWidgetData?.npsWidgetConstraint?.get(it) } ?: 0) - as NpsWidgetConstraint - binding.title.text = npsWidgetConstraint?.ratingData?.title - NaviTrackEvent.trackEvent( - npsWidgetData?.actionData?.metaData?.viewedData?.eventName.toString() - ) - adapter = CheckBoxAdapter(this, requireContext()) - npsWidgetConstraint?.ratingData?.optionsList?.let { adapter?.setReasons(it) } - binding.gridReasons.adapter = adapter - binding.freeText.hint = npsWidgetData?.freeTextHint - binding.primaryAbv.apply { - setOnClickListener { - binding.contentBarrier.isVisible = true - submitNpsDetails(npsWidgetData, npsWidgetConstraint) - } - } - initObserver() - initError(viewModel = postDisbursalVM) - handleError() - setButtonData() - handleSubmitBtn() - } - - private fun setButtonData() { - binding.primaryAbv.apply { - setViewBg( - cornerRadiusId = R.integer.value_110, - elevation = resources.getDimension(R.dimen.layout_dp_0) - ) - setTitle(resources.getString(R.string.submit)) - setTextGravity(Gravity.CENTER) - setButtonHeight(resources.getDimension(R.dimen.layout_dp_48)) - } - } - - private fun handleError() { - postDisbursalVM.errorResponse.observeNonNull(viewLifecycleOwner) { safelyDismissDialog() } - - postDisbursalVM.errorMessage.observeNonNull(viewLifecycleOwner) { safelyDismissDialog() } - } - - private fun submitNpsDetails( - bottomSheetData: NpsWidgetData?, - npsWidgetConstraint: NpsWidgetConstraint? - ) { - val responseList = mutableListOf() - val responseListMap = mutableMapOf() - npsWidgetConstraint?.ratingData?.let { - it.optionsList?.forEach { response -> - if (response.isChecked) { - response.id?.let { responseId -> - responseList.add(responseId) - responseListMap.put(Constants.KEY_REFERENCE_ID, responseId) - } - } - } - } - NaviTrackEvent.trackEvent( - bottomSheetData?.actionData?.metaData?.clickedData?.eventName.toString(), - responseListMap - ) - val netPromoterScoreRequest = - NetPromoterScoreRequest( - ratingSelectedIndex = bottomSheetData?.selectIndex.toString(), - followUpResponse = responseList, - responseReferenceId = bottomSheetData?.npsResponseReferenceId, - questionReferenceId = bottomSheetData?.questionReferenceId, - freeTextResponse = binding.freeText.text.toString() - ) - postDisbursalVM.submitNpsDetails(netPromoterScoreRequest) - } - - override val screenName: String - get() = NaviAnalytics.POST_DISBURSAL_FEEDBACK_BOTTOM_SHEET - - companion object { - const val TAG = "POST_DISBURSAL_FEEDBACK_BOTTOM_SHEET" - private const val DATA = "DATA" - - fun newInstance(npsWidgetData: NpsWidgetData, listener: FeedbackEventListener) = - PostDisbursalFeedbackBottomSheet().apply { - val bundle = Bundle() - bundle.putParcelable(DATA, npsWidgetData) - arguments = bundle - feedbackEventListener = listener - } - } - - private fun handleSubmitBtn() { - binding.primaryAbv.setStateWithOrangeColor( - npsWidgetConstraint - ?.ratingData - ?.optionsList - ?.any { response -> response.isChecked } - .orFalse() - ) - } - - override fun onOptionSelect(data: GeneralTextResponse?) { - handleSubmitBtn() - if (data?.showFreeText.isNotNull() && data?.showFreeText == true) { - binding.freeText.isVisible = data.isChecked == true - } - if (data?.isChecked == true) { - if ( - npsWidgetData - ?.optionSelectMetaData - ?.clickedData - ?.parameters - ?.containsKey(CHECKED) == true - ) { - NaviTrackEvent.trackEventOnClickStream( - npsWidgetData - ?.optionSelectMetaData - ?.clickedData - ?.parameters - ?.getOrElse(CHECKED) { EMPTY } - .toString(), - mapOf(KEY_REFERENCE_ID to data?.id.toString()) - ) - } - } else { - if ( - npsWidgetData - ?.optionSelectMetaData - ?.clickedData - ?.parameters - ?.containsKey(UN_CHECKED) == true - ) { - NaviTrackEvent.trackEventOnClickStream( - npsWidgetData - ?.optionSelectMetaData - ?.clickedData - ?.parameters - ?.getOrElse(UN_CHECKED) { EMPTY } - .toString(), - mapOf(KEY_REFERENCE_ID to data?.id.toString()) - ) - } - } - } - - private fun initObserver() { - postDisbursalVM.ratingSubmitResponse.observeNonNull(this) { response -> - safelyDismissDialog() - feedbackEventListener?.submitBottomSheet(response) - } - } - - override fun onDismiss(dialog: DialogInterface) { - super.onDismiss(dialog) - feedbackEventListener?.dismissBottomSheet(npsWidgetData) - } -} - -interface FreeTextBoxListener { - fun onOptionSelect(data: GeneralTextResponse?) -} diff --git a/android/app/src/main/java/com/naviapp/crosssell/viewmodel/CrossSellVM.kt b/android/app/src/main/java/com/naviapp/crosssell/viewmodel/CrossSellVM.kt deleted file mode 100644 index a24b51c5fb..0000000000 --- a/android/app/src/main/java/com/naviapp/crosssell/viewmodel/CrossSellVM.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.crosssell.viewmodel - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.viewModelScope -import com.navi.common.viewmodel.BaseVM -import com.naviapp.crosssell.models.CrossSellResponse -import com.naviapp.crosssell.repository.CrossSellRepository -import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject -import kotlinx.coroutines.launch - -@HiltViewModel -class CrossSellVM @Inject constructor(private val crossSellRepository: CrossSellRepository) : - BaseVM() { - - private val _crossSellResponse = MutableLiveData() - val crossSellResponse: LiveData - get() = _crossSellResponse - - fun fetchCrossSellDetails(screenName: String, loanApplicationId: String) { - viewModelScope.launch { - val response = - crossSellRepository.fetchCrossSellDetails( - screenName = screenName, - loanApplicationId = loanApplicationId - ) - if (response.error == null && response.errors.isNullOrEmpty()) { - _crossSellResponse.value = response.data - } else { - setErrorData(response.errors, response.error) - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/crosssell/viewmodel/PostDisbursalVM.kt b/android/app/src/main/java/com/naviapp/crosssell/viewmodel/PostDisbursalVM.kt deleted file mode 100644 index ff30abad18..0000000000 --- a/android/app/src/main/java/com/naviapp/crosssell/viewmodel/PostDisbursalVM.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.crosssell.viewmodel - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.navi.common.viewmodel.BaseVM -import com.naviapp.crosssell.repository.PostDisbursalRepository -import com.naviapp.models.request.NetPromoterScoreRequest -import com.naviapp.models.response.SubmitSurveyResponse -import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject -import kotlinx.coroutines.launch - -@HiltViewModel -class PostDisbursalVM @Inject constructor(private val repository: PostDisbursalRepository) : - BaseVM() { - - private val _ratingSubmitResponse = MutableLiveData() - val ratingSubmitResponse: LiveData - get() = _ratingSubmitResponse - - fun submitNpsDetails(netPromoterScoreRequest: NetPromoterScoreRequest) { - coroutineScope.launch { - val response = repository.submitNpsDetails(netPromoterScoreRequest) - if (response.error == null && response.errors.isNullOrEmpty()) { - _ratingSubmitResponse.value = response.data - } else { - setErrorData(errors = response.errors, error = response.error) - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/DashboardBaseActivity.kt b/android/app/src/main/java/com/naviapp/dashboard/DashboardBaseActivity.kt index 4fb2ad8d4d..33e45fed7c 100644 --- a/android/app/src/main/java/com/naviapp/dashboard/DashboardBaseActivity.kt +++ b/android/app/src/main/java/com/naviapp/dashboard/DashboardBaseActivity.kt @@ -1,13 +1,12 @@ /* * - * * Copyright © 2020-2024 by Navi Technologies Limited + * * Copyright © 2020-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ package com.naviapp.dashboard -import android.app.Activity import android.content.Intent import androidx.lifecycle.ViewModelProvider import com.cashfree.pg.core.api.callback.CFCheckoutResponseCallback @@ -369,7 +368,7 @@ abstract class DashboardBaseActivity : return } val intent = Intent() - setResult(Activity.RESULT_OK, intent) + setResult(RESULT_OK, intent) finish() } diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/activities/BankChangeActivity.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/activities/BankChangeActivity.kt deleted file mode 100644 index 9166454766..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/activities/BankChangeActivity.kt +++ /dev/null @@ -1,86 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.bank_account_change.activities - -import android.os.Bundle -import androidx.databinding.DataBindingUtil -import com.navi.base.model.CtaData -import com.navi.common.listeners.FragmentInterchangeListener -import com.navi.common.model.ModuleNameV2 -import com.navi.common.ui.activity.BaseActivity -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.navigator.NaviDeepLinkNavigator -import com.naviapp.databinding.ActivityBankChangeBinding -import com.naviapp.part_prepayment.FragmentMapper -import com.naviapp.utils.Constants -import com.naviapp.utils.getLendingModuleNameFromWidgetId -import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject - -@AndroidEntryPoint -class BankChangeActivity : BaseActivity(), FragmentInterchangeListener { - @Inject lateinit var fragmentMapper: FragmentMapper - lateinit var binding: ActivityBankChangeBinding - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = DataBindingUtil.setContentView(this, R.layout.activity_bank_change) - navigateToNextScreen( - intent?.extras?.getString(Constants.REDIRECT_STATUS).orEmpty(), - intent?.extras ?: Bundle() - ) - } - - override val screenName: String - get() = NaviAnalytics.BANK_ACCOUNT_CHANGE - - override val moduleName: ModuleNameV2 - get() = getLendingModuleNameFromWidgetId(intent?.extras?.getString(Constants.WIDGET_ID)) - - override fun navigateToNextScreen(currentScreenTag: String, bundle: Bundle) { - val tag = fragmentMapper.getFragmentTagByUrl(currentScreenTag) - val fragment = - supportFragmentManager.findFragmentByTag(tag) - ?: fragmentMapper.getFragmentByUrl(currentScreenTag) - fragment?.apply { arguments = bundle } - if (fragment != null) { - val fragmentTransaction = supportFragmentManager.beginTransaction() - if (!supportFragmentManager.isStateSaved && !supportFragmentManager.isDestroyed) { - fragmentTransaction.addToBackStack(tag) - fragmentTransaction.replace(R.id.fragment_container, fragment, tag) - fragmentTransaction.commit() - } - } else { - NaviDeepLinkNavigator.navigate(this, CtaData(url = currentScreenTag), true) - } - } - - override fun onBackPressed() { - supportFragmentManager.fragments - .takeIf { it.size > 0 } - ?.let { fragments -> - for (i in (fragments.size - 1) downTo 0) { - val fragment = fragments[i] - val childFragmentManager = fragment.childFragmentManager - if (fragment.isVisible) { - if (childFragmentManager.backStackEntryCount > 0) { - supportFragmentManager.popBackStackImmediate() - return - } - break - } - } - if (supportFragmentManager.backStackEntryCount > 1) { - supportFragmentManager.popBackStackImmediate() - } else { - finish() - } - } ?: run { finish() } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/fragments/BankChangeDetailsFragment.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/fragments/BankChangeDetailsFragment.kt deleted file mode 100644 index 9a93cbf480..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/fragments/BankChangeDetailsFragment.kt +++ /dev/null @@ -1,178 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.bank_account_change.fragments - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.databinding.DataBindingUtil -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.LinearLayoutManager -import com.navi.base.model.CtaData -import com.navi.base.model.CtaType -import com.navi.base.model.LineItem -import com.navi.base.model.NaviClickAction -import com.navi.common.ui.fragment.BaseFragment -import com.navi.common.utils.replaceLayout -import com.navi.naviwidgets.adapters.NaviInputWidgetAdapter -import com.navi.naviwidgets.callbacks.WidgetCallback -import com.navi.naviwidgets.models.NaviWidget -import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl -import com.navi.naviwidgets.widgets.BaseNaviWidgetLayout -import com.navi.naviwidgets.widgets.FooterWidgetLayout -import com.navi.naviwidgets.widgets.WidgetIdProvider -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.fragment.CustomerSupportFragment -import com.naviapp.common.navigator.NaviDeepLinkNavigator -import com.naviapp.dashboard.loanapplicationdetails.bank_account_change.viewmodels.BankChangeDetailsViewModel -import com.naviapp.databinding.FragmentBankAccChangeBinding -import com.naviapp.part_prepayment.states.GenericWidgetState -import com.naviapp.utils.Constants -import com.naviapp.utils.Constants.TRUE -import kotlinx.coroutines.launch - -class BankChangeDetailsFragment : BaseFragment(), WidgetCallback { - private val bankChangeDetailsViewModel by lazy { - ViewModelProvider(this)[BankChangeDetailsViewModel::class.java] - } - private lateinit var binding: FragmentBankAccChangeBinding - private val analyticsTracker = NaviAnalytics.naviAnalytics.BankChangeDetails() - private val widgetIdProvider = WidgetIdProvider() - private val naviAdapter = - NaviInputWidgetAdapter( - widgetCallback = this, - factory = ViewHolderFactoryImpl() - ) - private var loanAccountNumber: String? = null - override val screenName: String - get() = NaviAnalytics.BANK_ACCOUNT_CHANGE - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - binding = - DataBindingUtil.inflate(inflater, R.layout.fragment_bank_acc_change, container, false) - loanAccountNumber = arguments?.getString(Constants.LOAN_ACCOUNT_NUMBER) - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - initError(bankChangeDetailsViewModel, actionErrorV2Enabled = true) - fetchDetails() - initObservers() - } - - private fun initObservers() { - viewLifecycleOwner.lifecycleScope.launchWhenStarted { - launch { bankChangeDetailsViewModel.widgetDataResponse.collect { setWidgetState(it) } } - } - } - - private fun setWidgetState(viewState: GenericWidgetState) { - when (viewState) { - is GenericWidgetState.Init -> { - showLoader() - } - is GenericWidgetState.Failure -> { - hideLoader() - } - is GenericWidgetState.Update -> { - analyticsTracker.onPageLand() - viewState.data?.run { - this.header?.getOrNull(0)?.let { naviWidget -> - updateContainer(naviWidget, binding.headerContainer) - } - this.footer?.getOrNull(0)?.let { naviWidget -> - updateContainer(naviWidget, binding.footerContainer, true) - } - this.content?.let { contentWidget -> - binding.recyclerView.apply { - val linearLayoutManager = - LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) - layoutManager = linearLayoutManager - naviAdapter.list = contentWidget - adapter = naviAdapter - } - } - /*this.content?.let { initUi(it) }*/ - hideLoader() - } - } - else -> Unit - } - } - - private fun updateContainer( - naviWidget: NaviWidget, - container: ViewGroup, - isFooter: Boolean = false - ) { - viewLifecycleOwner.lifecycleScope.launch { - val layoutBinding = - container.replaceLayout(widgetIdProvider.getNaviWidgetLayoutId(naviWidget)) - (layoutBinding?.root as? BaseNaviWidgetLayout)?.updateLayout( - layoutBinding, - naviWidget, - this@BankChangeDetailsFragment - ) - if (isFooter) (layoutBinding?.root as? FooterWidgetLayout)?.removeBackground() - } - } - - override fun onClick(naviClickAction: NaviClickAction, widgetId: String?) { - if (naviClickAction is CtaData) { - if (naviClickAction.url == CtaType.HELP_BOTTOM_SHEET.name) { - val bottomSheet = CustomerSupportFragment.newInstance(screenName, null) - safelyShowBottomSheet(bottomSheet, CustomerSupportFragment.TAG, true) - } else if (naviClickAction.url == CtaType.GO_BACK.name) { - activity?.onBackPressed() - } else if (naviClickAction.url == Constants.PRODUCT_HELP_PAGE) { - openHelpInfo() - } else { - analyticsTracker.onBankChangeDetailsContinueClick() - NaviDeepLinkNavigator.navigate( - activity, - naviClickAction, - bundle = - Bundle().apply { putString(Constants.PL_PP_CHANGE_BANK_JOURNEY, TRUE) }, - finish = true - ) - } - } - } - - private fun openHelpInfo() { - NaviDeepLinkNavigator.navigate( - activity = this.requireActivity(), - ctaData = - CtaData( - url = Constants.PRODUCT_HELP_PAGE, - parameters = - listOf(LineItem(key = Constants.CRM_HELP_SCREEN_NAME, value = screenName)) - ) - ) - } - - private fun fetchDetails() { - bankChangeDetailsViewModel.fetchData(loanAccountNumber) - } - - companion object { - const val TAG = "bank_account_change_fragment" - - fun newInstance(bundle: Bundle?): BankChangeDetailsFragment { - return BankChangeDetailsFragment().apply { arguments = bundle } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/repo/BankDetailsRepository.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/repo/BankDetailsRepository.kt deleted file mode 100644 index b12fd9f903..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/repo/BankDetailsRepository.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.bank_account_change.repo - -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.utils.retrofitService - -class BankDetailsRepository : ResponseCallback() { - - suspend fun bankAccountChangeDetailsPage(loanAccountNumber: String?) = - apiResponseCallback(retrofitService().fetchBankAccountChangeDetails(loanAccountNumber)) -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/viewmodels/BankChangeDetailsViewModel.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/viewmodels/BankChangeDetailsViewModel.kt deleted file mode 100644 index 864299ad66..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/bank_account_change/viewmodels/BankChangeDetailsViewModel.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.bank_account_change.viewmodels - -import com.navi.common.viewmodel.BaseVM -import com.naviapp.dashboard.loanapplicationdetails.bank_account_change.repo.BankDetailsRepository -import com.naviapp.part_prepayment.states.GenericWidgetState -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch - -class BankChangeDetailsViewModel( - private val bankDetailsRepository: BankDetailsRepository = BankDetailsRepository() -) : BaseVM() { - private val _widgetDataResponse = MutableStateFlow(GenericWidgetState.Init) - val widgetDataResponse = _widgetDataResponse.asStateFlow() - - fun fetchData(loanAccountNumber: String?) { - coroutineScope.launch { - _widgetDataResponse.emit(GenericWidgetState.Loading) - val response = bankDetailsRepository.bankAccountChangeDetailsPage(loanAccountNumber) - if ( - response.error == null && response.errors.isNullOrEmpty() && response.data != null - ) { - _widgetDataResponse.emit(GenericWidgetState.Update(response.data!!)) - } else { - _widgetDataResponse.emit(GenericWidgetState.Failure) - setErrorData(response.errors, response.error) - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DocumentListFragment.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DocumentListFragment.kt deleted file mode 100644 index eb8fadc238..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DocumentListFragment.kt +++ /dev/null @@ -1,175 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.documentlist - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.RecyclerView -import com.navi.base.model.AnalyticsEvent -import com.navi.common.ui.fragment.BaseFragment -import com.navi.common.utils.observeNullable -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.dashboard.loanapplicationdetails.documentlist.adapter.DocumentListAdapter -import com.naviapp.dashboard.loanapplicationdetails.documentlist.models.* -import com.naviapp.dashboard.loanapplicationdetails.documentlist.viewmodel.DocumentListVM -import com.naviapp.dashboard.loanapplicationdetails.models.YearDetails -import com.naviapp.databinding.ListOfDocumentsLayoutBinding -import com.naviapp.utils.LOAN_ACCOUNT_NUMBER - -class DocumentListFragment : BaseFragment(), DropDownBottomSheetListener, DocumentListListener { - private lateinit var binding: ListOfDocumentsLayoutBinding - private var loanAccountNumber: String? = null - private var recyclerView: RecyclerView? = null - private var adapter: DocumentListAdapter? = null - private lateinit var documentList: MutableList - private val viewModel by lazy { ViewModelProvider(this).get(DocumentListVM::class.java) } - - private var yearDetails: YearDetails? = null - private var lastDownloadedYearDetails: YearDetails? = null - private var interestCertificateUri: String? = null - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - super.onCreateView(inflater, container, savedInstanceState) - binding = ListOfDocumentsLayoutBinding.inflate(inflater, container, false) - recyclerView = binding.rvDocuments - loanAccountNumber = arguments?.getString(LOAN_ACCOUNT_NUMBER).orEmpty() - initObservers() - fetchDocuments() - NaviAnalytics.naviAnalytics.sendAnalyticsEvent( - AnalyticsEvent(name = NaviAnalytics.HL_DOCUMENTS_PAGELAND) - ) - return binding.root - } - - private fun fetchDocuments() { - loanAccountNumber?.let { - showLoader(isShimmerEffect = true) - viewModel.fetchDocuments(it) - } - } - - private fun initObservers() { - viewModel.documentData.observeNullable(viewLifecycleOwner) { documentList -> - if (binding.rvDocuments.adapter == null) { - adapter = DocumentListAdapter(getDocumentList(documentList), this, this) - binding.rvDocuments.adapter = adapter - if (yearDetails != null) { - getSelectedYearInterestDoc(true) - } else { - binding.rvDocuments.visibility = View.VISIBLE - hideLoader() - } - } else { - binding.rvDocuments.visibility = View.VISIBLE - hideLoader() - documentList?.let { - (binding.rvDocuments.adapter as? DocumentListAdapter?).let { documentListAdapter - -> - documentListAdapter?.updateDocumentList( - getDocumentList(it, documentListAdapter.itemCount) - ) - } - } - } - } - } - - private fun getDocumentList( - documentDataList: List?, - initialCount: Int = 0 - ): MutableList { - if (documentDataList != null) { - documentList = - documentDataList - .mapIndexed { i, document -> - if (document.type == DocumentType.DROPDOWN) { - document.dropDownBottomSheet?.yearDetails?.let { yearsList -> - if (yearsList.isNotEmpty()) this.yearDetails = yearsList[0] - } - } - DocumentDataBinder( - document.type, - document.heading, - document.title, - document.description, - document.hint, - document.leftIcon, - document.downloadIcon, - document.height, - document.dropDownBottomSheet - ) - } - .toMutableList() - } - return documentList - } - - override fun showBottomSheet(dropDownBottomSheet: DropDownBottomSheetContent) { - if (!isBottomSheetVisible(DropDownBottomSheet.TAG)) { - val bottomSheet = DropDownBottomSheet.getInstance(dropDownBottomSheet) - bottomSheet.disableDefaultMinimumHeightSet() - safelyShowBottomSheet(bottomSheet, DropDownBottomSheet.TAG) - } - } - - private fun onClickItem() { - var recyclerHolder: RecyclerView.ViewHolder? - for (i in 0 until documentList.size) { - recyclerHolder = recyclerView?.findViewHolderForAdapterPosition(i) - if (recyclerHolder is DocumentListAdapter.DropDownViewHolder) { - recyclerHolder.setText(yearDetails, interestCertificateUri) - } - } - } - - private fun getSelectedYearInterestDoc(isInitialCall: Boolean) { - if (!isInitialCall) { - showLoader() - } - this.yearDetails?.let { viewModel.fetchInterestCertificateDownloadURI(it) } - viewModel.interestCertificateURI.observe(viewLifecycleOwner) { - it?.let { - binding.rvDocuments.visibility = View.VISIBLE - lastDownloadedYearDetails = yearDetails - hideLoader() - interestCertificateUri = it.uri - onClickItem() - } - ?: run { - binding.rvDocuments.visibility = View.VISIBLE - hideLoader() - } - } - } - - override val screenName: String - get() = NaviAnalytics.DOCUMENT_LIST - - override fun setSelectedItem(selectedYearDetails: YearDetails?) { - if (this.lastDownloadedYearDetails == selectedYearDetails) { - return - } - this.yearDetails = selectedYearDetails - getSelectedYearInterestDoc(false) - } - - companion object { - const val TAG = "DOCUMENT_LIST" - } -} - -interface DocumentListListener { - fun showBottomSheet(dropDownBottomSheetContent: DropDownBottomSheetContent) -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DropDownBottomSheet.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DropDownBottomSheet.kt deleted file mode 100644 index dceaa3d8cd..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DropDownBottomSheet.kt +++ /dev/null @@ -1,75 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.documentlist - -import android.os.Bundle -import android.view.ViewStub -import androidx.databinding.DataBindingUtil -import com.navi.common.ui.fragment.BaseBottomSheet -import com.navi.naviwidgets.extensions.setTextFieldData -import com.naviapp.R -import com.naviapp.dashboard.loanapplicationdetails.documentlist.models.DropDownBottomSheetContent -import com.naviapp.dashboard.loanapplicationdetails.models.YearDetails -import com.naviapp.databinding.LayoutDropdownBottomSheetBinding - -class DropDownBottomSheet : BaseBottomSheet(), DropDownBottomSheetItemListener { - private lateinit var binding: LayoutDropdownBottomSheetBinding - private var selectedYearDetails: YearDetails? = null - private var bottomSheetInfo: DropDownBottomSheetContent? = null - - override fun setContainerView(viewStub: ViewStub) { - viewStub.layoutResource = R.layout.layout_dropdown_bottom_sheet - binding = DataBindingUtil.getBinding(viewStub.inflate())!! - bottomSheetInfo = arguments?.getParcelable(dropDownBottomSheet) - initUI() - } - - override val screenName: String - get() = TAG - - private fun initUI() { - bottomSheetInfo?.run { - binding.title.setTextFieldData(this.title) - this.yearDetails.let { - binding.recyclerView.adapter = - context?.let { - this.yearDetails?.let { yearDetails -> - DropDownBottomSheetAdapter( - yearDetailsList = yearDetails, - dropDownBottomSheetItemListener = this@DropDownBottomSheet - ) - } - } - } - } - } - - override fun selectedItem(yearDetails: YearDetails?) { - selectedYearDetails = yearDetails - selectedYearDetails?.let { - (parentFragment as? DropDownBottomSheetListener)?.setSelectedItem(it) - safelyDismissDialog() - } - } - - companion object { - val dropDownBottomSheet = "dropDownBottomSheet" - const val TAG = "DROP_DOWN_BOTTOM_SHEET" - - fun getInstance(data: DropDownBottomSheetContent): DropDownBottomSheet { - return DropDownBottomSheet().apply { - val bundle = Bundle().apply { putParcelable(dropDownBottomSheet, data) } - arguments = bundle - } - } - } -} - -interface DropDownBottomSheetListener { - fun setSelectedItem(yearDetails: YearDetails?) -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DropDownBottomSheetAdapter.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DropDownBottomSheetAdapter.kt deleted file mode 100644 index 3c10424172..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/DropDownBottomSheetAdapter.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.documentlist - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.naviapp.dashboard.loanapplicationdetails.models.YearDetails -import com.naviapp.databinding.LayoutDropdownBottomSheetItemBinding - -class DropDownBottomSheetAdapter( - private val yearDetailsList: MutableList, - private val dropDownBottomSheetItemListener: DropDownBottomSheetItemListener, -) : RecyclerView.Adapter() { - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DropDownBottomSheetVH { - val inflater = LayoutInflater.from(parent.context) - val binding = LayoutDropdownBottomSheetItemBinding.inflate(inflater, parent, false) - return DropDownBottomSheetVH(binding) - } - - override fun onBindViewHolder(holder: DropDownBottomSheetVH, position: Int) { - val binding = holder.binding - val item = yearDetailsList[position] - binding.apply { - title.text = item.displayName - root.setOnClickListener { dropDownBottomSheetItemListener.selectedItem(item) } - if (position == yearDetailsList.size - 1 && yearDetailsList.isNotEmpty()) { - separator.visibility = View.GONE - } - } - } - - override fun getItemCount(): Int { - return yearDetailsList.size - } - - class DropDownBottomSheetVH(val binding: LayoutDropdownBottomSheetItemBinding) : - RecyclerView.ViewHolder(binding.root) -} - -interface DropDownBottomSheetItemListener { - fun selectedItem(yearDetails: YearDetails?) -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/activity/DocumentListActivity.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/activity/DocumentListActivity.kt deleted file mode 100644 index 765ca77c52..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/activity/DocumentListActivity.kt +++ /dev/null @@ -1,94 +0,0 @@ -/* - * - * * Copyright © 2022-2025 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.documentlist.activity - -import android.os.Bundle -import android.view.View -import androidx.databinding.DataBindingUtil -import com.navi.base.model.CtaData -import com.navi.common.listeners.FragmentInterchangeListener -import com.navi.common.model.ModuleNameV2 -import com.naviapp.R -import com.naviapp.common.navigator.NaviDeepLinkNavigator -import com.naviapp.dashboard.DashboardBaseActivity -import com.naviapp.databinding.ActivityListOfDocumentsBinding -import com.naviapp.part_prepayment.FragmentMapper -import com.naviapp.utils.Constants -import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject - -@AndroidEntryPoint -class DocumentListActivity : DashboardBaseActivity(), FragmentInterchangeListener { - @Inject lateinit var fragmentMapper: FragmentMapper - lateinit var binding: ActivityListOfDocumentsBinding - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = DataBindingUtil.setContentView(this, R.layout.activity_list_of_documents) - - navigateToNextScreen( - intent?.extras?.getString(Constants.REDIRECT_STATUS).orEmpty(), - intent?.extras ?: Bundle() - ) - binding.topHeaderLay.apply { - root.visibility = View.VISIBLE - backIv.visibility = View.VISIBLE - toolbarHeading.visibility = View.VISIBLE - backIv.setOnClickListener { onBackPressed() } - } - } - - override fun navigateToNextScreen(currentScreenTag: String, bundle: Bundle) { - val tag = fragmentMapper.getFragmentTagByUrl(currentScreenTag) - val fragment = - supportFragmentManager.findFragmentByTag(tag) - ?: fragmentMapper.getFragmentByUrl(currentScreenTag) - fragment?.apply { arguments = bundle } - if (fragment != null) { - val fragmentTransaction = supportFragmentManager.beginTransaction() - if (!supportFragmentManager.isStateSaved && !supportFragmentManager.isDestroyed) { - fragmentTransaction.addToBackStack(tag) - fragmentTransaction.replace(R.id.fragment_container, fragment, tag) - fragmentTransaction.commit() - } - } else { - NaviDeepLinkNavigator.navigate(this, CtaData(url = currentScreenTag), true) - } - } - - override val screenName: String - get() = "DocumentList" - - override val moduleName: ModuleNameV2 - get() = ModuleNameV2.LE - - override fun onActivityCompleted() {} - - override fun onBackPressed() { - supportFragmentManager.fragments - .takeIf { it.size > 0 } - ?.let { fragments -> - for (i in (fragments.size - 1) downTo 0) { - val fragment = fragments[i] - val childFragmentManager = fragment.childFragmentManager - if (fragment.isVisible) { - if (childFragmentManager.backStackEntryCount > 0) { - supportFragmentManager.popBackStackImmediate() - return - } - break - } - } - if (supportFragmentManager.backStackEntryCount > 1) { - supportFragmentManager.popBackStackImmediate() - } else { - finish() - } - } ?: run { finish() } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/adapter/DocumentListAdapter.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/adapter/DocumentListAdapter.kt deleted file mode 100644 index 05558a6df7..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/adapter/DocumentListAdapter.kt +++ /dev/null @@ -1,236 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.documentlist.adapter - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import androidx.recyclerview.widget.RecyclerView -import androidx.viewbinding.ViewBinding -import com.navi.base.model.AnalyticsEvent -import com.navi.base.utils.isValidIndex -import com.navi.common.utils.Constants.TIME_PERIOD -import com.navi.naviwidgets.extensions.setTextFieldData -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.dashboard.loanapplicationdetails.documentlist.* -import com.naviapp.dashboard.loanapplicationdetails.documentlist.models.DocumentDataBinder -import com.naviapp.dashboard.loanapplicationdetails.documentlist.models.DocumentType -import com.naviapp.dashboard.loanapplicationdetails.models.YearDetails -import com.naviapp.databinding.* -import com.naviapp.models.response.ImageDetail -import com.naviapp.utils.IconUtils -import com.naviapp.utils.NaviDownloadManager -import java.lang.ref.WeakReference - -class DocumentListAdapter( - private var documentDataList: MutableList, - private val fragment: Fragment, - private val listener: DocumentListListener -) : RecyclerView.Adapter() { - private var naviDownloadManager: NaviDownloadManager? = null - private var downLoadUri: String? = null - private var downloadIconCode: String? = null - private var yearDetails: YearDetails? = null - - fun updateDocumentList(documentDataList: MutableList) { - this.documentDataList = documentDataList - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DocumentListVH { - val inflater = LayoutInflater.from(parent.context) - when (viewType) { - DocumentType.TITLE.ordinal -> { - val binding = LayoutDocumentTitleViewBinding.inflate(inflater, parent, false) - return TitleViewHolder(binding) - } - DocumentType.CARD.ordinal -> { - val binding = LayoutDocumentCardViewBinding.inflate(inflater, parent, false) - return CardViewHolder(binding) - } - DocumentType.DROPDOWN.ordinal -> { - val binding = LayoutDocumentDropdownCardViewBinding.inflate(inflater, parent, false) - return DropDownViewHolder(binding) - } - else -> { - val binding = LayoutDocumentSeparatorBinding.inflate(inflater, parent, false) - return SeparatorViewHolder(binding) - } - } - } - - override fun onBindViewHolder(holder: DocumentListVH, position: Int) { - if (!isValidIndex(position, itemCount)) return - when (holder.viewBinding) { - is LayoutDocumentTitleViewBinding -> { - titleViewBinding(position, holder) - } - is LayoutDocumentCardViewBinding -> { - cardViewBinding(position, holder) - } - is LayoutDocumentDropdownCardViewBinding -> { - dropDownViewBinding(position, holder) - } - is LayoutDocumentSeparatorBinding -> { - val documentData = documentDataList[position] - documentData.height?.let { separatorViewBinding(position, holder, it) } - } - } - } - - private fun dropDownViewBinding(position: Int, holder: DocumentListVH) { - val documentData = documentDataList[position] - (holder.viewBinding as LayoutDocumentDropdownCardViewBinding).apply { - root.visibility = View.VISIBLE - heading.setTextFieldData(documentData.heading) - documentName.setTextFieldData(documentData.title) - date.setTextFieldData(documentData.description) - dropDownTv.setTextFieldData(documentData.hint) - downloadIconCode = documentData.downloadIcon?.iconCode - documentData.dropDownBottomSheet?.let { - dropDown.setOnClickListener { - listener.showBottomSheet(documentData.dropDownBottomSheet) - } - } - download.setOnClickListener { - downLoadUri?.let { downloadUri -> - startDownload(downloadUri, documentData.title?.text.toString(), "") - NaviAnalytics.naviAnalytics.sendAnalyticsEvent( - AnalyticsEvent( - name = documentData.downloadIcon?.eventName, - properties = - mutableMapOf(Pair(TIME_PERIOD, yearDetails?.displayName.toString())) - ) - ) - } - } - - IconUtils.updateIcon( - imageDetail = - ImageDetail( - iconCode = documentData.leftIcon?.iconCode, - ), - imageView = icon, - ) - } - } - - private fun cardViewBinding(position: Int, holder: DocumentListVH) { - val documentData = documentDataList[position] - (holder.viewBinding as LayoutDocumentCardViewBinding).apply { - root.visibility = View.VISIBLE - documentName.setTextFieldData(documentData.title) - date.setTextFieldData(documentData.description) - downloadIconCode = documentData.downloadIcon?.iconCode - documentData.downloadIcon?.downloadUri?.let { downLoadUri -> - download.setOnClickListener { - startDownload(downLoadUri, documentData.title?.text.toString(), "") - NaviAnalytics.naviAnalytics.sendAnalyticsEvent( - AnalyticsEvent(name = documentData.downloadIcon?.eventName) - ) - } - } - IconUtils.updateIcon( - imageDetail = - ImageDetail( - iconCode = documentData.leftIcon?.iconCode, - ), - imageView = icon, - ) - IconUtils.updateIcon( - imageDetail = - ImageDetail( - iconCode = documentData.downloadIcon?.iconCode, - ), - imageView = download, - ) - } - } - - private fun titleViewBinding(position: Int, holder: DocumentListVH) { - val documentData = documentDataList[position] - (holder.viewBinding as LayoutDocumentTitleViewBinding).apply { - root.visibility = View.VISIBLE - documentName.setTextFieldData(documentData.title) - } - } - - private fun separatorViewBinding(position: Int, holder: DocumentListVH, height: Int) { - val documentData = documentDataList[position] - (holder.viewBinding as LayoutDocumentSeparatorBinding).apply { - root.visibility = View.VISIBLE - val params = separator.layoutParams - documentData.height?.let { params.height = height } - } - } - - override fun getItemCount(): Int { - return documentDataList.size - } - - override fun getItemViewType(position: Int): Int { - if (isValidIndex(position, documentDataList.size)) { - if (documentDataList[position].type == DocumentType.TITLE) { - return DocumentType.TITLE.ordinal - } else if (documentDataList[position].type == DocumentType.CARD) { - return DocumentType.CARD.ordinal - } else if (documentDataList[position].type == DocumentType.DROPDOWN) { - return DocumentType.DROPDOWN.ordinal - } - } - return DocumentType.SEPARATOR.ordinal - } - - open class DocumentListVH(open val viewBinding: ViewBinding) : - RecyclerView.ViewHolder(viewBinding.root) - - private fun startDownload( - downloadUrl: String, - destinationPath: String, - downloadFailedEventName: String? - ) { - if (naviDownloadManager == null) { - naviDownloadManager = NaviDownloadManager(WeakReference(fragment.activity)) - } - naviDownloadManager?.start( - NaviAnalytics.DOCUMENT_LIST, - destinationPath, - downloadUrl, - downloadFailedEventName - ) - } - - inner class TitleViewHolder(val binding: LayoutDocumentTitleViewBinding) : - DocumentListVH(binding) - - inner class CardViewHolder(val binding: LayoutDocumentCardViewBinding) : - DocumentListVH(binding) - - inner class DropDownViewHolder(val binding: LayoutDocumentDropdownCardViewBinding) : - DocumentListVH(binding) { - fun setText(yearDetails: YearDetails?, interestCertificateUri: String?) { - this@DocumentListAdapter.yearDetails = yearDetails - binding.dropDownTv.text = yearDetails?.displayName - interestCertificateUri?.let { - binding.download.visibility = View.VISIBLE - binding.date.text = yearDetails?.displayName ?: "" - downLoadUri = interestCertificateUri - IconUtils.updateIcon( - imageDetail = - com.naviapp.models.response.ImageDetail( - iconCode = downloadIconCode, - ), - imageView = binding.download, - ) - } - } - } - - inner class SeparatorViewHolder(val binding: LayoutDocumentSeparatorBinding) : - DocumentListVH(binding) -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/models/DocumentData.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/models/DocumentData.kt deleted file mode 100644 index 4c6b83d729..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/models/DocumentData.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * * Copyright © 2022-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.documentlist.models - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.response.ImageFieldData -import com.navi.naviwidgets.models.response.TextFieldData -import com.naviapp.dashboard.loanapplicationdetails.models.YearDetails -import kotlinx.parcelize.Parcelize - -@Parcelize -data class DocumentData( - @SerializedName("type") val type: DocumentType? = null, - @SerializedName("heading") val heading: TextFieldData? = null, - @SerializedName("title") val title: TextFieldData? = null, - @SerializedName("description") val description: TextFieldData? = null, - @SerializedName("hint") val hint: TextFieldData? = null, - @SerializedName("leftIcon") val leftIcon: ImageFieldData? = null, - @SerializedName("downloadIcon") val downloadIcon: DownloadAction? = null, - @SerializedName("height") val height: Int? = null, - @SerializedName("dropDownBottomSheet") - val dropDownBottomSheet: DropDownBottomSheetContent? = null -) : Parcelable - -@Parcelize -data class DropDownBottomSheetContent( - @SerializedName("title") val title: TextFieldData? = null, - @SerializedName("yearDetails") val yearDetails: MutableList? = null, -) : Parcelable - -@Parcelize -data class DownloadAction( - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("downloadUri") var downloadUri: String? = null, - @SerializedName("eventName") var eventName: String? = null -) : Parcelable - -data class DocumentDataBinder( - val type: DocumentType? = null, - val heading: TextFieldData? = null, - val title: TextFieldData? = null, - val description: TextFieldData? = null, - var hint: TextFieldData? = null, - val leftIcon: ImageFieldData? = null, - var downloadIcon: DownloadAction? = null, - val height: Int? = null, - val dropDownBottomSheet: DropDownBottomSheetContent? = null -) diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/models/DocumentType.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/models/DocumentType.kt deleted file mode 100644 index d66a981da9..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/models/DocumentType.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * - * * Copyright © 2022 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.documentlist.models - -import com.google.gson.annotations.SerializedName - -enum class DocumentType(val displayString: String) { - @SerializedName("title") TITLE("title"), - @SerializedName("card") CARD("card"), - @SerializedName("dropdown") DROPDOWN("dropdown"), - @SerializedName("separator") SEPARATOR("separator") -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/repository/DocumentListRepository.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/repository/DocumentListRepository.kt deleted file mode 100644 index f56ebdab78..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/repository/DocumentListRepository.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * * Copyright © 2022 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.documentlist.repository - -import com.naviapp.dashboard.loanapplicationdetails.models.YearDetails -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.utils.retrofitService - -class DocumentListRepository : ResponseCallback() { - suspend fun fetchDocuments(accountNumber: String) = - apiResponseCallback(retrofitService().fetchDocuments(accountNumber)) - - suspend fun fetchInterestCertificateDownloadURI(yearDetails: YearDetails) = - apiResponseCallback(retrofitService().fetchInterestCertificateDownloadURI(yearDetails)) -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/viewmodel/DocumentListVM.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/viewmodel/DocumentListVM.kt deleted file mode 100644 index 35678547c3..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/documentlist/viewmodel/DocumentListVM.kt +++ /dev/null @@ -1,52 +0,0 @@ -/* - * - * * Copyright © 2022-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.documentlist.viewmodel - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.viewModelScope -import com.navi.common.viewmodel.BaseVM -import com.naviapp.dashboard.loanapplicationdetails.documentlist.models.DocumentData -import com.naviapp.dashboard.loanapplicationdetails.documentlist.repository.DocumentListRepository -import com.naviapp.dashboard.loanapplicationdetails.models.InterestCertificateURIDetail -import com.naviapp.dashboard.loanapplicationdetails.models.YearDetails -import kotlinx.coroutines.launch - -class DocumentListVM(private val repository: DocumentListRepository = DocumentListRepository()) : - BaseVM() { - private val _documentData = MutableLiveData>() - val documentData: LiveData> - get() = _documentData - - fun fetchDocuments(accountNumber: String) { - coroutineScope.launch { - val response = repository.fetchDocuments(accountNumber) - if (response.error == null && response.errors.isNullOrEmpty()) { - _documentData.value = response.data - } else { - setErrorData(response.errors, response.error) - } - } - } - - private val _interestCertificateURI = MutableLiveData() - val interestCertificateURI: LiveData - get() = _interestCertificateURI - - fun fetchInterestCertificateDownloadURI(yearDetails: YearDetails) { - viewModelScope.launch { - val response = repository.fetchInterestCertificateDownloadURI(yearDetails) - if (response.error == null) { - _interestCertificateURI.value = response.data - } else { - setErrorData(response.errors, response.error) - _interestCertificateURI.value = null - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/DueDetailsAdapter.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/DueDetailsAdapter.kt deleted file mode 100644 index 8edb8e00c0..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/DueDetailsAdapter.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.adapters - -import android.content.Context -import android.view.LayoutInflater -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.layouts.EmiCalendarDueDetailsLayout -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.DueDetailBinder -import com.naviapp.databinding.DueDetailViewBinding - -class DueDetailsAdapter(private val dueDetails: List) : - RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DueDetailsVH { - val inflater = LayoutInflater.from(parent.context) - val binding = DueDetailViewBinding.inflate(inflater, parent, false) - return DueDetailsVH(binding, parent.context) - } - - override fun getItemCount() = dueDetails.size - - override fun onBindViewHolder(holder: DueDetailsVH, position: Int) { - holder.bind(dueDetails[position]) - } - - class DueDetailsVH(val binding: DueDetailViewBinding, val context: Context) : - RecyclerView.ViewHolder(binding.root) { - fun bind(data: DueDetailBinder) { - EmiCalendarDueDetailsLayout(context).setProperties(data, binding) - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EMIDateAdapter.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EMIDateAdapter.kt deleted file mode 100644 index 0a0f5d2aa9..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EMIDateAdapter.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.adapters - -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.navi.base.utils.isValidIndex -import com.navi.base.utils.orFalse -import com.naviapp.common.customview.EMIDateView -import com.naviapp.common.listeners.KeyValueListener -import com.naviapp.models.KeyValueResponse - -class EMIDateAdapter( - private val keyValueList: List, - private val keyValueListener: KeyValueListener -) : RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EMIDateViewHolder { - return EMIDateViewHolder(EMIDateView(parent.context)) - } - - override fun getItemCount(): Int { - return keyValueList.size - } - - override fun onBindViewHolder(holder: EMIDateViewHolder, position: Int) { - if (!isValidIndex(position, itemCount)) return - holder.emiDateView.setProperties(keyValueList[position], keyValueListener, position) - } - - fun getSelectedDate(): KeyValueResponse? { - keyValueList.forEach { - if (it.selected.orFalse()) { - return it - } - } - return null - } -} - -class EMIDateViewHolder(val emiDateView: EMIDateView) : RecyclerView.ViewHolder(emiDateView) diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EMIUpdatedCalendarAdapter.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EMIUpdatedCalendarAdapter.kt deleted file mode 100644 index cf2ff5c661..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EMIUpdatedCalendarAdapter.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.adapters - -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.navi.base.utils.isValidIndex -import com.naviapp.common.customview.EMICalendarDetailView -import com.naviapp.models.EMIDateContent - -class EMIUpdatedCalendarAdapter( - private var emiDateList: List, -) : RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EMICalendarDetailViewHolder { - return EMICalendarDetailViewHolder(EMICalendarDetailView(parent.context)) - } - - override fun getItemCount(): Int { - return emiDateList.size - } - - fun setAdapterList(emiDateList: List?) { - emiDateList?.let { - this.emiDateList = it - this.notifyDataSetChanged() - } - } - - override fun onBindViewHolder(holder: EMICalendarDetailViewHolder, position: Int) { - if (!isValidIndex(position, itemCount)) return - holder.emiCalendarDetailView.setProperties(emiDateList[position]) - } -} - -class EMICalendarDetailViewHolder(val emiCalendarDetailView: EMICalendarDetailView) : - RecyclerView.ViewHolder(emiCalendarDetailView) diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EmiStatusCalendarAdapter.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EmiStatusCalendarAdapter.kt deleted file mode 100644 index b84ecf8e79..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/adapters/EmiStatusCalendarAdapter.kt +++ /dev/null @@ -1,160 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.adapters - -import android.annotation.SuppressLint -import android.content.Context -import android.graphics.Color -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.core.content.ContextCompat -import androidx.recyclerview.widget.RecyclerView -import com.navi.base.utils.isValidIndex -import com.navi.naviwidgets.callbacks.WidgetCallback -import com.naviapp.R -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.EmiInstallmentBinder -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.EmiStatus -import com.naviapp.databinding.EmiStatusCalendarViewBinding - -class EmiStatusCalendarAdapter( - private val emiCalendar: MutableList, - private val context: Context?, - private val widgetCallback: WidgetCallback? = null -) : RecyclerView.Adapter() { - - @SuppressLint("NotifyDataSetChanged") - fun updateEmiCalendarList(emiCalendar: List) { - this.emiCalendar.addAll(emiCalendar) - notifyDataSetChanged() - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EmiStatusCalendarVH { - val inflater = LayoutInflater.from(parent.context) - val binding = EmiStatusCalendarViewBinding.inflate(inflater, parent, false) - return EmiStatusCalendarVH(binding, this) - } - - override fun getItemViewType(position: Int) = position - - override fun getItemId(position: Int) = position.toLong() - - override fun getItemCount() = emiCalendar.size - - override fun onBindViewHolder(holder: EmiStatusCalendarVH, position: Int) { - if (!isValidIndex(position, itemCount)) return - val binding = holder.binding - val emiInstallment = emiCalendar[position] - - binding.emiInstallment = emiInstallment - binding.widgetCallback = widgetCallback - when (emiInstallment.status) { - EmiStatus.PAID -> binding.emiStatusPaidView.root.visibility = View.VISIBLE - EmiStatus.OVERDUE -> { - binding.emiStatusOverdueView.root.visibility = View.VISIBLE - emiInstallment.dueDetails?.let { - binding.emiStatusOverdueView.amountSplitRv.adapter = DueDetailsAdapter(it) - } - emiInstallment.descExpandableItemBinder?.let { - binding.emiStatusOverdueView.descExpandableView.visibility = View.VISIBLE - } - ?: kotlin.run { - binding.emiStatusOverdueView.descExpandableView.visibility = View.GONE - } - emiInstallment.statusTextColor?.let { - binding.emiStatusOverdueView.statusText.setTextColor(Color.parseColor(it)) - } - ?: kotlin.run { - context?.let { - binding.emiStatusOverdueView.statusText.setTextColor( - ContextCompat.getColor(it, R.color.red) - ) - } - } - } - EmiStatus.SCHEDULED -> { - binding.emiStatusScheduledView.root.visibility = View.VISIBLE - emiInstallment.descExpandableItemBinder?.let { - binding.emiStatusScheduledView.descExpandableView.visibility = View.VISIBLE - } - ?: kotlin.run { - binding.emiStatusScheduledView.descExpandableView.visibility = View.GONE - } - } - EmiStatus.UNPAID -> { - binding.emiStatusUnpaidView.root.visibility = View.VISIBLE - emiInstallment.descExpandableItemBinder?.let { - binding.emiStatusUnpaidView.descExpandableView.visibility = View.VISIBLE - // no need to set drawable start for UNPAID and Debit in progress view - binding.emiStatusUnpaidView.statusText.setCompoundDrawablesWithIntrinsicBounds( - 0, - 0, - 0, - 0 - ) - } - ?: kotlin.run { - binding.emiStatusUnpaidView.descExpandableView.visibility = View.GONE - binding.emiStatusUnpaidView.statusText - .setCompoundDrawablesWithIntrinsicBounds( - R.drawable.ic_alert_svg, - 0, - 0, - 0 - ) - } - - emiInstallment.statusTextColor?.let { - binding.emiStatusUnpaidView.statusText.setTextColor(Color.parseColor(it)) - } - ?: kotlin.run { - context?.let { - binding.emiStatusUnpaidView.statusText.setTextColor( - ContextCompat.getColor(it, R.color.red) - ) - } - } - } - EmiStatus.PARTIALLY_PAID -> { - binding.emiStatusPartiallyPaidView.root.visibility = View.VISIBLE - emiInstallment.dueDetails?.let { - binding.emiStatusPartiallyPaidView.amountSplitRv.adapter = DueDetailsAdapter(it) - } - emiInstallment.descExpandableItemBinder?.let { - binding.emiStatusPartiallyPaidView.descExpandableView.visibility = View.VISIBLE - } - ?: kotlin.run { - binding.emiStatusPartiallyPaidView.descExpandableView.visibility = View.GONE - } - } - else -> Unit - } - } - - class EmiStatusCalendarVH( - val binding: EmiStatusCalendarViewBinding, - private val adapter: EmiStatusCalendarAdapter - ) : RecyclerView.ViewHolder(binding.root), View.OnClickListener { - - init { - binding.emiStatusOverdueView.toggleDetailsView.setOnClickListener(this) - binding.emiStatusPartiallyPaidView.toggleDetailsView.setOnClickListener(this) - } - - override fun onClick(v: View?) { - when (v?.id) { - R.id.toggle_details_view -> { - if (!isValidIndex(adapterPosition, adapter.itemCount)) return - val emiInstallment = adapter.emiCalendar[adapterPosition] - emiInstallment.showDetails = !emiInstallment.showDetails - adapter.notifyItemChanged(adapterPosition) - } - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/bottomsheet/EmiDateChangeBottomSheet.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/bottomsheet/EmiDateChangeBottomSheet.kt deleted file mode 100644 index a08ba741cc..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/bottomsheet/EmiDateChangeBottomSheet.kt +++ /dev/null @@ -1,95 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.bottomsheet - -import android.os.Bundle -import android.view.View -import android.view.ViewStub -import androidx.databinding.DataBindingUtil -import com.navi.chat.common.fragment.BaseBottomSheet -import com.navi.design.R as DesignR -import com.navi.design.utils.parseColorSafe -import com.navi.insurance.R as InsuranceR -import com.navi.naviwidgets.callbacks.WidgetCallback -import com.navi.naviwidgets.extensions.setImageFieldData -import com.navi.naviwidgets.extensions.setTextFieldData -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.EmiDateChangeBottomSheetData -import com.naviapp.databinding.EmiDateChangeBottomSheetBinding -import com.naviapp.utils.getTextViewItem -import dagger.hilt.android.AndroidEntryPoint - -@AndroidEntryPoint -class EmiDateChangeBottomSheet : BaseBottomSheet() { - - private lateinit var binding: EmiDateChangeBottomSheetBinding - private var data: EmiDateChangeBottomSheetData? = null - private var widgetCallback: WidgetCallback? = null - - fun setWidgetCallBack(widgetCallback: WidgetCallback) { - this.widgetCallback = widgetCallback - } - - override fun setContainerView(viewStub: ViewStub) { - viewStub.layoutResource = R.layout.emi_date_change_bottom_sheet - binding = DataBindingUtil.getBinding(viewStub.inflate())!! - data = arguments?.getParcelable(ARG_DATA) - setProperties() - } - - private fun setProperties() { - binding.apply { - data?.let { - leftIcon.setImageFieldData(it.leftIcon) - title.setTextFieldData(it.title) - tvPrimaryAction.background.setTint( - it.primaryAction?.bgColor.parseColorSafe(DEFAULT_PRIMARY_ACTION_COLOR) - ) - tvPrimaryAction.setTextFieldData(it.primaryAction?.action) { cta -> - widgetCallback?.onClick(cta) - NaviAnalytics.naviAnalytics.sendAnalyticsEvent(cta.analyticsEventProperties) - } - tvSecondaryAction.background.setTint( - it.secondaryAction?.bgColor.parseColorSafe(DEFAULT_SECONDARY_ACTION_COLOR) - ) - tvSecondaryAction.setTextFieldData(it.secondaryAction?.action) { cta -> - widgetCallback?.onClick(cta) - NaviAnalytics.naviAnalytics.sendAnalyticsEvent(cta.analyticsEventProperties) - } - setDescriptions(it) - } - } - } - - private fun setDescriptions(it: EmiDateChangeBottomSheetData) { - it.descriptions?.forEachIndexed { _, textFieldData -> - val itemView = context?.let { context -> getTextViewItem(textFieldData, context) } - itemView?.setLineSpacing(resources.getDimension(InsuranceR.dimen.dp_1), 1.0f) - itemView?.setPadding(0, resources.getDimension(DesignR.dimen.dp_16).toInt(), 0, 0) - binding.descriptions.visibility = View.VISIBLE - binding.descriptions.addView(itemView) - } - } - - override val screenName: String - get() = TAG - - companion object { - const val ARG_DATA = "emiDateChangeBottomSheetData" - const val TAG = "EMI_DATE_CHANGE_BOTTOM_SHEET" - const val DEFAULT_PRIMARY_ACTION_COLOR = "#ff5732" - const val DEFAULT_SECONDARY_ACTION_COLOR = "#f5f5f5" - - fun getInstance(data: EmiDateChangeBottomSheetData) = - EmiDateChangeBottomSheet().apply { - val bundle = Bundle().apply { putParcelable(ARG_DATA, data) } - arguments = bundle - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EMIDateChangeFragment.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EMIDateChangeFragment.kt deleted file mode 100644 index 044e30232d..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EMIDateChangeFragment.kt +++ /dev/null @@ -1,601 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.fragments - -import android.animation.Animator -import android.content.Context -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.core.content.ContextCompat -import androidx.core.content.res.ResourcesCompat -import androidx.core.view.isVisible -import androidx.core.widget.addTextChangedListener -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.GridLayoutManager -import com.navi.analytics.utils.NaviTrackEvent -import com.navi.base.model.AnalyticsEvent -import com.navi.base.model.CtaData -import com.navi.base.model.CtaType -import com.navi.base.model.LineItem -import com.navi.base.model.NaviClickAction -import com.navi.base.utils.SUCCESS -import com.navi.base.utils.isNotNullAndNotEmpty -import com.navi.base.utils.orFalse -import com.navi.common.listeners.FragmentInterchangeListener -import com.navi.common.listeners.HeaderInteractionListener -import com.navi.common.ui.activity.BaseActivity -import com.navi.common.utils.observeNonNull -import com.navi.design.R as DesignR -import com.navi.design.utils.getNaviDrawable -import com.navi.insurance.R as InsuranceR -import com.navi.naviwidgets.callbacks.WidgetCallback -import com.navi.naviwidgets.extensions.setTextFieldData -import com.navi.naviwidgets.validations.RegexInputValidation -import com.navi.naviwidgets.widgets.TextInputUtil -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.listeners.FooterInteractionListener -import com.naviapp.common.listeners.KeyValueListener -import com.naviapp.common.navigator.NaviDeepLinkNavigator -import com.naviapp.custom_payments.listener.InitiatePaymentListener -import com.naviapp.dashboard.listeners.FragmentInteractionListener -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.adapters.EMIDateAdapter -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.bottomsheet.EmiDateChangeBottomSheet -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.EmiDateChangeBottomSheetData -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.viewmodel.EMIDateChangeFragmentVM -import com.naviapp.databinding.EmiDateChangeFragmentBinding -import com.naviapp.models.AnimationData -import com.naviapp.models.EMIDateChangeResponse -import com.naviapp.models.KeyValueResponse -import com.naviapp.models.ReasonConfig -import com.naviapp.models.response.LoanBasicDetailsResponse -import com.naviapp.part_prepayment.PartPrePaymentActivity -import com.naviapp.payment.activities.NaviPaymentActivity -import com.naviapp.payment.fragments.PaymentBaseFragment -import com.naviapp.payment.fragments.PaymentType -import com.naviapp.payment.models.Amount -import com.naviapp.utils.Constants -import com.naviapp.utils.Constants.LOAN_ACCOUNT_NUMBER_DATA -import com.naviapp.utils.Constants.LOAN_TYPE -import com.naviapp.utils.Constants.TYPE_PERSONAL_LOAN -import com.naviapp.utils.LOAN_ACCOUNT_NUMBER -import com.naviapp.utils.toast -import dagger.hilt.android.AndroidEntryPoint - -@AndroidEntryPoint -class EMIDateChangeFragment : PaymentBaseFragment(), FooterInteractionListener { - - private lateinit var binding: EmiDateChangeFragmentBinding - - private var emiDateAdapter: EMIDateAdapter? = null - - private var listener: FragmentInteractionListener? = null - - private val eventTracker by lazy { NaviAnalytics.naviAnalytics.GetLoan() } - private var reason: String? = null - private lateinit var date: String - private val viewModel by lazy { - ViewModelProvider(this).get(EMIDateChangeFragmentVM::class.java) - } - private lateinit var initiatePaymentListener: InitiatePaymentListener - - override val screenName: String - get() = TAG - - override fun onAttach(context: Context) { - super.onAttach(context) - headerInteractionListener = context as? HeaderInteractionListener - listener = context as? FragmentInteractionListener - fragmentInterchangeListener = context as? FragmentInterchangeListener - initiatePaymentListener = context as InitiatePaymentListener - } - - override fun onDetach() { - super.onDetach() - listener = null - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - binding = EmiDateChangeFragmentBinding.inflate(inflater, container, false) - loanType = arguments?.getString(LOAN_TYPE) ?: Constants.TYPE_PERSONAL_LOAN - - initError(viewModel) - initUI() - initObservers() - fetchEMIDateChangeResponse() - initializationPaymentDetail(isHomePageNeededToRelaunch = true) - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - initError(paymentVM) - } - - private fun initUI() { - loanType?.let { eventTracker.onEmiDateChangePage(it) } - binding.footerView.changeNextButtonBackground(false) - binding.headerView.hideHelpIcon() - } - - private fun fetchEMIDateChangeResponse() { - - showLoader() - var loanApplicationId = arguments?.getString(LOAN_ACCOUNT_NUMBER_DATA) - var animationEnabled = arguments?.getString(ANIMATION) - if (loanApplicationId.isNullOrBlank().not()) { - loanApplicationId?.let { - viewModel.fetchEMIDateChangeResponse(it, !animationEnabled.isNullOrBlank()) - } - } else { - viewModel.fetchLoanBasicDetails() - } - } - - private fun initObservers() { - viewModel.emiDateChangeResponse.observeNonNull(viewLifecycleOwner) { emiDateChangeResponse - -> - hideLoader() - initData(emiDateChangeResponse) - initDateAdapter( - emiDateChangeResponse.content?.calendarConfig?.availabeEmiDates, - emiDateChangeResponse.content?.calendarConfig?.columnCount - ) - if (!paymentVM.isPaymentLoaderShowing()) { - hideLoader() - } - - emiDateChangeResponse.content?.animationData?.let { - val emiDateChangeRedirectingEvent = - it.metadata?.get(EMI_DATE_CHANGE_REDIRECTING_EVENT)?.data as? AnalyticsEvent - NaviAnalytics.naviAnalytics.sendAnalyticsEvent(emiDateChangeRedirectingEvent) - handleAnimation(it) - } - emiDateChangeResponse.content?.bottomsSheetData?.let { - val bottomSheetVisibleEvent = - it.metadata?.get(EDC_OPEN_BOTTOMSHEET_EVENT)?.data as? AnalyticsEvent - NaviAnalytics.naviAnalytics.sendAnalyticsEvent(bottomSheetVisibleEvent) - handleBottomSheet(it) - } - val emiDateChangePageLandEvent = - emiDateChangeResponse.metadata?.get(EMI_DATE_CHANGE_PAGE_LAND_EVENT)?.data - as? AnalyticsEvent - NaviAnalytics.naviAnalytics.sendAnalyticsEvent(emiDateChangePageLandEvent) - } - - viewModel.loanBasicDetails.observeNonNull(this) { handleLoanBasicDetails(it) } - } - - private fun handleLoanBasicDetails(loanDetails: LoanBasicDetailsResponse) { - loanDetails.loanApplicationId?.let { viewModel.fetchEMIDateChangeResponse(it, false) } - if (loanDetails.loanApplicationId.isNullOrBlank()) { - eventTracker.wrongLoanApplicationIdReceived() - } else { - eventTracker.loanApplicationIdReceived() - } - } - - private fun initData(emiDateChangeResponse: EMIDateChangeResponse) { - binding.emiDateBinder = emiDateChangeResponse - binding.footerView.setProperties( - emiDateChangeResponse.header?.backCta, - emiDateChangeResponse.footer?.nextCta, - this, - nextButtonIconId = null - ) - binding.headerView.setProperties(emiDateChangeResponse.header?.title) - - binding.headerView.apply { - setProperties(emiDateChangeResponse.header?.title) - binding.backIv.setOnClickListener { activity?.onBackPressed() } - } - - emiDateChangeResponse.content?.let { - it.title?.let { title -> - binding.layoutKeyValue.keyTv.text = title.key - binding.layoutKeyValue.valueTv.text = title.value - } - setReason(it.reasonConfig) - } - binding.apply { - emiDateChangeResponse.content?.infoMessage?.let { - infoMessageLayout.visibility = View.VISIBLE - infoMessageTitle.setTextFieldData(it.title) - infoMessageDescription.setTextFieldData(it.description) - } - } - } - - private fun setReason(reasonConfig: ReasonConfig?) { - if (reasonConfig?.showReasonInput != true) { - return - } - binding.reasonLayout.visibility = View.VISIBLE - binding.plainTextInput.background = - getNaviDrawable( - strokeWidth = resources.getDimension(InsuranceR.dimen.dp_1).toInt(), - cornerRadius = resources.getDimension(InsuranceR.dimen.dp_8).toInt(), - strokeColor = - ResourcesCompat.getColor(resources, DesignR.color.border_dark_grey_color, null) - ) - binding.plainTextInput.hint = reasonConfig?.hint - - binding.titleTv.text = reasonConfig?.header - if (reasonConfig?.header.isNotNullAndNotEmpty()) { - binding.titleTv.visibility = View.VISIBLE - } - binding.errorText.text = reasonConfig?.warningText - if (reasonConfig?.warningText.isNotNullAndNotEmpty()) { - binding.errorText.visibility = View.VISIBLE - context?.let { - binding.errorText.setTextColor( - ContextCompat.getColor(it, DesignR.color.description_grey_color_seven) - ) - binding.errorText.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null) - } - } - - binding.plainTextInput.addTextChangedListener { - validateFooterView() - reason = it.toString() - if (reasonConfig?.warningText.isNotNullAndNotEmpty()) { - binding.errorText.text = reasonConfig?.warningText - binding.errorText.visibility = View.VISIBLE - context?.let { - binding.errorText.setTextColor( - ContextCompat.getColor(it, DesignR.color.description_grey_color_seven) - ) - binding.errorText.setCompoundDrawablesWithIntrinsicBounds( - null, - null, - null, - null - ) - } - } - binding.plainTextInput.background = - getNaviDrawable( - strokeWidth = resources.getDimension(InsuranceR.dimen.dp_1).toInt(), - cornerRadius = resources.getDimension(InsuranceR.dimen.dp_8).toInt(), - strokeColor = - ResourcesCompat.getColor( - resources, - DesignR.color.border_dark_grey_color, - null - ) - ) - } - } - - private fun initDateAdapter(keyValueResponseList: List?, columnCount: Int?) { - emiDateAdapter = - keyValueResponseList?.let { - EMIDateAdapter( - it, - object : KeyValueListener { - override fun onClick( - view: View, - keyValueResponse: KeyValueResponse, - position: Int - ) { - date = keyValueResponseList[position].key.toString() - loanType?.let { type -> - eventTracker.onDateClickedOnCalender(date, type) - } - setSelectedList(keyValueResponseList, keyValueResponse, position) - } - } - ) - } - emiDateAdapter?.let { - val spanCount = getSpanCount(columnCount) - val layoutManager = GridLayoutManager(context, spanCount) - binding.emiDateRv.layoutManager = layoutManager - binding.emiDateRv.adapter = it - binding.emiDateRv.itemAnimator = null - } - } - - private fun getSpanCount(columnCount: Int?): Int { - if (columnCount == null) { - return DEFAULT_COLUMN_SIZE - } - return columnCount - } - - private fun setSelectedList( - keyValueResponseList: List, - keyValueResponse: KeyValueResponse, - position: Int - ) { - if (keyValueResponse.defaultSelected.orFalse().not()) { - var selectedPosition: Int? = null - keyValueResponseList.forEachIndexed { index, response -> - if (response.selected == true) { - selectedPosition = index - response.selected = false - } - } - keyValueResponse.selected = true - emiDateAdapter?.notifyItemChanged(position) - selectedPosition?.let { emiDateAdapter?.notifyItemChanged(it) } - validateFooterView() - } - } - - private fun validateFooterView() { - if (validateFooterValues()) { - binding.footerView.changeNextButtonBackground(true) - } else { - binding.footerView.changeNextButtonBackground(false) - } - } - - private fun validateFooterValues(): Boolean { - if (getSelectedDateKey().isNullOrBlank()) { - return false - } else if (binding.reasonLayout.isVisible && binding.plainTextInput.text.isNullOrBlank()) { - return false - } - return true - } - - companion object { - const val TAG = NaviAnalytics.EMI_DATE_CHANGE - private const val DEFAULT_COLUMN_SIZE = 7 - private const val ANIMATION = "animation" - private const val EDC_OPEN_BOTTOMSHEET_EVENT = "edcOpenBottomSheetEvent" - private const val EMI_DATE_CHANGE_REDIRECTING_EVENT = "emiDateChangeRedirectingEvent" - private const val EMI_DATE_CHANGE_PAGE_LAND_EVENT = "emiDateChangePageLandEvent" - - fun newInstance(bundle: Bundle): EMIDateChangeFragment { - return EMIDateChangeFragment().apply { arguments = bundle } - } - } - - override fun onFooterBackPress(ctaData: CtaData?) { - ctaData?.let { NaviDeepLinkNavigator.navigate(activity, it, finish = true) } - } - - override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { - ctaData?.url?.let { - if (validateValues()) { - NaviTrackEvent.setStartTs(screenName) - loanType?.let { type -> eventTracker.onChangeEmiDateCTA(date, reason, type) } - val bundle = Bundle() - bundle.putString(EMIUpdatedCalendarFragment.KEY_DATE, getSelectedDateKey()) - if (binding.reasonLayout.isVisible) { - bundle.putString(EMIUpdatedCalendarFragment.KEY_REASON, reason) - } - bundle.putString( - EMIUpdatedCalendarFragment.KEY_SHOW_REASON, - binding.reasonLayout.isVisible.toString() - ) - arguments?.getString(LOAN_ACCOUNT_NUMBER_DATA)?.let { - bundle.putString(LOAN_ACCOUNT_NUMBER_DATA, it) - } - binding.headerView.updateDefaultTheme() - fragmentInterchangeListener?.navigateToNextScreen(it, bundle) - } - } - } - - private fun getSelectedDateKey(): String? { - val selectedDate = emiDateAdapter?.getSelectedDate() - - if (selectedDate != null) { - return selectedDate.key - } - return null - } - - private fun validateValues(): Boolean { - if (getSelectedDateKey().isNullOrBlank()) { - binding.emiDateBinder?.content?.chooseDateHeader?.let { header -> - context?.toast(header) - } - return false - } else if (binding.reasonLayout.isVisible && binding.plainTextInput.text.isNullOrBlank()) { - binding.errorText.text = binding.emiDateBinder?.content?.reasonConfig?.validationError - return false - } else if (binding.reasonLayout.isVisible && !binding.plainTextInput.text.isNullOrBlank()) { - val regexInputValidation = RegexInputValidation(TextInputUtil.REGEX_ALPHA_NUMERIC) - val isValid = regexInputValidation.performCheck(binding.plainTextInput.text?.toString()) - if (!isValid) { - binding.plainTextInput.background = - getNaviDrawable( - strokeWidth = resources.getDimension(InsuranceR.dimen.dp_1).toInt(), - cornerRadius = resources.getDimension(InsuranceR.dimen.dp_8).toInt(), - strokeColor = - ResourcesCompat.getColor( - resources, - DesignR.color.outrageous_orange, - null - ) - ) - binding.errorText.text = binding.emiDateBinder?.content?.reasonConfig?.warningText - if ( - binding.emiDateBinder?.content?.reasonConfig?.warningText.isNotNullAndNotEmpty() - ) { - binding.errorText.visibility = View.VISIBLE - context?.let { - binding.errorText.setTextColor( - ContextCompat.getColor(it, R.color.outrageous_orange) - ) - binding.errorText.setCompoundDrawablesWithIntrinsicBounds( - ContextCompat.getDrawable(it, R.drawable.ic_alert_error_red), - null, - null, - null - ) - } - } - return false - } - } - return true - } - - private fun handleBottomSheet(bottomSheetData: EmiDateChangeBottomSheetData?) { - bottomSheetData?.let { - val bottomSheet = EmiDateChangeBottomSheet.getInstance(bottomSheetData) - bottomSheet.isCancelable = false - safelyShowBottomSheet(bottomSheet, EmiDateChangeBottomSheet.TAG) - bottomSheetOnClick(bottomSheet) - } - } - - private fun bottomSheetOnClick(bottomSheet: EmiDateChangeBottomSheet) { - bottomSheet.setWidgetCallBack( - object : WidgetCallback { - override fun onClick(naviClickAction: NaviClickAction, widgetId: String?) { - if (naviClickAction is CtaData) { - when (naviClickAction.url) { - CtaType.PAYMENT.name -> { - loanAccountNumber = - naviClickAction.parameters - ?.firstOrNull { it.key == LOAN_ACCOUNT_NUMBER } - ?.value - val amountData = - naviClickAction.parameters - ?.firstOrNull { it.key == NaviPaymentActivity.AMOUNT_DATA } - ?.value - val currency = - naviClickAction.parameters - ?.firstOrNull { it.key == PartPrePaymentActivity.CURRENCY } - ?.value - val symbol = - naviClickAction.parameters - ?.firstOrNull { it.key == PartPrePaymentActivity.SYMBOL } - ?.value - loanType = - naviClickAction.parameters - ?.firstOrNull() { it.key == LOAN_TYPE } - ?.value - amountData?.let { - NaviAnalytics.naviAnalytics.Payment().onPaymentButtonTap() - updatePaymentType(PaymentType.EMI) - if (loanType == TYPE_PERSONAL_LOAN) { - fetchPaymentFailureBottomSheetData( - amount = - Amount( - amountData.toDoubleOrNull(), - currency, - symbol - ) - ) - } - if ( - loanType == TYPE_PERSONAL_LOAN && - ::initiatePaymentListener.isInitialized - ) { - initiatePaymentListener.initiatePayment( - amount = - Amount( - amountData.toDoubleOrNull(), - currency, - symbol - ), - loanAccountNumber = loanAccountNumber, - loanType = loanType - ) - } else { - initiatePayment( - amount = - Amount( - amountData.toDoubleOrNull(), - currency, - symbol - ) - ) - } - } - } - CtaType.CLOSE_BOTTOM_SHEET.name -> { - activity?.finish() - } - } - } - } - } - ) - } - - /** - * Handling for callback from Razorpay This function will be deprecated once NPS is 100% live - */ - override fun handlePgRepaymentStatus(isDelayNeeded: Boolean, status: String?) { - handlePaymentStatusResponse(status, isDelayNeeded) - } - - /** Handling for callback from NPS */ - override fun handlePaymentStatus(isDelayNeeded: Boolean, status: String?) { - handlePaymentStatusResponse(status, isDelayNeeded) - } - - private fun handlePaymentStatusResponse(status: String?, isDelayNeeded: Boolean) { - when (status) { - SUCCESS -> { - NaviAnalytics.naviAnalytics.GetLoan().emiDateChangeEMIPaidEvent() - val emiDateChangeCta = - CtaData( - url = - NaviDeepLinkNavigator.CUSTOM_PAYMENT + "/" + Constants.EMI_DATE_CHANGE, - parameters = - listOf( - LineItem(key = LOAN_ACCOUNT_NUMBER_DATA, value = loanAccountNumber), - LineItem(key = ANIMATION, value = "true") - ) - ) - showPaymentSuccessLoader(lottieFieldData = getLottieForPaymentSuccessful()) { - paymentInitListener?.onPaymentSuccessOpenEmiDateChangePage( - loanAccountNumber = loanAccountNumber, - ctaData = emiDateChangeCta - ) - } - } - else -> { - paymentInitListener?.onPaymentSuccessOpenHomePage(isDelayNeeded, true, status) - } - } - } - - private fun handleAnimation(response: AnimationData) { - (activity as? BaseActivity)?.hideLoader() - binding.contentGroup.isVisible = false - binding.successGroup.isVisible = true - binding.successAnimation.addAnimatorListener(animatorListener) - binding.successTitle.setTextFieldData(response.title) - binding.successDescription.setTextFieldData(response.description) - binding.headerView.hideHeader() - } - - private val animatorListener = - object : Animator.AnimatorListener { - override fun onAnimationStart(animation: Animator) {} - - override fun onAnimationEnd(animation: Animator) { - lifecycleScope.launchWhenStarted { - binding.contentGroup.isVisible = true - binding.successGroup.isVisible = false - binding.headerView.showHeader() - } - } - - override fun onAnimationCancel(animation: Animator) {} - - override fun onAnimationRepeat(animation: Animator) {} - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EMIUpdatedCalendarFragment.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EMIUpdatedCalendarFragment.kt deleted file mode 100644 index 1c58f2057d..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EMIUpdatedCalendarFragment.kt +++ /dev/null @@ -1,471 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.fragments - -import android.content.Context -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import com.navi.analytics.utils.NaviTrackEvent -import com.navi.base.model.AnalyticsEvent -import com.navi.base.model.CtaData -import com.navi.base.model.CtaType -import com.navi.base.model.LineItem -import com.navi.base.model.StyledTextWithIconCode -import com.navi.common.decorator.TopMarginItemDecoration -import com.navi.common.listeners.HeaderInteractionListener -import com.navi.common.model.EmiDataChangeLoanAgreementGenerationDetails -import com.navi.common.model.InitiateRescheduleLoanAgreementGenerationRequest -import com.navi.common.model.InitiateRescheduleLoanAgreementGenerationResponse -import com.navi.common.network.models.GenericResponseState -import com.navi.common.utils.changeValueOfExistingCtaParams -import com.navi.common.utils.getCtaParamValueForKey -import com.navi.common.utils.observeNonNull -import com.navi.naviwidgets.extensions.setTextFieldData -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.analytics.utils.NaviAnalytics.Companion.COLENDING_BALANCE_TRANSFER_EVENT -import com.naviapp.analytics.utils.NaviAnalytics.Companion.ELIGIBLE_FOR_BALANCE_TRANSFER -import com.naviapp.common.listeners.FooterInteractionListener -import com.naviapp.common.navigator.NaviDeepLinkNavigator -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.adapters.EMIUpdatedCalendarAdapter -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.viewmodel.EMIUpdatedCalendarFragmentVM -import com.naviapp.databinding.EmiUpdatedCalendarFragmentBinding -import com.naviapp.models.CalendarVisibilityConfig -import com.naviapp.models.EMIDateContent -import com.naviapp.models.EMIUpdatedCalendarResponse -import com.naviapp.models.response.EmiDateChangeDetails -import com.naviapp.part_prepayment.fragments.PartPrePaymentBaseFragment -import com.naviapp.utils.Constants -import com.naviapp.utils.Constants.EMI_DATE_CHANGE -import com.naviapp.utils.Constants.LOAN_ACCOUNT_NUMBER_DATA -import com.naviapp.utils.Constants.LOAN_TYPE -import com.naviapp.utils.Constants.SAVE_AGREEMENT -import com.naviapp.utils.NaviDownloadManager -import java.lang.ref.WeakReference -import kotlinx.coroutines.launch - -class EMIUpdatedCalendarFragment : - PartPrePaymentBaseFragment(), View.OnClickListener, FooterInteractionListener { - - private lateinit var binding: EmiUpdatedCalendarFragmentBinding - private var viewHolderMode = VIEW_OPEN - private var emiCalendarAdapter: EMIUpdatedCalendarAdapter? = null - private val eventTracker by lazy { NaviAnalytics.naviAnalytics.GetLoan() } - private var emiAmountStatusText: String? = null - private lateinit var emiAmountStatus: String - private lateinit var amount: String - private var isColendingBalanceTransferEligible = false - private var naviDownloadManager: NaviDownloadManager? = null - private var emiDateChangeSuccessEvent: AnalyticsEvent? = null - private var emiDateChangeFailureEvent: AnalyticsEvent? = null - private var nextEmiDate: String? = null - - private val viewModel by lazy { - ViewModelProvider(this).get(EMIUpdatedCalendarFragmentVM::class.java) - } - - override val screenName: String - get() = TAG - - override fun onAttach(context: Context) { - super.onAttach(context) - headerInteractionListener = context as? HeaderInteractionListener - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - binding = EmiUpdatedCalendarFragmentBinding.inflate(inflater, container, false) - loanType = arguments?.getString(LOAN_TYPE) ?: com.naviapp.utils.Constants.TYPE_PERSONAL_LOAN - initError(viewModel) - readArguments() - initUI() - initObservers() - fetchEMIDateChangeResponse() - return binding.root - } - - private fun initUI() { - loanType?.let { eventTracker.onNewEMICalenderPage(it) } - binding.headerView.hideHelpIcon() - binding.viewAllLayout.headerTv.setOnClickListener(this) - } - - private fun readArguments() { - arguments?.let { - loanAccountNumber = it.getString(LOAN_ACCOUNT_NUMBER_DATA) - nextEmiDate = it.getString(KEY_DATE) - } - } - - private fun fetchEMIDateChangeResponse() { - arguments?.getString(LOAN_ACCOUNT_NUMBER_DATA)?.let { loanAccountNumber -> - arguments?.getString(KEY_DATE)?.let { date -> - showLoader() - viewModel.fetchEMIUpdatedCalendarResponse(loanAccountNumber, date) - } - } - } - - override fun onClick(v: View?) { - when (v?.id) { - R.id.header_tv -> handleViewAllClick() - } - } - - private fun handleViewAllClick() { - loanType?.let { eventTracker.onViewAllCTA(it) } - - binding.emiCalendarBinder?.content?.calendarVisibilityConfig?.let { calendarConfig -> - when (viewHolderMode) { - VIEW_OPEN -> setViewOpenList(calendarConfig) - VIEW_CLOSE -> setViewCloseList(calendarConfig) - } - } - } - - private fun setViewCloseList(calendarConfig: CalendarVisibilityConfig) { - emiCalendarAdapter?.setAdapterList(viewModel.visibleCalendar) - setViewAllHeader(calendarConfig.openHeader) - viewHolderMode = VIEW_OPEN - } - - private fun setViewOpenList(calendarConfig: CalendarVisibilityConfig) { - emiCalendarAdapter?.setAdapterList(viewModel.totalCalendar) - setViewAllHeader(calendarConfig.closeHeader) - viewHolderMode = VIEW_CLOSE - } - - private fun setViewAllHeader(header: StyledTextWithIconCode?) { - header?.let { - binding.viewAllLayout.header = it - binding.viewAllLayout.iconCode = it.iconCode - } - } - - private fun initObservers() { - viewModel.emiUpdatedCalendarResponse.observeNonNull(viewLifecycleOwner) { - emiUpdatedCalendarResponse -> - hideLoader() - initData(emiUpdatedCalendarResponse) - setEmiCalendar( - emiUpdatedCalendarResponse.content?.updatedCalendar, - emiUpdatedCalendarResponse.content?.calendarVisibilityConfig - ) - var coLendingBalanceTransferEvent = - emiUpdatedCalendarResponse.metadata?.get(COLENDING_BALANCE_TRANSFER_EVENT)?.data - as? AnalyticsEvent - if (coLendingBalanceTransferEvent != null) { - NaviAnalytics.naviAnalytics.sendAnalyticsEvent(coLendingBalanceTransferEvent) - isColendingBalanceTransferEligible = true - } - emiDateChangeSuccessEvent = - emiUpdatedCalendarResponse.metadata?.get(EMI_DATE_CHANGE_SUCCESS_EVENT)?.data - as? AnalyticsEvent - emiDateChangeFailureEvent = - emiUpdatedCalendarResponse.metadata?.get(EMI_DATE_CHANGE_FAILURE_EVENT)?.data - as? AnalyticsEvent - } - - viewModel.emiDateChangeDetails.observe(viewLifecycleOwner) { ctaData -> - ctaData?.let { NaviDeepLinkNavigator.navigate(activity, ctaData, finish = true) } - } - - viewModel.emiDateChangeSuccessResponse.observe(viewLifecycleOwner) { emiDateChangeResponse - -> - emiDateChangeResponse?.let { - NaviAnalytics.naviAnalytics.sendAnalyticsEvent(emiDateChangeSuccessEvent) - } - ?: kotlin.run { - NaviAnalytics.naviAnalytics.sendAnalyticsEvent(emiDateChangeFailureEvent) - } - } - - viewLifecycleOwner.lifecycleScope.launchWhenStarted { - launch { - viewModel.initiateLoanAgreementResponse.collect { - handleLoanAgreementInitiationResponse(it) - } - } - } - } - - private fun handleLoanAgreementInitiationResponse( - viewState: GenericResponseState - ) { - when (viewState) { - is GenericResponseState.Init -> { - showLoader() - } - is GenericResponseState.Error -> { - hideLoader() - } - is GenericResponseState.Loading -> { - showLoader() - } - is GenericResponseState.Success -> { - hideLoader() - viewState.data?.downloadCta?.let { ctaData -> - var flowCta: CtaData? = ctaData - ctaData.parameters?.forEach { - if (it.key == Constants.IS_EMI_DATE_CHANGE_FLOW) { - flowCta = viewModel.nextCta.value - flowCta?.changeValueOfExistingCtaParams( - Constants.IS_LOAN_AGREEMENT_UPDATION_REQUIRED, - NaviAnalytics.FALSE - ) - } - } - flowCta?.let { handleLoanAgreementInitiationCta(it) } - } - } - else -> Unit - } - } - - private fun handleLoanAgreementInitiationCta(ctaData: CtaData) { - if (ctaData.url == CtaType.DOWNLOAD.name) { - downloadFile(ctaData, screenName) - } else { - onFooterNextPress(ctaData) - } - } - - private fun setEmiCalendar( - updatedCalendar: ArrayList?, - calendarVisibilityConfig: CalendarVisibilityConfig? - ) { - updatedCalendar?.let { - binding.emiCalendarHolderLl.visibility = View.VISIBLE - calendarVisibilityConfig?.count?.let { - setVisibleCalendarConfig(calendarVisibilityConfig, updatedCalendar) - } - ?: run { - viewModel.totalCalendar = updatedCalendar - viewModel.visibleCalendar = updatedCalendar - } - initEmiCalendarAdapter(viewModel.visibleCalendar) - } ?: run { binding.emiCalendarHolderLl.visibility = View.GONE } - } - - private fun setVisibleCalendarConfig( - calendarVisibilityConfig: CalendarVisibilityConfig, - updatedCalendar: ArrayList - ) { - val visibleCount = calendarVisibilityConfig.count - val totalCount = updatedCalendar.size - visibleCount?.let { - if (visibleCount < totalCount) { - binding.viewAllLayout.viewAllHolderCl.visibility = View.VISIBLE - val visibleCalendarList = getVisibleCalendarList(visibleCount, updatedCalendar) - setTotalAndVisibleList(updatedCalendar, visibleCalendarList) - setViewAllHeader( - binding.emiCalendarBinder?.content?.calendarVisibilityConfig?.openHeader - ) - } else { - setTotalAndVisibleList(updatedCalendar, updatedCalendar) - binding.viewAllLayout.viewAllHolderCl.visibility = View.GONE - } - } - } - - private fun setTotalAndVisibleList( - totalList: ArrayList, - visibleList: ArrayList - ) { - viewModel.totalCalendar = totalList - viewModel.visibleCalendar = visibleList - } - - private fun getVisibleCalendarList( - visibleCount: Int, - updatedCalendar: java.util.ArrayList - ): ArrayList { - - val calendarList = ArrayList() - updatedCalendar.forEachIndexed { index, emiDateContent -> - if (index < visibleCount) { - calendarList.add(emiDateContent) - } - } - return calendarList - } - - private fun initialiseRescheduleLoanAgreementGeneration(ctaData: CtaData) { - var saveAgreement = false - ctaData.parameters?.forEach { - if (it.key == SAVE_AGREEMENT) { - saveAgreement = it.value.toBoolean() - } - } - val initiateRescheduleLoanAgreementGenerationRequest = - InitiateRescheduleLoanAgreementGenerationRequest( - loanAccountNumber = loanAccountNumber, - rescheduleType = EMI_DATE_CHANGE, - saveAgreement = saveAgreement, - emiDateChangeRequest = - EmiDataChangeLoanAgreementGenerationDetails(date = nextEmiDate) - ) - viewModel.initiateRescheduleLoanAgreementGeneration( - loanAccountNumber, - initiateRescheduleLoanAgreementGenerationRequest - ) - } - - private fun initData(emiUpdatedCalendarResponse: EMIUpdatedCalendarResponse) { - binding.emiCalendarBinder = emiUpdatedCalendarResponse - binding.loanAgreementTv.setTextFieldData( - emiUpdatedCalendarResponse.content?.loanAgreementHyperLink, - ctaCallback = { - if (it.url == LOAN_AGREEMENT_UPDATION) { // non-colended loans - initialiseRescheduleLoanAgreementGeneration(it) - } else { // co-lended loans - downloadFile(it, screenName) - } - } - ) - binding.footerView.setProperties( - emiUpdatedCalendarResponse.header?.backCta, - emiUpdatedCalendarResponse.footer?.nextCta, - this, - nextButtonIconId = null - ) - binding.headerView.apply { - setProperties(emiUpdatedCalendarResponse.header?.title) - binding.backIv.setOnClickListener { activity?.onBackPressed() } - } - emiUpdatedCalendarResponse.footer?.message?.let { - binding.footerView.setMessage(emiUpdatedCalendarResponse.footer?.message, this) - } - } - - private fun initEmiCalendarAdapter(emiDateList: List?) { - - emiDateList?.let { - emiCalendarAdapter = EMIUpdatedCalendarAdapter(it) - binding.emiCalendarRv.adapter = emiCalendarAdapter - } - binding.emiCalendarRv.addItemDecoration( - TopMarginItemDecoration(resources.getDimension(R.dimen.layout_dp_22)) - ) - } - - companion object { - const val TAG = NaviAnalytics.EMI_UPDATED_CALENDAR - const val KEY_DATE = "KEY_DATE" - const val KEY_REASON = "KEY_REASON" - const val KEY_SHOW_REASON = "KEY_SHOW_REASON" - private const val VIEW_OPEN = "VIEW_OPEN" - private const val VIEW_CLOSE = "VIEW_CLOSE" - private const val EMI_DATE_CHANGE_SUCCESS_EVENT = "emiDateChangeSuccessEvent" - private const val EMI_DATE_CHANGE_FAILURE_EVENT = "emiDateChangeFailureEvent" - const val LOAN_AGREEMENT_UPDATION = "LOAN_AGREEMENT_UPDATION" - - fun newInstance(bundle: Bundle): EMIUpdatedCalendarFragment { - return EMIUpdatedCalendarFragment().apply { arguments = bundle } - } - } - - private fun updateEmiChangeDetails() { - emiAmountStatusText = - viewModel.emiUpdatedCalendarResponse.value - ?.content - ?.note - ?.colorTextList - ?.get(0) - ?.text - .toString() - val list = emiAmountStatusText?.split(' ') - list - ?.takeIf { it.size >= 2 } - ?.let { - emiAmountStatus = it.first().toString() - amount = it.last().toString() - } - } - - override fun onFooterBackPress(ctaData: CtaData?) { - - ctaData?.let { - val loanAccNumber = arguments?.getString(LOAN_ACCOUNT_NUMBER_DATA) - val bundle = Bundle() - bundle.putString(LOAN_ACCOUNT_NUMBER_DATA, loanAccNumber) - NaviDeepLinkNavigator.navigate(activity, it, bundle = bundle, finish = true) - } - } - - private fun postEmiDateChangeDetails(ctaData: CtaData?) { - val loanAccNumber = arguments?.getString(LOAN_ACCOUNT_NUMBER_DATA) - val date = arguments?.getString(KEY_DATE) - val reason = arguments?.getString(KEY_REASON) - - viewModel.postEmiDateChangeDetails( - EmiDateChangeDetails( - loanAccountNumber = loanAccNumber, - nextInstallmentDate = date, - reason = reason, - showReason = arguments?.getString(KEY_SHOW_REASON) - ), - ctaData - ) - } - - private fun handleFooterPressCta(ctaData: CtaData?) { - NaviTrackEvent.setStartTs(screenName) - updateEmiChangeDetails() - eventTracker.onConfirmButtonClicked(emiAmountStatus, amount, loanType) - postEmiDateChangeDetails(ctaData) - ctaData?.analyticsEventProperties?.let { - NaviTrackEvent.trackEventOnClickStream( - it.name.toString(), - mapOf( - Pair( - ELIGIBLE_FOR_BALANCE_TRANSFER, - isColendingBalanceTransferEligible.toString() - ) - ) - ) - } - } - - override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { - showLoader() - var isLoanAgreementUpdationRequired = false - ctaData?.getCtaParamValueForKey(Constants.IS_LOAN_AGREEMENT_UPDATION_REQUIRED)?.let { - isLoanAgreementUpdationRequired = it.toBoolean() - } - if (isLoanAgreementUpdationRequired) { - viewModel.setNextCta(ctaData) - initialiseRescheduleLoanAgreementGeneration( - CtaData(parameters = listOf(LineItem(SAVE_AGREEMENT, Constants.TRUE))) - ) - } else { - handleFooterPressCta(ctaData) - } - } - - override fun onFooterTextPress(ctaData: CtaData?) { - if (ctaData?.url == CtaType.DOWNLOAD.name) { - if (naviDownloadManager == null) { - naviDownloadManager = NaviDownloadManager(WeakReference(activity)) - } - naviDownloadManager?.start( - TAG, - ctaData.title.toString(), - ctaData.parameters?.getOrNull(0)?.value.toString(), - "" - ) - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EmiStatusCalendarFragment.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EmiStatusCalendarFragment.kt deleted file mode 100644 index b026e5d9f2..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/fragments/EmiStatusCalendarFragment.kt +++ /dev/null @@ -1,358 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.fragments - -import android.content.Context -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.core.view.isVisible -import androidx.core.widget.NestedScrollView -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.LinearLayoutManager -import com.navi.base.model.* -import com.navi.common.listeners.FragmentInterchangeListener -import com.navi.common.ui.fragment.BaseFragment -import com.navi.common.utils.observeNonNull -import com.navi.common.utils.observeNullable -import com.navi.naviwidgets.callbacks.WidgetCallback -import com.navi.naviwidgets.models.response.BottomSheetInfoV2 -import com.navi.naviwidgets.models.response.TextFieldData -import com.navi.naviwidgets.widgets.textdisplay.Margin -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.fragment.InfoBottomSheetV3 -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.adapters.EmiStatusCalendarAdapter -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.* -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.states.OnScrollState -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.viewmodel.EmiViewModel -import com.naviapp.databinding.EmiStatusCalendarFragmentBinding -import com.naviapp.utils.* -import com.naviapp.utils.Constants.HOME_LOAN_TITLE -import com.naviapp.utils.Constants.WIDGET_ID -import kotlinx.coroutines.launch - -class EmiStatusCalendarFragment : BaseFragment() { - private lateinit var binding: EmiStatusCalendarFragmentBinding - private var loanAccountNumber: String? = null - private var loanPreClosureData: EmiInstallment? = null - private var pageNumber: Int = 0 - private val viewModel by lazy { ViewModelProvider(this)[EmiViewModel::class.java] } - private var repoRateBottomSheet: BottomSheetInfoV2? = null - private lateinit var widgetCallback: WidgetCallback - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - super.onCreateView(inflater, container, savedInstanceState) - binding = EmiStatusCalendarFragmentBinding.inflate(inflater, container, false) - loanAccountNumber = arguments?.getString(LOAN_ACCOUNT_NUMBER) - checkForUIInit() - return binding.root - } - - private fun checkForUIInit() { - if (loanAccountNumber == null) { - binding.emiNoteTv.visibility = View.GONE - binding.emiDescriptionTv.visibility = View.GONE - } else { - init() - initObservers() - fetchEmi(pageNumber) - } - } - - private fun initObservers() { - viewModel.emiCalendarResponse.observeNonNull(viewLifecycleOwner) { emiCalendarResponse -> - (emiCalendarResponse.metadata - ?.get(Constants.MetaDataKey.METADATA_REPO_RATE_BOTTOM_SHEET.value) - ?.data as? BottomSheetInfoV2) - ?.let { repoRateBottomSheet = it } - } - viewModel.emis.observeNullable(viewLifecycleOwner) { emiList -> - if (binding.emiCalendarRv.adapter == null) { - binding.emiCalendarRv.visibility = View.VISIBLE - binding.emiCalendarRv.adapter = - EmiStatusCalendarAdapter( - getEmiCalendar(emiList, loanPreClosureData), - context, - widgetCallback - ) - arguments?.getString(WIDGET_ID)?.let { id -> - if (HOME_LOAN_TITLE.contains(id, true)) { - if (binding.preEmiTitleTv.isVisible) { - binding.emiTitleTv.visibility = View.VISIBLE - binding.emiTitleTv.text = arguments?.getString(EMI_TITLE) - } - val emiCalenderNotes = arguments?.getString(EMI_CALENDAR_NOTES) ?: "" - if (emiCalenderNotes.isNotEmpty()) { - binding.emiCalanderNotesTv.visibility = View.VISIBLE - binding.emiCalanderNotesTv.text = emiCalenderNotes - } - } - } - if ( - !arguments - ?.getParcelableArrayList(PRE_EMI_INSTALLMENTS_LIST) - .isNullOrEmpty() - ) { - binding.divider.visibility = View.VISIBLE - } - hideLoader() - } else { - emiList?.let { - (binding.emiCalendarRv.adapter as? EmiStatusCalendarAdapter)?.let { - emiStatusCalendarAdapter -> - emiStatusCalendarAdapter.updateEmiCalendarList( - getEmiCalendar( - it, - loanPreClosureData, - emiStatusCalendarAdapter.itemCount - ) - ) - } - } - } - } - - viewLifecycleOwner.lifecycleScope.launchWhenStarted { - launch { viewModel.showShimmer.collect { setOnScrollState(it) } } - } - } - - private fun setOnScrollState(onScrollState: OnScrollState) { - when (onScrollState) { - OnScrollState.Init -> { - showShimmer() - } - OnScrollState.Loading -> { - binding.onScrollDivider.visibility = View.VISIBLE - binding.emiNoteTv.setMargin(Margin(topDp = 8f)) - binding.onScrollLoader.visibility = View.VISIBLE - } - OnScrollState.Failure, - OnScrollState.Completed -> { - stopShimmer() - binding.onScrollDivider.visibility = View.GONE - binding.emiNoteTv.setMargin(Margin(topDp = 20f)) - binding.onScrollLoader.visibility = View.GONE - } - } - } - - private fun fetchEmi(page: Int) { - loanAccountNumber?.let { viewModel.fetchEmi(it, page, size = EMI_CALENDAR_SIZE) } - } - - private fun init() { - loanPreClosureData = arguments?.getParcelable(LOAN_PRECLOSURE_DATA) - loanPreClosureData?.let { - binding.emiDescriptionTv.visibility = View.GONE - binding.emiNoteTv.visibility = View.GONE - } - if ( - !arguments - ?.getParcelableArrayList(PRE_EMI_INSTALLMENTS_LIST) - .isNullOrEmpty() - ) { - binding.preEmiCalendarRv.visibility = View.VISIBLE - binding.preEmiTitleTv.visibility = View.VISIBLE - binding.preEmiTitleTv.text = arguments?.getString(PRE_EMI_TITLE) - binding.preEmiCalendarRv.layoutManager = LinearLayoutManager(context) - binding.preEmiCalendarRv.adapter = - EmiStatusCalendarAdapter( - getEmiCalendar( - arguments?.getParcelableArrayList(PRE_EMI_INSTALLMENTS_LIST), - loanPreClosureData - ), - context - ) - } - initEmiPagination() - - widgetCallback = - object : WidgetCallback { - override fun onClick(naviClickAction: NaviClickAction, widgetId: String?) { - if (naviClickAction is CtaData) { - when (naviClickAction.url) { - CtaType.INFO_BOTTOM_SHEET_V3.name -> { - repoRateBottomSheet?.run { - if (!isBottomSheetVisible(InfoBottomSheetV3.TAG)) { - val bottomSheet = InfoBottomSheetV3.getInstance(this) - safelyShowBottomSheet(bottomSheet, InfoBottomSheetV3.TAG) - } - } - } - else -> { - val bundle = Bundle() - naviClickAction.parameters?.forEach { - bundle.putString(it.key, it.value) - } - naviClickAction.url?.let { - fragmentInterchangeListener?.navigateToNextScreen(it, bundle) - } - } - } - } - } - - override fun widgetAnalytics(analyticsEvent: AnalyticsEvent?) { - super.widgetAnalytics(analyticsEvent) - } - - override fun widgetAnalytics(genericAnalyticsData: GenericAnalyticsData?) { - super.widgetAnalytics(genericAnalyticsData) - } - } - } - - private fun initEmiPagination() { - binding.parentView.setOnScrollChangeListener( - NestedScrollView.OnScrollChangeListener { _, _, scrollY, _, _ -> - val diffView = binding.emiCalendarRv.bottom - (scrollY + binding.parentView.height) - if ( - viewModel.shouldLoadMore() && - diffView < resources.getDimension(R.dimen.layout_dp_100) - ) { - fetchEmi(++pageNumber) - } - } - ) - } - - private fun getEmiCalendar( - emiCalendar: List?, - loanPreClosureData: EmiInstallment? = null, - initialCount: Int = 0 - ): MutableList { - - var emiList: MutableList = mutableListOf() - if (emiCalendar != null) { - emiList = - emiCalendar - .mapIndexed { i, installment -> - val count = i + initialCount - EmiInstallmentBinder( - getString( - R.string.emi_due_date_format, - count.inc().toString().getOrdinal() - ), - installment.dueDate, - installment.status, - installment.statusTextColor, - installment.amount?.value?.formatCurrency(), - installment.totalOverdue?.value?.formatCurrency(), - installment.dueDetails?.let { getDueDetails(it) }, - installment.debitStatus?.let { getStatusCardDetails(it) } - ?: installment.messageCard?.let { getMessageCardDetails(it) } - ) - } - .toMutableList() - } - if (loanPreClosureData != null && viewModel.isLastPage()) { - emiList.add( - EmiInstallmentBinder( - getString(R.string.loan_foreclosed_title), - loanPreClosureData.dueDate, - loanPreClosureData.status, - loanPreClosureData.statusTextColor, - loanPreClosureData.amount?.value?.formatCurrency() - ) - ) - } - return emiList - } - - private fun getDueDetails(dueDetails: List): List { - return dueDetails.map { - DueDetailBinder( - it.leftText, - it.rightText, - it.description, - it.slashedAmount, - it.timerConfig - ) - } - } - - private fun getStatusCardDetails(statusDetails: StatusCard): DescExpandableItemBinder { - return DescExpandableItemBinder( - TextFieldData(text = statusDetails.title), - TextFieldData(text = statusDetails.description), - statusDetails.iconCode, - eventName = statusDetails.eventName, - cardType = STATUS_CARD - ) - } - - private fun getMessageCardDetails(messageCard: MessageCard): DescExpandableItemBinder { - return DescExpandableItemBinder( - messageCard.title, - messageCard.description, - messageCard.leftIcon?.iconCode, - cardType = MESSAGE_CARD - ) - } - - private fun showShimmer() { - binding.shimmerLayout.visibility = View.VISIBLE - binding.shimmerLayout.startShimmer() - binding.parentView.visibility = View.GONE - } - - private fun stopShimmer() { - binding.shimmerLayout.stopShimmer() - binding.shimmerLayout.visibility = View.GONE - binding.parentView.visibility = View.VISIBLE - } - - override fun onAttach(context: Context) { - super.onAttach(context) - fragmentInterchangeListener = context as? FragmentInterchangeListener - } - - override val screenName: String - get() = NaviAnalytics.EMI_STATUS_CALENDAR_FRAGMENT - - companion object { - const val TAG = "EmiStatusCalendarFragment" - private const val PRE_EMI_INSTALLMENTS_LIST = "PRE_EMI_INSTALLMENTS_LIST" - private const val LOAN_PRECLOSURE_DATA = "LOAN_PRECLOSURE_DATA" - private const val EMI_TITLE = "EMI_TITLE" - private const val PRE_EMI_TITLE = "PRE_EMI_TITLE" - private const val EMI_CALENDAR_NOTES = "EMI_CALENDAR_NOTES" - private const val EMI_CALENDAR_SIZE = 12 - private const val STATUS_CARD = "StatusCard" - private const val MESSAGE_CARD = "MessageCard" - - fun newInstance( - emiTitle: String?, - preEmiTitle: String?, - emiCalendarNotes: String?, - preEmiCalendar: ArrayList?, - loanPreClosureData: EmiInstallment? = null, - widgetId: String? = null, - loanAccountNumber: String? - ) = - EmiStatusCalendarFragment().apply { - val args = Bundle() - args.putParcelableArrayList(PRE_EMI_INSTALLMENTS_LIST, preEmiCalendar) - args.putString(WIDGET_ID, widgetId) - args.putString(EMI_TITLE, emiTitle) - args.putString(PRE_EMI_TITLE, preEmiTitle) - args.putString(EMI_CALENDAR_NOTES, emiCalendarNotes) - loanPreClosureData?.apply { args.putParcelable(LOAN_PRECLOSURE_DATA, this) } - args.putString(LOAN_ACCOUNT_NUMBER, loanAccountNumber) - arguments = args - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/layouts/EmiCalendarDueDetailsLayout.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/layouts/EmiCalendarDueDetailsLayout.kt deleted file mode 100644 index b464715dd2..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/layouts/EmiCalendarDueDetailsLayout.kt +++ /dev/null @@ -1,106 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.layouts - -import android.content.Context -import android.os.CountDownTimer -import android.util.AttributeSet -import android.view.View -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.view.isVisible -import com.navi.base.utils.isNotNull -import com.navi.common.utils.getTimerData -import com.navi.insurance.util.log -import com.navi.insurance.util.strikedText -import com.navi.naviwidgets.extensions.setTextFieldData -import com.navi.naviwidgets.models.response.GenericWidgetTimerConfig -import com.navi.naviwidgets.utils.formatLastSubStringStyle -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.DueDetailBinder -import com.naviapp.databinding.DueDetailViewBinding - -class EmiCalendarDueDetailsLayout -@JvmOverloads -constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0, -) : ConstraintLayout(context, attrs, defStyleAttr) { - private var binding: DueDetailViewBinding? = null - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - binding = null - } - - private fun setVisibility(isVisible: Boolean) { - binding?.titleTv?.isVisible = isVisible - binding?.amountTv?.isVisible = isVisible - } - - private fun setTimerProperties( - timerConfig: GenericWidgetTimerConfig, - lineItemData: DueDetailBinder - ) { - try { - if (timerConfig.currentTime.isNotNull() && timerConfig.endTime.isNotNull()) { - setVisibility(true) - val millsInFuture = timerConfig.endTime?.minus(timerConfig.currentTime ?: 0) ?: 0 - val countDownTimer: CountDownTimer = - object : CountDownTimer(millsInFuture, COUNT_DOWN_INTERVAL) { - override fun onTick(millisUntilFinished: Long) { - val timerString = getTimerData(millisUntilFinished) - val baseString = timerConfig.baseString - timerConfig.insertAt?.let { - lineItemData.title?.text = - baseString?.substring(0, it) + - timerString + - baseString?.substring(it) - } ?: run { lineItemData.title?.text = timerString } - binding - ?.titleTv - ?.setTextFieldData( - formatLastSubStringStyle(lineItemData.title, timerString) - ) - } - - override fun onFinish() { - setVisibility(false) - } - } - countDownTimer.start() - } else { - setVisibility(false) - } - } catch (e: Exception) { - e.log() - setVisibility(false) - } - } - - fun setProperties(data: DueDetailBinder, binding: DueDetailViewBinding) { - this.binding = binding - binding.apply { - titleTv.setTextFieldData(data.title) - data.description?.let { - descriptionTv.visibility = View.VISIBLE - descriptionTv.setTextFieldData(it) - } ?: run { descriptionTv.visibility = View.GONE } - data.slashedAmount?.let { - slashedAmountTv.visibility = View.VISIBLE - slashedAmountTv.setTextFieldData(it) - slashedAmountTv.strikedText() - } ?: run { slashedAmountTv.visibility = View.GONE } - amountTv.setTextFieldData(data.amount) - data.timerConfig?.let { setTimerProperties(it, data) } - } - } - - companion object { - private const val COUNT_DOWN_INTERVAL = 1000L - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiCalendarResponse.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiCalendarResponse.kt deleted file mode 100644 index 8bd98cfec5..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiCalendarResponse.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * - * * Copyright © 2019-2022 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.models - -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.ParameterValue - -data class EmiCalendarResponse( - @SerializedName("emiCalendar") val emiCalendar: List? = null, - @SerializedName("nextPage") val nextPage: Int? = null, - @SerializedName("lastPage") val lastPage: Boolean? = null, - @SerializedName("metadata") var metadata: MutableMap? = null -) diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiDateChangeBottomSheetData.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiDateChangeBottomSheetData.kt deleted file mode 100644 index 02ce53e80c..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiDateChangeBottomSheetData.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.models - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.ParameterValue -import com.navi.naviwidgets.models.response.ImageFieldData -import com.navi.naviwidgets.models.response.LayoutFieldData -import com.navi.naviwidgets.models.response.TextFieldData -import kotlinx.parcelize.Parcelize - -@Parcelize -data class EmiDateChangeBottomSheetData( - @SerializedName("leftIcon") val leftIcon: ImageFieldData? = null, - @SerializedName("title") val title: TextFieldData? = null, - @SerializedName("descriptions") val descriptions: List? = null, - @SerializedName("primaryAction") val primaryAction: LayoutFieldData? = null, - @SerializedName("secondaryAction") val secondaryAction: LayoutFieldData? = null, - @SerializedName("metadata") val metadata: MutableMap? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiInstallment.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiInstallment.kt deleted file mode 100644 index 4960d19748..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiInstallment.kt +++ /dev/null @@ -1,84 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.models - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.response.GenericWidgetTimerConfig -import com.navi.naviwidgets.models.response.ImageFieldData -import com.navi.naviwidgets.models.response.TextFieldData -import com.naviapp.payment.models.Amount -import kotlinx.parcelize.Parcelize - -@Parcelize -data class EmiInstallment( - @SerializedName("dueDate") val dueDate: String? = null, - @SerializedName("status") val status: EmiStatus? = null, - @SerializedName("statusColor") val statusTextColor: String? = null, - @SerializedName("amount") val amount: Amount? = null, - @SerializedName("totalOverdue") val totalOverdue: Amount? = null, - @SerializedName("dueDetailsV2", alternate = ["emiCalendarDueDetails"]) - val dueDetails: List? = null, - @SerializedName("debitStatus") val debitStatus: StatusCard? = null, - @SerializedName("messageCard") val messageCard: MessageCard? = null -) : Parcelable - -@Parcelize -data class MessageCard( - @SerializedName("leftIcon") val leftIcon: ImageFieldData? = null, - @SerializedName("title") val title: TextFieldData? = null, - @SerializedName("description") val description: TextFieldData? = null, - @SerializedName("bgColor") val bgColor: String? = null -) : Parcelable - -@Parcelize -data class DueDetail( - @SerializedName("leftText") val leftText: TextFieldData? = null, - @SerializedName("rightText") val rightText: TextFieldData? = null, - @SerializedName("description") val description: TextFieldData? = null, - @SerializedName("slashedAmount") val slashedAmount: TextFieldData? = null, - @SerializedName("timerConfig") val timerConfig: GenericWidgetTimerConfig? = null -) : Parcelable - -@Parcelize -data class StatusCard( - @SerializedName("title") val title: String? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("status") val status: String? = null, - @SerializedName("eventName") val eventName: String? = null -) : Parcelable - -data class EmiInstallmentBinder( - val number: String? = null, - val dueDate: String? = null, - val status: EmiStatus? = null, - val statusTextColor: String? = null, - val amount: String? = null, - val totalOverdue: String? = null, - val dueDetails: List? = null, - val descExpandableItemBinder: DescExpandableItemBinder? = null, - var showDetails: Boolean = false -) - -data class DueDetailBinder( - val title: TextFieldData? = null, - val amount: TextFieldData? = null, - val description: TextFieldData? = null, - val slashedAmount: TextFieldData? = null, - val timerConfig: GenericWidgetTimerConfig? = null -) - -data class DescExpandableItemBinder( - val infoTitle: TextFieldData? = null, - val infoDescription: TextFieldData? = null, - val infoIcon: String? = null, - val collapsibleIcon: String? = null, - val eventName: String? = null, - val cardType: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiStatus.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiStatus.kt deleted file mode 100644 index a087f56979..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/models/EmiStatus.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.models - -import com.google.gson.annotations.SerializedName - -enum class EmiStatus(val displayString: String) { - @SerializedName("PAID") PAID("Paid"), - @SerializedName("OVERDUE") OVERDUE("Over due"), - @SerializedName("SCHEDULED") SCHEDULED("Scheduled"), - @SerializedName("UNPAID") UNPAID("Due"), - @SerializedName("PARTIALLY_PAID") PARTIALLY_PAID("Partially Paid") -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/repo/EMIDateChangeRepository.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/repo/EMIDateChangeRepository.kt deleted file mode 100644 index 66d2bf9bc7..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/repo/EMIDateChangeRepository.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.repo - -import com.navi.common.model.InitiateRescheduleLoanAgreementGenerationRequest -import com.navi.common.model.InitiateRescheduleLoanAgreementGenerationResponse -import com.navi.common.network.models.RepoResult -import com.naviapp.models.response.EmiDateChangeDetails -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.utils.retrofitService - -class EMIDateChangeRepository : ResponseCallback() { - - suspend fun fetchEMIDateChangeResponse(loanApplicationId: String, animation: Boolean?) = - apiResponseCallback( - retrofitService().fetchEMIDateChangeResponse(loanApplicationId, animation) - ) - - suspend fun fetchEMIUpdatedCalendarResponse(loanApplicationId: String, date: String) = - apiResponseCallback( - retrofitService().fetchEMIUpdatedCalendarResponse(loanApplicationId, date) - ) - - suspend fun postEmiDateChangeDetails(emiDateChangeDetails: EmiDateChangeDetails) = - apiResponseCallback(retrofitService().fetchEMiDateChangeStatus(emiDateChangeDetails)) - - suspend fun fetchLoanBasicDetails() = - apiResponseCallback(retrofitService().fetchLoanBasicDetails()) - - suspend fun initiateRescheduleLoanAgreementGeneration( - loanAccountNumber: String?, - data: InitiateRescheduleLoanAgreementGenerationRequest? - ): RepoResult = - apiResponseCallback( - retrofitService() - .initiateRescheduleLoanAgreementGeneration( - loanAccountNumber = loanAccountNumber, - data = data - ) - ) -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/repo/EmiRepository.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/repo/EmiRepository.kt deleted file mode 100644 index 10babfc3af..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/repo/EmiRepository.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * - * * Copyright © 2019-2022 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.repo - -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.utils.retrofitService - -class EmiRepository : ResponseCallback() { - suspend fun fetchEmi(accountNumber: String, page: Int, size: Int) = - apiResponseCallback(retrofitService().fetchEmi(accountNumber, page, size)) -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/states/OnScrollState.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/states/OnScrollState.kt deleted file mode 100644 index 8e02c6b2cd..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/states/OnScrollState.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.states - -sealed class OnScrollState { - object Init : OnScrollState() - - object Loading : OnScrollState() - - object Failure : OnScrollState() - - object Completed : OnScrollState() -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EMIDateChangeFragmentVM.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EMIDateChangeFragmentVM.kt deleted file mode 100644 index d765a4d698..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EMIDateChangeFragmentVM.kt +++ /dev/null @@ -1,68 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.viewmodel - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.viewModelScope -import com.navi.common.network.models.ErrorMetaData -import com.navi.common.utils.Constants.FLOW_POST_PURCHASE -import com.navi.common.viewmodel.BaseVM -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.repo.EMIDateChangeRepository -import com.naviapp.models.EMIDateChangeResponse -import com.naviapp.models.response.LoanBasicDetailsResponse -import kotlinx.coroutines.launch - -class EMIDateChangeFragmentVM : BaseVM() { - private val repository = EMIDateChangeRepository() - private val _emiDateChangeResponse = MutableLiveData() - val emiDateChangeResponse: LiveData - get() = _emiDateChangeResponse - - private val _loanBasicDetails = MutableLiveData() - val loanBasicDetails: LiveData - get() = _loanBasicDetails - - fun fetchEMIDateChangeResponse(loanApplicationId: String, animation: Boolean) { - viewModelScope.launch { - val response = repository.fetchEMIDateChangeResponse(loanApplicationId, animation) - if (response.error == null) { - _emiDateChangeResponse.value = response.data - } else { - setErrorData( - response.errors, - response.error, - errorMetaData = - ErrorMetaData( - flowName = FLOW_POST_PURCHASE, - methodName = ::fetchEMIDateChangeResponse.name - ) - ) - } - } - } - - fun fetchLoanBasicDetails() { - viewModelScope.launch { - val response = repository.fetchLoanBasicDetails() - if (response.error == null && response.errors.isNullOrEmpty()) { - _loanBasicDetails.value = response.data - } else { - setErrorData( - response.errors, - response.error, - errorMetaData = - ErrorMetaData( - flowName = FLOW_POST_PURCHASE, - methodName = ::fetchLoanBasicDetails.name - ) - ) - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EMIUpdatedCalendarFragmentVM.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EMIUpdatedCalendarFragmentVM.kt deleted file mode 100644 index 4dbbc19c82..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EMIUpdatedCalendarFragmentVM.kt +++ /dev/null @@ -1,132 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.viewmodel - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.viewModelScope -import com.navi.base.model.CtaData -import com.navi.common.model.InitiateRescheduleLoanAgreementGenerationRequest -import com.navi.common.model.InitiateRescheduleLoanAgreementGenerationResponse -import com.navi.common.network.models.ErrorMetaData -import com.navi.common.network.models.GenericResponseState -import com.navi.common.utils.Constants.FLOW_POST_PURCHASE -import com.navi.common.utils.isValidResponse -import com.navi.common.viewmodel.BaseVM -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.repo.EMIDateChangeRepository -import com.naviapp.models.EMIDateContent -import com.naviapp.models.EMIUpdatedCalendarResponse -import com.naviapp.models.response.EmiDateChangeDetails -import com.naviapp.models.response.EmiDateChangeSuccessResponse -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch - -class EMIUpdatedCalendarFragmentVM : BaseVM() { - private val repository = EMIDateChangeRepository() - - private val _emiUpdatedCalendarResponse = MutableLiveData() - val emiUpdatedCalendarResponse: LiveData - get() = _emiUpdatedCalendarResponse - - private val _emiDateChangeSuccess = MutableLiveData() - val emiDateChangeDetails: LiveData - get() = _emiDateChangeSuccess - - private val _emiDateChangeSuccessResponse = MutableLiveData() - val emiDateChangeSuccessResponse: LiveData - get() = _emiDateChangeSuccessResponse - - private val _initiateLoanAgreementResponse = - MutableStateFlow>( - GenericResponseState.Init() - ) - val initiateLoanAgreementResponse = _initiateLoanAgreementResponse.asStateFlow() - - var totalCalendar: ArrayList? = null - - var visibleCalendar: ArrayList? = null - - private val _nextCta: MutableLiveData = MutableLiveData() - val nextCta: LiveData = _nextCta - - fun setNextCta(ctaData: CtaData?) { - _nextCta.value = ctaData - } - - fun fetchEMIUpdatedCalendarResponse(loanApplicationId: String, date: String) { - viewModelScope.launch { - val response = repository.fetchEMIUpdatedCalendarResponse(loanApplicationId, date) - if (response.error == null) { - _emiUpdatedCalendarResponse.value = response.data - } else { - setErrorData( - response.errors, - response.error, - errorMetaData = - ErrorMetaData( - flowName = FLOW_POST_PURCHASE, - methodName = ::fetchEMIUpdatedCalendarResponse.name - ) - ) - } - } - } - - fun postEmiDateChangeDetails(emiDateChangeDetails: EmiDateChangeDetails, ctaData: CtaData?) { - viewModelScope.launch { - val response = repository.postEmiDateChangeDetails(emiDateChangeDetails) - if (response.error == null && response.errors.isNullOrEmpty()) { - _emiDateChangeSuccess.value = ctaData - _emiDateChangeSuccessResponse.value = response.data - } else { - _emiDateChangeSuccess.value = null - setErrorData( - response.errors, - response.error, - errorMetaData = - ErrorMetaData( - flowName = FLOW_POST_PURCHASE, - methodName = ::postEmiDateChangeDetails.name - ) - ) - } - } - } - - fun initiateRescheduleLoanAgreementGeneration( - loanAccountNumber: String?, - data: InitiateRescheduleLoanAgreementGenerationRequest? - ) { - coroutineScope.launch { - _initiateLoanAgreementResponse.emit(GenericResponseState.Loading()) - val response = - repository.initiateRescheduleLoanAgreementGeneration(loanAccountNumber, data) - if (response.isValidResponse()) { - _initiateLoanAgreementResponse.emit(GenericResponseState.Success(response.data)) - } else { - setErrorData( - response.errors, - response.error, - ) - setErrorData( - response.errors, - response.error, - errorMetaData = - ErrorMetaData( - flowName = FLOW_POST_PURCHASE, - methodName = ::initiateRescheduleLoanAgreementGeneration.name - ) - ) - _initiateLoanAgreementResponse.emit( - GenericResponseState.Error(genericErrorResponse = response.errors?.get(0)) - ) - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EmiViewModel.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EmiViewModel.kt deleted file mode 100644 index bb7d9160ac..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/emicalendar/viewmodel/EmiViewModel.kt +++ /dev/null @@ -1,70 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.emicalendar.viewmodel - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.navi.common.viewmodel.BaseVM -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.EmiCalendarResponse -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.EmiInstallment -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.repo.EmiRepository -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.states.OnScrollState -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch - -class EmiViewModel(private val repository: EmiRepository = EmiRepository()) : BaseVM() { - private val _emis = MutableLiveData>() - val emis: LiveData> - get() = _emis - - private val _emiDetails = MutableLiveData() - val emiCalendarResponse: LiveData - get() = _emiDetails - - private var _showShimmer = MutableStateFlow(OnScrollState.Init) - val showShimmer = _showShimmer.asStateFlow() - - private var isLoading: Boolean = false - - fun fetchEmi(accountNumber: String, page: Int, size: Int) { - val isOnScroll = page >= 1 - val isInitializing = page == 0 - coroutineScope.launch { - isLoading = true - if (isOnScroll) { - _showShimmer.emit(OnScrollState.Loading) - } else if (isInitializing) { - _showShimmer.emit(OnScrollState.Init) - } - val response = repository.fetchEmi(accountNumber, page, size) - if (response.error == null && response.errors.isNullOrEmpty()) { - _emiDetails.value = response.data - _emis.value = response.data?.emiCalendar - if (isOnScroll || isInitializing) { - _showShimmer.emit(OnScrollState.Completed) - } - } else { - setErrorData(response.errors, response.error) - if (isOnScroll || isInitializing) { - _showShimmer.emit(OnScrollState.Failure) - } - } - - isLoading = false - } - } - - fun isLastPage(): Boolean { - return _emiDetails.value?.lastPage == true - } - - fun shouldLoadMore(): Boolean { - return isLastPage().not() && isLoading.not() - } -} diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/models/InterestCertificateURIDetail.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/models/InterestCertificateURIDetail.kt deleted file mode 100644 index 0f8484e4fb..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/models/InterestCertificateURIDetail.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.models - -import com.google.gson.annotations.SerializedName - -data class InterestCertificateURIDetail(@SerializedName("uri") val uri: String? = null) diff --git a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/models/YearDetails.kt b/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/models/YearDetails.kt deleted file mode 100644 index cc4ac441ba..0000000000 --- a/android/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/models/YearDetails.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.dashboard.loanapplicationdetails.models - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import kotlinx.parcelize.Parcelize - -@Parcelize -data class YearDetails( - @SerializedName("loanAccountNumber") val loanAccountNumber: String? = null, - @SerializedName("financialYearStarDate") val financialYearStarDate: String? = null, - @SerializedName("financialYearEndDate") val financialYearEndDate: String? = null, - @SerializedName("displayName") val displayName: String? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/dashboard/viewmodels/DashboardSharedVM.kt b/android/app/src/main/java/com/naviapp/dashboard/viewmodels/DashboardSharedVM.kt index 7d7d30d45b..b3cb3be280 100644 --- a/android/app/src/main/java/com/naviapp/dashboard/viewmodels/DashboardSharedVM.kt +++ b/android/app/src/main/java/com/naviapp/dashboard/viewmodels/DashboardSharedVM.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2020-2024 by Navi Technologies Limited + * * Copyright © 2020-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -10,8 +10,6 @@ package com.naviapp.dashboard.viewmodels import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope -import com.navi.amc.common.model.AdditionalDataAsyncResponse -import com.navi.amc.common.model.NextCtaResponse import com.navi.base.model.ActionData import com.navi.common.model.GroupFaq import com.navi.common.viewmodel.BaseVM @@ -63,8 +61,6 @@ class DashboardSharedVM(private val repository: DashboardRepository = DashboardR var isAmcPayment: Boolean? = null var isSyncFlow = false var syncFlowPaymentInitStartTime = 0L - var paymentInitiateData: AdditionalDataAsyncResponse? = null - var paymentFlowType: String? = null fun setPostPaymentResponseStatus(data: PostPaymentData?) { viewModelScope.safeLaunch { _postPaymentStatus.emit(data) } diff --git a/android/app/src/main/java/com/naviapp/devicedata/finoramic/FinoramicHelper.kt b/android/app/src/main/java/com/naviapp/devicedata/finoramic/FinoramicHelper.kt deleted file mode 100644 index 3aad6caae7..0000000000 --- a/android/app/src/main/java/com/naviapp/devicedata/finoramic/FinoramicHelper.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * - * * Copyright © 2021-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.devicedata.finoramic - -import android.content.Context -import android.text.TextUtils -import com.figg.sdk.android.FinoramicSdk -import com.navi.base.sharedpref.CommonPrefConstants.USER_EXTERNAL_ID -import com.navi.base.sharedpref.PreferenceManager -import com.navi.common.model.FinoramicData -import com.navi.common.utils.log -import com.naviapp.BuildConfig -import com.naviapp.utils.Constants.PRODUCTION -import com.naviapp.utils.Constants.SANDBOX -import com.naviapp.utils.PROD - -/** Do not use Finoramic Sdk directly. Use Helper */ -class FinoramicHelper { - - fun init(data: FinoramicData, context: Context?) { - context?.apply { initImp(data, this) } - } - - private fun initImp(data: FinoramicData, context: Context) { - val externalUserId = PreferenceManager.getStringPreference(USER_EXTERNAL_ID) - val map = mutableMapOf() - map["CLIENT_ID"] = data.clientId.orEmpty() - map["CLIENT_USER_ID"] = externalUserId.orEmpty() - map["CLIENT_SHORT_NAME"] = data.clientShortName.orEmpty() - if (TextUtils.equals(BuildConfig.FLAVOR, PROD)) map["ENV"] = PRODUCTION - else { - map["ENV"] = SANDBOX - } - try { - FinoramicSdk.init(context, map) - } catch (e: Exception) { - e.log() - } - } - - fun sendSms(context: Context) { - try { - FinoramicSdk.sendSMS(context) - } catch (e: Exception) { - e.log() - } - } -} diff --git a/android/app/src/main/java/com/naviapp/home/common/handler/EffectHandler.kt b/android/app/src/main/java/com/naviapp/home/common/handler/EffectHandler.kt index b40e529a1f..083204bd49 100644 --- a/android/app/src/main/java/com/naviapp/home/common/handler/EffectHandler.kt +++ b/android/app/src/main/java/com/naviapp/home/common/handler/EffectHandler.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2024 by Navi Technologies Limited + * * Copyright © 2024-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -13,9 +13,7 @@ import com.navi.common.model.ModuleNameV2 import com.navi.common.network.ApiConstants import com.navi.common.utils.TemporaryStorageHelper import com.navi.uitron.model.action.UpdateDataAction -import com.navi.uitron.model.action.UpdateViewStateAction import com.navi.uitron.model.data.TextData -import com.navi.uitron.model.data.UiTronActionData import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.transformer.AppLoadTimerMapper import com.naviapp.home.compose.model.CtaActionEvent @@ -25,7 +23,6 @@ import com.naviapp.home.reducer.HpEvents import com.naviapp.home.viewmodel.HomeViewModel import com.naviapp.network.di.DataDeserializers import com.naviapp.screenOverlay.utils.PopupConstants.NOTIFICATION_ICON_ANIMATE -import com.naviapp.utils.Constants import com.naviapp.utils.Constants.HomePageConstants.NAVI_APP_NAV_HOME_PAGE_VIEWED import com.naviapp.utils.Constants.HomePageConstants.NAVI_APP_NAV_INSURANCE_PAGE_VIEWED import com.naviapp.utils.Constants.HomePageConstants.NAVI_APP_NAV_INVESTMENT_PAGE_VIEWED @@ -60,7 +57,6 @@ constructor( is HpEffects.OnRenderActions -> handleRenderActions(homeVM) is HpEffects.OnApiFailure -> handleApiFailure(effects, homeVM) is HpEffects.LogAppLaunchTime -> logAppLaunchTime(effects) - is HpEffects.OnHideBalanceAction -> handleHideBalanceAction(homeVM) is HpEffects.InitiatePayment -> onPaymentInitiated(effects.data) is HpEffects.FetchHomeApi -> onFetchHomeApiCall() is HpEffects.HandleCtaActionEvents -> handleCtaAction(effects.event) @@ -180,32 +176,4 @@ constructor( AppLoadTimerMapper.resetApplicationCreatedOnLaunchStatus() } } - - private fun handleHideBalanceAction(homeVM: HomeViewModel) { - val hideBalanceActionData = - UiTronActionData( - actions = - listOf( - UpdateViewStateAction( - viewStates = - mapOf( - Constants.CHECK_BALANCE_ROW to Constants.VISIBLE, - Constants.HIDE_BALANCE_ROW to Constants.INVISIBLE, - Constants.CHECK_BALANCE_CLICK to Constants.VISIBLE, - Constants.HIDE_BALANCE_CLICK to Constants.INVISIBLE - ) - ), - UpdateDataAction( - viewDataList = - listOf( - UpdateDataAction.ViewData( - layoutId = Constants.BALANCE_TEXT, - data = TextData(text = Constants.BALANCE_TEXT_MASKED_VALUE) - ) - ) - ) - ) - ) - homeVM.handleActions(hideBalanceActionData) - } } diff --git a/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt b/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt index 84c1eedab5..f72af93250 100644 --- a/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt +++ b/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt @@ -7,7 +7,6 @@ package com.naviapp.home.compose.activity -import android.app.Activity import android.content.Intent import android.graphics.Color import android.net.Uri @@ -52,8 +51,6 @@ import com.navi.base.utils.orFalse import com.navi.base.utils.orTrue import com.navi.base.utils.orZero import com.navi.common.constants.APP_UPGRADE_DATA -import com.navi.common.constants.GI -import com.navi.common.constants.NPS_SUBMIT_DIALOG import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.RESOURCE_MANAGER_ENABLED import com.navi.common.handler.CollectRequestPopupEventHandler @@ -61,7 +58,6 @@ import com.navi.common.managers.PermissionsManager import com.navi.common.model.AppUpgradeResponse import com.navi.common.model.ModuleName import com.navi.common.model.ModuleNameV2 -import com.navi.common.model.PreviousScreenNameRequest import com.navi.common.model.common.NetworkConnectivityNudgeData import com.navi.common.network.models.GenericErrorResponse import com.navi.common.resourcemanager.manager.ResourceManager @@ -84,7 +80,6 @@ import com.navi.common.utils.observeNonNull import com.navi.common.utils.observeNullable import com.navi.common.utils.setStatusBarColor import com.navi.insurance.common.util.ActionHandler -import com.navi.insurance.navigator.NaviInsuranceDeeplinkNavigator import com.navi.insurance.util.AMOUNT import com.navi.insurance.util.Constants.IS_AUTOPAY import com.navi.insurance.util.Constants.IS_INSTALMENT @@ -130,8 +125,6 @@ import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.appsettings.utils.hasNotificationPermission import com.naviapp.appupdate.activities.UpdateAppActivity import com.naviapp.common.fragment.CommonBottomSheet -import com.naviapp.common.fragment.CommonDialogBox -import com.naviapp.common.fragment.NetPromoterScoreFragment import com.naviapp.common.listeners.InAppUpdateBridge import com.naviapp.common.model.AppUpdateState import com.naviapp.common.model.UiTronActionHandler @@ -165,7 +158,6 @@ import com.naviapp.manager.usecase.UserDataUploadWorkerUseCase import com.naviapp.models.GiPaymentError import com.naviapp.models.response.BottomSheetData import com.naviapp.models.response.PaymentInfo -import com.naviapp.nps.viewmodel.NpsVM import com.naviapp.payment.activities.NaviPaymentActivity import com.naviapp.payment.fragments.PaymentType import com.naviapp.payment.listeners.PaymentInitListener @@ -189,7 +181,6 @@ import com.naviapp.utils.IntentConstants.EMAIL_REQUEST_CODE import com.naviapp.utils.IntentConstants.FAQ_REQUEST_CODE import com.naviapp.utils.addDivider import com.naviapp.utils.deleteCacheAndOpenLoginPage -import com.naviapp.utils.giDeeplink import com.naviapp.utils.toast import dagger.Lazy import dagger.hilt.android.AndroidEntryPoint @@ -197,7 +188,6 @@ import java.lang.ref.WeakReference import java.util.Locale import javax.inject.Inject import kotlin.time.Duration.Companion.seconds -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest @@ -242,7 +232,6 @@ class HomePageActivity : private val sharedVM by lazy { ViewModelProvider(this)[SharedVM::class.java] } private val paymentManager by lazy { ViewModelProvider(this)[PaymentManager::class.java] } private val paymentVM by lazy { ViewModelProvider(this)[PaymentVM::class.java] } - private val npsVM by lazy { ViewModelProvider(this)[NpsVM::class.java] } private val screenOverlayVM by lazy { ViewModelProvider(this)[ScreenOverlayVM::class.java] } private val paymentScreenSharedVM by lazy { ViewModelProvider(this)[PaymentScreenSharedViewModel::class.java] @@ -477,7 +466,6 @@ class HomePageActivity : observeLoggedOut() observeHomeFeaturesData() observeGIPaymentFailed() - observeNpsRatingSubmitResponse() observeNetworkConnectivity() observeLoansTabPaymentData() observeScreenLockEnabledData() @@ -683,56 +671,6 @@ class HomePageActivity : ), ) - private fun observeNpsRatingSubmitResponse() { - npsVM.ratingSubmitResponse.observeNonNull(this) { - if (it.response == Constants.SUCCESS) { - CoroutineScope(Dispatchers.IO).launch { - homeVM.state.value.homeFeatures?.survey?.content?.dialogBoxInfo?.let { - dialogBoxResponse -> - if ( - intent.extras - ?.getParcelable( - Constants.PREVIOUS_SCREEN - ) - ?.moduleType - .orEmpty() == GI - ) { - NaviInsuranceDeeplinkNavigator.navigate( - activity = this@HomePageActivity, - ctaData = - CtaData( - url = - giDeeplink( - NaviInsuranceDeeplinkNavigator.DASHBOARD.plus( - Constants.DIVIDER - ) - .plus(NaviInsuranceDeeplinkNavigator.HOME) - ) - ), - finish = true, - bundle = - Bundle().apply { - putParcelable(NPS_SUBMIT_DIALOG, dialogBoxResponse) - } - ) - } else { - val commonDialogBox = - CommonDialogBox.newInstance( - screenName = NaviAnalytics.FEEDBACK_OFFER_DIALOG, - title = dialogBoxResponse.title, - description = dialogBoxResponse.subtitle, - ctaData = dialogBoxResponse.cta, - iconCode = dialogBoxResponse.iconCode, - lottieAnimationFile = "success.json" - ) - safelyShowDialogFragment(commonDialogBox, CommonDialogBox.TAG) - } - } - } - } - } - } - private fun observeHomeFeaturesData() { lifecycleScope.launch { homeVM.state.collect { state -> @@ -766,13 +704,6 @@ class HomePageActivity : this@HomePageActivity ) {} } - - it?.survey?.let { npsResponse -> - safelyShowDialogFragment( - NetPromoterScoreFragment.getInstance(npsResponse), - NetPromoterScoreFragment.TAG - ) - } } } } @@ -1005,7 +936,7 @@ class HomePageActivity : ) ) } - } else if (resultCode == Activity.RESULT_OK && requestCode == EMAIL_REQUEST_CODE) { + } else if (resultCode == RESULT_OK && requestCode == EMAIL_REQUEST_CODE) { val shouldRefresh = intent?.getBooleanExtra(IntentConstants.SHOULD_REFRESH, false) if (shouldRefresh.orFalse()) { screenNavigator.startActivityWithNoActivityStack( @@ -1013,7 +944,7 @@ class HomePageActivity : screenName = ScreenNavigator.DASHBOARD_SCREEN ) } - } else if (resultCode == Activity.RESULT_OK && requestCode == FAQ_REQUEST_CODE) { + } else if (resultCode == RESULT_OK && requestCode == FAQ_REQUEST_CODE) { val shouldRefresh = intent?.getBooleanExtra(IntentConstants.SHOULD_REFRESH, false) if (shouldRefresh.orFalse()) { screenNavigator.startActivityWithNoActivityStack( @@ -1029,7 +960,7 @@ class HomePageActivity : inAppUpdateHelper.registerAppUpdateFailedAnalytics() } } else if (requestCode == NAVI_PAY_REQUEST_CODE) { - if (resultCode == Activity.RESULT_OK) { + if (resultCode == RESULT_OK) { dashboardAnalytics.onNaviPayRequestCodeReceived( actionString = intent?.extras?.getString(KEY_CHECK_BALANCE_ACTION) ) @@ -1045,8 +976,7 @@ class HomePageActivity : ) } } else if ( - resultCode == Activity.RESULT_OK && - requestCode == IntentConstants.AP_LAUNCH_REQUEST_CODE + resultCode == RESULT_OK && requestCode == IntentConstants.AP_LAUNCH_REQUEST_CODE ) { profileVM.canCachedDataBeUsed = false profileVM.updateProfileLoadingState() diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/adapter/ClosedLoanViewPagerAdapter.kt b/android/app/src/main/java/com/naviapp/home/dashboard/adapter/ClosedLoanViewPagerAdapter.kt deleted file mode 100644 index 6571345466..0000000000 --- a/android/app/src/main/java/com/naviapp/home/dashboard/adapter/ClosedLoanViewPagerAdapter.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.dashboard.adapter - -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentManager -import androidx.lifecycle.Lifecycle -import androidx.viewpager2.adapter.FragmentStateAdapter -import com.naviapp.home.dashboard.models.response.ClosedLoanTab -import com.naviapp.home.dashboard.ui.ClosedLoansContentFragment - -class ClosedLoanViewPagerAdapter( - fragmentManger: FragmentManager, - private val listOfTabs: List, - lifecycle: Lifecycle -) : FragmentStateAdapter(fragmentManger, lifecycle) { - - private val tabsMap = mutableMapOf() - - override fun createFragment(position: Int): Fragment = getCurrentFragment(position) - - override fun getItemCount(): Int = listOfTabs.size - - private fun getCurrentFragment(position: Int): Fragment { - val tabItem = listOfTabs[position] - val fragment = tabsMap[position] ?: ClosedLoansContentFragment.getInstance(tabItem) - tabsMap[position] = fragment - return fragment - } -} diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/di/DashboardModule.kt b/android/app/src/main/java/com/naviapp/home/dashboard/di/DashboardModule.kt index 253c0652ae..ca0b67d480 100644 --- a/android/app/src/main/java/com/naviapp/home/dashboard/di/DashboardModule.kt +++ b/android/app/src/main/java/com/naviapp/home/dashboard/di/DashboardModule.kt @@ -1,13 +1,12 @@ /* * - * * Copyright © 2022-2024 by Navi Technologies Limited + * * Copyright © 2022-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ package com.naviapp.home.dashboard.di -import com.naviapp.home.dashboard.repo.ClosedLoansRepository import com.naviapp.home.dashboard.repo.DashboardContentRepository import com.naviapp.home.dashboard.repo.DashboardRepository import com.naviapp.network.di.SuperAppRetroFit @@ -31,9 +30,4 @@ object DashboardModule { @Provides fun providesDashboardContentRepository(@SuperAppRetroFit retrofitService: RetrofitService) = DashboardContentRepository(retrofitService) - - @ViewModelScoped - @Provides - fun providesClosedLoansRepository(retrofitService: RetrofitService) = - ClosedLoansRepository(retrofitService) } diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/models/response/ClosedLoansResponse.kt b/android/app/src/main/java/com/naviapp/home/dashboard/models/response/ClosedLoansResponse.kt deleted file mode 100644 index bf98f1b474..0000000000 --- a/android/app/src/main/java/com/naviapp/home/dashboard/models/response/ClosedLoansResponse.kt +++ /dev/null @@ -1,40 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.dashboard.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.NaviWidget -import java.io.Serializable -import kotlinx.parcelize.Parcelize - -data class ClosedLoansResponse( - @SerializedName("products") val products: ClosedLoanProductData? = null, - @SerializedName("ranking") val tabsRankingList: List? = null -) : Serializable - -data class ClosedLoanProductData( - @SerializedName("HL") val hlProductData: ClosedLoanData? = null, - @SerializedName("PL") val plProductData: ClosedLoanData? = null -) : Serializable - -data class ClosedLoanData( - @SerializedName("header") val header: String? = null, - @SerializedName("items") val items: List? = null -) : Serializable - -@Parcelize -data class ClosedLoanTab( - @SerializedName("tabName") val tabName: String, - @SerializedName("productName") val productName: String -) : Parcelable - -enum class ClosedLoanProducts { - HL, - PL -} diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/repo/ClosedLoansRepository.kt b/android/app/src/main/java/com/naviapp/home/dashboard/repo/ClosedLoansRepository.kt deleted file mode 100644 index 175aed9deb..0000000000 --- a/android/app/src/main/java/com/naviapp/home/dashboard/repo/ClosedLoansRepository.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.dashboard.repo - -import com.navi.common.utils.Constants.CLOSED_LOANS -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.network.retrofit.RetrofitService -import javax.inject.Inject - -class ClosedLoansRepository -@Inject -constructor( - private val retrofitService: RetrofitService, -) : ResponseCallback() { - - suspend fun fetchClosedLoans() = - apiResponseCallback(retrofitService.fetchClosedLoans(CLOSED_LOANS)) -} diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansActivity.kt b/android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansActivity.kt deleted file mode 100644 index 49576325b9..0000000000 --- a/android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansActivity.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * - * * Copyright © 2022-2025 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.dashboard.ui - -import android.os.Bundle -import com.navi.common.model.ModuleNameV2 -import com.navi.common.ui.activity.BaseActivity -import com.naviapp.R -import dagger.hilt.android.AndroidEntryPoint - -@AndroidEntryPoint -class ClosedLoansActivity : BaseActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_closed_loans) - } - - override val screenName: String = TAG - - override val moduleName: ModuleNameV2 = ModuleNameV2.App - - companion object { - private const val TAG = "ClosedLoansActivity" - } -} diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansContentFragment.kt b/android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansContentFragment.kt deleted file mode 100644 index 750efb1111..0000000000 --- a/android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansContentFragment.kt +++ /dev/null @@ -1,115 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.dashboard.ui - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.databinding.DataBindingUtil -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.navi.analytics.utils.NaviTrackEvent -import com.navi.base.model.CtaData -import com.navi.base.model.NaviClickAction -import com.navi.common.ui.fragment.BaseFragment -import com.navi.naviwidgets.actions.NavigateClickAction -import com.navi.naviwidgets.adapters.NaviAdapter -import com.navi.naviwidgets.callbacks.WidgetCallback -import com.navi.naviwidgets.models.NaviWidget -import com.navi.naviwidgets.viewholder.DashboardHolderFactoryImpl -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics.Companion.NEW_CLOSED_LOAN_SCREEN -import com.naviapp.common.navigator.NaviDeepLinkNavigator -import com.naviapp.databinding.FragmentClosedLoansContentBinding -import com.naviapp.home.dashboard.models.response.ClosedLoanTab -import com.naviapp.home.dashboard.viewmodels.ClosedLoansSharedVM -import com.naviapp.utils.Constants.KEY_CLOSED_LOAN_TAB_DATA -import dagger.hilt.android.AndroidEntryPoint - -@AndroidEntryPoint -class ClosedLoansContentFragment : BaseFragment(), WidgetCallback { - - private lateinit var binding: FragmentClosedLoansContentBinding - private val closedLoanVM by lazy { - ViewModelProvider(requireActivity()).get(ClosedLoansSharedVM::class.java) - } - private var closedloantab: ClosedLoanTab? = null - private var naviAdapter: NaviAdapter = - NaviAdapter(widgetCallback = this, factory = DashboardHolderFactoryImpl()) - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - binding = - DataBindingUtil.inflate( - inflater, - R.layout.fragment_closed_loans_content, - container, - false - ) - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - readArguments() - initUI() - initObserver() - } - - private fun readArguments() { - closedloantab = arguments?.getParcelable(KEY_CLOSED_LOAN_TAB_DATA) - } - - private fun initUI() { - setUpAdapter() - } - - private fun initObserver() { - closedloantab?.productName?.let { productName -> - val listOfWidgets = closedLoanVM.getClosedLoanData(productName) - listOfWidgets?.let { widgetList -> naviAdapter.setData(widgetList) } - } - } - - private fun setUpAdapter() { - binding.rvClosedLoans.apply { - layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) - adapter = naviAdapter - } - } - - override fun onClick(naviClickAction: NaviClickAction, widgetId: String?) { - when (naviClickAction) { - is NavigateClickAction -> { - NaviTrackEvent.setStartTs(screenName) - NaviDeepLinkNavigator.navigate( - activity = activity, - ctaData = - CtaData(url = naviClickAction.url, parameters = naviClickAction.parameters) - ) - } - } - } - - override val screenName: String = NEW_CLOSED_LOAN_SCREEN - - companion object { - const val TAG = "ClosedLoansContentFragment" - - fun getInstance(closedLoanTab: ClosedLoanTab) = - ClosedLoansContentFragment().apply { - val bundle = Bundle() - bundle.putParcelable(KEY_CLOSED_LOAN_TAB_DATA, closedLoanTab) - arguments = bundle - } - } -} diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansFragment.kt b/android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansFragment.kt deleted file mode 100644 index 240b7b3894..0000000000 --- a/android/app/src/main/java/com/naviapp/home/dashboard/ui/ClosedLoansFragment.kt +++ /dev/null @@ -1,179 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.dashboard.ui - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.LinearLayout -import android.widget.TextView -import androidx.core.content.ContextCompat -import androidx.databinding.DataBindingUtil -import androidx.lifecycle.ViewModelProvider -import com.google.android.material.tabs.TabLayout -import com.google.android.material.tabs.TabLayoutMediator -import com.navi.common.ui.fragment.BaseFragment -import com.navi.common.utils.observeNonNull -import com.navi.design.R as DesignR -import com.navi.design.font.FontWeightEnum -import com.navi.design.utils.setFontStyle -import com.naviapp.R -import com.naviapp.databinding.FragmentClosedLoansBinding -import com.naviapp.home.dashboard.adapter.ClosedLoanViewPagerAdapter -import com.naviapp.home.dashboard.models.response.ClosedLoanTab -import com.naviapp.home.dashboard.viewmodels.ClosedLoansSharedVM -import dagger.hilt.android.AndroidEntryPoint - -@AndroidEntryPoint -class ClosedLoansFragment : BaseFragment() { - - private lateinit var binding: FragmentClosedLoansBinding - private val closedLoanVM by lazy { - ViewModelProvider(requireActivity()).get(ClosedLoansSharedVM::class.java) - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - binding = - DataBindingUtil.inflate(inflater, R.layout.fragment_closed_loans, container, false) - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - initUI() - initError( - viewModel = closedLoanVM, - dialogDismissClicked = { loadScreen() }, - showFullScreenError = true - ) - initObserver() - loadScreen() - } - - private fun initUI() { - binding.ivBack.setOnClickListener { activity?.onBackPressed() } - } - - private fun loadScreen() { - showShimmer() - closedLoanVM.fetchClosedLoans() - } - - private fun initObserver() { - closedLoanVM.closedLoanTabs.observeNonNull(viewLifecycleOwner) { closedLoansTabList -> - hideShimmer() - setUpViewPagerAdapter(closedLoansTabList) - } - - closedLoanVM.errorResponse.observe(viewLifecycleOwner) { hideShimmer() } - } - - private fun setUpViewPagerAdapter(tabItems: List) { - binding.apply { - vpClosedLoans.isUserInputEnabled = false - val dashboardViewPagerAdapter = - ClosedLoanViewPagerAdapter( - fragmentManger = childFragmentManager, - listOfTabs = tabItems, - lifecycle = lifecycle - ) - vpClosedLoans.adapter = dashboardViewPagerAdapter - tlClosedLoans.addOnTabSelectedListener( - object : TabLayout.OnTabSelectedListener { - override fun onTabSelected(tab: TabLayout.Tab?) { - setSelectedCustomTabView(tab = tab) - } - - override fun onTabUnselected(tab: TabLayout.Tab?) { - setUnSelectedCustomTabView(tab = tab) - } - - override fun onTabReselected(tab: TabLayout.Tab?) {} - } - ) - TabLayoutMediator(tlClosedLoans, vpClosedLoans) { tab, position -> - setCustomTabView(tab, tabItems[position], position) - } - .attach() - } - setTabStartMargin(marginStart = resources.getDimension(R.dimen.layout_dp_12).toInt()) - } - - private fun setCustomTabView( - tab: TabLayout.Tab, - tabItem: ClosedLoanTab, - currentPosition: Int, - defaultSelectedTab: Int = 0, - ) { - tab.setCustomView(R.layout.dashboard_tab_item_layout) - .customView - ?.findViewById(R.id.tvTabName) - ?.text = tabItem.tabName - - if (currentPosition == defaultSelectedTab) { - setSelectedCustomTabView(tab = tab) - } else { - setUnSelectedCustomTabView(tab = tab) - } - } - - private fun setSelectedCustomTabView(tab: TabLayout.Tab?) { - tab?.let { - it.customView - ?.findViewById(R.id.tvTabName) - ?.setTextColor( - ContextCompat.getColor(requireContext(), DesignR.color.title_text_red_color) - ) - it.customView - ?.findViewById(R.id.tvTabName) - ?.setFontStyle(FontWeightEnum.NAVI_BODY_DEMI_BOLD) - it.customView?.findViewById(R.id.indicator)?.visibility = View.VISIBLE - } - } - - private fun setUnSelectedCustomTabView(tab: TabLayout.Tab?) { - tab?.let { - it.customView - ?.findViewById(R.id.tvTabName) - ?.setTextColor(ContextCompat.getColor(requireContext(), R.color.santas_gray)) - it.customView - ?.findViewById(R.id.tvTabName) - ?.setFontStyle(FontWeightEnum.NAVI_BODY_REGULAR) - it.customView?.findViewById(R.id.indicator)?.visibility = View.GONE - } - } - - private fun setTabStartMargin(marginStart: Int) { - val tabViewGroup = (binding.tlClosedLoans.getChildAt(0) as? ViewGroup) - val firstTab = tabViewGroup?.getChildAt(0) - val firstTabLayoutParams = (firstTab?.layoutParams as? LinearLayout.LayoutParams) - firstTabLayoutParams?.marginStart = marginStart - firstTab?.layoutParams = firstTabLayoutParams - } - - private fun showShimmer() { - binding.sflShimmer.startShimmer() - binding.sflShimmer.visibility = View.VISIBLE - } - - private fun hideShimmer() { - binding.sflShimmer.stopShimmer() - binding.sflShimmer.visibility = View.GONE - } - - override val screenName: String = TAG - - companion object { - const val TAG = "ClosedLoansFragment" - } -} diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/ui/ProductFragment.kt b/android/app/src/main/java/com/naviapp/home/dashboard/ui/ProductFragment.kt index c3061d2781..6623500494 100644 --- a/android/app/src/main/java/com/naviapp/home/dashboard/ui/ProductFragment.kt +++ b/android/app/src/main/java/com/naviapp/home/dashboard/ui/ProductFragment.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2022-2024 by Navi Technologies Limited + * * Copyright © 2022-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -556,10 +556,6 @@ class ProductFragment : InfoBottomSheetV3.getInstance(naviClickAction.infoBottomSheetInfoV2) safelyShowBottomSheet(bottomSheet, InfoBottomSheetV3.TAG) } - is ClosedLoansClicked -> { - NaviTrackEvent.setStartTs(screenName) - startActivity(Intent(context, ClosedLoansActivity::class.java)) - } is ActionData -> { NaviDeepLinkNavigator.navigate(activity, naviClickAction.toCtaData()) } diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/viewmodels/ClosedLoansSharedVM.kt b/android/app/src/main/java/com/naviapp/home/dashboard/viewmodels/ClosedLoansSharedVM.kt deleted file mode 100644 index 28dacd3e17..0000000000 --- a/android/app/src/main/java/com/naviapp/home/dashboard/viewmodels/ClosedLoansSharedVM.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.dashboard.viewmodels - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.navi.common.viewmodel.BaseVM -import com.navi.naviwidgets.models.NaviWidget -import com.naviapp.home.dashboard.models.response.ClosedLoanProducts -import com.naviapp.home.dashboard.models.response.ClosedLoanTab -import com.naviapp.home.dashboard.models.response.ClosedLoansResponse -import com.naviapp.home.dashboard.repo.ClosedLoansRepository -import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject -import kotlinx.coroutines.launch - -@HiltViewModel -class ClosedLoansSharedVM -@Inject -constructor(private val closedLoansRepository: ClosedLoansRepository) : BaseVM() { - - private val _closedLoanTabs = MutableLiveData>() - val closedLoanTabs: LiveData> - get() = _closedLoanTabs - - private val _closedLoanResponse = MutableLiveData() - - fun fetchClosedLoans() { - coroutineScope.launch { - val response = closedLoansRepository.fetchClosedLoans() - if (response.error == null && response.errors.isNullOrEmpty()) { - _closedLoanResponse.value = response.data - _closedLoanTabs.value = response.data?.tabsRankingList - } else { - setErrorData(response.errors, response.error, showFullScreenError = true) - } - } - } - - fun getClosedLoanData(product: String): List? { - return when (product) { - ClosedLoanProducts.HL.name -> { - _closedLoanResponse.value?.products?.hlProductData?.items - } - ClosedLoanProducts.PL.name -> { - _closedLoanResponse.value?.products?.plProductData?.items - } - else -> { - _closedLoanResponse.value?.products?.hlProductData?.items - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/home/reducer/HomeReducer.kt b/android/app/src/main/java/com/naviapp/home/reducer/HomeReducer.kt index 7a3e88bc14..893dc21f49 100644 --- a/android/app/src/main/java/com/naviapp/home/reducer/HomeReducer.kt +++ b/android/app/src/main/java/com/naviapp/home/reducer/HomeReducer.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2024 by Navi Technologies Limited + * * Copyright © 2024-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -179,8 +179,6 @@ sealed interface HpEffects : UiEffect { data class LogAppLaunchTime(val destination: String) : HpEffects - data object OnHideBalanceAction : HpEffects - data class InitiatePayment(val data: InitiatePaymentFromComposeData) : HpEffects data object FetchHomeApi : HpEffects diff --git a/android/app/src/main/java/com/naviapp/models/ActionCardWithPaddingWidgetConfig.kt b/android/app/src/main/java/com/naviapp/models/ActionCardWithPaddingWidgetConfig.kt deleted file mode 100644 index d2f2762cb2..0000000000 --- a/android/app/src/main/java/com/naviapp/models/ActionCardWithPaddingWidgetConfig.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.base.model.StyledTextWithIconCode -import com.navi.naviwidgets.widgets.textdisplay.Margin -import com.naviapp.models.response.WidgetConfig - -data class ActionCardWithPaddingWidgetConfig( - @SerializedName("body") val widgetBody: ActionCardWithPaddingBody? = null -) : WidgetConfig() - -data class ActionCardWithPaddingBody( - @SerializedName("radius") val radius: Int? = null, - @SerializedName("elevation") val elevation: Int? = null, - @SerializedName("padding") val padding: Margin? = null, - @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("rightIcon") val rightIcon: String? = null, - @SerializedName("rightText") val rightText: StyledTextWithIconCode? = null, - @SerializedName("cta") val cta: CtaData? = null, - @SerializedName("enableShimmer") val enableShimmer: Boolean? = false, - @SerializedName("shimmerDuration") val shimmerDuration: Long? = null, - @SerializedName("repeatDelay") val repeatDelay: Long? = null, - @SerializedName("borderColor") val borderColor: String? = null, - @SerializedName("errorData") val errorState: ErrorData? = null, -) - -data class ErrorData( - @SerializedName("valuePrefill") val valuePrefill: Boolean? = null, - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("errorColor") val errorColor: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/BankNameCardWidgetConfig.kt b/android/app/src/main/java/com/naviapp/models/BankNameCardWidgetConfig.kt deleted file mode 100644 index d68b85e853..0000000000 --- a/android/app/src/main/java/com/naviapp/models/BankNameCardWidgetConfig.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models -/* - * - * * Copyright © 2022 by Navi Technologies Private Limited - * * All rights reserved. Strictly confidential - * - */ - -import com.google.gson.annotations.SerializedName -import com.naviapp.common.model.CardData -import com.naviapp.models.response.WidgetConfig - -data class BankNameCardWidgetConfig( - @SerializedName("body") val widgetBody: BankNameCardWidgetBody? = null -) : WidgetConfig() - -data class BankNameCardWidgetBody( - @SerializedName("title") val title: String? = null, - @SerializedName("iconUrl") val iconUrl: String? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("tag") val tag: CardData? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/BankNameV2CardWidgetConfig.kt b/android/app/src/main/java/com/naviapp/models/BankNameV2CardWidgetConfig.kt deleted file mode 100644 index 51528adfae..0000000000 --- a/android/app/src/main/java/com/naviapp/models/BankNameV2CardWidgetConfig.kt +++ /dev/null @@ -1,40 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.base.model.StyledTextWithIconCode -import com.navi.naviwidgets.widgets.textdisplay.Padding -import com.naviapp.models.response.WidgetConfig - -data class BankNameV2CardWidgetConfig( - @SerializedName("body") val widgetBody: BankNameV2CardWidgetBody? = null -) : WidgetConfig() - -data class BankNameV2CardWidgetBody( - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("iconUrl") val iconUrl: String? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("autoPayTag") val autoPayTag: CardDataV2? = null, - @SerializedName("isAutoPayEnabled") val isAutoPayEnabled: Boolean = false, - @SerializedName("cta") val ctaData: CtaData? = null, - @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("radius") val radius: Int? = null -) - -data class CardDataV2( - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("showLottie") val showLottie: Boolean = false, - @SerializedName("lottieCode") val lottieCode: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("cta") val cta: CtaData? = null, - @SerializedName("padding") val padding: Padding? = null, - @SerializedName("radius") val radius: Int? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/CreditDataResponse.kt b/android/app/src/main/java/com/naviapp/models/CreditDataResponse.kt deleted file mode 100644 index 28ef9d34f0..0000000000 --- a/android/app/src/main/java/com/naviapp/models/CreditDataResponse.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * - * * Copyright © 2020-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import kotlinx.parcelize.Parcelize - -@Parcelize -data class CreditDataResponse( - @SerializedName("creditScoreData") val creditScoreData: CreditScoreData? = null, - @SerializedName("lastUpdateInfo") val lastUpdateInfo: LastUpdateData? = null, - @SerializedName("scoreDetails") val scoreDetails: List? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/DashboardPolicyBenefitData.kt b/android/app/src/main/java/com/naviapp/models/DashboardPolicyBenefitData.kt index a847be3090..f7d9690984 100644 --- a/android/app/src/main/java/com/naviapp/models/DashboardPolicyBenefitData.kt +++ b/android/app/src/main/java/com/naviapp/models/DashboardPolicyBenefitData.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2022-2024 by Navi Technologies Limited + * * Copyright © 2022-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -13,14 +13,14 @@ import com.navi.base.model.ActionData import com.navi.common.model.Money import com.navi.design.textview.model.TextWithStyle import com.naviapp.common.listeners.RadioButtonModel -import com.naviapp.models.response.HomeLoanSubStepResponse import kotlinx.parcelize.Parcelize @Parcelize data class DashboardPolicyBenefitData( + @SerializedName("widgetId") val widgetId: String? = null, @SerializedName("actionData") val actionData: ActionData? = null, @SerializedName("policies") val listOfPolicyBenefits: List? = null -) : HomeLoanSubStepResponse(), Parcelable +) : Parcelable @Parcelize data class PolicyBenefitData( diff --git a/android/app/src/main/java/com/naviapp/models/EMIDateChangeResponse.kt b/android/app/src/main/java/com/naviapp/models/EMIDateChangeResponse.kt deleted file mode 100644 index 9409a2b6cf..0000000000 --- a/android/app/src/main/java/com/naviapp/models/EMIDateChangeResponse.kt +++ /dev/null @@ -1,59 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.ParameterValue -import com.navi.naviwidgets.models.response.TextFieldData -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.EmiDateChangeBottomSheetData -import com.naviapp.models.response.FormFooter -import com.naviapp.models.response.FormHeader - -data class EMIDateChangeResponse( - @SerializedName("header") val header: FormHeader? = null, - @SerializedName("content") val content: EMIDateChangeContent? = null, - @SerializedName("footer") val footer: FormFooter? = null, - @SerializedName("metadata") val metadata: MutableMap? = null -) - -data class EMIDateChangeContent( - @SerializedName("title") val title: KeyValueResponse? = null, - @SerializedName("chooseDateHeader") val chooseDateHeader: String? = null, - @SerializedName("calendarConfig") val calendarConfig: CalendarConfig? = null, - @SerializedName("reasonConfig") val reasonConfig: ReasonConfig? = null, - @SerializedName("infoMessage") val infoMessage: InfoMessage? = null, - @SerializedName("bottomSheetData") val bottomsSheetData: EmiDateChangeBottomSheetData? = null, - @SerializedName("animationData") val animationData: AnimationData? = null -) - -data class CalendarConfig( - @SerializedName("header") val header: String? = null, - @SerializedName("columnCount") val columnCount: Int? = null, - @SerializedName("defaultBgColor") val defaultBgColor: String? = null, - @SerializedName("defaultFontColor") val defaultFontColor: String? = null, - @SerializedName("availabeEmiDates") val availabeEmiDates: List? = null -) - -data class ReasonConfig( - @SerializedName("showReason") val showReasonInput: Boolean? = false, - @SerializedName("header") val header: String? = null, - @SerializedName("hint") val hint: String? = null, - @SerializedName("warning") val warningText: String? = null, - @SerializedName("validationError") val validationError: String? = null -) - -data class InfoMessage( - @SerializedName("title") val title: TextFieldData? = null, - @SerializedName("description") val description: TextFieldData? = null -) - -data class AnimationData( - @SerializedName("title") val title: TextFieldData? = null, - @SerializedName("description") val description: TextFieldData? = null, - @SerializedName("metadata") val metadata: MutableMap? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/EMIUpdatedCalendarResponse.kt b/android/app/src/main/java/com/naviapp/models/EMIUpdatedCalendarResponse.kt deleted file mode 100644 index 6dfbd4184f..0000000000 --- a/android/app/src/main/java/com/naviapp/models/EMIUpdatedCalendarResponse.kt +++ /dev/null @@ -1,51 +0,0 @@ -/* - * - * * Copyright © 2022-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.navi.naviwidgets.models.ParameterValue -import com.navi.naviwidgets.models.response.TextFieldData -import com.naviapp.models.response.FormFooter -import com.naviapp.models.response.FormHeader - -data class EMIUpdatedCalendarResponse( - @SerializedName("header") val header: FormHeader? = null, - @SerializedName("content") val content: EMIUpdatedCalendarContent? = null, - @SerializedName("footer") val footer: FormFooter? = null, - @SerializedName("metadata") var metadata: MutableMap? -) - -data class EMIUpdatedCalendarContent( - @SerializedName("header") val header: String? = null, - @SerializedName("description") val description: StyledTextWithIconCode? = null, - @SerializedName("updatedCalendar") val updatedCalendar: ArrayList? = null, - @SerializedName("calendarVisibilityConfig") - val calendarVisibilityConfig: CalendarVisibilityConfig? = null, - @SerializedName("note") val note: StyledTextWithIconCode? = null, - @SerializedName("loanAgreementHyperLink") val loanAgreementHyperLink: TextFieldData? = null -) - -data class EMIDateContent( - @SerializedName("serialNumber") val serialNumber: String? = null, - @SerializedName("dueDate") val dueDate: String? = null, - @SerializedName("emi") val emi: String? = null, - @SerializedName("emiSplitUp") val emiSplitUp: ArrayList? = null, - @SerializedName("viewType") val viewType: Int? = null -) - -data class EMISplitUp( - @SerializedName("header") val header: StyledTextWithIconCode? = null, - @SerializedName("amount") val amount: StyledTextWithIconCode? = null -) - -data class CalendarVisibilityConfig( - @SerializedName("count") val count: Int? = null, - @SerializedName("openHeader") val openHeader: StyledTextWithIconCode? = null, - @SerializedName("closeHeader") val closeHeader: StyledTextWithIconCode? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/EmiSchedule.kt b/android/app/src/main/java/com/naviapp/models/EmiSchedule.kt deleted file mode 100644 index 9cc43e4049..0000000000 --- a/android/app/src/main/java/com/naviapp/models/EmiSchedule.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.common.model.Money -import kotlinx.parcelize.Parcelize - -@Parcelize -data class EmiSchedule( - @SerializedName("serialNumber") val serialNumber: Int? = null, - @SerializedName("emi") val emi: Money? = null, - @SerializedName("dueDate") val dueDate: String? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/EnachData.kt b/android/app/src/main/java/com/naviapp/models/EnachData.kt deleted file mode 100644 index 65feccf54e..0000000000 --- a/android/app/src/main/java/com/naviapp/models/EnachData.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * - * * Copyright © 2020-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import com.google.gson.annotations.SerializedName -import com.naviapp.models.request.FailurePayload -import com.naviapp.models.request.SuccessPayload - -data class EnachData( - @SerializedName("provider") val provider: String? = null, - @SerializedName("status") val status: String? = null, - @SerializedName("code") val code: Int? = null, - @SerializedName("message") val message: String? = null, - @SerializedName("mandateId") val mandateId: String? = null, - @SerializedName("email") val email: String? = null, - @SerializedName("mandateType") val mandateType: String? = null, - @SerializedName("phoneNumber") val phoneNumber: String? = null, - @SerializedName("metadata") val metaData: EnachMetadata? = null, - @SerializedName("failurePayload") val failurePayload: FailurePayload? = null, - @SerializedName("successPayload") val successPayload: SuccessPayload? = null, -) diff --git a/android/app/src/main/java/com/naviapp/models/EnachMetadata.kt b/android/app/src/main/java/com/naviapp/models/EnachMetadata.kt deleted file mode 100644 index 8d6398a43a..0000000000 --- a/android/app/src/main/java/com/naviapp/models/EnachMetadata.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * - * * Copyright © 2020-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import com.google.gson.annotations.SerializedName - -data class EnachMetadata( - @SerializedName("razorpay_payment_id") val paymentId: String? = null, - @SerializedName("razorpay_signature") val signature: String? = null, - @SerializedName("razorpayCustomerId") val razorpayCustomerId: String? = null, - @SerializedName("accountKey") val accountKey: String? = null, - @SerializedName("mandateAmount") val mandateAmount: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/LastUpdateData.kt b/android/app/src/main/java/com/naviapp/models/LastUpdateData.kt deleted file mode 100644 index e5c68e1c13..0000000000 --- a/android/app/src/main/java/com/naviapp/models/LastUpdateData.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * - * * Copyright © 2020-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import kotlinx.parcelize.Parcelize - -@Parcelize -data class LastUpdateData( - @SerializedName("title") val title: String? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("iconCode") val iconCode: String? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/LoanAmountSummaryWidgetConfig.kt b/android/app/src/main/java/com/naviapp/models/LoanAmountSummaryWidgetConfig.kt deleted file mode 100644 index 99a8cf24cd..0000000000 --- a/android/app/src/main/java/com/naviapp/models/LoanAmountSummaryWidgetConfig.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.naviapp.common.model.StyledTitleDescriptionBottomSheetConfig -import com.naviapp.models.response.WidgetConfig - -data class LoanAmountSummaryWidgetConfig( - @SerializedName("body") val widgetBody: LoanAmountSummaryWidgetBody? = null -) : WidgetConfig() - -data class LoanAmountSummaryWidgetBody( - @SerializedName("lottieCode") val lottieCode: String? = null, - @SerializedName("lottieLoop") val lottieLoop: Boolean? = true, - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("description") var description: StyledTextWithIconCode? = null, - @SerializedName("summaryItems") val summaryItems: List? = null, - @SerializedName("footerTag") val footerTag: StyledTextWithIconCode? = null, - @SerializedName("footerDescription") - val footerDescription: StyledTitleDescriptionBottomSheetConfig? = null -) - -data class StyledTitleSubtitleConfig( - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("iconCode") val iconCode: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/LoanFeeDetails.kt b/android/app/src/main/java/com/naviapp/models/LoanFeeDetails.kt deleted file mode 100644 index 850b0e05d7..0000000000 --- a/android/app/src/main/java/com/naviapp/models/LoanFeeDetails.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import kotlinx.parcelize.Parcelize - -@Parcelize -data class EmiDetail( - @SerializedName("title") val title: String? = null, - @SerializedName("subTitle") val subTitle: String? = null, - @SerializedName("emiStartDates") val emiStartDates: List? = null, - @SerializedName("emiInstallmentsHeader") val emiInstallmentsHeader: List? = null, - @SerializedName("emiInstallmentsContent") - val emiInstallmentsContent: EmiInstallmentContent? = null, - @SerializedName("footer") val footer: List? = null -) : Parcelable - -@Parcelize -data class EmiInstallmentContent( - @SerializedName("key") val key: String? = null, - @SerializedName("installments") val installments: List? = null -) : Parcelable - -@Parcelize -data class EmiStartDate( - @SerializedName("key") var key: String? = null, - @SerializedName("value") var value: String? = null, - @SerializedName("selected") val selected: Boolean? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/RadioButtonWithNoteCardWidgetConfig.kt b/android/app/src/main/java/com/naviapp/models/RadioButtonWithNoteCardWidgetConfig.kt deleted file mode 100644 index 66b2b80e4b..0000000000 --- a/android/app/src/main/java/com/naviapp/models/RadioButtonWithNoteCardWidgetConfig.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.response.CardProperties -import com.naviapp.models.response.RadioButtonResponse -import com.naviapp.models.response.WidgetConfig - -data class RadioButtonWithNoteCardWidgetConfig( - @SerializedName("body") val widgetBody: RadioButtonWithNoteCardBody? = null -) : WidgetConfig() - -data class RadioButtonWithNoteCardBody( - @SerializedName("cardProperties") val cardProperties: CardProperties? = null, - @SerializedName("items") val items: List? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/SecurityTextWithIconWidgetConfig.kt b/android/app/src/main/java/com/naviapp/models/SecurityTextWithIconWidgetConfig.kt deleted file mode 100644 index 7c70c9a1a7..0000000000 --- a/android/app/src/main/java/com/naviapp/models/SecurityTextWithIconWidgetConfig.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -import com.google.gson.annotations.SerializedName -import com.naviapp.models.response.WidgetConfig - -data class SecurityTextWithIconWidgetConfig( - @SerializedName("body") val widgetBody: SecurityTextWithIconWidgetBody? = null -) : WidgetConfig() - -data class SecurityTextWithIconWidgetBody( - @SerializedName("title") val title: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, -) diff --git a/android/app/src/main/java/com/naviapp/models/SubPageStatusType.kt b/android/app/src/main/java/com/naviapp/models/SubPageStatusType.kt index 164b4c04fb..9a52b18bdf 100644 --- a/android/app/src/main/java/com/naviapp/models/SubPageStatusType.kt +++ b/android/app/src/main/java/com/naviapp/models/SubPageStatusType.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2020-2024 by Navi Technologies Limited + * * Copyright © 2020-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -22,21 +22,14 @@ object SubPageStatusType { const val LOAN_AGREEMENT = "LOAN_AGREEMENT" const val DISBURSEMENT_STATUS = "DISBURSEMENT_STATUS" const val BANK_STATEMENT_VERIFICATION = "BANK_STATEMENT_VERIFICATION" - const val BANNER = "BANNER" const val KYC_IN_REVIEW = "KYC_IN_REVIEW" const val QUESTIONNAIRE = "QUESTIONNAIRE" const val ADDRESS_VERIFICATION = "KYC_ADDRESS_VERIFICATION" const val EPFO = "EPFO" const val COUPON = "COUPON" - const val CREDIT_ANALYSIS = "CREDIT_ANALYSIS" const val TOP_UP_INTRO = "TOP_UP_INTRO" const val TELCO_OTP_VERIFICATION = "TELCO_OTP_VERIFICATION" const val ADDRESS_PHYSICAL_VERIFICATION = "ADDRESS_PHYSICAL_VERIFICATION" - const val MONEY_DISBURSEMENT_STATUS = "MONEY_DISBURSEMENT_STATUS" - const val CHAT_SCREEN = "CHAT_SCREEN" - const val EMI_DATE_CHANGE = "EMI_DATE_CHANGE" - const val UPDATED_EMI_CALENDAR = "UPDATED_EMI_CALENDAR" - const val CIBIL_FAILURE = "CIBIL_FAILURE" const val HOME = "HOME" const val DASHBOARD = "DASHBOARD" const val PROFILE = "PROFILE" @@ -84,7 +77,6 @@ object SubPageStatusType { ADDRESS_VERIFICATION, EPFO, COUPON, - CREDIT_ANALYSIS, TOP_UP_INTRO, TELCO_OTP_VERIFICATION, ADDRESS_PHYSICAL_VERIFICATION, diff --git a/android/app/src/main/java/com/naviapp/models/TextWithCtaData.kt b/android/app/src/main/java/com/naviapp/models/TextWithCtaData.kt deleted file mode 100644 index e1c3c2078c..0000000000 --- a/android/app/src/main/java/com/naviapp/models/TextWithCtaData.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models - -data class TextWithCtaData( - var prefixText: String?, - var highlightedText: String?, - var suffixText: String? -) diff --git a/android/app/src/main/java/com/naviapp/models/request/LoanFeeDetailsRequest.kt b/android/app/src/main/java/com/naviapp/models/request/LoanFeeDetailsRequest.kt index 81497dcec6..595ee46dcf 100644 --- a/android/app/src/main/java/com/naviapp/models/request/LoanFeeDetailsRequest.kt +++ b/android/app/src/main/java/com/naviapp/models/request/LoanFeeDetailsRequest.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -21,7 +21,6 @@ data class LoanFeeDetailsRequest( @SerializedName("firstEmiDueDate") val firstEmiDueDate: String? = null, @SerializedName("promotionOfferId") val couponOfferId: String? = null, @SerializedName("promoOfferAction") val promoOfferAction: String? = null, - @SerializedName("minTenureInMonths") val minTenureInMonths: Int? = null, @SerializedName("maxTenureInMonths") val maxTenureInMonths: Int? = null, @SerializedName("minEmiAmount") val minEmiAmount: Money? = null, @SerializedName("selectedLoanAmount") val selectedLoanAmount: Double? = null, diff --git a/android/app/src/main/java/com/naviapp/models/response/ActiveLoanDetailsResponse.kt b/android/app/src/main/java/com/naviapp/models/response/ActiveLoanDetailsResponse.kt deleted file mode 100644 index d18f349422..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/ActiveLoanDetailsResponse.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -data class ActiveLoanDetailsResponse( - @SerializedName("loanType") val loanType: String? = null, - @SerializedName("homeLoanActionType") val loanActionType: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/AdditionalData.kt b/android/app/src/main/java/com/naviapp/models/response/AdditionalData.kt index 4c8a23d332..e8a4f802bd 100644 --- a/android/app/src/main/java/com/naviapp/models/response/AdditionalData.kt +++ b/android/app/src/main/java/com/naviapp/models/response/AdditionalData.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2022-2024 by Navi Technologies Limited + * * Copyright © 2022-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -13,10 +13,7 @@ import com.navi.base.model.ClickableText import com.navi.base.model.GenericAnalytics import com.navi.base.model.StyledTextWithIconCode import com.navi.common.model.Money -import com.navi.naviwidgets.models.Radius -import com.navi.naviwidgets.models.response.BottomSheetInfoV2 import com.navi.naviwidgets.widgets.textdisplay.Margin -import com.naviapp.common.model.StyledTitleWithButtonWidgetBody import com.naviapp.models.Tenure import kotlinx.parcelize.Parcelize @@ -29,55 +26,26 @@ data class LoanDetailsV2AdditionData( @SerializedName("tenure") val tenure: Tenure? = null, @SerializedName("firstEmiDueDate") val firstEmiDueDate: String? = null, @SerializedName("promotionOfferId") val promotionOfferId: String? = null, - @SerializedName("defaultEmiAmount") val defaultEmiAmount: String? = null, @SerializedName("customerEmail") val customerEmail: String? = null, @SerializedName("maxTenureInMonths") val maxTenureInMonths: Int? = null, - @SerializedName("minTenureInMonths") val minTenureInMonths: Int? = null, @SerializedName("rateOfInterest") val rateOfInterest: Double? = null, @SerializedName("tenureInMonths") val tenureInMonths: Int? = null, - @SerializedName("emiEditable") val emiEditable: Boolean? = null, - @SerializedName("snappedWidget") val snappedWidget: SnappedWidget? = null, - @SerializedName("minEmiAmount") val minEmiAmount: Money? = null, - @SerializedName("loanAmountProgressPercentage") var loanAmountProgressPercentage: Double? = 1.0, - @SerializedName("loanTenureProgressPercentage") var loanTenureProgressPercentage: Double? = 1.0, @SerializedName("email") var email: String? = null, - @SerializedName("centerDialog") val centerDialog: GeneralGreetingResponse? = null, - @SerializedName("rupeeSymbolRequired") val isRupeeSymbolRequired: Boolean? = true, @SerializedName("layoutMargin") val layoutMargin: Margin? = null, @SerializedName("uitronResponse") val uitronResponse: Boolean? = null, - @SerializedName("sliderSelectedLoanAmount") var sliderSelectedLoanAmount: String? = null, @SerializedName("pageBgColor") var pageBgColor: String? = null, @SerializedName("loanOfferType") var loanOfferType: String? = null, - @SerializedName("snappedHeaderVisible") val snappedHeaderVisible: Boolean? = null, - @SerializedName("snappedHeaderProps") val snappedHeaderProps: SnappedHeaderProps? = null, @SerializedName("loanAmountPrefix") val loanAmtPrefix: StyledTextWithIconCode? = null, @SerializedName("loanAmountSuffix") val loanAmtSuffix: StyledTextWithIconCode? = null, @SerializedName("emiAmountPrefix") val emiAmtPrefix: StyledTextWithIconCode? = null, @SerializedName("emiAmountSuffix") val emiAmtSuffix: StyledTextWithIconCode? = null, - @SerializedName("loanAmountCommaSeparated") val loanAmtCommaSeparated: Boolean? = null, - @SerializedName("emiAmountCommaSeparated") val emiAmtCommaSeparated: Boolean? = null, - @SerializedName("widthComputation") var widthComputation: String? = null, @SerializedName("hideDivider") val hideDivider: Boolean? = null, - @SerializedName("widgetValidationRequired") var widgetValidationRequired: Boolean? = null, - @SerializedName("emiDateWidgetPosition") var emiDateWidgetPosition: Int? = null, @SerializedName("webViewUrl") var webViewUrl: String? = null, - @SerializedName("isEmailWidgetVisible") val isEmailWidgetVisible: Boolean? = null, @SerializedName("possibleTenures") val possibleTenure: List? = null, @SerializedName("emiRoundOffType") val emiRoundOffType: String? = null, - @SerializedName("selectedHeader") val selectedHeader: StyledTitleWithButtonWidgetBody? = null, @SerializedName("footerClickableText") val footerClickableText: ClickableText? = null, @SerializedName("aprClickableText") val aprClickableText: ClickableText? = null, - @SerializedName("verifyViaUpiBottomSheetInfo") - val verifyViaUpiBottomSheetInfo: BottomSheetInfoV2? = null, - @SerializedName("transactionFailedBottomSheetInfo") - val transactionFailedBottomSheetInfo: BottomSheetInfoV2? = null, @SerializedName("analyticsData") val analyticsData: GenericAnalytics? = null, - @SerializedName("isNfsPrivacyAndTermsConsentRequired") - val isNfsPrivacyAndTermsConsentRequired: Boolean? = null -) : AdditionalData - -data class TopupInfoViewAdditionalData( - @SerializedName("screenName") val screenName: String? = null ) : AdditionalData @Parcelize @@ -88,20 +56,3 @@ data class PossibleTenure( @SerializedName("emiRoundOffType") val emiRoundOffType: String? = null, @SerializedName("possibleFirstEmiDueDates") val possibleFirstEmiDueDates: List? = null ) : Parcelable - -data class SnappedHeaderProps( - @SerializedName("borderWidth") val borderWidth: Int? = null, - @SerializedName("borderColor") val borderColor: String? = null, - @SerializedName("borderRadius") val borderRadius: Int? = null, - @SerializedName("backgroundColor") val backgroundColor: String? = null, - @SerializedName("parentBackgroundColor") val parentBackgroundColor: String? = null, - @SerializedName("textColor") val textColor: String? = null -) - -@Parcelize -data class SnappedWidget( - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("snapEnabled") val snapEnabled: String? = null, - @SerializedName("corners") val cornerRadius: Radius -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/ApplyCouponResponse.kt b/android/app/src/main/java/com/naviapp/models/response/ApplyCouponResponse.kt deleted file mode 100644 index c610f62c66..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/ApplyCouponResponse.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -data class ApplyCouponResponse(@SerializedName("offer_id") val promoOfferId: String? = null) diff --git a/android/app/src/main/java/com/naviapp/models/response/BankDataResponse.kt b/android/app/src/main/java/com/naviapp/models/response/BankDataResponse.kt deleted file mode 100644 index 4f0e4f5d1b..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/BankDataResponse.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * - * * Copyright © 2020-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.response.BottomSheetInfoV2 -import com.navi.naviwidgets.models.response.NaviDrawableData -import com.navi.naviwidgets.models.response.TextFieldData - -data class BankDataResponse( - @SerializedName("allSupportedBanks") val allSupportedBanks: List? = null, - @SerializedName("preferredBanks") val preferredBanks: List? = null, - @SerializedName("bankNotFoundPillDetails") - val bankNotFoundPillDetails: BankNotFoundPillDetails? = null -) - -data class BankNotFoundPillDetails( - @SerializedName("leftText") val leftText: TextFieldData? = null, - @SerializedName("rightText") val rightText: TextFieldData? = null, - @SerializedName("bottomSheetData") val bottomSheetData: BottomSheetInfoV2? = null, - @SerializedName("pillDrawableData") val pillDrawableData: NaviDrawableData? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/BankDetailsPostKyc.kt b/android/app/src/main/java/com/naviapp/models/response/BankDetailsPostKyc.kt deleted file mode 100644 index bc349a434a..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/BankDetailsPostKyc.kt +++ /dev/null @@ -1,90 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.base.model.Padding -import com.navi.base.model.StyledTextWithIconCode -import com.navi.design.font.FontWeightEnum -import com.navi.naviwidgets.models.response.Gradient -import com.navi.naviwidgets.widgets.textdisplay.Margin - -data class InputWithErrorWidgetConfig( - @SerializedName("body") val widgetBody: InputWithErrorData? = null -) : WidgetConfig() - -data class InputWithErrorData( - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("cta") val cta: CtaData? = null, - @SerializedName("validations") val validations: List? = null, - @SerializedName("bottomText") val styledBottom: StyledBottom? = null, - @SerializedName("inputData") val inputData: InputSearchViewData? = null, - @SerializedName("editable") val editable: Boolean = true, - @SerializedName("maxLength") val maxLength: Int? = null, - @SerializedName("multiline") val multiLine: Boolean? = false, - @SerializedName("lines") val lines: Int? = 1, - @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("strokeColor") val strokeColor: String? = null, - @SerializedName("strokeWidth") val strokeWidth: Double? = null, - @SerializedName("cornerRadius") val cornerRadius: Double? = null, - @SerializedName("inputType") val inputType: String? = null, - @SerializedName("fontFamily") val fontFamily: FontWeightEnum? = null, - @SerializedName("textSize") val textSize: Double? = null, - @SerializedName("identifierKey") val identifierKey: String? = null, - @SerializedName("successText") var successText: SuccessText? = null, - @SerializedName("showSuccessText") var showSuccessText: Boolean? = null, - @SerializedName("showCrossIcon") var showCrossIcon: Boolean? = null, -) - -data class SuccessText( - @SerializedName("successTitle") val successTitle: StyledTextWithIconCode? = null, - @SerializedName("successIcon") val successIcon: String? = null, - @SerializedName("successStrokeColor") val successStrokeColor: String? = null, - @SerializedName("successStrokeWidth") val successStrokeWidth: String? = null -) - -data class InputSearchViewData( - @SerializedName("hint") val hint: String? = null, - @SerializedName("inputValue") var inputValue: String? = null, - @SerializedName("showSearchLabel") var showSearchLabel: Boolean? = false, - @SerializedName("hintTextColor") val hintTextColor: String? = null, - @SerializedName("hintFont") val hintFont: FontWeightEnum? = null, - @SerializedName("isHidden") val isHidden: Boolean? = null, -) - -data class StyledBottom( - @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("bgGradient") val bgGradient: Gradient? = null, - @SerializedName("styledText") val text: StyledTextWithIconCode? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("cornerRadius") val cornerRadius: Int? = null, - @SerializedName("strokeWidth") val strokeWidth: Int? = null, - @SerializedName("strokeColor") val strokeColor: String? = null, - @SerializedName("padding") val padding: Padding? = null, - @SerializedName("iconMargin") val iconMargin: Margin? = null -) - -data class Validations( - @SerializedName("type") val type: ValidationType? = null, - @SerializedName("digitCount") val digitCount: Int? = null, - @SerializedName("regex") val regex: String? = null, - @SerializedName("errorText") val errorText: StyledTextWithIconCode? = null, - @SerializedName("errorStrokeColor") val errorStrokeColor: String? = null, - @SerializedName("errorStrokeWidth") val errorStrokeWidth: Double? = null, - @SerializedName("errorStrokeCornerRadius") val errorStrokeCornerRadius: Double? = null, - @SerializedName("validateOnTextChange") val validateOnTextChange: Boolean? = false -) - -enum class ValidationType { - DIGIT_COUNT, - GREATER_THAN_DIGIT_COUNT, - EMPTY, - REGEX -} diff --git a/android/app/src/main/java/com/naviapp/models/response/BannerInfo.kt b/android/app/src/main/java/com/naviapp/models/response/BannerInfo.kt deleted file mode 100644 index 0a643b8a00..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/BannerInfo.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import kotlinx.parcelize.Parcelize - -@Parcelize -data class BannerInfo( - @SerializedName("title") val title: String? = null, - @SerializedName("subTitle") val subTitle: String? = null, - @SerializedName("subtitle") val subtitle: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("offerUpgradeBenefits") val offerUpgradeBenefits: List? = null, - @SerializedName("cta") val cta: CtaData? = null, - @SerializedName("inactiveCoApplicants") - val inactiveCoApplicants: List? = null, - @SerializedName("info") val info: InfoContent? = null, - @SerializedName("flowType") val flowType: String? = null, - @SerializedName("subCards") val subCards: List? = null, -) : Parcelable - -@Parcelize -data class SubCardContent( - @SerializedName("title") val title: String? = null, - @SerializedName("subtitle") val subtitle: String? = null, - @SerializedName("subtitleCta") val subtitleCta: CtaData? = null -) : Parcelable { - var showDivider: Boolean = true -} - -@Parcelize -data class InfoContent( - @SerializedName("title") val title: String? = null, - @SerializedName("iconCode") val iconCode: String? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/CibilFailureResponse.kt b/android/app/src/main/java/com/naviapp/models/response/CibilFailureResponse.kt deleted file mode 100644 index 3746d87238..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/CibilFailureResponse.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * - * * Copyright © 2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.response.Footer -import com.naviapp.models.RatingData - -data class CibilFailureResponse( - @SerializedName("content") val content: RatingData? = null, - @SerializedName("footer") val footer: Footer? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/CouponResponse.kt b/android/app/src/main/java/com/naviapp/models/response/CouponResponse.kt deleted file mode 100644 index 0d1e5a310e..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/CouponResponse.kt +++ /dev/null @@ -1,32 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -data class CouponResponse(@SerializedName("content") val content: CouponContent? = null) - -data class CouponContent( - @SerializedName("note") val note: String? = null, - @SerializedName("offers") val couponList: List? = null -) { - fun hasNoCoupons(): Boolean { - return couponList.isNullOrEmpty() - } -} - -data class Coupon( - @SerializedName("promotionOfferId") val promotionOfferId: String? = null, - @SerializedName("promoCode") val couponCode: String? = null, - @SerializedName("expiryTime") val expiryTime: Long? = null, - @SerializedName("title") val title: String? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("actionText") val actionText: String? = null, - @SerializedName("tncLabel") val tncLabel: String? = null, - @SerializedName("tncList") val tncList: List? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/CreditAnalysisData.kt b/android/app/src/main/java/com/naviapp/models/response/CreditAnalysisData.kt deleted file mode 100644 index 98a7521ce6..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/CreditAnalysisData.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import kotlinx.parcelize.Parcelize - -@Parcelize -data class CreditAnalysisData( - @SerializedName("title") val title: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("cta") val cta: CtaData? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/EnachMandateDetailsResponse.kt b/android/app/src/main/java/com/naviapp/models/response/EnachMandateDetailsResponse.kt deleted file mode 100644 index c97c2dc32f..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/EnachMandateDetailsResponse.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.naviapp.models.EnachMetadata -import com.naviapp.models.TimerWithLoader -import kotlinx.parcelize.Parcelize - -data class EnachMandateDetailsResponse( - @SerializedName("mandateId") val mandateId: String?, - @SerializedName("stub") val stub: EnachStubData? = null, - @SerializedName("provider") val provider: String? = null, - @SerializedName("metadata") val metadata: EnachMetadata? = null, - @SerializedName("accessToken") val accessToken: AccessToken? = null, - @SerializedName("mandateKind") val mandateType: String? = null, - @SerializedName("mandateRefId") val mandateRefId: String? = null, - @SerializedName("logo") val logo: String? = null, - @SerializedName("errorCode") val errorCode: String? = null, - @SerializedName("mandateError") val mandateError: MandateError? = null, - @SerializedName("fallbackProvider") val fallbackProvider: String? = null, - @SerializedName("nextCtaText") val nextCtaText: String? = null, -) - -data class EnachStubData( - @SerializedName("endpoint") val endpoint: String, - @SerializedName("active") val active: Boolean? -) - -data class AccessToken(@SerializedName("id") val accessToken: String? = null) - -@Parcelize -data class MandateError( - @SerializedName("reason") val reason: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("timerData") val timerData: TimerWithLoader? = null, - @SerializedName("timerCompletedText") val timerCompletedText: String? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt b/android/app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt deleted file mode 100644 index 494b3d8c32..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -data class EnachWidgetResponse( - @SerializedName("headerWidget") val headerWidget: List? = null, - @SerializedName("contentWidget") val contentWidget: List>? = null, - @SerializedName("footerWidget") val footerWidget: List? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/FixedClickableTextWidgetConfig.kt b/android/app/src/main/java/com/naviapp/models/response/FixedClickableTextWidgetConfig.kt deleted file mode 100644 index b9193381e3..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/FixedClickableTextWidgetConfig.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -data class FixedClickableTextWidgetConfig( - @SerializedName("body") val widgetBody: FixedClickableTextWidgetBody? = null -) : WidgetConfig() - -data class FixedClickableTextWidgetBody( - @SerializedName("title") val title: String? = null, -) diff --git a/android/app/src/main/java/com/naviapp/models/response/FormFooter.kt b/android/app/src/main/java/com/naviapp/models/response/FormFooter.kt deleted file mode 100644 index 67ce485238..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/FormFooter.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.naviwidgets.models.response.TextFieldData -import kotlinx.parcelize.Parcelize - -@Parcelize -data class FormFooter( - @SerializedName("footerCheckBox") val footerCheckBox: FooterCheckBox? = null, - @SerializedName("nextCta") var nextCta: CtaData? = null, - @SerializedName("message") val message: TextFieldData? = null -) : Parcelable - -@Parcelize -data class FooterCheckBox( - @SerializedName("text") val text: String? = null, - @SerializedName("isChecked") val isChecked: Boolean? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/FormHeader.kt b/android/app/src/main/java/com/naviapp/models/response/FormHeader.kt deleted file mode 100644 index 40bb60b062..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/FormHeader.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.common.model.HelpBottomSheetData - -data class FormHeader( - @SerializedName("backCta") var backCta: CtaData? = null, - @SerializedName("showHelpIcon") var showHelpIcon: Boolean = true, - @SerializedName("showRequestCallbackIcon") var showRequestCallbackIcon: Boolean = true, - @SerializedName("title") var title: String? = null, - @SerializedName("subtitle") var subtitle: String? = null, - @SerializedName("progress") var progress: Int? = null, - @SerializedName("progressInfo") var progressInfo: String? = null, - @SerializedName("tagText") var tagText: String? = null, - @SerializedName("helpBottomSheet") var helpBottomSheet: HelpBottomSheetData? = null, - @SerializedName("metadata") val metaData: HashMap? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/GstDetailsResponse.kt b/android/app/src/main/java/com/naviapp/models/response/GstDetailsResponse.kt deleted file mode 100644 index e11ce4d901..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/GstDetailsResponse.kt +++ /dev/null @@ -1,117 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.common.model.common.Header -import com.navi.naviwidgets.models.response.Footer -import kotlinx.parcelize.Parcelize - -@Parcelize -data class GstDetailsResponse( - @SerializedName("header") val header: Header? = null, - @SerializedName("content") val content: GstDetailsContent? = null, - @SerializedName("footer") val footer: Footer? = null -) : Parcelable - -@Parcelize -data class GstDetailsContent( - @SerializedName("title") val title: String? = null, - @SerializedName("gstNumbers") val gstNumber: List? = null, - @SerializedName("verificationPageTitle") val verificationPageTitle: String? = null, - @SerializedName("userNameFieldTitle") val userNameFieldTitle: String? = null, - @SerializedName("userNameFieldPlaceHolder") val userNameFieldPlaceHolder: String? = null, - @SerializedName("otpFieldTitle") val otpFieldTitle: String? = null, - @SerializedName("otpFieldPlaceHolder") val otpFieldPlaceHolder: String? = null, - @SerializedName("passwordFieldTitle") val passwordFieldTitle: String? = null, - @SerializedName("passwordFieldPlaceHolder") val passwordFieldPlaceHolder: String? = null, - @SerializedName("passwordVerificationHelperText") - val passwordVerificationHelperText: String? = null, - @SerializedName("verificationActionButtonOTPTitle") - val verificationActionButtonOTPTitle: String? = null, - @SerializedName("verificationActionButtonPasswordTitle") - val verificationActionButtonPasswordTitle: String? = null, - @SerializedName("usernameInfoSheetContent") - val usernameInfoSheetContent: GstInfoSheetContent? = null, - @SerializedName("banner") val banner: GstBanner? = null, - @SerializedName("passwordVerificationBottomSheet") - val passwordVerificationBottomSheetData: PasswordVerificationBottomSheetData, - @SerializedName("authenticationData") val authenticationData: AuthenticationData? = null -) : Parcelable - -@Parcelize -data class GSTDetail( - @SerializedName("number") val number: String? = null, - @SerializedName("isVerified") val isVerified: Boolean? = null, - @SerializedName("verifiedText") val verifiedText: String? = null, - @SerializedName("verifiedIconCode") val verifiedIconCode: String? = null -) : Parcelable - -@Parcelize -data class GstInfoSheetContent( - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("title") val title: String? = null, - @SerializedName("subHeader") val subheader: String? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("cta") val cta: CtaData? = null -) : Parcelable - -@Parcelize -data class GstBanner( - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("title") val title: String? = null, - @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("tipTitle") val tipTitle: String? = null -) : Parcelable - -@Parcelize -data class PasswordVerificationBottomSheetData( - @SerializedName("title") val title: String? = null, - @SerializedName("inputTitle") val inputTitle: String? = null, - @SerializedName("placeHolder") val placeHolder: String? = null, - @SerializedName("errorText") val errorText: String? = null, - @SerializedName("backCta") val backCta: CtaData? = null, - @SerializedName("nextCta") val nextCta: CtaData? = null -) : Parcelable - -@Parcelize -data class AuthenticationData( - @SerializedName("changeCta") val changeCta: CtaData? = null, - @SerializedName("titleData") val titleData: TitleData? = null, - @SerializedName("otpData") val otpData: OtpData? = null, - @SerializedName("passwordData") val passwordData: PasswordData? = null, - @SerializedName("alternateMethodTitle") val alternateMethodData: AlternateMethodData? = null -) : Parcelable - -@Parcelize -data class TitleData( - @SerializedName("gstInTitle") val gstinTitle: String? = null, - @SerializedName("userNameTitle") val userNameTitle: String? = null -) : Parcelable - -@Parcelize -data class OtpData( - @SerializedName("title") val title: String? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("regenerationTitle") val regenerationTitle: String? = null, - @SerializedName("resendTitle") val resendTitle: String? = null -) : Parcelable - -@Parcelize -data class PasswordData( - @SerializedName("title") val title: String? = null, - @SerializedName("placeHolder") val placeHolder: String? = null, -) : Parcelable - -@Parcelize -data class AlternateMethodData( - @SerializedName("password") val passwordMethodTitle: String? = null, - @SerializedName("otp") val otpMethodTitle: String? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/HeaderTitleWidgetConfig.kt b/android/app/src/main/java/com/naviapp/models/response/HeaderTitleWidgetConfig.kt index eab5471fed..8cdfbd9637 100644 --- a/android/app/src/main/java/com/naviapp/models/response/HeaderTitleWidgetConfig.kt +++ b/android/app/src/main/java/com/naviapp/models/response/HeaderTitleWidgetConfig.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2023-2024 by Navi Technologies Limited + * * Copyright © 2023-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ diff --git a/android/app/src/main/java/com/naviapp/models/response/HomeFeatureResponse.kt b/android/app/src/main/java/com/naviapp/models/response/HomeFeatureResponse.kt index 15b6d0d6ed..4c7b042f9e 100644 --- a/android/app/src/main/java/com/naviapp/models/response/HomeFeatureResponse.kt +++ b/android/app/src/main/java/com/naviapp/models/response/HomeFeatureResponse.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2023-2024 by Navi Technologies Limited + * * Copyright © 2023-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -10,10 +10,7 @@ package com.naviapp.models.response import com.google.gson.annotations.SerializedName import com.navi.base.model.CtaData -data class HomeFeatureResponse( - @SerializedName("survey") val survey: NetPromoterScoreResponse? = null, - @SerializedName("ppe") val ppeFeatures: PPEFeature? = null -) +data class HomeFeatureResponse(@SerializedName("ppe") val ppeFeatures: PPEFeature? = null) data class PPEFeaturePopupData( @SerializedName("enable") val enable: Boolean? = null, diff --git a/android/app/src/main/java/com/naviapp/models/response/HomeLoanCoApplicantResponse.kt b/android/app/src/main/java/com/naviapp/models/response/HomeLoanCoApplicantResponse.kt deleted file mode 100644 index 8cbaeeafbd..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/HomeLoanCoApplicantResponse.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import kotlinx.parcelize.Parcelize - -@Parcelize -data class HomeLoanCoApplicantResponse( - @SerializedName("referenceId") val referenceId: String? = null, - @SerializedName("name") val name: String? = null, - @SerializedName("phoneNumber") val phoneNumber: String? = null, - @SerializedName("selected") var selected: Boolean? = false, - @SerializedName("relation") var relation: String? = null, - @SerializedName("status") var status: String? = null, - @SerializedName("allowedActions") var allowedActions: ArrayList? = null, - @SerializedName("disabledDeleteInfo") var disabledDeleteInfo: String? = null, - @SerializedName("nextCta") var nextCta: CtaData? = null, - @SerializedName("addCoAppOption") var addCoAppOption: Boolean? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/HomeLoanSubStepResponse.kt b/android/app/src/main/java/com/naviapp/models/response/HomeLoanSubStepResponse.kt deleted file mode 100644 index 2a3c44800d..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/HomeLoanSubStepResponse.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -abstract class HomeLoanSubStepResponse(@SerializedName("widgetId") val widgetId: String? = null) diff --git a/android/app/src/main/java/com/naviapp/models/response/HomeLoanUploadNoteDetails.kt b/android/app/src/main/java/com/naviapp/models/response/HomeLoanUploadNoteDetails.kt deleted file mode 100644 index 60887509cd..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/HomeLoanUploadNoteDetails.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.naviapp.common.adapter.IconTextAdapter - -data class HomeLoanUploadNoteDetails( - @SerializedName("title") val title: String? = null, - @SerializedName("instructions") val instructions: List? = null, - @SerializedName("listType") val listType: String? = IconTextAdapter.ListType.UNORDERED.name, - @SerializedName("startWith") val startWith: Int? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/InputWithErrorLabelWidgetConfig.kt b/android/app/src/main/java/com/naviapp/models/response/InputWithErrorLabelWidgetConfig.kt deleted file mode 100644 index ea68cca279..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/InputWithErrorLabelWidgetConfig.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -data class InputWithErrorLabelWidgetConfig( - @SerializedName("body") val widgetBody: InputWithErrorLabelWidgetBody? = null -) : WidgetConfig() - -data class InputWithErrorLabelWidgetBody( - @SerializedName("inputValue") val inputValue: String? = null, - @SerializedName("hint") val hint: String? = null, - @SerializedName("errorLabel") val errorLabel: String? = null, - @SerializedName("invalidEmailErrorLabel") val invalidEmailErrorLabel: String? = null, - @SerializedName("bgColor") val bgColor: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/InsuranceDetail.kt b/android/app/src/main/java/com/naviapp/models/response/InsuranceDetail.kt deleted file mode 100644 index 61d33cee0f..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/InsuranceDetail.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData - -data class InsuranceDetail( - @SerializedName("attachId") val id: String? = null, - @SerializedName("attachType") val attachType: String? = null, - @SerializedName("title") val title: String? = null, - @SerializedName("selected") val isApplied: Boolean? = null, - @SerializedName("subItems") val subItems: List? = null, - @SerializedName("ctas") val ctas: Ctas? = null -) - -data class Ctas( - @SerializedName("separator") val separator: String? = null, - @SerializedName("items") val items: List? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/LoanBasicDetailsResponse.kt b/android/app/src/main/java/com/naviapp/models/response/LoanBasicDetailsResponse.kt deleted file mode 100644 index 69a4b9558a..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/LoanBasicDetailsResponse.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import kotlinx.parcelize.Parcelize - -@Parcelize -data class LoanBasicDetailsResponse( - @SerializedName("loanApplicationId") val loanApplicationId: String?, - @SerializedName("name") val name: String? -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/LoanDetailsResponse.kt b/android/app/src/main/java/com/naviapp/models/response/LoanDetailsResponse.kt deleted file mode 100644 index abf1dea011..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/LoanDetailsResponse.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.base.model.StyledTextWithIconCode - -data class GeneralGreetingResponse( - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("title") val title: String? = null, - @SerializedName("subTitle") val subTitle: String? = null, - @SerializedName("ctaList") val ctaList: List? = null, - @SerializedName("cta") val cta: CtaData? = null, - @SerializedName("description") val description: StyledTextWithIconCode? = null, - @SerializedName("offerText") val offerText: StyledTextWithIconCode? = null, - @SerializedName("type") val type: String? = null, - @SerializedName("flowType") val flowType: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/LoanDisbursementStatusMessageResponse.kt b/android/app/src/main/java/com/naviapp/models/response/LoanDisbursementStatusMessageResponse.kt deleted file mode 100644 index dd05d6be2f..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/LoanDisbursementStatusMessageResponse.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -data class LoanDisbursementStatusMessageResponse( - @SerializedName("message") val message: String? = null, - @SerializedName("note") val note: String? = null, - @SerializedName("delayedMessage") val delayedMessage: String? = null, - @SerializedName("delayDurationInMilliSec") val delayDurationInMilliSec: Long? = null, - @SerializedName("netDisbursalAmount") val netDisbursalAmount: Double? = null, - @SerializedName("redirectCtaUrl") val redirectCtaUrl: String? = null, - @SerializedName("postDisbursement") val postDisbursement: Boolean? = false, - @SerializedName("loanAccountNumber") val loanAccountNumber: String? = null, - @SerializedName("showDisbursalAnimation") val showDisbursalAnimation: Boolean? = true -) diff --git a/android/app/src/main/java/com/naviapp/models/response/MandateProviderResponse.kt b/android/app/src/main/java/com/naviapp/models/response/MandateProviderResponse.kt deleted file mode 100644 index faf9b68d4a..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/MandateProviderResponse.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -data class MandateProviderResponse( - @SerializedName("fallbackProvider") val fallbackProvider: String? = null, - @SerializedName("title") val title: String? = null, - @SerializedName("message") val message: String? = null, - @SerializedName("nextCtaText") val nextCtaText: String? = null, -) diff --git a/android/app/src/main/java/com/naviapp/models/response/NetPromoterScoreResponse.kt b/android/app/src/main/java/com/naviapp/models/response/NetPromoterScoreResponse.kt deleted file mode 100644 index dd80cefd03..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/NetPromoterScoreResponse.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.common.model.DialogBoxResponse -import com.navi.naviwidgets.models.response.Footer - -data class NetPromoterScoreResponse( - @SerializedName("content") val content: NpsDetails? = null, - @SerializedName("footer") val footer: Footer? = null -) - -data class NpsDetails( - @SerializedName("title") val title: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("colorList") val colorList: List? = null, - @SerializedName("colorRangeTags") val colorRangeTags: ColorRangeTags? = null, - @SerializedName("ratingsInfo") val ratingsInfo: RatingsInfo? = null, - @SerializedName("dialogBoxInfo") val dialogBoxInfo: DialogBoxResponse? = null, - @SerializedName("npsResponseReferenceId") val npsResponseReferenceId: String? = null, - @SerializedName("questionReferenceId") val questionReferenceId: String? = null -) - -data class ColorRangeTags( - @SerializedName("startTag") val startTag: String? = null, - @SerializedName("endTag") val endTag: String? = null, - @SerializedName("startTagColor") val startTagColor: String? = null, - @SerializedName("endTagColor") val endTagColor: String? = null -) - -data class ColorBoxPair( - @SerializedName("displayColor") val displayColor: String? = null, - @SerializedName("clickColor") val clickColor: String? = null, - @SerializedName("endLineColor") val endLineColor: String? = null, - @SerializedName("text") val text: String? = null -) - -data class RatingsInfo( - @SerializedName("displayType") val displayType: String? = null, - @SerializedName("textHint") val hint: String? = null, - @SerializedName("ratingsData") val ratingsData: List? = null, - @SerializedName("showFreeText") val showFreeText: Boolean? = null -) - -data class RatingsData( - @SerializedName("title") val title: String? = null, - @SerializedName("optionsList") val optionsList: List? = null, -) diff --git a/android/app/src/main/java/com/naviapp/models/response/OfferDetailsResponse.kt b/android/app/src/main/java/com/naviapp/models/response/OfferDetailsResponse.kt index a5fb18e743..d7e6e657cf 100644 --- a/android/app/src/main/java/com/naviapp/models/response/OfferDetailsResponse.kt +++ b/android/app/src/main/java/com/naviapp/models/response/OfferDetailsResponse.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -25,6 +25,5 @@ data class OfferDetailsResponse( @SerializedName("offerText") val offerText: StyledTextWithIconCode? = null, @SerializedName("type") val type: String? = null, @SerializedName("offerReferenceId") val offerReferenceId: String? = null, - @SerializedName("newJourneyCustomer") val newJourneyCustomer: Boolean? = null, @SerializedName("uiTronDialog") val uitronDialog: UiTronDialog? = null ) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/OfferInReviewResponse.kt b/android/app/src/main/java/com/naviapp/models/response/OfferInReviewResponse.kt deleted file mode 100644 index 000f1e25ac..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/OfferInReviewResponse.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * * Copyright © 2023-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.common.model.FinoramicData -import com.navi.common.model.InfoBottomSheetConfig -import com.navi.common.model.common.Header -import com.navi.design.utils.BackgroundDrawableData -import com.navi.naviwidgets.models.response.Footer -import com.navi.naviwidgets.models.response.TextFieldData - -data class OfferInReviewResponse( - @SerializedName("header") val header: Header? = null, - @SerializedName("content") val inReviewData: InReviewResponseContent? = null, - @SerializedName("footer") val footer: Footer? = null -) - -data class InReviewResponseContent( - @SerializedName("widgets") val widgets: List? = null, - @SerializedName("additionalData") val additionalData: InReviewResponseAdditionalData? = null -) - -data class InReviewResponseAdditionalData( - @SerializedName("toastCard") val toastCard: TextFieldIconTimerData? = null, - @SerializedName("dataSafetyBottomSheet") - val dataSafetyBottomSheet: InfoBottomSheetConfig? = null, - @SerializedName("finoramic") val finoramicData: FinoramicData? = null, - @SerializedName("cardName") val cardName: String? = null -) - -data class TextFieldIconTimerData( - @SerializedName("backgroundDrawableData") - val backgroundDrawableData: BackgroundDrawableData? = null, - @SerializedName("title") val title: TextFieldData? = null, - @SerializedName("endIcon") val icon: ImageDetail? = null, - @SerializedName("disappearAfter") val disappearAfter: Long? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/OfferUpgradeResponse.kt b/android/app/src/main/java/com/naviapp/models/response/OfferUpgradeResponse.kt index 1aefa47954..e42104b453 100644 --- a/android/app/src/main/java/com/naviapp/models/response/OfferUpgradeResponse.kt +++ b/android/app/src/main/java/com/naviapp/models/response/OfferUpgradeResponse.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2022-2023 by Navi Technologies Limited + * * Copyright © 2022-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -10,63 +10,8 @@ package com.naviapp.models.response import android.os.Parcelable import com.google.gson.annotations.SerializedName import com.navi.base.model.CtaData -import com.navi.base.model.LineItem -import com.navi.common.model.common.Header -import com.navi.naviwidgets.models.response.Footer import kotlinx.parcelize.Parcelize -data class OfferUpgradeResponse( - @SerializedName("header") val header: Header? = null, - @SerializedName("content") val content: OfferUpgradeDetails? = null, - @SerializedName("footer") val footer: Footer? = null -) - -data class OfferUpgradeDetails( - @SerializedName("loanOfferBenefitCardData") - val loanOfferBenefitCardData: LoanOfferBenefitCardData? = null, - @SerializedName("offerImprovementCardsList") - val offerImprovementCardsList: List? = null, - @SerializedName("centerDialog") val centerDialog: OfferUpgradeGreetingResponse? = null, - @SerializedName("popUp") val popUpInfo: PopUpInfo? = null -) - -data class LoanOfferBenefitCardData( - @SerializedName("title") val title: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("benefitsLineItem") val benefitsLineItem: List? = null, - @SerializedName("loanOfferUpgradedItems") - val loanOfferUpgradedItems: List? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("loanOfferUpgradedItemsTitle") - val loanOfferUpgradedItemsTitle: LoanOfferUpgradedItemsTitle? = null -) - -data class OfferImprovementDocumentsCardData( - @SerializedName("title") val title: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("verified") val verified: Boolean? = null, - @SerializedName("recommended") val recommended: Boolean? = null, - @SerializedName("cardColor") val cardColor: String? = null, - @SerializedName("verificationStatus") val verificationStatus: PopularCards? = null, - @SerializedName("cta") val cta: CtaData? = null, - @SerializedName("cardType") val cardType: String? = null, - @SerializedName("benefitTitle") val benefitTitle: String? = null -) - -data class OfferUpgradeGreetingResponse( - @SerializedName("title") val title: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("offerUpgradeBenefits") val offerUpgradeBenefits: List? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("nextCta") val nextCta: CtaData? = null -) - -data class ColoredLineItem( - @SerializedName("key") val key: String? = null, - @SerializedName("value") val value: String? = null, - @SerializedName("valueColorCode") val valueColorCode: String? = null -) - @Parcelize data class PopularCards( @SerializedName("title") val title: String? = null, @@ -85,17 +30,3 @@ data class Tag( @SerializedName("iconCode") val iconCode: String? = null, @SerializedName("bgColor") val bgColor: String? = null ) : Parcelable - -data class PopUpInfo( - @SerializedName("type") val type: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("title") val title: String? = null, - @SerializedName("subTitle") val subTitle: String? = null, - @SerializedName("cta") val cta: CtaData? = null -) - -data class LoanOfferUpgradedItemsTitle( - @SerializedName("loanAmountTitle") val loanAmountTitle: String? = null, - @SerializedName("loanAmount") val loanAmount: String? = null, - @SerializedName("iconCode") val iconCode: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/PanVerificationBottomSheetData.kt b/android/app/src/main/java/com/naviapp/models/response/PanVerificationBottomSheetData.kt deleted file mode 100644 index 021aef0bcf..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/PanVerificationBottomSheetData.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * - * * Copyright © 2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.base.model.StyledTextWithIconCode -import kotlinx.parcelize.Parcelize - -@Parcelize -data class PanVerificationBottomSheetData( - @SerializedName("headerIcon") val headerIcon: String? = null, - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("description") val description: StyledTextWithIconCode? = null, - @SerializedName("items") val items: List? = null, -) : Parcelable - -@Parcelize -data class SubListItem( - @SerializedName("title") val title: StyledTextWithIconCode? = null, - @SerializedName("radius") val radius: Int? = null, - @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("leftText") val leftText: StyledTextWithIconCode? = null, - @SerializedName("rightText") val rightText: StyledTextWithIconCode? = null, - @SerializedName("borderColor") val borderColor: String? = null, - @SerializedName("borderWidth") val borderWidth: Int? = null, - @SerializedName("cta") val cta: CtaData? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/PermissionDetailsResponse.kt b/android/app/src/main/java/com/naviapp/models/response/PermissionDetailsResponse.kt index e53117ec72..84a0e56680 100644 --- a/android/app/src/main/java/com/naviapp/models/response/PermissionDetailsResponse.kt +++ b/android/app/src/main/java/com/naviapp/models/response/PermissionDetailsResponse.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -8,7 +8,6 @@ package com.naviapp.models.response import com.google.gson.annotations.SerializedName -import com.navi.common.model.FinoramicData import com.navi.common.model.InfoBottomSheetConfig import com.navi.common.model.common.Header import com.navi.common.model.permission.PermissionTile @@ -24,5 +23,4 @@ data class PermissionDetailsContent( @SerializedName("dataSafetyBottomSheet") val dataSafetyBottomSheet: InfoBottomSheetConfig? = null, @SerializedName("permissionList") val permissionList: List? = null, - @SerializedName("finoramicData") val finoramicData: FinoramicData? = null ) diff --git a/android/app/src/main/java/com/naviapp/models/response/ProductDetails.kt b/android/app/src/main/java/com/naviapp/models/response/ProductDetails.kt deleted file mode 100644 index 0dcbc041c9..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/ProductDetails.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.CtaData -import com.navi.common.model.StyledTextWithIconAndDesc - -data class ProductDetails( - @SerializedName("header") val header: HeaderCta? = null, - @SerializedName("content") val content: ProductDetail? = null -) - -data class HeaderCta(@SerializedName("backCta") val backCta: CtaData? = null) - -data class ProductDetail( - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("title") val title: String? = null, - @SerializedName("description") val description: String? = null, - @SerializedName("data") val data: ProductDescription? = null, - @SerializedName("bannerData") val bannerData: ProductBanner? = null -) - -data class ProductBanner( - @SerializedName("widgetName") val widgetName: String? = WIDGET_NAME, - @SerializedName("url") val imageUrl: String? = null, - @SerializedName("actionData") val actionData: CtaData? = null -) { - companion object { - const val WIDGET_NAME = "IMAGE_BANNER" - } -} - -data class ProductDescription( - @SerializedName("title") val title: String? = null, - @SerializedName("showDivider") val showDivider: Boolean = false, - @SerializedName("items") val items: List? = null, - @SerializedName("nextCta") val nextCta: CtaData? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/SkipMandateResponse.kt b/android/app/src/main/java/com/naviapp/models/response/SkipMandateResponse.kt deleted file mode 100644 index 3a37f99b1a..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/SkipMandateResponse.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -data class OptionItem( - @SerializedName("title") val title: String? = null, - @SerializedName("iconUrl") val iconUrl: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/SubmitSurveyResponse.kt b/android/app/src/main/java/com/naviapp/models/response/SubmitSurveyResponse.kt deleted file mode 100644 index a84112d8b6..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/SubmitSurveyResponse.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.naviwidgets.models.NaviWidget - -data class SubmitSurveyResponse( - @SerializedName("response") val response: String?, - @SerializedName("contentWidget") val contentWidget: List? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/TopUpIntroResponse.kt b/android/app/src/main/java/com/naviapp/models/response/TopUpIntroResponse.kt deleted file mode 100644 index 3389d1846d..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/TopUpIntroResponse.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName -import com.navi.base.model.StyledTextWithIconCode -import com.navi.naviwidgets.models.response.Footer - -data class TopUpIntroResponse( - @SerializedName("greeting") val greeting: StyledTextWithIconCode? = null, - @SerializedName("title") val title: String? = null, - @SerializedName("subtitle") val subtitle: StyledTextWithIconCode? = null, - @SerializedName("stepsTitle") val stepsTitle: String? = null, - @SerializedName("steps") val steps: List? = null, - @SerializedName("footer") val footer: Footer? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/UpcomingEmiDatesResponse.kt b/android/app/src/main/java/com/naviapp/models/response/UpcomingEmiDatesResponse.kt deleted file mode 100644 index 1caf69c3b6..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/UpcomingEmiDatesResponse.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import com.google.gson.annotations.SerializedName - -data class EmiDatesData( - @SerializedName("emiInstallmentsHeader") - val emiInstallmentHeader: List? = null, - @SerializedName("emiInstallmentsContent") - val emiInstallmentContent: EmiInstallmentContentData? = null, - @SerializedName("lastItemContent") val lastItemContent: LastItemContentData? = null, - @SerializedName("noteContent") val noteContent: ContentData? = null, - @SerializedName("paymentNoteContent") val paymentContentData: ContentData? = null -) - -data class EmiInstallmentHeaderData( - @SerializedName("key") val key: String? = null, - @SerializedName("value") val value: String? = null -) - -data class EmiInstallmentContentData( - @SerializedName("installments") val installments: List? = null -) - -open class InstallmentData( - @SerializedName("serialNumber") val serialNumber: Int? = null, - @SerializedName("emi") val emiData: EmiAmountData? = null, - @SerializedName("dueDate") val dueDate: String? = null, - @SerializedName("yearHeader") var year: String? = null -) { - @Transient var itemMargin: Int = 0 -} - -data class LastItemContentData( - @SerializedName("serialTitle") val serialTitle: String? = null, -) : InstallmentData() - -data class ContentData( - @SerializedName("title") val title: String? = null, - @SerializedName("description") val description: String? = null -) - -data class EmiAmountData( - @SerializedName("amount") val amount: String? = null, - @SerializedName("currency") val currency: String? = null, - @SerializedName("symbol") val symbol: String? = null -) diff --git a/android/app/src/main/java/com/naviapp/models/response/UpiInProgressData.kt b/android/app/src/main/java/com/naviapp/models/response/UpiInProgressData.kt deleted file mode 100644 index d042e9c403..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/UpiInProgressData.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import com.navi.common.model.common.Header -import com.naviapp.models.ImportantNote -import kotlinx.parcelize.Parcelize - -@Parcelize -data class UpiProgressContentDetails( - @SerializedName("header") val header: Header? = null, - @SerializedName("content") val upiInProgressData: UpiInProgressData? = null -) : Parcelable - -@Parcelize -data class UpiInProgressData( - @SerializedName("iconCode") val iconCode: String? = null, - @SerializedName("title") val title: String? = null, - @SerializedName("subtitle") val subtitle: String? = null, - @SerializedName("importantNote") val note: ImportantNote? = null -) : Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/VideoKycStatusResponse.kt b/android/app/src/main/java/com/naviapp/models/response/VideoKycStatusResponse.kt deleted file mode 100644 index 22db48e331..0000000000 --- a/android/app/src/main/java/com/naviapp/models/response/VideoKycStatusResponse.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.models.response - -import android.os.Parcelable -import com.google.gson.annotations.SerializedName -import kotlinx.parcelize.Parcelize - -@Parcelize -data class VideoKycStatusResponse(@SerializedName("status") val status: String? = null) : - Parcelable diff --git a/android/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt b/android/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt index 2cc8393429..bc66a5641f 100644 --- a/android/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt +++ b/android/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -14,12 +14,6 @@ import com.navi.naviwidgets.widgets.textdisplay.Margin import com.navi.uitron.model.UiTronResponse import kotlinx.parcelize.Parcelize -data class WidgetGenericResponse( - @SerializedName("headerWidget") val headerWidget: List? = null, - @SerializedName("contentWidget") val contentWidget: List? = null, - @SerializedName("footerWidget") val footerWidget: List? = null -) - @Parcelize open class WidgetConfig( @SerializedName("type", alternate = ["widgetName"]) open val widgetType: String? = null, diff --git a/android/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt b/android/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt index 844d76c672..632965e877 100644 --- a/android/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt +++ b/android/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -58,14 +58,8 @@ import com.navi.naviwidgets.models.response.PaymentSuccessfulResponse import com.navi.payment.paymenthandler.model.PaymentStatusData import com.navi.payment.paymenthandler.model.SyncPaymentResponse import com.naviapp.common.tab.insurance.model.TrialInsuranceDashboardPageResponse -import com.naviapp.crosssell.models.CrossSellResponse 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.InterestCertificateURIDetail -import com.naviapp.dashboard.loanapplicationdetails.models.YearDetails import com.naviapp.forge.model.ScreenDefinition -import com.naviapp.home.dashboard.models.response.ClosedLoansResponse import com.naviapp.home.dashboard.models.response.DashboardContentResponse import com.naviapp.home.dashboard.models.response.DashboardTabsResponse import com.naviapp.home.dashboard.models.response.GenerateQuoteResponse @@ -75,9 +69,6 @@ import com.naviapp.home.model.NotificationScreenDefinition import com.naviapp.home.model.NotificationUpdateStatus import com.naviapp.lending_permission.model.LendingPermissionScreenResponse import com.naviapp.models.ABSettings -import com.naviapp.models.CreditDataResponse -import com.naviapp.models.EMIDateChangeResponse -import com.naviapp.models.EMIUpdatedCalendarResponse import com.naviapp.models.LoginSettings import com.naviapp.models.UserInstalledApp import com.naviapp.models.request.CustomPaymentRequest @@ -92,18 +83,14 @@ import com.naviapp.models.request.PreSignedUrlRequest import com.naviapp.models.request.SaphyraRequestData import com.naviapp.models.request.UserLoginRequest import com.naviapp.models.request.VerifyOtpRequest -import com.naviapp.models.response.ActiveLoanDetailsResponse import com.naviapp.models.response.BranchSDKResponse import com.naviapp.models.response.CreateSessionResponse import com.naviapp.models.response.CustomerSupportOptionsResponse import com.naviapp.models.response.EmailIssueResponse import com.naviapp.models.response.EmailUsResponse -import com.naviapp.models.response.EmiDateChangeDetails -import com.naviapp.models.response.EmiDateChangeSuccessResponse import com.naviapp.models.response.FirebaseRefreshAuthTokenResponse import com.naviapp.models.response.GenerateOtpResponse import com.naviapp.models.response.HomeFeatureResponse -import com.naviapp.models.response.LoanBasicDetailsResponse import com.naviapp.models.response.LoginOtpVerifyResponse import com.naviapp.models.response.LoginResponse import com.naviapp.models.response.NotificationSettingsContent @@ -116,7 +103,6 @@ import com.naviapp.models.response.PrePaymentReviewResponse import com.naviapp.models.response.PreSignData import com.naviapp.models.response.PreSignedUrlListResponse import com.naviapp.models.response.SendEmailResponse -import com.naviapp.models.response.SubmitSurveyResponse import com.naviapp.models.response.SuccessResponse import com.naviapp.part_prepayment.models.PartPrePaymentRequest import com.naviapp.payment.models.DisbursedTransactionsResponse @@ -197,11 +183,6 @@ interface RetrofitService { @Body deviceDetail: DeviceDetail ): Response> - @POST("/survey/response") - suspend fun submitNpsDetails( - @Body data: NetPromoterScoreRequest - ): Response> - @POST("/repayments/initiate-repayment") suspend fun initiatePayment( @Body data: com.navi.paymentclients.model.InitiatePaymentRequest @@ -224,10 +205,6 @@ interface RetrofitService { @Query("subProduct") subProduct: String? = null ): Response>> - @GET("/customer-service/customers/me/active-application") - suspend fun fetchLoanBasicDetails(): Response> - - // Logout @POST("/auth/v1/logout") suspend fun logout(): Response> @GET("/login-settings") @@ -278,9 +255,6 @@ interface RetrofitService { @Query("moduleName") moduleName: String?, ): Response> - @GET("/customer-service/customers/me/credit-report") - suspend fun fetchCreditData(): Response> - @GET("/kruz/proxy/config") suspend fun fetchMqttConfig( @Header("X-Target") channel: String @@ -322,9 +296,6 @@ interface RetrofitService { @Query("pageSize") pageSize: Int ): Response> - @GET("/home-loan/customers/me/active-housing-loan") - suspend fun fetchActiveLoanDetails(): Response> - @GET("/support-mail") suspend fun fetchCustomerSupportEmailDetails(): Response> @@ -345,29 +316,12 @@ interface RetrofitService { @Body notificationContent: NotificationSettingsContent ): Response> - @POST("/loan-accounts/interest-certificate") - suspend fun fetchInterestCertificateDownloadURI( - @Body yearDetails: YearDetails - ): Response> - @GET("/fetch-customer-support-options") suspend fun fetchCustomerSupportOptions( @Header("screenName") screenName: String, @Query("product") product: String? = null ): Response> - @GET("/customer-service/customers/me/loan-accounts/{accountNumber}/emi-details") - suspend fun fetchEmi( - @Path("accountNumber") loanAccountId: String, - @Query("page") pageNumber: Int, - @Query("size") pageSize: Int - ): Response> - - @GET("/customer-service/customers/me/{accountNumber}/list-of-documents") - suspend fun fetchDocuments( - @Path("accountNumber") loanAccountId: String, - ): Response>> - @GET("/support-mail/{product}") suspend fun fetchCustomerSupportEmailIssues( @Path("product") product: String @@ -389,28 +343,6 @@ interface RetrofitService { @Query("overlayScreenType") overlayScreenType: String? = null ): Response> - @GET("/customer-service/loan-accounts/{loanAccountNumber}/fetch-emi-date-change-options") - suspend fun fetchEMIDateChangeResponse( - @Path("loanAccountNumber") loanAccountNumber: String, - @Query("animation") animation: Boolean? - ): Response> - - @GET("/customer-service/loan-accounts/{loanAccountNumber}/emi-calendar") - suspend fun fetchEMIUpdatedCalendarResponse( - @Path("loanAccountNumber") referenceId: String, - @Query("date") date: String - ): Response> - - @GET("/loan-accounts") - suspend fun fetchClosedLoans( - @Query("status") status: String - ): Response> - - @POST("/loan-accounts/emi-date-change") - suspend fun fetchEMiDateChangeStatus( - @Body emiDateChangeDetails: EmiDateChangeDetails - ): Response> - @GET("/customer-device/customer/me/pre-signed-url") suspend fun getPreSignedUrlList( @Query("dataIngestionTypes") dataIngestionTypes: String @@ -460,12 +392,6 @@ interface RetrofitService { @Header("X-Target") header: String ): Response> - @GET("end-screen-widgets/{screenName}") - suspend fun fetchCrossSellDetails( - @Path("screenName") screenName: String, - @Query("loanApplicationId") loanApplicationId: String, - ): Response> - @GET("/litmus-proxy/v1/proxy/experiment") suspend fun fetchABExperiment( @Query("name") name: String, @@ -556,11 +482,6 @@ interface RetrofitService { @Path("type") type: String ): Response> - @GET("/loan-accounts/{loanAccountNumber}/change-bank-details-pl") - suspend fun fetchBankAccountChangeDetails( - @Path("loanAccountNumber") loanAccountNumber: String? - ): Response> - @GET("/csat/{featureName}") suspend fun fetchCsatResponse( @Path("featureName") featureName: String?, diff --git a/android/app/src/main/java/com/naviapp/nps/repositories/NpsRepository.kt b/android/app/src/main/java/com/naviapp/nps/repositories/NpsRepository.kt deleted file mode 100644 index 39c2bb28fd..0000000000 --- a/android/app/src/main/java/com/naviapp/nps/repositories/NpsRepository.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.nps.repositories - -import com.naviapp.models.request.NetPromoterScoreRequest -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.utils.superAppRetrofitService - -class NpsRepository : ResponseCallback() { - suspend fun submitNpsDetails(netPromoterScoreRequest: NetPromoterScoreRequest) = - apiResponseCallback(superAppRetrofitService().submitNpsDetails(netPromoterScoreRequest)) -} diff --git a/android/app/src/main/java/com/naviapp/nps/viewmodel/NpsVM.kt b/android/app/src/main/java/com/naviapp/nps/viewmodel/NpsVM.kt deleted file mode 100644 index 436bab520f..0000000000 --- a/android/app/src/main/java/com/naviapp/nps/viewmodel/NpsVM.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.nps.viewmodel - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.navi.common.viewmodel.BaseVM -import com.naviapp.models.request.NetPromoterScoreRequest -import com.naviapp.models.response.SubmitSurveyResponse -import com.naviapp.nps.repositories.NpsRepository -import kotlinx.coroutines.launch - -class NpsVM(private val repository: NpsRepository = NpsRepository()) : BaseVM() { - private val _ratingSubmitResponse = MutableLiveData() - val ratingSubmitResponse: LiveData - get() = _ratingSubmitResponse - - fun submitNpsDetails(netPromoterScoreRequest: NetPromoterScoreRequest) { - coroutineScope.launch { - val response = repository.submitNpsDetails(netPromoterScoreRequest) - if (response.error == null && response.errors.isNullOrEmpty()) { - _ratingSubmitResponse.value = response.data - } - } - } -} diff --git a/android/app/src/main/java/com/naviapp/part_prepayment/FragmentMapper.kt b/android/app/src/main/java/com/naviapp/part_prepayment/FragmentMapper.kt index 4743ff128c..c81d975e20 100644 --- a/android/app/src/main/java/com/naviapp/part_prepayment/FragmentMapper.kt +++ b/android/app/src/main/java/com/naviapp/part_prepayment/FragmentMapper.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2022-2024 by Navi Technologies Limited + * * Copyright © 2022-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -8,19 +8,12 @@ package com.naviapp.part_prepayment import androidx.fragment.app.Fragment -import com.naviapp.analytics.utils.NaviAnalytics.Companion.DOCUMENT_LIST import com.naviapp.custom_payments.fragments.CustomPaymentCalendarReviewFragment import com.naviapp.custom_payments.fragments.ForecloseLoanFragment import com.naviapp.custom_payments.fragments.LoanRepaymentOptionsFragment import com.naviapp.custom_payments.fragments.RepaymentTypeFragment -import com.naviapp.dashboard.loanapplicationdetails.bank_account_change.fragments.BankChangeDetailsFragment -import com.naviapp.dashboard.loanapplicationdetails.documentlist.DocumentListFragment -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.fragments.EMIDateChangeFragment -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.fragments.EMIUpdatedCalendarFragment -import com.naviapp.models.SubPageStatusType.BANK_CHANGE_DETAILS import com.naviapp.models.SubPageStatusType.CUSTOM_PAYMENT_CALENDAR_REVIEW import com.naviapp.models.SubPageStatusType.CUSTOM_PAYMENT_TYPE -import com.naviapp.models.SubPageStatusType.EMI_DATE_CHANGE import com.naviapp.models.SubPageStatusType.FEATURE_COMPLETION_SCREEN import com.naviapp.models.SubPageStatusType.FORECLOSE_LOAN import com.naviapp.models.SubPageStatusType.PART_PRE_PAYMENT_CALENDAR_REVIEW @@ -30,7 +23,6 @@ import com.naviapp.models.SubPageStatusType.PAYMENT_BEHAVIOUR import com.naviapp.models.SubPageStatusType.REPAYMENT_OPTIONS import com.naviapp.models.SubPageStatusType.SUCCESS_FRAGMENT import com.naviapp.models.SubPageStatusType.SUCCESS_FRAGMENT_V2 -import com.naviapp.models.SubPageStatusType.UPDATED_EMI_CALENDAR import com.naviapp.part_prepayment.fragments.PartPrePaymentCustomAmountFragment import com.naviapp.part_prepayment.fragments.PartPrePaymentEmiCalendarReviewFragment import com.naviapp.part_prepayment.fragments.PartPrePaymentTypeFragment @@ -50,13 +42,9 @@ class FragmentMapper @Inject constructor() { CUSTOM_PAYMENT_TYPE -> RepaymentTypeFragment() CUSTOM_PAYMENT_CALENDAR_REVIEW -> CustomPaymentCalendarReviewFragment() FORECLOSE_LOAN -> ForecloseLoanFragment() - DOCUMENT_LIST -> DocumentListFragment() SUCCESS_FRAGMENT -> FeatureCompletionFragment() PAYMENT_BEHAVIOUR -> PaymentBehaviourFragment() - EMI_DATE_CHANGE -> EMIDateChangeFragment() - BANK_CHANGE_DETAILS -> BankChangeDetailsFragment() FEATURE_COMPLETION_SCREEN -> FeatureCompletionFragment() - UPDATED_EMI_CALENDAR -> EMIUpdatedCalendarFragment() SUCCESS_FRAGMENT_V2 -> PaymentSuccessFragment() else -> null } @@ -71,13 +59,9 @@ class FragmentMapper @Inject constructor() { CUSTOM_PAYMENT_TYPE -> RepaymentTypeFragment.TAG CUSTOM_PAYMENT_CALENDAR_REVIEW -> CustomPaymentCalendarReviewFragment.TAG FORECLOSE_LOAN -> ForecloseLoanFragment.FORECLOSE_LOAN - DOCUMENT_LIST -> DocumentListFragment.TAG SUCCESS_FRAGMENT -> FeatureCompletionFragment.TAG PAYMENT_BEHAVIOUR -> PaymentBehaviourFragment.TAG - EMI_DATE_CHANGE -> EMIDateChangeFragment.TAG - BANK_CHANGE_DETAILS -> BankChangeDetailsFragment.TAG FEATURE_COMPLETION_SCREEN -> FeatureCompletionFragment.TAG - UPDATED_EMI_CALENDAR -> EMIUpdatedCalendarFragment.TAG SUCCESS_FRAGMENT_V2 -> PaymentSuccessFragment.TAG else -> "" } diff --git a/android/app/src/main/java/com/naviapp/permission/activities/PermissionActivity.kt b/android/app/src/main/java/com/naviapp/permission/activities/PermissionActivity.kt index 140074e856..38120a0514 100644 --- a/android/app/src/main/java/com/naviapp/permission/activities/PermissionActivity.kt +++ b/android/app/src/main/java/com/naviapp/permission/activities/PermissionActivity.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -29,8 +29,10 @@ import com.navi.common.managers.NaviLocationManager import com.navi.common.managers.PermissionsManager import com.navi.common.model.ModuleNameV2 import com.navi.common.ui.activity.BaseActivity -import com.navi.common.utils.* +import com.navi.common.utils.ApiPollScheduler import com.navi.common.utils.Constants.OFFER_IMPROVEMENT_CHANNEL_TYPE +import com.navi.common.utils.observeNonNull +import com.navi.common.utils.observeNullable import com.navi.design.R as DesignR import com.naviapp.BuildConfig import com.naviapp.R @@ -39,7 +41,6 @@ import com.naviapp.common.listeners.FooterInteractionListener import com.naviapp.common.navigator.NaviDeepLinkNavigator import com.naviapp.common.navigator.ScreenNavigator import com.naviapp.databinding.ActivityPermissionBinding -import com.naviapp.devicedata.finoramic.FinoramicHelper import com.naviapp.models.FeedbackPageType import com.naviapp.models.RedirectPageStatus import com.naviapp.network.ApiErrorTagType @@ -48,24 +49,23 @@ import com.naviapp.permission.utils.getAlternatePermissionTiles import com.naviapp.permission.utils.hasPermissions import com.naviapp.permission.viewmodel.PermissionViewModel import com.naviapp.registration.viewmodel.RegistrationVM -import com.naviapp.utils.* import com.naviapp.utils.Constants import com.naviapp.utils.Constants.REDIRECT_PAGE_STATUS +import com.naviapp.utils.IntentConstants class PermissionActivity : BaseActivity(), FooterInteractionListener, View.OnClickListener { private lateinit var binding: ActivityPermissionBinding private val permissionAdapter by lazy { PermissionAdapter() } private val permissionsManager by lazy { PermissionsManager(this) } private val permissionTiles by lazy { getAlternatePermissionTiles() } - private val registrationVM by lazy { ViewModelProvider(this).get(RegistrationVM::class.java) } + private val registrationVM by lazy { ViewModelProvider(this)[RegistrationVM::class.java] } private var permissionRequested: Boolean = false private val permissionViewModel by lazy { - ViewModelProvider(this).get(PermissionViewModel::class.java) + ViewModelProvider(this)[PermissionViewModel::class.java] } private var redirectPageStatus: RedirectPageStatus? = null private val naviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Permission() private val naviLocationManager = NaviLocationManager() - private var finoramicHelper: FinoramicHelper? = null private var apiPollScheduler: ApiPollScheduler? = null private val onPollingEnd = { handleTimeOutError(ApiErrorTagType.LOCATION_UPLOAD) } override val screenName: String @@ -176,13 +176,6 @@ class PermissionActivity : BaseActivity(), FooterInteractionListener, View.OnCli } binding.headerView.hideHelpIcon() binding.headerView.setOnClickListeners(this) - val configData = getProviderConfig() - configData?.finoramic?.let { - if (it.enabled.orFalse()) { - finoramicHelper = FinoramicHelper() - finoramicHelper?.init(it, applicationContext) - } - } } private fun openNativePermissionPage() { @@ -317,18 +310,9 @@ class PermissionActivity : BaseActivity(), FooterInteractionListener, View.OnCli private fun onGrantPermissions() { showLoader() - sendSMSDataToFinoramic() sendLocation() } - private fun sendSMSDataToFinoramic() { - try { - finoramicHelper?.sendSms(applicationContext) - } catch (e: Exception) { - e.log() - } - } - private fun sendLocation() { PreferenceManager.setBooleanPreference(NaviLocationManager.IS_HARD_LOCATION_UPDATE, true) naviLocationManager.postLocationData(this) diff --git a/android/app/src/main/java/com/naviapp/permission/activities/PermissionV2Activity.kt b/android/app/src/main/java/com/naviapp/permission/activities/PermissionV2Activity.kt index 14b2ddf208..565b3fcd64 100644 --- a/android/app/src/main/java/com/naviapp/permission/activities/PermissionV2Activity.kt +++ b/android/app/src/main/java/com/naviapp/permission/activities/PermissionV2Activity.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2022-2024 by Navi Technologies Limited + * * Copyright © 2022-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -40,7 +40,6 @@ import com.navi.common.ui.activity.BaseActivity import com.navi.common.utils.ApiPollScheduler import com.navi.common.utils.EMPTY import com.navi.common.utils.TemporaryStorageHelper -import com.navi.common.utils.log import com.navi.common.utils.observeNonNull import com.navi.common.utils.observeNullable import com.navi.common.utils.setCornerRadius @@ -52,7 +51,6 @@ import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.customview.NaviHeaderView import com.naviapp.common.navigator.NaviDeepLinkNavigator import com.naviapp.databinding.ActivityPermissionV2Binding -import com.naviapp.devicedata.finoramic.FinoramicHelper import com.naviapp.manager.RetryableUserDataUploadWorker import com.naviapp.manager.usecase.UserDataUploadWorkerUseCase import com.naviapp.models.FeedbackPageType @@ -86,7 +84,6 @@ class PermissionV2Activity : NaviAnalytics.naviAnalytics.Permission(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 @@ -159,12 +156,6 @@ class PermissionV2Activity : description = permissionTile.description } } - permissionDetailsResponse.content?.finoramicData?.let { finoramicData -> - if (finoramicData.enabled.orFalse()) { - finoramicHelper = FinoramicHelper() - finoramicHelper?.init(finoramicData, applicationContext) - } - } } if (permissionsManager.hasPermissions()) { @@ -453,7 +444,6 @@ class PermissionV2Activity : private fun onGrantPermissions() { showLoader() uploadUserData() - sendSMSDataToFinoramic() sendLocation() } @@ -463,7 +453,7 @@ class PermissionV2Activity : if (isReadSmsPermissionGranted) { userDataAnalyticsTracker.onDataPermissionAvailable( screenName = screenName, - isReadSmsPermissionGranted = isReadSmsPermissionGranted + isReadSmsPermissionGranted = true ) val manager = @@ -488,14 +478,6 @@ class PermissionV2Activity : } } - private fun sendSMSDataToFinoramic() { - try { - finoramicHelper?.sendSms(applicationContext) - } catch (e: Exception) { - e.log() - } - } - private fun sendLocation() { PreferenceManager.setBooleanPreference(NaviLocationManager.IS_HARD_LOCATION_UPDATE, true) naviLocationManager.postLocationData(this) diff --git a/android/app/src/main/java/com/naviapp/utils/AnimationUtils.kt b/android/app/src/main/java/com/naviapp/utils/AnimationUtils.kt index 793a2a32be..441590f781 100644 --- a/android/app/src/main/java/com/naviapp/utils/AnimationUtils.kt +++ b/android/app/src/main/java/com/naviapp/utils/AnimationUtils.kt @@ -1,17 +1,14 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ package com.naviapp.utils -import android.animation.ValueAnimator import android.view.View import android.view.animation.AnimationUtils -import android.view.animation.LinearInterpolator -import androidx.core.animation.doOnEnd import com.naviapp.R fun slideInTop(view: View?, duration: Long? = null) { @@ -21,17 +18,3 @@ fun slideInTop(view: View?, duration: Long? = null) { view.startAnimation(animation) view.visibility = View.VISIBLE } - -fun View.shakeView() { - val initialX = x - ValueAnimator.ofFloat(25F, -25F, -25F, 25F, 0F) - .apply { - duration = resources.getInteger(R.integer.anim_dur_small).toLong() - repeatMode = ValueAnimator.REVERSE - repeatCount = 1 - interpolator = LinearInterpolator() - addUpdateListener { x = initialX + (it.animatedValue as Float) } - doOnEnd { x = initialX } - } - .start() -} diff --git a/android/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt b/android/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt index 171f4cad2e..0948e93fdb 100644 --- a/android/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt +++ b/android/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt @@ -1,15 +1,13 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ package com.naviapp.utils -import android.annotation.SuppressLint import android.graphics.Color -import android.graphics.PorterDuff import android.os.CountDownTimer import android.view.LayoutInflater import android.view.View @@ -18,104 +16,44 @@ import android.widget.ImageView import android.widget.LinearLayout import android.widget.RadioButton import android.widget.TextView -import androidx.cardview.widget.CardView import androidx.core.content.ContextCompat import androidx.core.view.isVisible import androidx.core.widget.TextViewCompat import androidx.databinding.BindingAdapter import androidx.databinding.DataBindingUtil -import androidx.recyclerview.widget.RecyclerView import com.navi.base.model.CtaData 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.base.utils.orZero -import com.navi.common.customview.ActionButtonV2View -import com.navi.common.customview.ActionButtonView -import com.navi.common.decorator.TopMarginItemDecoration import com.navi.common.utils.getTimerData -import com.navi.common.utils.makePartOfTextBold import com.navi.design.textview.NaviTextView import com.navi.design.textview.model.TextWithStyle import com.navi.design.utils.dpToPxInInt import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.isValidHexColor import com.navi.design.utils.parseColorSafe import com.navi.design.utils.setSpannableString import com.navi.insurance.util.log import com.navi.naviwidgets.extensions.setImageFieldData import com.navi.naviwidgets.extensions.setTextFieldData -import com.navi.naviwidgets.models.response.CardProperties -import com.navi.naviwidgets.models.response.Footer import com.navi.naviwidgets.models.response.GenericBottomSheetLineData import com.navi.naviwidgets.models.response.GenericBottomSheetLineDataV2 import com.navi.naviwidgets.models.response.GenericWidgetTimerConfig -import com.navi.naviwidgets.utils.NaviWidgetIconUtils import com.navi.naviwidgets.utils.formatLastSubStringStyle -import com.navi.naviwidgets.utils.setCardProperties import com.navi.naviwidgets.utils.setMargin -import com.navi.naviwidgets.widgets.textdisplay.Margin import com.naviapp.R -import com.naviapp.common.adapter.CouponAdapter -import com.naviapp.common.adapter.IconTextAdapter -import com.naviapp.common.adapter.IconTextStyle import com.naviapp.common.customview.BoxInputGroup import com.naviapp.common.customview.CommonHeader -import com.naviapp.common.customview.CouponListener -import com.naviapp.common.customview.DescExpandableCardView -import com.naviapp.common.customview.FooterView -import com.naviapp.common.customview.FooterViewV2 -import com.naviapp.common.customview.FooterViewWithTitleDescription import com.naviapp.common.customview.LabelWithSpinnerView -import com.naviapp.common.customview.NoteView import com.naviapp.common.customview.RadioRecyclerView -import com.naviapp.common.customview.TimerViewListener -import com.naviapp.common.listeners.BindingDataListener -import com.naviapp.common.listeners.FooterInteractionListener -import com.naviapp.common.listeners.FooterWithDescriptionListener -import com.naviapp.common.listeners.Navigator -import com.naviapp.common.model.StyledKeyValue -import com.naviapp.dashboard.loanapplicationdetails.emicalendar.models.DescExpandableItemBinder -import com.naviapp.databinding.DividerViewBinding -import com.naviapp.databinding.EmiSplitUpLayoutBinding -import com.naviapp.databinding.IconWithTitleLineItemBinding import com.naviapp.databinding.NestedRowWithKeyValueBinding import com.naviapp.databinding.RowWithKeyValueBinding -import com.naviapp.databinding.StyledKeyValueViewBinding -import com.naviapp.models.ActionCardWithPaddingBody -import com.naviapp.models.CustomClickConfig -import com.naviapp.models.EMISplitUp -import com.naviapp.models.FooterWithTitleDescription import com.naviapp.models.QuestionnaireOption -import com.naviapp.models.response.Coupon -import com.naviapp.models.response.HomeLoanUploadNoteDetails -import com.naviapp.models.response.ItemWithTextAndIcon -import com.naviapp.models.response.OptionItem import com.naviapp.models.response.RadioButtonResponse object BindingAdapterUtil { - @BindingAdapter("couponList", "couponListener", "timerViewListener") - @JvmStatic - fun populateCouponRecyclerView( - recyclerView: RecyclerView, - couponList: List?, - couponListener: CouponListener?, - timerViewListener: TimerViewListener? - ) { - if (couponList.isNullOrEmpty() || couponListener == null || timerViewListener == null) - return - if (recyclerView.adapter == null) { - recyclerView.adapter = CouponAdapter(couponList, couponListener, timerViewListener) - recyclerView.addItemDecoration( - TopMarginItemDecoration(recyclerView.resources.getDimension(R.dimen.layout_dp_20)) - ) - } else { - (recyclerView.adapter as? CouponAdapter)?.updateData(couponList) - } - } - @BindingAdapter("otpSize", "requestFocus", "onClickListener", requireAll = false) @JvmStatic fun otpSizeBoxInputGroup( @@ -142,68 +80,6 @@ object BindingAdapterUtil { } } - @BindingAdapter("setBoldText") - @JvmStatic - fun setBoldText(textView: TextView, styledTextWithIconCode: StyledTextWithIconCode?) { - styledTextWithIconCode?.text?.let { text -> - styledTextWithIconCode.boldText?.let { boldText -> - textView.makePartOfTextBold(text, boldText) - } ?: run { textView.text = text } - } - } - - @BindingAdapter( - "populateTextAndIconList", - "topMargin", - "iconTextStyle", - "notes", - requireAll = false - ) - @JvmStatic - fun populateTextAndIconList( - recyclerView: RecyclerView, - itemWithTextAndIconList: List?, - topMargin: Float = - recyclerView.resources.getDimension( - R.dimen.layout_dp_24, - ), - iconTextStyle: IconTextStyle? = null, - notes: HomeLoanUploadNoteDetails? = null - ) { - if (itemWithTextAndIconList.isNullOrEmpty()) return - if (recyclerView.adapter == null) { - recyclerView.adapter = - IconTextAdapter( - itemWithTextAndIconList, - iconTextStyle, - null, - notes?.listType, - notes?.startWith - ) - recyclerView.addItemDecoration(TopMarginItemDecoration(topMargin)) - } else { - (recyclerView.adapter as? IconTextAdapter)?.setData(itemWithTextAndIconList) - } - } - - @BindingAdapter("setFooterData", "setFooterInteractionListener") - @JvmStatic - fun setFooterProperties( - footerView: FooterView, - footer: Footer?, - footerInteractionListener: FooterInteractionListener? - ) { - footer?.let { footerTemp -> - footerInteractionListener?.let { footerInteractionListenerTemp -> - footerView.setProperties( - footerTemp.backCta, - footerTemp.nextCta, - footerInteractionListenerTemp - ) - } - } - } - @BindingAdapter("setImageFromIconCode") @JvmStatic fun setImageFromIconCode(imageView: ImageView, iconCode: String?) { @@ -250,15 +126,6 @@ object BindingAdapterUtil { ) } - @BindingAdapter("setEmiInstallmentData") - @JvmStatic - fun setEmiInstallmentData( - descExpandableCardView: DescExpandableCardView, - descExpandableItemBinder: DescExpandableItemBinder? - ) { - descExpandableItemBinder?.let { descExpandableCardView.setData(it) } - } - @BindingAdapter("setOnBackClickListener", "setTitle") @JvmStatic fun setCommonHeaderProperties( @@ -276,12 +143,6 @@ object BindingAdapterUtil { hexColorCode?.let { textView.setTextColor(Color.parseColor(it)) } } - @BindingAdapter("setNoteText") - @JvmStatic - fun setNoteText(noteView: NoteView, text: String?) { - text?.let { noteView.setProperties(it) } - } - @BindingAdapter("setRadioDataList", "setTextSize") @JvmStatic fun setRadioDataList( @@ -483,263 +344,4 @@ object BindingAdapterUtil { textView.text = text } ?: run { textView.visibility = View.GONE } } - - @BindingAdapter("setHeaderAmountItems") - @JvmStatic - fun setHeaderAmountItems(linearLayout: LinearLayout, headerAmountList: ArrayList?) { - linearLayout.removeAllViews() - if (headerAmountList != null && headerAmountList.size > 1) { - val dividerViewBinding = - EmiSplitUpLayoutBinding.inflate( - LayoutInflater.from(linearLayout.context), - null, - false - ) - dividerViewBinding.emiSplitBinder = null - linearLayout.addView(dividerViewBinding.root) - } - headerAmountList?.forEach { - val emiSplitUpView = - LayoutInflater.from(linearLayout.context) - .inflate(R.layout.emi_split_up_layout, linearLayout, false) - val emiSplitUpLayoutBinding: EmiSplitUpLayoutBinding? = - DataBindingUtil.bind(emiSplitUpView) - emiSplitUpLayoutBinding?.emiSplitBinder = it - linearLayout.addView(emiSplitUpLayoutBinding?.root) - } - } - - @SuppressLint("UseCompatLoadingForColorStateLists", "ResourceType") - @BindingAdapter("setBackgroundTintColorString") - @JvmStatic - fun setBackgroundTintColorString(view: View, colorString: String?) { - colorString?.let { - if (isValidHexColor(colorString)) { - try { - view.background.setColorFilter( - Color.parseColor(colorString), - PorterDuff.Mode.SRC_ATOP - ) - } catch (e: Exception) { - e.log() - } - } - } - } - - @BindingAdapter("setCtaTitle") - @JvmStatic - fun setCtaTitle(actionButtonView: ActionButtonView, ctaData: CtaData?) { - ctaData?.let { actionButtonView.setCtaTitle(it) } - } - - @BindingAdapter("setCtaTitle") - @JvmStatic - fun setCtaTitle(actionButtonView: ActionButtonV2View, ctaData: CtaData?) { - ctaData?.let { actionButtonView.setCtaTitle(it) } - } - - @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( - "setFooterTitleDescriptionProperties", - "setFooterDescriptionListener", - requireAll = false - ) - @JvmStatic - fun setFooterTitleDescriptionProperties( - footerViewWithTitleDescription: FooterViewWithTitleDescription, - footerWithTitleDescription: FooterWithTitleDescription?, - footerWithDescriptionListener: FooterWithDescriptionListener? - ) { - footerViewWithTitleDescription.setProperties( - footerWithTitleDescription, - footerWithDescriptionListener - ) - } - - @BindingAdapter("setImageUrl") - @JvmStatic - fun loadImage(imageView: ImageView, imageUrl: String?) { - imageUrl?.let { - loadUrlIntoImageView( - context = imageView.context, - url = imageUrl, - view = imageView, - isCacheNeeded = true - ) - } - } - - @BindingAdapter( - "setFooterViewV2", - "setFooterListener", - "setCustomClickConfig", - requireAll = false - ) - @JvmStatic - fun setFooterViewV2( - footerViewV2: FooterViewV2, - footer: Footer?, - footerListener: FooterViewV2.FooterInteractionListener?, - customClickConfig: CustomClickConfig? - ) { - footerViewV2.setProperties(footer, footerListener, customClickConfig) - } - - @BindingAdapter("setBackgroundColorFromString") - @JvmStatic - fun setBackgroundColorFromString(view: View, colorString: String?) { - view.setBackgroundColorFromString(colorString) - } - - @BindingAdapter("setIconWithTitleLineItems", "setMargin", "setTextStyle", requireAll = false) - @JvmStatic - fun setIconWithTitleLineItems( - linearLayout: LinearLayout, - optionItems: List?, - margin: Margin?, - style: Int? - ) { - linearLayout.removeAllViews() - optionItems?.let { - it.forEachIndexed { index, optionLineItem -> - val styledKeyValueView = - LayoutInflater.from(linearLayout.context) - .inflate(R.layout.icon_with_title_line_item, linearLayout, false) - styledKeyValueView.setMargin(margin) - val viewIconWithTitleItemBinding: IconWithTitleLineItemBinding? = - DataBindingUtil.bind(styledKeyValueView) - viewIconWithTitleItemBinding?.let { lineItemBinding -> - lineItemBinding.title.text = optionLineItem.title - optionLineItem.iconUrl?.let { iconUrl -> - IconUtils.updateIcon(iconUrl, lineItemBinding.iconImv) - } - style?.let { style -> - TextViewCompat.setTextAppearance(lineItemBinding.title, style) - } - } - if (index > 0) { - val lp = - viewIconWithTitleItemBinding?.root?.layoutParams - as? LinearLayout.LayoutParams - lp?.topMargin = - linearLayout.context.resources.getDimension(R.dimen.layout_dp_12).toInt() - viewIconWithTitleItemBinding?.root?.layoutParams = lp - } - linearLayout.addView(viewIconWithTitleItemBinding?.root) - } - } - } - - @BindingAdapter("setCardStyle") - @JvmStatic - fun setCardStyle(cardView: CardView, actionCardWithPaddingBody: ActionCardWithPaddingBody?) { - actionCardWithPaddingBody?.let { - cardView.apply { - setCardProperties( - CardProperties( - backgroundColor = it.bgColor, - borderRadius = it.radius, - elevation = it.elevation - ) - ) - - it.padding?.let { - setContentPadding( - dpToPxInInt(it.startDp.toInt()), - dpToPxInInt(it.topDp.toInt()), - dpToPxInInt(it.endDp.toInt()), - dpToPxInInt(it.bottomDp.toInt()) - ) - } - } - } - } } diff --git a/android/app/src/main/java/com/naviapp/utils/Constants.kt b/android/app/src/main/java/com/naviapp/utils/Constants.kt index 28fcf8f566..144f4d7fcf 100644 --- a/android/app/src/main/java/com/naviapp/utils/Constants.kt +++ b/android/app/src/main/java/com/naviapp/utils/Constants.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -10,26 +10,19 @@ package com.naviapp.utils import androidx.compose.ui.unit.dp object Constants { - const val EMPTY_LOAN_APPLICATION_ID = "EMPTY_LOAN_APPLICATION_ID" const val SECONDS_PER_MINUTE = 60 const val MILLISECONDS_PER_SECOND = 1000 const val OTP_COUNTDOWN_IN_SECOND = 30 const val EMPTY = "" - const val HASH = "#" const val PACKAGE = "package:" const val DATA = "data" const val VALID_PHONE_NUMBER_LENGTH = 10 - const val IFSC_CODE_LENGTH = 11 - const val MIN_BANK_ACCOUNT_NUMBER_LENGTH = 6 const val API_POLL_REPEAT_PERIOD_SECONDS = 10L const val API_POLL_RETRY_COUNT = 10 const val FCM_UPDATE_PERIOD = 24 * 60 * 60 * 1000 // 24 hrs in milli seconds const val INR = "INR" const val API_CALL_MULTI_CLICK_THRESOLD_DUR = 1000 // in millisecond - const val BANK_NAME_SELECTED = "BANK_NAME_SELECTED" const val BANK_ACCOUNT_NUMBER = "BANK_ACCOUNT_NUMBER" - const val SUBMIT_BANK_DETAILS = "SUBMIT_BANK_DETAILS" - const val BANK_IFSC = "BANK_IFSC" const val REDIRECT_STATUS = "REDIRECT_STATUS" const val SUB_REDIRECT = "SUB_REDIRECT" const val REDIRECT_PAGE_STATUS = "REDIRECT_PAGE_STATUS" @@ -45,25 +38,17 @@ object Constants { const val PERSONAL_LOAN = "personal" const val MESSAGE_ID = "messageId" const val DEEPLINK = "deeplink" - const val PERSONAL_LOAN_APPLICATION_ID = "loanApplicationId" - const val LOAN_APPLICATION_ID = "loanApplicationId" - const val SETUP_AUTO_DEBIT = "SETUP_AUTO_DEBIT" const val WEB_URL = "webUrl" const val REPEAT_LOAN_TYPE = "repeat" const val WIDGET_ID = "WIDGET_ID" - const val IS_SOFT_REJECT = "softReject" const val DATE_FORMAT = "dd/MM/yyyy" const val DAY_OF_MONTH_FORMAT = "d" const val MONTH_OF_YEAR_FORMAT = "MMMM" const val YEAR_FORMAT = "yyyy" const val INPUT_TEXT_MAX_LENGTH = 50 const val TYPE_PERSONAL_LOAN = "PERSONAL_LOAN" - const val HOME_LOAN_TITLE = "Home Loan" - const val IS_COMING_AFTER_CIBIL_FAILURE = "is_coming_after_cibil_failure" const val IS_COMING_FROM_INREVIEW_PAGE = "is_coming_from_inreview_page" - const val IS_FULL_SCREEN_VIEW = "is_full_screen_view" const val PREVIOUS_SCREEN = "PREVIOUS_SCREEN" - const val DISBURSED = "Disbursed" const val LOAN_CLOSED = "Loan_Closed" const val SUCCESS = "Success" const val DATE_FORMAT_MONTH_YEAR = "MM/yyyy" @@ -74,66 +59,40 @@ object Constants { const val SANDBOX = "sandbox" const val ZERO = "0" const val LOAN_TYPE = "LOAN_TYPE" - const val JOURNEY_TYPE = "JOURNEY_TYPE" const val FLOW_TYPE = "FLOW_TYPE" - const val FLOW_TYPE_SMALL = "flowType" const val AMC = "amc" const val KYC = "kyc" const val LEGAL_DOC_TYPE_TNC = "tnc" const val LEGAL_DOC_TYPE_PRIVACY_POLICY = "privacy-policy" - const val MANDATE_TYPE = "MANDATE_TYPE" - const val EMI_DATE_CHANGE = "EMI_DATE_CHANGE" const val DIVIDER = "/" - const val FIVE_MINUTES_TO_SEC = (300 * MILLISECONDS_PER_SECOND).toLong() const val URL = "url" const val CALL_ENABLED = "CALL_ENABLED" const val RETRY_TIME_IN_SECS = "RETRY_TIME_IN_SECS" const val ADDITIONAL_DATA_NEEDED = "additional_data_needed" const val IS_PUBLIC_PAGE_V2 = "is_public_page_v2" - const val OFFER = "offer" const val PHONE_NUMBER = "PHONE_NUMBER" const val ERROR = "Error" - const val RE_ENACH = "RE_ENACH" const val DEFAULT_RES_ID = -1 const val CO_APPLICANT_RETRY_TIMER_CACHE_DATA = "CO_APPLICANT_RETRY_TIMER_CACHE_DATA" const val KEY_DASHBOARD_TAB_DATA = "KEY_DASHBOARD_TAB_DATA" - const val LOAN_ACCOUNT_NUMBER_DATA = "LOAN_ACCOUNT_NUMBER_DATA" const val ACTION = "action" const val LOAN_ACCOUNT_NUMBER = "loanAccountNumber" - const val KEY_CLOSED_LOAN_TAB_DATA = "KEY_CLOSED_LOAN_TAB_DATA" const val KEY_REFERENCE_ID = "referenceId" const val LOCATION = "LOCATION" const val WHATSAPP_URI = "https://api.whatsapp.com/send?phone=" const val WHATSAPP_URI_TEXT = "&text=" const val UTF_8 = "UTF-8" - const val communicationClient = "CLIENT" - const val communicationLending = "LENDING" - const val communicationStatusSent = "SENT" - const val communicationStatusPending = "PENDING" const val INDIAN_COUNTRY_CODE = "+91" - const val KEY_CTA = "KEY_CTA" - const val KEY_CURRENT_SCREEN = "currentScreen" - const val POST_DISBURSEMENT = "postDisbursement" - const val ONE_STEP_JOURNEY = "ONE_STEP_JOURNEY" - const val PL_PP_CHANGE_BANK_JOURNEY = "PL_PP_CHANGE_BANK_JOURNEY" const val DELIVERED = "DELIVERED" const val NOTIFICATION_PERMISSION_DENIED = "NOTIFICATION_PERMISSION_DENIED" - const val HOME_FEATURE = "IN_APP_UPDATE,SURVEY,APP_SHARE,PPE" - const val KYC_VERIFICATION = "KYC_VERIFICATION" - const val AADHAAR_OTP = "AADHAAR_OTP" - const val SELFIE_UPLOAD = "SELFIE_UPLOAD" + const val HOME_FEATURE = "IN_APP_UPDATE,PPE" const val INCOME_VERIFICATION = "INCOME_VERIFICATION" - const val CHECKED = "checked" - const val UN_CHECKED = "unchecked" - const val ONE_MINUTE_TO_SEC = (60 * MILLISECONDS_PER_SECOND).toLong() const val ANR_NAVI_REGEX = "com.navi" const val SUCCESS_CAPITAL = "SUCCESS" const val FAILED = "FAILED" const val TEMPLATE_NAME = "templateName" const val FCM_DELIVERED_V2 = "fcm_delivered_v2" const val FCM_CLICKED_V2 = "fcm_clicked_v2" - const val PL_SCREEN_ACTIVITY = "PL_SCREEN_ACTIVITY" - const val ENACH = "ENACH" const val SHOW_BOTTOMSHEET = "show_bottomsheet" const val GI_INFO_BOTTOMSHEET = "gi_info_bottomsheet" const val DASHBOARD_POLICY_LIST_BOTTOM_SHEET = "dashboard_policy_list_bottom_sheet" @@ -149,9 +108,6 @@ object Constants { const val BOTTOMSHEET_SELECT_POLICY = "bottomsheet_select_policy" const val GI_CLAIMS_BOTTOMSHEET = "gi_claims_bottomsheet" const val POLICY_NUMBER = "policy_number" - const val MANDATE_CHANGE = "mandateChange" - const val REFILL_TOP_UP = "REFILL_TOP_UP" - const val SUCCESS_ANIMATION_GREEN_BG_TIME = 2200L const val EXPIRY_TIME_IN_MIN = "expiryTimeInMinutes" const val NOTIFICATION_SENT_TIME = "notificationSentTimeInUTC" const val SOURCE = "source" @@ -165,11 +121,8 @@ object Constants { const val REFUND_AMOUNT = "REFUND_AMOUNT" const val REFUND_DATE = "REFUND_DATE" const val NEGATIVE_FORECLOSURE = "NEGATIVE_FORECLOSURE" - const val GREEN_SUCCESS_ANIMATION_TIME = 3000L const val V1 = "V1" const val VERSION = "version" - const val HYPERVERGE = "HYPERVERGE" - const val REDIRECTED_FROM_HOME_SCREEN = "REDIRECTED_FROM_HOME_SCREEN" const val FEATURE_NAME = "FEATURE_NAME" const val PAYMENT_TYPE = "PAYMENT_TYPE" const val TYPE = "TYPE" @@ -177,7 +130,6 @@ object Constants { const val PART_PRE_PAYMENT = "PART_PRE_PAYMENT" const val IS_LOAN_AGREEMENT_UPDATION_REQUIRED = "IS_LOAN_AGREEMENT_UPDATION_REQUIRED" const val IS_PAYMENT_FLOW = "IS_PAYMENT_FLOW" - const val IS_EMI_DATE_CHANGE_FLOW = "IS_EMI_DATE_CHANGE_FLOW" const val SKIP_FEATURE_COMPLETION = "SKIP_FEATURE_COMPLETION" const val NEGATIVE = "NEGATIVE" const val POSITIVE = "POSITIVE" @@ -190,7 +142,6 @@ object Constants { const val SCREEN_NAME = "screenName" const val CRM_HELP_SCREEN_NAME = "SCREEN_NAME" const val PRODUCT_HELP_PAGE = "PRODUCT_HELP_PAGE" - const val CODE_TEXT = "code" const val DEFAULT = "DEFAULT" const val USER_SELECTED = "USER_SELECTED" @@ -205,29 +156,19 @@ object Constants { const val CUSTOM_AMOUNT_PAYABLE = "CUSTOM_AMOUNT_PAYABLE" const val IS_PAY_CUSTOM_AMOUNT = "IS_PAY_CUSTOM_AMOUNT" - 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 MONEY_DISBURSEMENT_STATUS_V2 = "MONEY_DISBURSEMENT_STATUS_V2" const val SCROLL_TO_WIDGET_POSITION = "SCROLL_TO_WIDGET_POSITION" - const val EVENT_NAME = "EVENT_NAME" const val NEEDS_RESULT = "NEEDS_RESULT" const val CLEAR_TASK = "CLEAR_TASK" const val REQUEST_CODE = "REQUEST_CODE" - const val REDIRECT_DATA = "REDIRECT_DATA" - const val ERROR_DATA = "ERROR_DATA" - const val REJECTION_DATA = "REJECTION_DATA" const val API_401 = "API_401" - const val SENSITIVE_VIEW = "sensitive_view" const val NAVI_PAY_REQUEST_CODE = 8080 const val NAVI_BBPS_REQUEST_CODE = 8081 const val CYCS_REQUEST_CODE = 8082 const val PROGRESS_LOADER_PURPLE_LOTTIE = "raw/progress_loader_purple.lottie" - const val NFS = "NFS" const val WHITE_COLOR = "#FFFFFF" const val YELLOW_COLOR = "#FFEEBF" const val LIGHT_YELLOW_COLOR = "#FFE9AC" - const val PL_EVENT_NAME = "pl_post" const val IS_PLAYSTORE_DATA_FETCHED = "IS_FIRST_LAUNCH" const val APPSFLYER_DEEPLINK_VALUE = "deep_link_value" const val RETRY_COUNT = "RETRY_COUNT" @@ -254,7 +195,6 @@ object Constants { const val HOME_SCREEN_IN_CAPS = "HOME_SCREEN" const val PUSH_NOTIFICATION = "PUSH_NOTIFICATION" const val NAVI_MQTT_PUSH_NOTIFICATION = "NaviMqttPushNotification" - const val SETUP_AUTO_DEBIT_SCREEN = "setup_auto_debit_screen" const val CLIENT_MESSAGE_ID = "clientMessageId" const val SMS_APPS = "SMS,APPS" const val DATA_INGESTION_TYPES = "dataIngestionTypes" @@ -263,21 +203,8 @@ object Constants { const val HAS_SMS_PERMISSION = "hasSmsPermission" const val HAS_COARSE_LOCATION_PERMISSION = "hasCoarseLocationPermission" const val BACKGROUND_PERMISSION_CHECK = "background_permission_check" - const val PL_MANAGE_LOAN = "PL_MANAGE_LOAN" - const val TAB_ID = "tabId" - const val TAB_INDEX = "tabIndex" - const val UI_TRON_BOTTOMSHEET = "UI_TRON_BOTTOMSHEET" - const val DOWNLOAD_FILE = "DOWNLOAD_FILE" - const val DOCUMENT_REFERENCE_ID = "documentReferenceId" - const val FETCH_LOAN_ACCOUNT_STATEMENT = "FETCH_LOAN_ACCOUNT_STATEMENT" - const val NAVIGATE_TO_NEXT_SCREEN = "NAVIGATE_TO_NEXT_SCREEN" const val DISMISS_BOTTOMSHEET = "DISMISS_BOTTOMSHEET" const val GO_BACK = "GO_BACK" - const val PL_MANAGE_LOAN_TAB = "PL_MANAGE_LOAN_TAB" - const val WIDGET_DATA = "widget_data" - const val PL_LOAN_DOCUMENT_SCREEN = "PL_LOAN_DOCUMENT_SCREEN" - const val DOCUMENTS = "DOCUMENTS" - const val DOCUMENT_NAME = "documentName" const val SEE_MORE_BOTTOMSHEET = "SEE_MORE_BOTTOMSHEET" const val LENDING_PERMISSION_SCREEN = "LENDING_PERMISSION_SCREEN" const val ON_SYSTEM_BACK_PRESSED = "on_system_back_pressed" @@ -323,14 +250,6 @@ object Constants { const val STATUS = "status" const val HTTP_REGEX = "^https?://" - // TODO: Remove these constants once delayed onboarding goes 100% - const val CHECK_BALANCE_ROW = "checkBalanceRow" - const val HIDE_BALANCE_ROW = "hideBalanceRow" - const val CHECK_BALANCE_CLICK = "checkBalanceClick" - const val HIDE_BALANCE_CLICK = "hideBalanceClick" - const val BALANCE_TEXT = "balanceText" - const val BALANCE_TEXT_MASKED_VALUE = "₹ * * * * *" - object Notification { const val HIDE_NOTIFICATION_COUNT = "hideNotificationCount" const val NINE_PLUS = "9+" @@ -379,10 +298,6 @@ object Constants { PART_PRE_PAYMENT("PART_PRE_PAYMENT") } - enum class MetaDataKey(val value: String) { - METADATA_REPO_RATE_BOTTOM_SHEET("repoRateBottomSheetInfo") - } - object RegistrationConstants { const val SENDER_NAME_SUFFIX = "-NAVIHQ" } @@ -394,7 +309,6 @@ object Constants { MONTHLY_EMI_VALUE("MONTHLY_EMI_VALUE"), CUSTOMISE_TENURE("CUSTOMISE_TENURE"), TENURE_SLIDER_CHANGE("TENURE_SLIDER_CHANGE"), - KNOW_MORE("KNOW_MORE"), SLIDER_END_TYPE("SLIDER_END_TYPE"), TENURE_CLICKED_TYPE("TENURE_CLICKED_TYPE"), TENURE_DEFAULT_SELECTED("TENURE_DEFAULT_SELECTED"), diff --git a/android/app/src/main/java/com/naviapp/utils/ContentProviderContractConstants.kt b/android/app/src/main/java/com/naviapp/utils/ContentProviderContractConstants.kt deleted file mode 100644 index 5064677a22..0000000000 --- a/android/app/src/main/java/com/naviapp/utils/ContentProviderContractConstants.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * - * * Copyright © 2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.utils - -object ContentProviderContractConstants { - const val sortOrderAscending = " ASC" -} diff --git a/android/app/src/main/java/com/naviapp/utils/CustomJsonDeserializers.kt b/android/app/src/main/java/com/naviapp/utils/CustomJsonDeserializers.kt index b3de1303ee..77de6b0bda 100644 --- a/android/app/src/main/java/com/naviapp/utils/CustomJsonDeserializers.kt +++ b/android/app/src/main/java/com/naviapp/utils/CustomJsonDeserializers.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -8,47 +8,12 @@ package com.naviapp.utils import com.google.gson.Gson -import com.google.gson.GsonBuilder import com.google.gson.JsonDeserializationContext import com.google.gson.JsonDeserializer import com.google.gson.JsonElement -import com.navi.ap.utils.registerApUiTronDeSerializers -import com.naviapp.common.model.DividerWithImageTitleSubtitleWidgetConfig -import com.naviapp.common.model.EmiTenureSummaryWidgetConfig -import com.naviapp.common.model.InfoBannerWidgetConfig -import com.naviapp.common.model.LoanEMITenureWidgetConfig -import com.naviapp.common.model.OfferUpgradeCardV2WidgetConfig -import com.naviapp.common.model.OfferUpgradeCardWidgetConfig -import com.naviapp.common.model.RadioButtonWidgetListConfig -import com.naviapp.common.model.RewardsWidgetConfig -import com.naviapp.common.model.SelectorTileWidgetListConfig -import com.naviapp.common.model.SingleImageWidgetConfig -import com.naviapp.common.model.SliderWithTooltipTitleWidgetConfig -import com.naviapp.common.model.StyledDaysCalendarWidgetConfig -import com.naviapp.common.model.StyledKeyValueCardWidgetConfig -import com.naviapp.common.model.StyledTextConfig -import com.naviapp.common.model.StyledTextWidgetConfig -import com.naviapp.common.model.StyledTitleWithButtonWidgetConfig -import com.naviapp.common.model.TitleWithButtonWidgetConfig -import com.naviapp.common.model.TopUpSummaryWidgetConfig -import com.naviapp.common.model.TopupInfoWidgetConfig -import com.naviapp.common.model.UpgradeCardWidgetConfig -import com.naviapp.common.model.ValueAdditionWidgetConfig -import com.naviapp.common.model.ViewCtaWidgetConfig -import com.naviapp.common.model.ViewDescriptionCtaWidgetConfig import com.naviapp.lending_permission.model.PermissionNotGrantedCardWidget import com.naviapp.lending_permission.model.PermissionWidget -import com.naviapp.models.ActionCardWithPaddingWidgetConfig -import com.naviapp.models.BankNameCardWidgetConfig -import com.naviapp.models.BankNameV2CardWidgetConfig -import com.naviapp.models.LoanAmountSummaryWidgetConfig -import com.naviapp.models.RadioButtonWithNoteCardWidgetConfig -import com.naviapp.models.SecurityTextWithIconWidgetConfig -import com.naviapp.models.response.FixedClickableTextWidgetConfig import com.naviapp.models.response.GenericWidgetConfig -import com.naviapp.models.response.HeaderTitleWidgetConfig -import com.naviapp.models.response.InputWithErrorLabelWidgetConfig -import com.naviapp.models.response.InputWithErrorWidgetConfig import com.naviapp.models.response.WidgetConfig import java.lang.reflect.Type @@ -64,115 +29,6 @@ class WidgetConfigDeserializer : JsonDeserializer { json?.let { val jsonObject = it.asJsonObject return when (jsonObject["type"].asString) { - LoanDetailsV2WidgetType.STYLED_KEY_VALUE_CARD.value -> { - Gson().fromJson(jsonObject, StyledKeyValueCardWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.BANK_NAME_CARD.value -> { - Gson().fromJson(jsonObject, BankNameCardWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.BANK_NAME_CARD_V2.value -> { - Gson().fromJson(jsonObject, BankNameV2CardWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.STYLED_TEXT.value -> { - Gson().fromJson(jsonObject, StyledTextConfig::class.java) - } - LoanDetailsV2WidgetType.OFFER_UPGRADE_CARD.value -> { - Gson().fromJson(jsonObject, OfferUpgradeCardWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.OFFER_UPGRADE_CARD_V2.value -> { - Gson().fromJson(jsonObject, OfferUpgradeCardV2WidgetConfig::class.java) - } - LoanDetailsV2WidgetType.TITLE_WITH_BUTTON.value -> { - Gson().fromJson(jsonObject, TitleWithButtonWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.REWARDS_INFO_WIDGET.value -> { - Gson().fromJson(jsonObject, RewardsWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.SLIDER_WITH_TOOLTIP_TITLE.value -> { - Gson().fromJson(jsonObject, SliderWithTooltipTitleWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.WIDGET_LIST_WITH_RADIO_BUTTON.value -> { - Gson().fromJson(jsonObject, RadioButtonWidgetListConfig::class.java) - } - LoanDetailsV2WidgetType.WIDGET_LIST_WITH_SELECTOR_TILE.value -> { - Gson().fromJson(jsonObject, SelectorTileWidgetListConfig::class.java) - } - LoanDetailsV2WidgetType.FIXED_CLICKABLE_TEXT.value -> { - Gson().fromJson(jsonObject, FixedClickableTextWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.INPUT_WITH_ERROR_LABEL.value -> { - Gson().fromJson(jsonObject, InputWithErrorLabelWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.INPUT_VIEW_WITH_ERROR.value -> { - Gson().fromJson(jsonObject, InputWithErrorWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.SECURITY_TEXT_WITH_ICON.value -> { - Gson().fromJson(jsonObject, SecurityTextWithIconWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.HEADER_TITLE_VIEW.value -> { - Gson().fromJson(jsonObject, HeaderTitleWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.VIEW_CTA_WIDGET.value -> { - Gson().fromJson(jsonObject, ViewCtaWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.OFFER_UPGRADED_CARD_WIDGET.value -> { - Gson().fromJson(jsonObject, UpgradeCardWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.APR_CLICKABLE_TEXT.value -> { - Gson().fromJson(jsonObject, StyledTextWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.VALUE_ADDITION_WIDGET.value -> { - Gson().fromJson(jsonObject, ValueAdditionWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.SINGLE_IMAGE_WIDGET.value -> { - Gson().fromJson(jsonObject, SingleImageWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.DIVIDER_WITH_IMAGE_TITLE_SUBTITLE_WIDGET.value -> { - Gson() - .fromJson(jsonObject, DividerWithImageTitleSubtitleWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.ACTION_CARD_BANNER_WITH_PADDING.value -> { - Gson().fromJson(jsonObject, ActionCardWithPaddingWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.STYLED_TITLE_DESCRIPTION_WITH_BUTTON.value -> { - Gson().fromJson(jsonObject, StyledTitleWithButtonWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.INFO_BANNER_WIDGET.value -> { - Gson().fromJson(jsonObject, InfoBannerWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.LOAN_AMOUNT_SUMMARY_WIDGET.value -> { - Gson().fromJson(jsonObject, LoanAmountSummaryWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.TOPUP_INFO_WIDGET.name -> { - Gson().fromJson(jsonObject, TopupInfoWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.TOPUP_LOAN_SUMMARY_WIDGET.name -> { - Gson().fromJson(jsonObject, TopUpSummaryWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.EMI_TENURE_SUMMARY_WIDGET.name -> { - Gson().fromJson(jsonObject, EmiTenureSummaryWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.VIEW_DESCRIPTION_CTA_WIDGET.name -> { - Gson().fromJson(jsonObject, ViewDescriptionCtaWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.LOAN_AMOUNT_SUMMARY_V2_WIDGET.value -> { - Gson().fromJson(jsonObject, LoanAmountSummaryWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.UI_TRON_WIDGET.value -> { - GsonBuilder() - .registerApUiTronDeSerializers() - .create() - .fromJson(jsonObject, GenericWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.LOAN_WITH_EMI_TENURE.value -> { - Gson().fromJson(jsonObject, LoanEMITenureWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.STYLED_DAYS_CALENDAR.value -> { - Gson().fromJson(jsonObject, StyledDaysCalendarWidgetConfig::class.java) - } - LoanDetailsV2WidgetType.RADIO_BUTTON_WITH_NOTE_WIDGET.value -> { - Gson().fromJson(jsonObject, RadioButtonWithNoteCardWidgetConfig::class.java) - } LoanDetailsV2WidgetType.LENDING_PERMISSION_WIDGET.value -> { context?.deserialize(jsonObject, PermissionWidget::class.java) } diff --git a/android/app/src/main/java/com/naviapp/utils/DownloadUtil.kt b/android/app/src/main/java/com/naviapp/utils/DownloadUtil.kt deleted file mode 100644 index 34cf8378fc..0000000000 --- a/android/app/src/main/java/com/naviapp/utils/DownloadUtil.kt +++ /dev/null @@ -1,60 +0,0 @@ -/* - * - * * Copyright © 2019-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.utils - -import android.app.DownloadManager -import android.app.DownloadManager.Request -import android.content.Context -import android.net.Uri -import androidx.core.net.toUri -import com.navi.common.utils.log -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.app.NaviApplication -import java.io.File -import java.net.URI - -object DownloadUtil { - fun download( - downloadUri: Uri, - destinationPath: URI, - deleteExistingFile: Boolean = true, - notificationVisibility: Int = Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED, - downloadFailedEventName: String? = null - ): Long { - NaviApplication.instance.applicationContext?.run { - var eventTracker: NaviAnalytics.DownloadUtil? = null - downloadFailedEventName?.let { - eventTracker = NaviAnalytics.naviAnalytics.DownloadUtil() - } - try { - val file = File(destinationPath) - if (file.exists() && deleteExistingFile) file.delete() - - val request = Request(downloadUri) - addRequestParams(request, destinationPath, notificationVisibility) - (getSystemService(Context.DOWNLOAD_SERVICE) as? DownloadManager)?.run { - return enqueue(request) - } - } catch (e: Exception) { - downloadFailedEventName?.let { eventTracker?.onDownloadFailed(it, e.message) } - e.log() - } - } - return -1 - } - - private fun addRequestParams( - request: Request, - destinationPath: URI, - notificationVisibility: Int - ) { - request.setAllowedNetworkTypes(Request.NETWORK_WIFI or Request.NETWORK_MOBILE) - request.setNotificationVisibility(notificationVisibility) - request.setDestinationUri(destinationPath.toString().toUri()) - } -} diff --git a/android/app/src/main/java/com/naviapp/utils/Ext.kt b/android/app/src/main/java/com/naviapp/utils/Ext.kt index 06146e7ad5..c89bbf1792 100644 --- a/android/app/src/main/java/com/naviapp/utils/Ext.kt +++ b/android/app/src/main/java/com/naviapp/utils/Ext.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019-2024 by Navi Technologies Limited + * * Copyright © 2019-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -10,23 +10,15 @@ package com.naviapp.utils import android.content.Context import android.graphics.Color import android.graphics.Outline -import android.graphics.Paint import android.graphics.PorterDuff import android.os.Bundle -import android.text.Spannable -import android.text.SpannableString -import android.text.style.ForegroundColorSpan -import android.text.style.UnderlineSpan import android.view.Gravity import android.view.View import android.view.ViewGroup import android.view.ViewOutlineProvider -import android.widget.EditText import android.widget.TextView import android.widget.Toast import androidx.annotation.StringRes -import androidx.appcompat.widget.AppCompatTextView -import androidx.core.content.ContextCompat import androidx.viewpager.widget.ViewPager import com.facebook.react.bridge.ReadableMap import com.navi.base.utils.BaseUtils @@ -37,8 +29,6 @@ import com.navi.common.utils.log import com.navi.design.utils.dpToPxInInt import com.navi.design.utils.isValidHexColor import com.navi.naviwidgets.extensions.addOnMultipleClicksHandler -import com.navi.naviwidgets.extensions.setTextFieldData -import com.navi.naviwidgets.models.response.TextFieldData import com.navi.naviwidgets.widgets.textdisplay.Margin import com.navi.naviwidgets.widgets.textdisplay.Padding import com.naviapp.BuildConfig @@ -121,16 +111,6 @@ fun Int.formatTenure(): String { return "$this Month" } -fun EditText.placeCursorAtLast() { - setSelection(length()) -} - -inline fun ifLet(vararg elements: T?, closure: (List) -> Unit) { - if (elements.all { it != null }) { - closure(elements.filterNotNull()) - } -} - inline fun ViewPager.onPageSelected(crossinline position: (Int) -> Unit) { addOnPageChangeListener( object : ViewPager.OnPageChangeListener { @@ -147,36 +127,8 @@ inline fun ViewPager.onPageSelected(crossinline position: (Int) -> Unit) { ) } -fun TextView.spannableString(data: String?, spanLength: Int, color: Int) { - try { - if (context == null) return - data?.let { - val textData = SpannableString(it) - textData.setSpan( - ForegroundColorSpan(ContextCompat.getColor(context, color)), - spanLength, - it.length, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE - ) - text = textData - } - } catch (e: Exception) { - e.log() - } -} - fun String?.orDefaultCurrency() = this ?: "INR" -fun TextView.underline(text: String) { - try { - val content = SpannableString(text) - content.setSpan(UnderlineSpan(), 0, content.length, 0) - this.text = content - } catch (e: Exception) { - e.log() - } -} - fun View.setVisibilityState(visibility: Int) { this.visibility = visibility } @@ -206,14 +158,6 @@ fun View.setCornerRadius(radiusInPixels: Number) { } } -fun String.removeSpaces(): String { - return try { - this.replace(" ", "") - } catch (nfe: NumberFormatException) { - "" - } -} - fun String.addDivider(subString: String): String { return this.plus("/").plus(subString) } @@ -290,17 +234,6 @@ private fun handleRageTaps( } } -fun View.toggleViewDisability(enable: Boolean = false) { - isEnabled = enable - isClickable = enable - isFocusable = enable - isFocusableInTouchMode = enable -} - -fun TextView.makeUnderlined() { - paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG -} - fun View.setMargin(margin: Margin?) { margin?.let { (this.layoutParams as ViewGroup.MarginLayoutParams).setMargins( @@ -338,12 +271,6 @@ fun View.setPadding(padding: Padding?) { } } -fun getTextViewItem(textFieldData: TextFieldData?, context: Context): AppCompatTextView { - val textView = AppCompatTextView(context) - textView.setTextFieldData(textFieldData) - return textView -} - /* * Returns App version code in case of release apk and * In case of debug apk it returns locally stored version code diff --git a/android/app/src/main/java/com/naviapp/utils/LoanDetailsV2WidgetType.kt b/android/app/src/main/java/com/naviapp/utils/LoanDetailsV2WidgetType.kt index 0db772200e..cc487c1f59 100644 --- a/android/app/src/main/java/com/naviapp/utils/LoanDetailsV2WidgetType.kt +++ b/android/app/src/main/java/com/naviapp/utils/LoanDetailsV2WidgetType.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2022-2024 by Navi Technologies Limited + * * Copyright © 2022-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -8,43 +8,6 @@ package com.naviapp.utils enum class LoanDetailsV2WidgetType(val value: String) { - STYLED_KEY_VALUE_CARD("STYLED_KEY_VALUE_CARD"), - BANK_NAME_CARD("BANK_NAME_CARD"), - BANK_NAME_CARD_V2("BANK_NAME_CARD_V2"), - OFFER_UPGRADE_CARD("OFFER_UPGRADE_CARD"), - STYLED_TEXT("STYLED_TEXT"), - OFFER_UPGRADE_CARD_V2("OFFER_UPGRADE_CARD_V2"), - TITLE_WITH_BUTTON("TITLE_WITH_BUTTON"), - STYLED_TITLE_DESCRIPTION_WITH_BUTTON("STYLED_TITLE_DESCRIPTION_WITH_BUTTON"), - ACTION_CARD_BANNER_WITH_PADDING("ACTION_CARD_BANNER_WITH_PADDING"), - SLIDER_WITH_TOOLTIP_TITLE("SLIDER_WITH_TOOLTIP_TITLE"), - WIDGET_LIST_WITH_RADIO_BUTTON("WIDGET_LIST_WITH_RADIO_BUTTON"), - SELECTOR_WITH_SLIDER_RADIO_BUTTON("SELECTOR_WITH_SLIDER_RADIO_BUTTON"), - WIDGET_LIST_WITH_SELECTOR_TILE("WIDGET_LIST_WITH_SELECTOR_TILE"), - SELECTOR_TILE_WITH_SLIDER("SELECTOR_TILE_WITH_SLIDER"), - FIXED_CLICKABLE_TEXT("FIXED_CLICKABLE_TEXT"), - INPUT_WITH_ERROR_LABEL("INPUT_WITH_ERROR_LABEL"), - INPUT_VIEW_WITH_ERROR("INPUT_VIEW_WITH_ERROR"), - REWARDS_INFO_WIDGET("REWARDS_INFO_WIDGET"), - APR_CLICKABLE_TEXT("APR_CLICKABLE_TEXT"), - SECURITY_TEXT_WITH_ICON("SECURITY_TEXT_WITH_ICON"), - HEADER_TITLE_VIEW("HEADER_TITLE_VIEW"), - VIEW_CTA_WIDGET("VIEW_CTA_WIDGET"), - OFFER_UPGRADED_CARD_WIDGET("OFFER_UPGRADED_CARD_WIDGET"), - SINGLE_IMAGE_WIDGET("SINGLE_IMAGE_WIDGET"), - VALUE_ADDITION_WIDGET("VALUE_ADDITION_WIDGET"), - INFO_BANNER_WIDGET("INFO_BANNER_WIDGET"), - DIVIDER_WITH_IMAGE_TITLE_SUBTITLE_WIDGET("DIVIDER_WITH_IMAGE_TITLE_SUBTITLE_WIDGET"), - LOAN_AMOUNT_SUMMARY_WIDGET("LOAN_AMOUNT_SUMMARY_WIDGET"), - TOPUP_INFO_WIDGET("TOPUP_INFO_WIDGET"), - TOPUP_LOAN_SUMMARY_WIDGET("TOPUP_LOAN_SUMMARY_WIDGET"), - EMI_TENURE_SUMMARY_WIDGET("EMI_TENURE_SUMMARY_WIDGET"), - VIEW_DESCRIPTION_CTA_WIDGET("VIEW_DESCRIPTION_CTA_WIDGET"), - LOAN_AMOUNT_SUMMARY_V2_WIDGET("LOAN_AMOUNT_SUMMARY_V2_WIDGET"), - UI_TRON_WIDGET("UI_TRON_WIDGET"), - STYLED_DAYS_CALENDAR("STYLED_DAYS_CALENDAR"), - LOAN_WITH_EMI_TENURE("LOAN_WITH_EMI_TENURE"), - RADIO_BUTTON_WITH_NOTE_WIDGET("RADIO_BUTTON_WITH_NOTE_WIDGET"), LENDING_PERMISSION_WIDGET("LENDING_PERMISSION_WIDGET"), LENDING_PERMISSION_NOT_GRANTED_CARD_WIDGET("LENDING_PERMISSION_NOT_GRANTED_CARD_WIDGET"), LENDING_PERMISSION_KNOW_MORE_WIDGET("LENDING_PERMISSION_KNOW_MORE_WIDGET") diff --git a/android/app/src/main/res/anim/activity_bottom_to_top_slide.xml b/android/app/src/main/res/anim/activity_bottom_to_top_slide.xml deleted file mode 100644 index f1dc43f75d..0000000000 --- a/android/app/src/main/res/anim/activity_bottom_to_top_slide.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - \ No newline at end of file diff --git a/android/app/src/main/res/anim/app_nothing.xml b/android/app/src/main/res/anim/app_nothing.xml deleted file mode 100644 index a9997bf9b9..0000000000 --- a/android/app/src/main/res/anim/app_nothing.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/action_card_with_padding_view.xml b/android/app/src/main/res/layout/action_card_with_padding_view.xml deleted file mode 100644 index 3dee913e93..0000000000 --- a/android/app/src/main/res/layout/action_card_with_padding_view.xml +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/activity_bank_change.xml b/android/app/src/main/res/layout/activity_bank_change.xml deleted file mode 100644 index 51ef68971a..0000000000 --- a/android/app/src/main/res/layout/activity_bank_change.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/activity_closed_loans.xml b/android/app/src/main/res/layout/activity_closed_loans.xml deleted file mode 100644 index 917a0a5ed3..0000000000 --- a/android/app/src/main/res/layout/activity_closed_loans.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/activity_cross_sell.xml b/android/app/src/main/res/layout/activity_cross_sell.xml deleted file mode 100644 index 3a8a240188..0000000000 --- a/android/app/src/main/res/layout/activity_cross_sell.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/activity_list_of_documents.xml b/android/app/src/main/res/layout/activity_list_of_documents.xml deleted file mode 100644 index 301c424281..0000000000 --- a/android/app/src/main/res/layout/activity_list_of_documents.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/box_with_icon_title_view_v2.xml b/android/app/src/main/res/layout/box_with_icon_title_view_v2.xml deleted file mode 100644 index 1f13857a59..0000000000 --- a/android/app/src/main/res/layout/box_with_icon_title_view_v2.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/divider_title_subtitle_v2_view.xml b/android/app/src/main/res/layout/divider_title_subtitle_v2_view.xml deleted file mode 100644 index 4d6c296f8d..0000000000 --- a/android/app/src/main/res/layout/divider_title_subtitle_v2_view.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/divider_view.xml b/android/app/src/main/res/layout/divider_view.xml deleted file mode 100644 index 0659336532..0000000000 --- a/android/app/src/main/res/layout/divider_view.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/divider_with_title_subtitle_view.xml b/android/app/src/main/res/layout/divider_with_title_subtitle_view.xml deleted file mode 100644 index 2b91cef6a2..0000000000 --- a/android/app/src/main/res/layout/divider_with_title_subtitle_view.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/due_detail_view.xml b/android/app/src/main/res/layout/due_detail_view.xml deleted file mode 100644 index d5c0acdf56..0000000000 --- a/android/app/src/main/res/layout/due_detail_view.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/emi_calendar_item.xml b/android/app/src/main/res/layout/emi_calendar_item.xml deleted file mode 100644 index a104b714ba..0000000000 --- a/android/app/src/main/res/layout/emi_calendar_item.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/emi_date_change_bottom_sheet.xml b/android/app/src/main/res/layout/emi_date_change_bottom_sheet.xml index 16bab8b8ad..814acf0ed9 100644 --- a/android/app/src/main/res/layout/emi_date_change_bottom_sheet.xml +++ b/android/app/src/main/res/layout/emi_date_change_bottom_sheet.xml @@ -8,7 +8,6 @@ --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/emi_split_up_layout.xml b/android/app/src/main/res/layout/emi_split_up_layout.xml deleted file mode 100644 index 78f8a9b4c6..0000000000 --- a/android/app/src/main/res/layout/emi_split_up_layout.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/emi_status_calendar_view.xml b/android/app/src/main/res/layout/emi_status_calendar_view.xml deleted file mode 100644 index 2b3d018137..0000000000 --- a/android/app/src/main/res/layout/emi_status_calendar_view.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/emi_status_overdue_view.xml b/android/app/src/main/res/layout/emi_status_overdue_view.xml deleted file mode 100644 index 43d6f5dfb7..0000000000 --- a/android/app/src/main/res/layout/emi_status_overdue_view.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/emi_status_paid_view.xml b/android/app/src/main/res/layout/emi_status_paid_view.xml deleted file mode 100644 index 2844abc28a..0000000000 --- a/android/app/src/main/res/layout/emi_status_paid_view.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/emi_status_partially_paid_view.xml b/android/app/src/main/res/layout/emi_status_partially_paid_view.xml deleted file mode 100644 index da45e32631..0000000000 --- a/android/app/src/main/res/layout/emi_status_partially_paid_view.xml +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/emi_status_scheduled_view.xml b/android/app/src/main/res/layout/emi_status_scheduled_view.xml deleted file mode 100644 index 817e122456..0000000000 --- a/android/app/src/main/res/layout/emi_status_scheduled_view.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/emi_status_unpaid_view.xml b/android/app/src/main/res/layout/emi_status_unpaid_view.xml deleted file mode 100644 index 8c0c185928..0000000000 --- a/android/app/src/main/res/layout/emi_status_unpaid_view.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/emi_updated_calendar_fragment.xml b/android/app/src/main/res/layout/emi_updated_calendar_fragment.xml deleted file mode 100644 index 6dbeecdf86..0000000000 --- a/android/app/src/main/res/layout/emi_updated_calendar_fragment.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/expandable_title_desc_view.xml b/android/app/src/main/res/layout/expandable_title_desc_view.xml deleted file mode 100644 index 868646e35e..0000000000 --- a/android/app/src/main/res/layout/expandable_title_desc_view.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/fragment_closed_loans.xml b/android/app/src/main/res/layout/fragment_closed_loans.xml deleted file mode 100644 index 0b39f07af9..0000000000 --- a/android/app/src/main/res/layout/fragment_closed_loans.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/fragment_closed_loans_content.xml b/android/app/src/main/res/layout/fragment_closed_loans_content.xml deleted file mode 100644 index f867675951..0000000000 --- a/android/app/src/main/res/layout/fragment_closed_loans_content.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/fragment_credit_analysis.xml b/android/app/src/main/res/layout/fragment_credit_analysis.xml deleted file mode 100644 index 10f948a01a..0000000000 --- a/android/app/src/main/res/layout/fragment_credit_analysis.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/icon_text_steps_layout.xml b/android/app/src/main/res/layout/icon_text_steps_layout.xml deleted file mode 100644 index e40da2ddec..0000000000 --- a/android/app/src/main/res/layout/icon_text_steps_layout.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/info_banner_view.xml b/android/app/src/main/res/layout/info_banner_view.xml deleted file mode 100644 index 3fae715697..0000000000 --- a/android/app/src/main/res/layout/info_banner_view.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/layout_consent_details.xml b/android/app/src/main/res/layout/layout_consent_details.xml deleted file mode 100644 index 6927fd8208..0000000000 --- a/android/app/src/main/res/layout/layout_consent_details.xml +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/layout_net_promoter_score.xml b/android/app/src/main/res/layout/layout_net_promoter_score.xml deleted file mode 100644 index 8fec729836..0000000000 --- a/android/app/src/main/res/layout/layout_net_promoter_score.xml +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/otp_input_layout.xml b/android/app/src/main/res/layout/otp_input_layout.xml deleted file mode 100644 index 029a44db42..0000000000 --- a/android/app/src/main/res/layout/otp_input_layout.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/post_disbursal_feedback_bottom_sheet.xml b/android/app/src/main/res/layout/post_disbursal_feedback_bottom_sheet.xml deleted file mode 100644 index 2f3f1333e8..0000000000 --- a/android/app/src/main/res/layout/post_disbursal_feedback_bottom_sheet.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/radio_button_with_note_card_view.xml b/android/app/src/main/res/layout/radio_button_with_note_card_view.xml deleted file mode 100644 index 077570d81a..0000000000 --- a/android/app/src/main/res/layout/radio_button_with_note_card_view.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/selector_tile_item_view.xml b/android/app/src/main/res/layout/selector_tile_item_view.xml deleted file mode 100644 index 63271beb02..0000000000 --- a/android/app/src/main/res/layout/selector_tile_item_view.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/styled_days_calendar_footer_view.xml b/android/app/src/main/res/layout/styled_days_calendar_footer_view.xml deleted file mode 100644 index 5071a88a0b..0000000000 --- a/android/app/src/main/res/layout/styled_days_calendar_footer_view.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/styled_days_calendar_view.xml b/android/app/src/main/res/layout/styled_days_calendar_view.xml deleted file mode 100644 index 93767f4c44..0000000000 --- a/android/app/src/main/res/layout/styled_days_calendar_view.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/styled_key_value_card_view.xml b/android/app/src/main/res/layout/styled_key_value_card_view.xml deleted file mode 100644 index 61e04d3e5a..0000000000 --- a/android/app/src/main/res/layout/styled_key_value_card_view.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/styled_key_value_view.xml b/android/app/src/main/res/layout/styled_key_value_view.xml deleted file mode 100644 index c02028b898..0000000000 --- a/android/app/src/main/res/layout/styled_key_value_view.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/styled_title_wtth_button_view.xml b/android/app/src/main/res/layout/styled_title_wtth_button_view.xml deleted file mode 100644 index 7b4a47a67e..0000000000 --- a/android/app/src/main/res/layout/styled_title_wtth_button_view.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/title_subtitle_v2_view.xml b/android/app/src/main/res/layout/title_subtitle_v2_view.xml deleted file mode 100644 index 53810288c5..0000000000 --- a/android/app/src/main/res/layout/title_subtitle_v2_view.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/title_subtitle_view.xml b/android/app/src/main/res/layout/title_subtitle_view.xml deleted file mode 100644 index ff2f02c47f..0000000000 --- a/android/app/src/main/res/layout/title_subtitle_view.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/title_with_button_view.xml b/android/app/src/main/res/layout/title_with_button_view.xml deleted file mode 100644 index 8efda38ebc..0000000000 --- a/android/app/src/main/res/layout/title_with_button_view.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/value_addition_card_key_value_view.xml b/android/app/src/main/res/layout/value_addition_card_key_value_view.xml deleted file mode 100644 index 291f9e0c7b..0000000000 --- a/android/app/src/main/res/layout/value_addition_card_key_value_view.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/view_coupon.xml b/android/app/src/main/res/layout/view_coupon.xml deleted file mode 100644 index 14d012cb0f..0000000000 --- a/android/app/src/main/res/layout/view_coupon.xml +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/view_coupon_tag.xml b/android/app/src/main/res/layout/view_coupon_tag.xml deleted file mode 100644 index fbdb13ab22..0000000000 --- a/android/app/src/main/res/layout/view_coupon_tag.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 6ac7d766d7..828ea48773 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -282,7 +282,6 @@ +More -Less No coupons Available - My Credit Analysis Part pre-payment Source of Funds View @@ -310,8 +309,6 @@ powered by Linked Accounts discovered for %s - Link these accounts with Onemoney to fetch bank statements - Accounts linked to Onemoney Savings Account %d We are registering the auto-pay mandate with your bank. It may take up to 2 days. Auto-pay setup failed. Please retry again or use another bank @@ -333,12 +330,8 @@ Consent valid till : Bank profile, summary & transactions data PERIODIC - https://www.onemoney.in/tandc.html By continuing, you accept Terms & Conditions - of Onemoney - OTP does not match. Please enter correct OTP. - Enter Onemoney OTP Enter bank OTP What can I help you with? Conversation closed @@ -350,8 +343,6 @@ Your EMI payment status will be updated on the app within 48 hours. Do not worry, no late fees will be charged if the EMI has been debited. Pay Now option is available before the due date and after the auto-debit is completed. This may take up to 48 hours from your due date. Navi chat support - Accounts already linked - No accounts found 238258890720575 f2ca809d5e109d4a7b8b134d9ffb1e9c There was an issue from your bank. Please try again or use another method @@ -363,7 +354,6 @@ HELP Popular Banks OTP - Onemoney is an RBI licensed account aggregator Link Account customer View all diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 62c45568b2..732cdd93f2 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -516,14 +516,6 @@ @color/color_191919 - -