From f0c2a9fabafc2a46ab3f4fc7eddff7e4bde012ca Mon Sep 17 00:00:00 2001 From: nikhil kumar Date: Fri, 10 May 2024 19:53:45 +0530 Subject: [PATCH] TP-66307 | NIKHIL KUMAR | HP Code Cleanup (#10800) --- android/app/src/main/AndroidManifest.xml | 13 - .../moengage/push/amp/plus/MiPushReceiver.kt | 5 +- .../naviapp/analytics/utils/NaviAnalytics.kt | 22 +- .../naviapp/analytics/utils/NaviSDKHelper.kt | 9 +- .../java/com/naviapp/app/NaviApplication.kt | 5 +- .../common/navigator/NaviDeepLinkNavigator.kt | 17 +- .../common/navigator/ScreenNavigator.kt | 4 +- .../repository/BottomNavBarRepository.kt | 13 - .../common/tab/InsuranceTabFragment.kt | 11 - .../ui/TrialInsuranceDashboardFragment.kt | 8 - .../common/viewmodel/BottomNavBarVM.kt | 233 +- .../dashboard/DashboardBaseActivity.kt | 5 +- .../viewmodel/DynamicDeliveryVM.kt | 11 +- .../home/activity/NewDashboardActivity.kt | 2389 ----------------- .../naviapp/home/activity/StoryActivity.kt | 416 --- .../home/compose/activity/HomePageActivity.kt | 24 +- .../components/BottomBarFragmentManager.kt | 8 +- .../home/dashboard/ui/InvestmentFragmentV2.kt | 9 - .../dashboard/ui/compose/InvestmentsTab.kt | 8 - .../com/naviapp/home/fragment/HomeFragment.kt | 1415 ---------- .../ExtendedFabHideOnScrollBehavior.kt | 42 - .../naviapp/home/model/BottomBarResponse.kt | 55 - .../com/naviapp/home/model/BottomBarType.kt | 15 + .../home/respository/HomeRepository.kt | 3 - .../home/ui/utils/ProfileScreenUtils.kt | 5 - .../com/naviapp/home/utils/HomePageUtils.kt | 14 - .../java/com/naviapp/home/viewmodel/HomeVM.kt | 76 +- .../com/naviapp/home/viewmodel/ProfileVM.kt | 11 +- .../java/com/naviapp/models/AppStories.kt | 73 - .../network/retrofit/RetrofitService.kt | 15 - .../registration/RegistrationActivity.kt | 6 - .../naviapp/storyview/PausableProgressBar.kt | 173 -- .../naviapp/storyview/StoriesProgressView.kt | 183 -- .../com/naviapp/storyview/StoryRepository.kt | 16 - .../java/com/naviapp/storyview/StoryVM.kt | 54 - .../java/com/naviapp/utils/BottomBarUtils.kt | 197 -- .../main/java/com/naviapp/utils/Utility.kt | 48 +- .../res/color/home_bottom_nav_icon_color.xml | 5 - .../res/color/home_bottom_nav_text_color.xml | 5 - .../black_light_gradient.webp | Bin 534 -> 0 bytes .../src/main/res/drawable-hdpi-v4/reload.webp | Bin 468 -> 0 bytes .../black_light_gradient.webp | Bin 276 -> 0 bytes .../src/main/res/drawable-ldpi-v4/reload.webp | Bin 276 -> 0 bytes .../black_light_gradient.webp | Bin 362 -> 0 bytes .../src/main/res/drawable-mdpi-v4/reload.webp | Bin 296 -> 0 bytes .../black_light_gradient.webp | Bin 782 -> 0 bytes .../main/res/drawable-xhdpi-v4/reload.webp | Bin 592 -> 0 bytes .../black_light_gradient.webp | Bin 1254 -> 0 bytes .../main/res/drawable-xxhdpi-v4/reload.webp | Bin 888 -> 0 bytes .../black_light_gradient.webp | Bin 2114 -> 0 bytes .../main/res/drawable-xxxhdpi-v4/reload.webp | Bin 1142 -> 0 bytes .../src/main/res/drawable/gray_gradient.xml | 8 - .../app/src/main/res/drawable/story_cross.xml | 17 - .../src/main/res/layout/app_update_layout.xml | 91 - .../layout/dashboard_drawer_notification.xml | 64 - .../src/main/res/layout/fragment_home_ln.xml | 97 - .../main/res/layout/fragment_profile_ln.xml | 81 - .../network_connectivity_nudge_layout.xml | 53 - .../res/layout/new_dashboard_activity.xml | 166 -- .../src/main/res/layout/pausable_progress.xml | 31 - .../res/layout/shimmer_home_bottombar.xml | 89 - .../main/res/layout/shimmer_home_layout.xml | 170 -- .../app/src/main/res/layout/story_layout.xml | 155 -- .../main/res/menu/home_bottom_nav_menu.xml | 27 - .../navi/base/cache/util/NaviSharedDbKeys.kt | 3 +- .../listeners/DashboardFragmentListener.kt | 24 - .../navi/common/ui/activity/BaseActivity.kt | 6 +- 67 files changed, 108 insertions(+), 6595 deletions(-) delete mode 100644 android/app/src/main/java/com/naviapp/home/activity/NewDashboardActivity.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/activity/StoryActivity.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/fragment/HomeFragment.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/listener/ExtendedFabHideOnScrollBehavior.kt delete mode 100644 android/app/src/main/java/com/naviapp/home/model/BottomBarResponse.kt create mode 100644 android/app/src/main/java/com/naviapp/home/model/BottomBarType.kt delete mode 100644 android/app/src/main/java/com/naviapp/models/AppStories.kt delete mode 100644 android/app/src/main/java/com/naviapp/storyview/PausableProgressBar.kt delete mode 100644 android/app/src/main/java/com/naviapp/storyview/StoriesProgressView.kt delete mode 100644 android/app/src/main/java/com/naviapp/storyview/StoryRepository.kt delete mode 100644 android/app/src/main/java/com/naviapp/storyview/StoryVM.kt delete mode 100644 android/app/src/main/res/color/home_bottom_nav_icon_color.xml delete mode 100644 android/app/src/main/res/color/home_bottom_nav_text_color.xml delete mode 100644 android/app/src/main/res/drawable-hdpi-v4/black_light_gradient.webp delete mode 100644 android/app/src/main/res/drawable-hdpi-v4/reload.webp delete mode 100644 android/app/src/main/res/drawable-ldpi-v4/black_light_gradient.webp delete mode 100644 android/app/src/main/res/drawable-ldpi-v4/reload.webp delete mode 100644 android/app/src/main/res/drawable-mdpi-v4/black_light_gradient.webp delete mode 100644 android/app/src/main/res/drawable-mdpi-v4/reload.webp delete mode 100644 android/app/src/main/res/drawable-xhdpi-v4/black_light_gradient.webp delete mode 100644 android/app/src/main/res/drawable-xhdpi-v4/reload.webp delete mode 100644 android/app/src/main/res/drawable-xxhdpi-v4/black_light_gradient.webp delete mode 100644 android/app/src/main/res/drawable-xxhdpi-v4/reload.webp delete mode 100644 android/app/src/main/res/drawable-xxxhdpi-v4/black_light_gradient.webp delete mode 100644 android/app/src/main/res/drawable-xxxhdpi-v4/reload.webp delete mode 100644 android/app/src/main/res/drawable/gray_gradient.xml delete mode 100644 android/app/src/main/res/drawable/story_cross.xml delete mode 100644 android/app/src/main/res/layout/app_update_layout.xml delete mode 100644 android/app/src/main/res/layout/dashboard_drawer_notification.xml delete mode 100644 android/app/src/main/res/layout/fragment_home_ln.xml delete mode 100644 android/app/src/main/res/layout/fragment_profile_ln.xml delete mode 100644 android/app/src/main/res/layout/network_connectivity_nudge_layout.xml delete mode 100644 android/app/src/main/res/layout/new_dashboard_activity.xml delete mode 100644 android/app/src/main/res/layout/pausable_progress.xml delete mode 100644 android/app/src/main/res/layout/shimmer_home_bottombar.xml delete mode 100644 android/app/src/main/res/layout/shimmer_home_layout.xml delete mode 100644 android/app/src/main/res/layout/story_layout.xml delete mode 100644 android/app/src/main/res/menu/home_bottom_nav_menu.xml delete mode 100644 android/navi-common/src/main/java/com/navi/common/listeners/DashboardFragmentListener.kt diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a231c1d1e8..93d4e0ea76 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -153,14 +153,6 @@ com.th3rdwave.safeareacontext, com.horcrux.svg, org.reactnative.maskedview, com. android:exported="false" android:screenOrientation="portrait" android:theme="@style/BaseThemeStyle" /> - - - >() - inAppOptOutScreens.add( - if (isHomePageComposeActivityDisabled()) - NewDashboardActivity::class.java - else - HomePageActivity::class.java - ) + inAppOptOutScreens.add(HomePageActivity::class.java) NaviTrackEvent.appInit( naviApplication, AnalyticsConfiguration( diff --git a/android/app/src/main/java/com/naviapp/app/NaviApplication.kt b/android/app/src/main/java/com/naviapp/app/NaviApplication.kt index 5956e76fec..7985930d28 100644 --- a/android/app/src/main/java/com/naviapp/app/NaviApplication.kt +++ b/android/app/src/main/java/com/naviapp/app/NaviApplication.kt @@ -62,7 +62,6 @@ import com.naviapp.analytics.utils.NaviAnalytics.Companion.SCREEN_NAME import com.naviapp.analytics.utils.NaviAnalytics.Companion.STACK_TRACE import com.naviapp.analytics.utils.NaviSDKHelper import com.naviapp.common.transformer.AppLoadTimerMapper -import com.naviapp.home.activity.NewDashboardActivity import com.naviapp.home.common.setup.NotificationManager import com.naviapp.react_native.native_bridge.NativePackage import com.naviapp.home.compose.activity.HomePageActivity @@ -238,7 +237,7 @@ open class NaviApplication : MultiDexApplication(), Application.ActivityLifecycl } override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { - if (activity is NewDashboardActivity || activity is HomePageActivity) { + if (activity is HomePageActivity) { AppLaunchUtils.resetAppOpenOnLaunch() } } @@ -264,7 +263,7 @@ open class NaviApplication : MultiDexApplication(), Application.ActivityLifecycl } override fun onActivityPaused(activity: Activity) { - if ((activity is NewDashboardActivity).not() && (activity is HomePageActivity).not()) { + if ((activity is HomePageActivity).not()) { activity.window.setFlags( WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE ) 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 fdcac3ff24..c324bb6694 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 @@ -127,13 +127,10 @@ import com.naviapp.dynamicdelivery.activity.DynamicDeliveryActivity import com.naviapp.email.activity.EmailActivity import com.naviapp.forge.ui.ForgeActivity import com.naviapp.forge.util.ForgeConstants.CtaUrlIdentifiers.FORGE -import com.naviapp.home.activity.NewDashboardActivity import com.naviapp.home.activity.OnBoardingActivity -import com.naviapp.home.activity.StoryActivity import com.naviapp.home.compose.activity.HomePageActivity import com.naviapp.home.dashboard.ui.ClosedLoansActivity import com.naviapp.home.dashboard.ui.R11PaymentBottomSheet -import com.naviapp.home.utils.getHomeScreenActivityIntent import com.naviapp.part_prepayment.PartPrePaymentActivity import com.naviapp.payment.activities.FeedbackActivity import com.naviapp.payment.activities.NaviPaymentActivity @@ -317,7 +314,6 @@ object NaviDeepLinkNavigator : DeepLinkListener { "com.navi.pl.dynamic.activity.LoanAgreementV2Activity" private const val DISBURSEMENT_STATUS_V2_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH = "com.navi.pl.dynamic.activity.LoanDisbursementLoaderV2Activity" - const val HOME_ACTIVITY_CLASS_PATH = "com.naviapp.home.activity.NewDashboardActivity" const val COMPOSE_HOME_ACTIVITY_CLASS_PATH = "com.naviapp.home.compose.activity.HomePageActivity" private const val NEW_LOAN_DYNAMIC_FEATURE_MODULE_ACTIVITY_CLASS_PATH = "com.navi.pl.dynamic.activity.NewLoanConsentActivity" @@ -377,8 +373,8 @@ object NaviDeepLinkNavigator : DeepLinkListener { activity, DEEPLINK_MANAGEMENT_ACTIVITY_CLASS_PATH ) - getHomeScreenActivityIntent(activity).apply { - setFlags(FLAG_ACTIVITY_CLEAR_TOP) + Intent(activity, HomePageActivity::class.java).apply { + setFlags(FLAG_ACTIVITY_CLEAR_TOP) } } } @@ -558,9 +554,7 @@ object NaviDeepLinkNavigator : DeepLinkListener { REGISTRATION -> { intent = if (BaseUtils.isUserLoggedIn()) { - activity?.let { activity -> - getHomeScreenActivityIntent(activity) - } + Intent(activity, HomePageActivity::class.java) } else { Intent(activity, RegistrationActivity::class.java) @@ -800,7 +794,7 @@ object NaviDeepLinkNavigator : DeepLinkListener { ) // To handle back handling when login happens via GI, before return we need // to finish RegistrationActivity - if (activity is RegistrationActivity || activity is NewDashboardActivity || activity is HomePageActivity) { + if (activity is RegistrationActivity || activity is HomePageActivity) { if (finish.orFalse()) activity.finish() } return @@ -907,9 +901,6 @@ object NaviDeepLinkNavigator : DeepLinkListener { clearTask = clearTaskTemp ) } - STORY -> { - intent = Intent(activity, StoryActivity::class.java) - } WEB_URL -> { var url: String? = null ctaData.parameters?.forEach { keyValue -> 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 47e744e138..8d2d7c6b34 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 @@ -30,7 +30,7 @@ import com.naviapp.dashboard.menu.loans.activity.AllLoanDetailsActivity import com.naviapp.dashboard.rating.RatingActivity import com.naviapp.email.activity.EmailActivity import com.naviapp.home.activity.OnBoardingActivity -import com.naviapp.home.utils.getHomeScreenActivityIntent +import com.naviapp.home.compose.activity.HomePageActivity import com.naviapp.models.PageStatusType import com.naviapp.personalloan.getloan.activities.FaqsActivity import com.naviapp.personalloan.getloan.activities.GetLoanActivity @@ -131,7 +131,7 @@ class ScreenNavigator { HOME, DASHBOARD_SCREEN -> { intent = - getHomeScreenActivityIntent(activity).apply { + Intent(activity, HomePageActivity::class.java).apply { setFlags(FLAG_ACTIVITY_CLEAR_TOP) } } diff --git a/android/app/src/main/java/com/naviapp/common/repository/BottomNavBarRepository.kt b/android/app/src/main/java/com/naviapp/common/repository/BottomNavBarRepository.kt index 0503743349..e86578c7f9 100644 --- a/android/app/src/main/java/com/naviapp/common/repository/BottomNavBarRepository.kt +++ b/android/app/src/main/java/com/naviapp/common/repository/BottomNavBarRepository.kt @@ -10,7 +10,6 @@ package com.naviapp.common.repository import com.navi.common.model.ModuleName import com.navi.common.network.models.RepoResult import com.navi.naviwidgets.models.response.CtaDetails -import com.naviapp.home.model.BottomBarResponse import com.naviapp.network.di.SuperAppRetroFit import com.naviapp.network.retrofit.ResponseCallback import com.naviapp.network.retrofit.RetrofitService @@ -21,18 +20,6 @@ class BottomNavBarRepository constructor(@SuperAppRetroFit private val superAppRetrofitService: RetrofitService) : ResponseCallback() { - suspend fun fetchBottomBarData( - permissionGranted: Boolean, - installedModules: String - ): RepoResult { - return apiResponseCallback( - superAppRetrofitService.fetchBottomNavBarResponse( - permissionGranted = permissionGranted, - installedModules = installedModules - ) - ) - } - suspend fun fetchGiNavCta(): RepoResult = apiResponseCallback(superAppRetrofitService.fetchGiNavCta()) diff --git a/android/app/src/main/java/com/naviapp/common/tab/InsuranceTabFragment.kt b/android/app/src/main/java/com/naviapp/common/tab/InsuranceTabFragment.kt index 14673f821e..a57b8ee282 100644 --- a/android/app/src/main/java/com/naviapp/common/tab/InsuranceTabFragment.kt +++ b/android/app/src/main/java/com/naviapp/common/tab/InsuranceTabFragment.kt @@ -1,7 +1,6 @@ package com.naviapp.common.tab import android.annotation.SuppressLint -import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -41,7 +40,6 @@ import com.navi.base.utils.orFalse import com.navi.base.utils.orZero import com.navi.common.analytics.NaviAnalytics import com.navi.common.callback.RequestToCallbackHandler -import com.navi.common.listeners.DashboardFragmentListener import com.navi.common.listeners.NewBottomSheetListener import com.navi.common.ui.errorview.FullScreenErrorComposeView import com.navi.common.ui.fragment.BaseFragment @@ -58,7 +56,6 @@ import dagger.hilt.android.AndroidEntryPoint class InsuranceTabFragment( private val lazyListState: () -> LazyListState? = { null } ) : BaseFragment(), WidgetCallback, NewBottomSheetListener { - private var dashboardFragmentListener: DashboardFragmentListener? = null private val viewModel by viewModels() override fun onCreateView( @@ -127,11 +124,6 @@ class InsuranceTabFragment( NaviTrackEvent.trackEventOnClickStream(NaviAnalytics.INSURANCE_TAB_INIT) } - override fun onAttach(context: Context) { - super.onAttach(context) - dashboardFragmentListener = context as? DashboardFragmentListener - } - @OptIn(ExperimentalFoundationApi::class) @SuppressLint("UnusedMaterialScaffoldPaddingParameter") @Composable @@ -140,9 +132,6 @@ class InsuranceTabFragment( val listState = lazyListState() ?: rememberLazyListState() val isScrollingDown = listState.isScrollingDown() val widgetCallback: WidgetCallback = this - LaunchedEffect(isScrollingDown) { - dashboardFragmentListener?.toggleFabButton(isScrollingDown.not()) - } Box( modifier = Modifier diff --git a/android/app/src/main/java/com/naviapp/common/tab/insurance/ui/TrialInsuranceDashboardFragment.kt b/android/app/src/main/java/com/naviapp/common/tab/insurance/ui/TrialInsuranceDashboardFragment.kt index 4223f806eb..60573933fa 100644 --- a/android/app/src/main/java/com/naviapp/common/tab/insurance/ui/TrialInsuranceDashboardFragment.kt +++ b/android/app/src/main/java/com/naviapp/common/tab/insurance/ui/TrialInsuranceDashboardFragment.kt @@ -1,7 +1,6 @@ package com.naviapp.common.tab.insurance.ui import android.annotation.SuppressLint -import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -40,7 +39,6 @@ import com.navi.base.utils.orFalse import com.navi.base.utils.orZero import com.navi.common.analytics.NaviAnalytics import com.navi.common.callback.RequestToCallbackHandler -import com.navi.common.listeners.DashboardFragmentListener import com.navi.common.listeners.NewBottomSheetListener import com.navi.common.ui.errorview.FullScreenErrorComposeView import com.navi.common.ui.fragment.BaseFragment @@ -58,7 +56,6 @@ import dagger.hilt.android.AndroidEntryPoint class TrialInsuranceDashboardFragment( private val lazyListState: () -> LazyListState? = { null } ) : BaseFragment(), WidgetCallback, NewBottomSheetListener { - private var dashboardFragmentListener: DashboardFragmentListener? = null private val viewModel by viewModels() override fun onCreateView( @@ -126,11 +123,6 @@ class TrialInsuranceDashboardFragment( NaviTrackEvent.trackEvent(NaviAnalytics.TRIAL_INSURANCE_DASHBOARD_INIT) } - override fun onAttach(context: Context) { - super.onAttach(context) - dashboardFragmentListener = context as? DashboardFragmentListener - } - @OptIn(ExperimentalFoundationApi::class) @SuppressLint("UnusedMaterialScaffoldPaddingParameter") @Composable diff --git a/android/app/src/main/java/com/naviapp/common/viewmodel/BottomNavBarVM.kt b/android/app/src/main/java/com/naviapp/common/viewmodel/BottomNavBarVM.kt index dd209bd83b..cd42926ceb 100644 --- a/android/app/src/main/java/com/naviapp/common/viewmodel/BottomNavBarVM.kt +++ b/android/app/src/main/java/com/naviapp/common/viewmodel/BottomNavBarVM.kt @@ -8,19 +8,11 @@ package com.naviapp.common.viewmodel import android.os.Bundle -import android.view.Menu import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope -import com.navi.amc.utils.combineWith -import com.navi.base.cache.model.NaviCacheAltSourceEntity -import com.navi.base.cache.model.NaviCacheEntity -import com.navi.base.cache.repository.NaviCacheRepositoryImpl -import com.navi.base.cache.util.NaviSharedDbKeys import com.navi.base.model.CtaData -import com.navi.base.model.GenericAnalyticsData import com.navi.base.sharedpref.PreferenceManager -import com.navi.base.utils.EMPTY import com.navi.base.utils.isNotNull import com.navi.base.utils.orFalse import com.navi.common.lottie.LottieRemoteHelper @@ -28,7 +20,6 @@ import com.navi.common.model.ModuleName import com.navi.common.utils.CommonNaviAnalytics import com.navi.common.utils.TemporaryStorageHelper import com.navi.common.utils.isValidResponse -import com.navi.common.utils.log import com.navi.common.viewmodel.BaseVM import com.navi.insurance.common.fragment.LandingPageInfoFragment import com.navi.insurance.common.models.GiErrorMetaData @@ -36,8 +27,6 @@ import com.navi.insurance.common.util.NavigationHandler import com.navi.insurance.network.ApiErrorTagType import com.navi.insurance.util.getGlobalErrorType import com.navi.naviwidgets.models.response.CtaDetails -import com.naviapp.BuildConfig -import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.model.BottomStickyNudgeData import com.naviapp.common.model.UpdateTabSelection @@ -45,19 +34,13 @@ import com.naviapp.common.repository.BottomNavBarRepository import com.naviapp.home.compose.model.BottomStickyNudgeState import com.naviapp.home.compose.model.UpdateTabFragmentData import com.naviapp.home.dashboard.ui.ProductFragment -import com.naviapp.home.model.BottomBarResponse -import com.naviapp.home.model.BottomBarTab import com.naviapp.home.model.BottomBarTabType -import com.naviapp.home.respository.GlobalRepo -import com.naviapp.network.util.getGsonBuilderForWidgetizedResponse import com.naviapp.utils.Constants.INVESTMENTS import com.naviapp.utils.Constants.INVESTMENT_TAB_REVAMP_ENABLED_EXP import com.naviapp.utils.Constants.LOANS import com.naviapp.utils.Constants.LOANS_TAB_REVAMP_ENABLED_EXP import com.naviapp.utils.Constants.PAGE_HOME -import com.naviapp.utils.naviAppSerializerGsonBuilder import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableSharedFlow @@ -72,27 +55,15 @@ import javax.inject.Inject class BottomNavBarVM @Inject constructor( - private val bottomNavBarRepository: BottomNavBarRepository, - private val globalRepo: GlobalRepo, - private val naviCacheRepository: NaviCacheRepositoryImpl + private val bottomNavBarRepository: BottomNavBarRepository ) : BaseVM() { private val _updateTabSelection = MutableSharedFlow() val updateTabSelection = _updateTabSelection.asSharedFlow() - val bottomBarShimmerVisibility = MutableLiveData(true) - - private val _bottomBarData = MutableLiveData() - val bottomBarData: LiveData - get() = _bottomBarData - private val _bottomStickyNudgeData = MutableStateFlow(BottomStickyNudgeData(false, null)) val bottomStickyNudgeData = _bottomStickyNudgeData.asStateFlow() - private val _bottomBarError = MutableLiveData() - val bottomBarError: LiveData - get() = _bottomBarError - private val _giNavCtaFlow = MutableStateFlow(null) private val naviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Dashboard() @@ -112,19 +83,6 @@ constructor( @Inject lateinit var lottieRemoteHelper: LottieRemoteHelper - val fabButtonWithBottomNav = - bottomBarShimmerVisibility.combineWith(_bottomBarData) { shimmerVisible, bottomBarData -> - if ( - shimmerVisible == false && - bottomBarData.isNotNull() && - bottomBarData?.fabData.isNotNull() - ) { - bottomBarData?.fabData - } else { - null - } - } - @OptIn(ExperimentalCoroutinesApi::class) fun clearShouldUpdateSelectedBottomTab() { _shouldUpdateSelectedBottomTab.resetReplayCache() @@ -132,158 +90,6 @@ constructor( fun getBottomNudgeLatestState() = bottomStickyNudgeData.value.bottomStickyNudgeState - fun fetchBottomBarData(permissionGranted: Boolean, installedModules: String) { - coroutineScope.launch(Dispatchers.IO) { - val homeBottomNavigationBarFromDatabase = getHomeBottomNavigationBarFromDatabase() - - naviCacheRepository - .getDataAndFetchFromAltSource( - key = NaviSharedDbKeys.HOME_BOTTOM_NAVIGATION_BAR.name, - version = BuildConfig.VERSION_CODE.toLong(), - getDataFromAltSource = { - fetchHomeBottomNavigationBarFromAPI( - permissionGranted = permissionGranted, - installedModules = installedModules - ) - }, - isCurrentAndAltDataSame = { currentData, altData -> - currentData?.version == altData.version && - currentData?.value == altData.value - }, - emitMultipleValues = true, - ) - .collect { response -> - deserializeWidgetResponseString(response)?.let { bottomBarResponse -> - try { - bottomBarShimmerVisibility.postValue(false) - - if ( - _bottomBarData.value.isNotNull() && - response?.value == homeBottomNavigationBarFromDatabase?.value - ) { - updateCachedResponse(true) - } else { - _bottomBarData.postValue(bottomBarResponse) - } - } catch (e: Exception) { - e.log() - } - } - } - } - } - - private fun deserializeWidgetResponseString(response: NaviCacheEntity?): BottomBarResponse? = - getGsonBuilderForWidgetizedResponse() - .fromJson(response?.value, BottomBarResponse::class.java) - - private suspend fun getHomeBottomNavigationBarFromDatabase(): NaviCacheEntity? = - naviCacheRepository.get(NaviSharedDbKeys.HOME_BOTTOM_NAVIGATION_BAR.name) - - fun fetchAndSaveHomeBottomNavigationBar(permissionGranted: Boolean, installedModules: String) { - CoroutineScope(Dispatchers.IO).launch { - val naviCacheAltSourceEntity = - fetchHomeBottomNavigationBarFromAPI( - permissionGranted = permissionGranted, - installedModules = installedModules - ) - - naviCacheRepository.save( - NaviCacheEntity( - key = NaviSharedDbKeys.HOME_BOTTOM_NAVIGATION_BAR.name, - value = naviCacheAltSourceEntity.value.orEmpty(), - version = BuildConfig.VERSION_CODE - ) - ) - } - } - - private suspend fun fetchHomeBottomNavigationBarFromAPI( - permissionGranted: Boolean, - installedModules: String - ): NaviCacheAltSourceEntity { - val response = - bottomNavBarRepository.fetchBottomBarData( - permissionGranted = permissionGranted, - installedModules = installedModules - ) - - if (!response.isValidResponse()) { - bottomBarShimmerVisibility.postValue(false) - _bottomBarError.postValue(true) - return NaviCacheAltSourceEntity(isSuccess = false) - } - - return NaviCacheAltSourceEntity( - value = naviAppSerializerGsonBuilder().toJson(response.data), - version = BuildConfig.VERSION_CODE, - isSuccess = true - ) - } - - fun getBottomBarTabData(tabId: String): BottomBarTab? { - return _bottomBarData.value?.bottomBarTabs?.find { bottomBarTab -> - bottomBarTab.tabId == tabId - } - } - - fun cacheLottie(lottieUrl: String) { - coroutineScope.launch(Dispatchers.IO) { - lottieRemoteHelper.beginLottiePreCache(listOf(lottieUrl)) - } - } - - fun triggerTabClickedEvent( - analytics: GenericAnalyticsData?, - defaultEvent: String, - screenName: String - ) { - analytics?.let { event -> - naviAnalyticsEventTracker.trackEventWithProperties( - event.eventName.orEmpty(), - event.parameters, - screenName - ) - } ?: run { naviAnalyticsEventTracker.trackEvent(defaultEvent, screenName) } - } - - fun triggerTabViewedEvent(tabId: Int) { - when (tabId) { - R.id.navi -> { - naviAnalyticsEventTracker.trackEvent(NaviAnalytics.NEW_HOME_VIEWED) - } - R.id.investment -> { - naviAnalyticsEventTracker.trackEvent(NaviAnalytics.NAV_INVESTMENT_VIEWED) - } - R.id.loan -> { - naviAnalyticsEventTracker.trackEvent(NaviAnalytics.NAV_LOAN_VIEWED) - } - R.id.insurance -> { - naviAnalyticsEventTracker.trackEvent(NaviAnalytics.NEW_INSURANCE_VIEWED) - } - } - } - - fun getMappedTabId(tabName: String?): Int { - return when (tabName) { - BottomBarTabType.HOME.name -> R.id.navi - BottomBarTabType.INVESTMENT.name -> R.id.investment - BottomBarTabType.LOAN.name -> R.id.loan - BottomBarTabType.INSURANCE.name -> R.id.insurance - else -> Menu.NONE - } - } - - fun getTabName(tabId: Int?): String { - return when (tabId) { - R.id.navi -> BottomBarTabType.HOME.name - R.id.investment -> BottomBarTabType.INVESTMENT.name - R.id.loan -> BottomBarTabType.LOAN.name - R.id.insurance -> BottomBarTabType.INSURANCE.name - else -> EMPTY - } - } - fun fetchGiNavCta() { viewModelScope.launch(Dispatchers.IO) { val response = bottomNavBarRepository.fetchGiNavCta() @@ -429,4 +235,41 @@ constructor( } } + fun triggerTabClickedEvent(tabId: String, screenName: String) { + when (tabId) { + BottomBarTabType.HOME.name -> { + naviAnalyticsEventTracker.trackEventWithProperties( + NaviAnalytics.NEW_HOME_CLICKED, + mapOf(NaviAnalytics.POSITION to "1"), + screenName + ) + } + + BottomBarTabType.INVESTMENT.name -> { + naviAnalyticsEventTracker.trackEventWithProperties( + NaviAnalytics.NAV_INVESTMENT_CLICKED, + mapOf(NaviAnalytics.POSITION to "2"), + screenName + ) + } + + BottomBarTabType.LOAN.name -> { + naviAnalyticsEventTracker.trackEventWithProperties( + NaviAnalytics.NAV_LOAN_CLICKED, + mapOf(NaviAnalytics.POSITION to "3"), + screenName + ) + } + + BottomBarTabType.INSURANCE.name -> { + naviAnalyticsEventTracker.trackEventWithProperties( + NaviAnalytics.NEW_INSURANCE_CLICKED, + mapOf(NaviAnalytics.POSITION to "4"), + screenName + ) + } + else -> com.navi.base.utils.EMPTY + } + } + } 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 b864914cd4..25c031fac9 100644 --- a/android/app/src/main/java/com/naviapp/dashboard/DashboardBaseActivity.kt +++ b/android/app/src/main/java/com/naviapp/dashboard/DashboardBaseActivity.kt @@ -33,8 +33,7 @@ import com.navi.payment.utils.PaymentAnalytics.DESCRIPTION import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.navigator.NaviDeepLinkNavigator import com.naviapp.dashboard.viewmodels.DashboardSharedVM -import com.naviapp.home.utils.getHomeScreenActivityIntent -import com.naviapp.home.activity.NewDashboardActivity +import com.naviapp.home.compose.activity.HomePageActivity import com.naviapp.launcher.ui.BaseLauncherActivity import com.naviapp.models.response.BottomSheetData import com.naviapp.payment.activities.FeedbackActivity @@ -290,7 +289,7 @@ abstract class DashboardBaseActivity : status: String? ) { if (isHomePageNeededToRelaunch.orFalse()) { - val intent = getHomeScreenActivityIntent(this) + val intent = Intent(this, HomePageActivity::class.java) if (status == FirebaseStatusType.SUCCESS) { intent.putExtra(PREVIOUS_SCREEN, PreviousScreenNameRequest(Constants.LOAN_CLOSED)) } diff --git a/android/app/src/main/java/com/naviapp/dynamicdelivery/viewmodel/DynamicDeliveryVM.kt b/android/app/src/main/java/com/naviapp/dynamicdelivery/viewmodel/DynamicDeliveryVM.kt index b0d025dc08..44f481bf97 100644 --- a/android/app/src/main/java/com/naviapp/dynamicdelivery/viewmodel/DynamicDeliveryVM.kt +++ b/android/app/src/main/java/com/naviapp/dynamicdelivery/viewmodel/DynamicDeliveryVM.kt @@ -38,8 +38,7 @@ import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus.Failed import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus.Installed import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus.Installing import com.naviapp.dynamicdelivery.viewmodel.ModuleStatus.Unavailable -import com.naviapp.home.utils.getHomeScreenActivityIntent -import com.naviapp.home.utils.isHomePageComposeActivityDisabled +import com.naviapp.home.compose.activity.HomePageActivity import com.naviapp.utils.AppShortcutUtils import com.naviapp.utils.Constants.HL_SHORTCUT_DYNAMIC_DEEPLINK import com.naviapp.utils.Constants.HL_SHORTCUT_LABEL @@ -59,11 +58,7 @@ class DynamicDeliveryVM(private val manager: SplitInstallManager) : BaseVM() { val dynamicDeliveryLiveData: LiveData = _dynamicDeliveryLiveData fun getDefaultHomeActivityPath(): String { - return if (isHomePageComposeActivityDisabled()) { - NaviDeepLinkNavigator.HOME_ACTIVITY_CLASS_PATH - } else { - NaviDeepLinkNavigator.COMPOSE_HOME_ACTIVITY_CLASS_PATH - } + return NaviDeepLinkNavigator.COMPOSE_HOME_ACTIVITY_CLASS_PATH } fun installModuleAndLaunchActivity(moduleName: String, activityClassPath: String) { @@ -147,7 +142,7 @@ class DynamicDeliveryVM(private val manager: SplitInstallManager) : BaseVM() { shortcutId: String, shortcutIcon: Int ) { - val intent = getHomeScreenActivityIntent(context) + val intent = Intent(context, HomePageActivity::class.java) intent.setAction(Intent.ACTION_VIEW) intent.data = Uri.parse(deepLink) AppShortcutUtils.addAppShortcut( diff --git a/android/app/src/main/java/com/naviapp/home/activity/NewDashboardActivity.kt b/android/app/src/main/java/com/naviapp/home/activity/NewDashboardActivity.kt deleted file mode 100644 index 4c9412190e..0000000000 --- a/android/app/src/main/java/com/naviapp/home/activity/NewDashboardActivity.kt +++ /dev/null @@ -1,2389 +0,0 @@ -/* - * - * * Copyright © 2022-2024 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.activity - -import android.animation.ObjectAnimator -import android.annotation.SuppressLint -import android.app.Activity -import android.app.ActivityManager -import android.content.Context -import android.content.Intent -import android.graphics.Color -import android.os.Build -import android.os.Bundle -import android.view.Gravity -import android.view.Menu -import android.view.View -import android.view.ViewGroup -import android.view.WindowInsetsController -import android.widget.Toast -import androidx.activity.viewModels -import androidx.coordinatorlayout.widget.CoordinatorLayout -import androidx.core.view.ViewCompat -import androidx.core.view.forEach -import androidx.core.view.isVisible -import androidx.core.view.updateLayoutParams -import androidx.databinding.DataBindingUtil -import androidx.drawerlayout.widget.DrawerLayout.DrawerListener -import androidx.drawerlayout.widget.DrawerLayout.LOCK_MODE_LOCKED_CLOSED -import androidx.drawerlayout.widget.DrawerLayout.LOCK_MODE_UNLOCKED -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentTransaction -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.repeatOnLifecycle -import androidx.recyclerview.widget.LinearLayoutManager -import com.google.android.material.behavior.HideBottomViewOnScrollBehavior -import com.google.android.material.snackbar.Snackbar -import com.navi.amc.fundbuy.fragments.FundListingFragmentV2 -import com.navi.amc.utils.Constant -import com.navi.amc.utils.TempStorageHelper -import com.navi.amc.utils.getFundListBundle -import com.navi.analytics.utils.NaviTrackEvent.trackEventOnClickStream -import com.navi.ap.utils.constants.APP_ACTION -import com.navi.ap.utils.constants.APP_PLATFORM_APPLICANT_TYPE -import com.navi.ap.utils.constants.APP_PLATFORM_VERTICAL_TYPE -import com.navi.ap.utils.constants.CUSTOMER_CAPITAL -import com.navi.base.deeplink.util.DeeplinkConstants -import com.navi.base.model.ActionData -import com.navi.base.model.CtaData -import com.navi.base.model.GenericAnalytics -import com.navi.base.model.GenericAnalyticsData -import com.navi.base.model.LineItem -import com.navi.base.model.NaviClickAction -import com.navi.base.model.NaviWidgetClickWithActionData -import com.navi.base.sharedpref.CommonPrefConstants.CURRENT_USER -import com.navi.base.sharedpref.PreferenceManager -import com.navi.base.utils.BaseUtils.isUserLoggedIn -import com.navi.base.utils.ConnectivityObserver -import com.navi.base.utils.ConnectivityObserverImpl -import com.navi.base.utils.DateUtils -import com.navi.base.utils.isNotNull -import com.navi.base.utils.isNotNullAndNotEmpty -import com.navi.base.utils.isNull -import com.navi.base.utils.orFalse -import com.navi.base.utils.orTrue -import com.navi.coin.vm.CoinHomeScreenVM -import com.navi.coin.vm.ScratchCardScreenVM -import com.navi.common.R as CommonR -import com.navi.common.constants.APP_UPGRADE_DATA -import com.navi.common.databinding.LayoutInAppInstallBinding -import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper -import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.BOTTOM_BAR_COLOR_ENABLED -import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.BOTTOM_SCROLL_ENABLED -import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.PAN_VERIFICATION_HPC_APPLICATION_NAME -import com.navi.common.listeners.DashboardFragmentListener -import com.navi.common.listeners.DialogCancelListener -import com.navi.common.lottie.LottieRemoteHelper -import com.navi.common.managers.PermissionsManager -import com.navi.common.managers.UserManager -import com.navi.common.model.AppUpgradeResponse -import com.navi.common.model.ModuleNameV2 -import com.navi.common.model.UserDetail -import com.navi.common.model.common.AppUpdateData -import com.navi.common.model.common.NetworkConnectivityNudgeData -import com.navi.common.ui.fragment.BaseFragment -import com.navi.common.utils.Constants.ADDITIONAL_PARAMETERS -import com.navi.common.utils.Constants.APP_PLATFORM_APPLICATION_TYPE -import com.navi.common.utils.Constants.APP_PLATFORM_LAUNCH -import com.navi.common.utils.Constants.CARD_NAME -import com.navi.common.utils.Constants.HPC_LOGIN -import com.navi.common.utils.Constants.HPC_LOGIN_AP -import com.navi.common.utils.Constants.IN_APP_UPDATE_REQUEST_CODE -import com.navi.common.utils.Constants.IS_HPC_LOGIN_AP_ON_BOARDING_COMPLETED -import com.navi.common.utils.Constants.LOGIN_ON_BOARDING_AP_ENABLE -import com.navi.common.utils.Constants.LOGIN_SOURCE -import com.navi.common.utils.Constants.NAVI_PAY_EXISTING_ACCOUNT -import com.navi.common.utils.Constants.NAVI_PAY_SETUP_ACCOUNT -import com.navi.common.utils.Constants.ON_BOARDING_BASIC_DETAILS_AP_VISIT -import com.navi.common.utils.Constants.ON_BOARDING_BASIC_DETAILS_BACKEND -import com.navi.common.utils.Constants.ON_BOARDING_BASIC_DETAILS_VISIT -import com.navi.common.utils.Constants.REDIRECT_STATUS -import com.navi.common.utils.Constants.SKIP_PERMISSION_SCREEN -import com.navi.common.utils.Constants.SUB_REDIRECT -import com.navi.common.utils.TemporaryStorageHelper -import com.navi.common.utils.getDensityName -import com.navi.common.utils.getInstalledDynamicModulesCommaSeparated -import com.navi.common.utils.getLogoutData -import com.navi.common.utils.getNetworkType -import com.navi.common.utils.getScreenRefreshRate -import com.navi.common.utils.isDynamicModuleInstalled -import com.navi.common.utils.log -import com.navi.common.utils.observeNonNull -import com.navi.common.utils.observeNullable -import com.navi.common.utils.setStatusBarColor -import com.navi.common.utils.setStatusBarColorInt -import com.navi.design.font.FontWeightEnum -import com.navi.design.textview.model.NaviSpan -import com.navi.design.utils.CornerRadius -import com.navi.design.utils.dpToPxInInt -import com.navi.design.utils.getNaviDrawable -import com.navi.design.utils.moveViewWithDistanceAnimator -import com.navi.design.utils.parseColorSafe -import com.navi.design.utils.spannedText -import com.navi.insurance.R as InsuranceR -import com.navi.insurance.common.fragment.LandingPageInfoFragment -import com.navi.insurance.common.util.ActionHandler -import com.navi.insurance.util.AMOUNT -import com.navi.insurance.util.Constants.IS_AUTOPAY -import com.navi.insurance.util.Constants.IS_INSTALMENT -import com.navi.insurance.util.Constants.PAYMENTS_STATUS_IS_USER_CANCELLED_EXTRA -import com.navi.insurance.util.RESULT_FAILED -import com.navi.naviwidgets.adapters.NaviAdapter -import com.navi.naviwidgets.callbacks.WidgetCallback -import com.navi.naviwidgets.extensions.showWhenDataIsAvailable -import com.navi.naviwidgets.models.NaviTextComponent -import com.navi.naviwidgets.utils.APP_UPDATE_ENABLE -import com.navi.naviwidgets.utils.AP_LAUNCH -import com.navi.naviwidgets.utils.CURRENT_VERSION_IN_STORE -import com.navi.naviwidgets.utils.IN_APP_UPDATE -import com.navi.naviwidgets.utils.NaviWidgetIconUtils -import com.navi.naviwidgets.utils.NaviWidgetIconUtils.INTERNET_CONNECTED -import com.navi.naviwidgets.utils.NaviWidgetIconUtils.INTERNET_DISCONNECTED -import com.navi.naviwidgets.utils.REWARDS_TOOLTIP_ANIMATION_DELAY -import com.navi.naviwidgets.utils.toCtaData -import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl -import com.navi.naviwidgets.widgets.ParameterValueJsonDeserializer.Companion.KEY_CTA_DATA -import com.navi.pay.common.setup.NaviPayCustomerStatusHandler -import com.navi.pay.common.setup.model.NaviPayCustomerStatus -import com.navi.pay.utils.DATE_TIME_FORMAT_DATE_MONTH_NAME_AT_TIME -import com.navi.pay.utils.KEY_CHECK_BALANCE_ACTION -import com.navi.pay.utils.KEY_VALUE_MAPPING -import com.navi.payment.paymentscreen.model.PaymentActivityResponse -import com.navi.payment.paymentscreen.viewmodel.PaymentScreenSharedViewModel -import com.navi.payment.utils.Constants.PAYMENT_METHOD_REQUEST_CODE -import com.navi.rr.referral.viewmodels.ReferralHomeVM -import com.naviapp.R -import com.naviapp.analytics.deeplink.DeeplinkManager -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.app.NaviApplication -import com.naviapp.appupdate.activities.UpdateAppActivity -import com.naviapp.common.fragment.CommonBottomSheet -import com.naviapp.common.fragment.CommonDialogBox -import com.naviapp.common.fragment.DialogBoxWithSpinnerView -import com.naviapp.common.fragment.OfferDialogFragment -import com.naviapp.common.fragment.PtpErrorFragment -import com.naviapp.common.fragment.PtpFragment -import com.naviapp.common.model.UiTronActionHandler -import com.naviapp.common.navigator.NaviDeepLinkNavigator -import com.naviapp.common.navigator.ScreenNavigator -import com.naviapp.common.tab.InsuranceTabFragment -import com.naviapp.common.tab.insurance.ui.TrialInsuranceDashboardFragment -import com.naviapp.common.transformer.AppLoadTimerMapper -import com.naviapp.common.viewmodel.BottomNavBarVM -import com.naviapp.common.viewmodel.InAppUpdateVM -import com.naviapp.dashboard.DashboardBaseActivity -import com.naviapp.dashboard.listeners.DialogBoxPrimaryCtaListener -import com.naviapp.dashboard.listeners.DialogBoxResponseListener -import com.naviapp.databinding.NewDashboardActivityBinding -import com.naviapp.home.dashboard.models.response.DashboardTab -import com.naviapp.home.dashboard.ui.DashboardFragment -import com.naviapp.home.dashboard.ui.InvestmentFragmentV2 -import com.naviapp.home.dashboard.ui.InvestmentsFragment -import com.naviapp.home.dashboard.ui.ProductFragment -import com.naviapp.home.dashboard.ui.ProductFragment.DashboardTypes -import com.naviapp.home.dashboard.viewmodels.InvestmentVmV2 -import com.naviapp.home.dashboard.viewmodels.LoanTabVm -import com.naviapp.home.fragment.HomeFragment -import com.naviapp.home.fragment.LoanContainerFragment -import com.naviapp.home.fragment.LoanTabFragment -import com.naviapp.home.listener.ExtendedFabHideOnScrollBehavior -import com.naviapp.home.listener.StickyBottomNudgeListener -import com.naviapp.home.model.BottomBarTab -import com.naviapp.home.model.BottomBarTabType -import com.naviapp.home.model.HomeFabButtonResponse -import com.naviapp.home.ui.NotificationScreen -import com.naviapp.home.viewmodel.HomeVM -import com.naviapp.home.viewmodel.NotificationVM -import com.naviapp.home.viewmodel.ProfileVM -import com.naviapp.home.viewmodel.SharedVM -import com.naviapp.manager.usecase.UserDataUploadWorkerUseCase -import com.naviapp.manager.usecase.UserDataUploadWorkerUseCase.Companion.APP_LAUNCH_DATA_UPLOAD_WORKER -import com.naviapp.manager.usecase.UserDataUploadWorkerUseCase.Companion.BACKGROUND_DATA_UPLOAD_WORKER -import com.naviapp.models.DeeplinkData -import com.naviapp.models.GiPaymentError -import com.naviapp.models.request.LatePaymentReasonData -import com.naviapp.models.response.BottomSheetData -import com.naviapp.models.response.OfferDialogType -import com.naviapp.models.response.PaymentInfo -import com.naviapp.payment.activities.NaviPaymentActivity -import com.naviapp.payment.listeners.PaymentInitListener -import com.naviapp.personalloan.getloan.loandetails.fragments.DailyOfferBottomSheet -import com.naviapp.personalloanrevamp.customview.DailyOfferBottomSheetV2 -import com.naviapp.registration.helper.AppsFlyerDeeplinkHandler -import com.naviapp.registration.helper.isReadContactsPermissionGranted -import com.naviapp.registration.helper.isReadSmsPermissionGranted -import com.naviapp.registration.listeners.ReferralListener -import com.naviapp.registration.viewmodel.ConfigVM -import com.naviapp.registration.viewmodel.RegistrationVM -import com.naviapp.registration.viewmodel.UploadUserDataUseCase -import com.naviapp.services.KillAppInBackgroundService -import com.naviapp.utils.BottomBarUtils.fetchDefaultTabTitle -import com.naviapp.utils.BottomBarUtils.getLottieDrawable -import com.naviapp.utils.BottomBarUtils.setTabIcon -import com.naviapp.utils.Constants -import com.naviapp.utils.Constants.COMPLETE -import com.naviapp.utils.Constants.DEFAULT_LOGIN_SOURCE_FOR_WHATSAPP_LOGIN -import com.naviapp.utils.Constants.HPC -import com.naviapp.utils.Constants.NAVI_PAY_REQUEST_CODE -import com.naviapp.utils.Constants.NetworkConnectivity.CONNECTED_BACKGROUND_COLOR -import com.naviapp.utils.Constants.NetworkConnectivity.CONNECTED_NUDGE_VIEWED_EVENT -import com.naviapp.utils.Constants.NetworkConnectivity.CONNECTED_SUBTITLE_COLOR -import com.naviapp.utils.Constants.NetworkConnectivity.CONNECTED_SUBTITLE_TEXT -import com.naviapp.utils.Constants.NetworkConnectivity.CONNECTED_TITLE_COLOR -import com.naviapp.utils.Constants.NetworkConnectivity.CONNECTED_TITLE_TEXT -import com.naviapp.utils.Constants.NetworkConnectivity.DISCONNECTED_BACKGROUND_COLOR -import com.naviapp.utils.Constants.NetworkConnectivity.DISCONNECTED_NUDGE_VIEWED_EVENT -import com.naviapp.utils.Constants.NetworkConnectivity.DISCONNECTED_SUBTITLE_COLOR -import com.naviapp.utils.Constants.NetworkConnectivity.DISCONNECTED_SUBTITLE_TEXT -import com.naviapp.utils.Constants.NetworkConnectivity.DISCONNECTED_TITLE_COLOR -import com.naviapp.utils.Constants.NetworkConnectivity.DISCONNECTED_TITLE_TEXT -import com.naviapp.utils.Constants.ONBOARDING -import com.naviapp.utils.Constants.OPEN_NEW_FRAGMENT -import com.naviapp.utils.Constants.SOURCE -import com.naviapp.utils.Constants.URL -import com.naviapp.utils.IntentConstants -import com.naviapp.utils.IntentConstants.AP_LAUNCH_REQUEST_CODE -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.dpToPx -import com.naviapp.utils.isAllMandatoryPermissionGranted -import com.naviapp.utils.isUserFilledApOnBoardingBasicDetails -import com.naviapp.utils.isUserFilledOnBoardingBasicDetails -import com.naviapp.utils.launchPermissionActivity -import com.naviapp.utils.removeBadgeCount -import com.naviapp.utils.setVisibilityState -import dagger.hilt.android.AndroidEntryPoint -import java.lang.ref.WeakReference -import javax.inject.Inject -import kotlin.time.Duration.Companion.seconds -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.cancel -import kotlinx.coroutines.delay -import kotlinx.coroutines.isActive -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import org.joda.time.DateTime -import timber.log.Timber - -@AndroidEntryPoint -class NewDashboardActivity : - DashboardBaseActivity(), - DialogBoxResponseListener, - DialogBoxPrimaryCtaListener, - PaymentInitListener, - ActionHandler.ActionOwner, - DashboardFragmentListener, - StickyBottomNudgeListener, - ReferralListener, - WidgetCallback, - DrawerListener { - - @Inject lateinit var lottieRemoteHelper: LottieRemoteHelper - @Inject lateinit var userDataUseCase: UploadUserDataUseCase - @Inject lateinit var screenNavigator: ScreenNavigator - @Inject lateinit var permissionsManager: PermissionsManager - @Inject lateinit var appsFlyerDeeplinkHandler: AppsFlyerDeeplinkHandler - - @Inject lateinit var userDataUploadWorkerUseCase: UserDataUploadWorkerUseCase - @Inject lateinit var naviPayCustomerStatusHandler: NaviPayCustomerStatusHandler - - private val configVM by lazy { ViewModelProvider(this)[ConfigVM::class.java] } - private val homeVM by lazy { ViewModelProvider(this)[HomeVM::class.java] } - private val profileVM by lazy { ViewModelProvider(this)[ProfileVM::class.java] } - private val notificationVM by lazy { ViewModelProvider(this)[NotificationVM::class.java] } - private val registrationVM by lazy { ViewModelProvider(this)[RegistrationVM::class.java] } - private val inAppUpdateVM by lazy { ViewModelProvider(this)[InAppUpdateVM::class.java] } - private val bottomNavBarVM by lazy { ViewModelProvider(this)[BottomNavBarVM::class.java] } - private val coinHomeScreenVM by lazy { ViewModelProvider(this)[CoinHomeScreenVM::class.java] } - private val referralHomeVM by lazy { ViewModelProvider(this)[ReferralHomeVM::class.java] } - private val loansTabSharedVM by lazy { ViewModelProvider(this)[SharedVM::class.java] } - private val paymentScreenSharedVM by lazy { - ViewModelProvider(this)[PaymentScreenSharedViewModel::class.java] - } - private val scratchCardScreenVM by lazy { - ViewModelProvider(this)[ScratchCardScreenVM::class.java] - } - private val investmentVM: InvestmentVmV2 by viewModels() - private val loansTabVm: LoanTabVm by viewModels() - - - private val notificationsAnalytics by lazy { NaviAnalytics.naviAnalytics.Notifications() } - - private val naviAdapter = NaviAdapter(widgetCallback = this, factory = ViewHolderFactoryImpl()) - - private val connectivityObserver: ConnectivityObserver by lazy { - ConnectivityObserverImpl(context = applicationContext) - } - - private val naviAnalyticsWidgetEventTracker = NaviAnalytics.naviAnalytics.Widget() - private val userDataAnalyticsTracker = NaviAnalytics.naviAnalytics.UserData() - - private lateinit var binding: NewDashboardActivityBinding - - private var bottomStickyNudgeShimmer: ObjectAnimator? = null - - private var isDeeplinkAvailable: Boolean = false - private var deeplinkData: DeeplinkData? = null - private val redirectionScope = CoroutineScope(Dispatchers.Main) - - override val screenName: String - get() = NaviAnalytics.NEW_HOME_ACTIVITY - - override val moduleName: ModuleNameV2 - get() = ModuleNameV2.COMMON - - companion object { - const val BOTTOM_BAR_HEIGHT = 66 - private const val KEY_NAME_TARGET = "target_url" - val REDIRECTION_MAX_DELAY = 4.seconds - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = DataBindingUtil.setContentView(this, R.layout.new_dashboard_activity) - super.setContentView(binding.root) - updatePreferenceFlag() - initObservers() - initListeners() - initErrors() - fetchHomeData() - handleFirstTimeRedirection() - uploadUserData() - startAppKillInBackgroundService() - appsFlyerDeeplinkHandler.handleDeepLink(intent) - updateSystemNavigationBarColor() - handleStatusBarColor(bottomNavBarVM.getTabName(binding.bottomNavigationView.selectedItemId)) - startPeriodicDataUploadWorker() - } - - private fun startPeriodicDataUploadWorker() { - if (isUserLoggedIn()) { - val isReadSmsPermissionGranted = isReadSmsPermissionGranted(applicationContext) - val isReadContactsPermissionGranted = - isReadContactsPermissionGranted(applicationContext) - if (isReadSmsPermissionGranted || isReadContactsPermissionGranted) { - userDataAnalyticsTracker.onDataPermissionAvailable( - screenName = screenName, - isReadSmsPermissionGranted = isReadSmsPermissionGranted, - isReadContactsPermissionGranted = isReadContactsPermissionGranted, - workerType = BACKGROUND_DATA_UPLOAD_WORKER - ) - userDataUploadWorkerUseCase.startPeriodicDataUploadWorker(screenName) - } else { - userDataAnalyticsTracker.onDataPermissionNotAvailable( - screenName = screenName, - isReadSmsPermissionGranted = false, - isReadContactsPermissionGranted = false, - workerType = BACKGROUND_DATA_UPLOAD_WORKER - ) - } - } - } - - private fun updatePreferenceFlag() { - if (intent.getStringExtra(HPC_LOGIN_AP).equals(COMPLETE, true).orFalse()) { - PreferenceManager.setBooleanPreference(IS_HPC_LOGIN_AP_ON_BOARDING_COMPLETED, true) - } - } - - private fun observeNotificationDrawerLock() { - dashboardSharedVM.isNotificationDrawerEnabled.observeNonNull(this) { - handleNotificationDrawerLock(it) - } - } - - private fun handleNotificationDrawerLock(isNotificationDrawerEnabled: Boolean) { - binding.drawerLayout.apply { - if (isNotificationDrawerEnabled) { - setDrawerLockMode(LOCK_MODE_UNLOCKED, binding.notificationDrawer) - } else { - setDrawerLockMode(LOCK_MODE_LOCKED_CLOSED, binding.notificationDrawer) - } - } - } - - private fun handleFirstTimeRedirection() { - if ( - isUserLoggedIn().not() && - PreferenceManager.getBooleanPreferenceApp( - Constants.IS_FIRST_LAUNCH, - defValue = true - ) - ) { - DeeplinkManager.fetchReferral(NaviApplication.instance, WeakReference(this)) - redirectionScope.launch { - Timber.d("Redirection Delay $REDIRECTION_MAX_DELAY") - delay(REDIRECTION_MAX_DELAY) - Timber.d("redirectToDestination after delay") - redirectToDestination() - } - } else { - Timber.d("redirectToDestination without delay") - redirectToDestination() - } - PreferenceManager.setBooleanPreferenceApp(Constants.IS_FIRST_LAUNCH, false) - } - - override fun onStart() { - super.onStart() - AppLoadTimerMapper.onAppLoaded() - } - - override fun onResume() { - super.onResume() - selectHomeTabIfCurrentFragmentIsHomeFragment() - val selectedBottomTabName = - bottomNavBarVM.getTabName(tabId = binding.bottomNavigationView.selectedItemId) - bottomNavBarVM.getBottomBarTabData(tabId = selectedBottomTabName)?.actionData?.let { - updateTab(screen = HomeFragment.TAG, bundle = intent.extras) - } - if (selectedBottomTabName.isNotNullAndNotEmpty()) { - handleFabButtonVisibility(tabId = BottomBarTabType.valueOf(selectedBottomTabName)) - handleStatusBarColor(tabId = selectedBottomTabName) - handleDrawerLock(tabId = BottomBarTabType.valueOf(selectedBottomTabName)) - } - if (TemporaryStorageHelper.fetchGiNavCta) { - fetchGiNavCta() - TemporaryStorageHelper.fetchGiNavCta = false - } - if (homeVM.isNotificationDrawerOpen.not()) { - if (isUserLoggedIn()) notificationVM.fetchNotificationsItems(true) - } - fetchProfileItems() - TempStorageHelper.clear() - if (connectivityObserver.isInternetConnected()) { - hideNetworkConnectivityNudge() - } - } - - private fun selectHomeTabIfCurrentFragmentIsHomeFragment() { - if (supportFragmentManager.findFragmentById(R.id.container) is HomeFragment) { - binding.bottomNavigationView.selectedItemId = R.id.navi - } - } - - override fun onDestroy() { - super.onDestroy() - appsFlyerDeeplinkHandler.onDestroy() - bottomStickyNudgeShimmer?.pause() - bottomStickyNudgeShimmer = null - binding.unbind() - cancelRedirectionJob() - } - - override fun onDrawerOpened(drawerView: View) { - if (drawerView.id == R.id.notification_drawer) { - homeVM.isNotificationDrawerOpen = true - notificationVM.onNotificationDrawerOpenedCallback() - } else if (drawerView.id == R.id.profile_drawer) { - homeVM.isProfileDrawerOpen = true - } - } - - override fun onDrawerClosed(drawerView: View) { - if (drawerView.id == R.id.notification_drawer) { - homeVM.isNotificationDrawerOpen = false - notificationVM.onNotificationDrawerClosedCallback() - } else if (drawerView.id == R.id.profile_drawer) { - binding.profileScreen.recycleView.scrollToPosition(0) - homeVM.isProfileDrawerOpen = false - } - } - - override fun onDrawerSlide(drawerView: View, slideOffset: Float) { - if (slideOffset >= 0.5) { - setStatusBarColor(color = R.color.white) - } else { - updateStatusBarColorOnDrawerClose() - } - } - - override fun onDrawerStateChanged(newState: Int) {} - - override fun getAppCompatActivity() = this - - override fun getFragment(): Fragment? = null - - override fun getFragManager() = supportFragmentManager - - override fun getContainerId() = R.id.container - - private fun handlePermissionState() { - launchPermissionActivity( - activity = this, - addIntentFlags = false, - finish = true, - normalFlow = intent.getStringExtra(HPC_LOGIN_AP).equals(COMPLETE, true).not(), - extras = intent.extras - ) - PreferenceManager.setBooleanPreference(key = SKIP_PERMISSION_SCREEN, value = false) - } - - private fun initObservers() { - registrationVM.createNewSessionIfRequired() - observeInsuranceTabFetchFlag() - observeBottomBarData() - observeCachedResponse() - observeBottomBarError() - observeBottomBarShimmerVisibility() - observeFabButtonResponse() - observeLoggedOut() - observeUserProfile() - observeProfileData() - observeNotificationShimmer() - observeOfferData() - observePtpData() - observePtpErrorData() - observePtpSubmitResponse() - observeLatePaymentReasonData() - observeNotificationDrawerLock() - observeNetworkConnectivity() - observeInvestmentTabFetchFlag() - observeLoansTabFetchFlag() - } - - private fun observeInvestmentTabFetchFlag() { - bottomNavBarVM.isNewInvestmentTabActive.observeNonNull(this) { - if (it) { - investmentVM.refreshInvestmentTabUiTronConfigs() - } - } - } - - private fun observeLoansTabFetchFlag() { - bottomNavBarVM.isNewLoansTabActive.observeNonNull(this) { - if (it) { - loansTabVm.refreshLoansTabUiTronConfigs( - cashLoanAppInstalled = isDynamicModuleInstalled( - com.navi.common.utils.Constants.PL_DYNAMIC_MODULE_NAME - ), - homeLoanAppInstalled = isDynamicModuleInstalled( - com.navi.common.utils.Constants.HL_DYNAMIC_MODULE_NAME - ) - ) - } - } - } - - @SuppressLint("NotifyDataSetChanged") - private fun observeProfileData() { - profileVM.profileItems.observeNonNull(this) { response -> - updateProfileLoader(false) - response.contentWidget?.let { contentWidget -> - binding.profileScreen.recycleView.apply { - if (adapter != null) { - naviAdapter.setData(contentWidget) - } else { - layoutManager = - LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) - naviAdapter.list = contentWidget - adapter = naviAdapter - } - } - } - } - profileVM.errorResponse.observeNonNull(this) { - naviAdapter.list = emptyList() - naviAdapter.notifyDataSetChanged() - updateProfileLoader(false) - } - profileVM.hideShimmer.observeNonNull(this) { - if (it) { - updateProfileLoader(false) - } - } - } - - private fun observeNotificationShimmer() { - notificationVM.hideShimmer.observeNonNull(this) { - if (it) { - updateNotificationLoader(false) - } - } - } - - private fun updateProfileLoader(showShimmer: Boolean) { - binding.profileScreen.apply { - if (showShimmer) { - shimmerLayout.visibility = View.VISIBLE - recycleView.visibility = View.GONE - myToolbar.visibility = View.GONE - binding.shimmerLayout.startShimmer() - } else { - myToolbar.visibility = View.VISIBLE - shimmerLayout.stopShimmer() - shimmerLayout.visibility = View.GONE - recycleView.visibility = View.VISIBLE - } - } - } - - private fun updateNotificationLoader(showShimmer: Boolean) { - binding.notificationScreen.apply { - if (showShimmer) { - shimmerLayout.visibility = View.VISIBLE - notificationComposeView.visibility = View.GONE - binding.shimmerLayout.startShimmer() - } else { - shimmerLayout.stopShimmer() - shimmerLayout.visibility = View.GONE - notificationComposeView.visibility = View.VISIBLE - } - } - } - - private fun handleOnClick(actionData: ActionData?) { - var needsResult: Boolean? = null - var requestCode: Int? = null - when (actionData?.url) { - DeeplinkConstants.LOGOUT -> { - onMenuLogoutTap() - return - } - NaviDeepLinkNavigator.CHAT -> { - return - } - NaviDeepLinkNavigator.MENU.addDivider(NaviDeepLinkNavigator.SEND_EMAIL) -> { - requestCode = EMAIL_REQUEST_CODE - needsResult = true - } - NaviDeepLinkNavigator.MENU.addDivider(NaviDeepLinkNavigator.FAQ) -> { - requestCode = FAQ_REQUEST_CODE - needsResult = true - } - IN_APP_UPDATE -> { - inAppUpdateVM.setInAppUpdate(false) - } - AP_LAUNCH -> { - NaviDeepLinkNavigator.navigate( - activity = this, - ctaData = actionData.toCtaData(), - needsResult = true, - requestCode = AP_LAUNCH_REQUEST_CODE - ) - return - } - } - actionData?.let { - NaviDeepLinkNavigator.navigate( - activity = this, - ctaData = it.toCtaData(), - needsResult = needsResult, - requestCode = requestCode - ) - } - } - - override fun onClick(naviClickAction: NaviClickAction, widgetId: String?) { - when (naviClickAction) { - is NaviWidgetClickWithActionData -> { - naviAnalyticsWidgetEventTracker.onWidgetClickEvent(naviClickAction) - handleOnClick(naviClickAction.actionData) - } - is ActionData -> { - naviAnalyticsWidgetEventTracker.onWidgetClickEvent( - naviClickAction, - naviClickAction.screenName.orEmpty() - ) - handleOnClick(naviClickAction) - } - } - } - - private fun observeFabButtonResponse() { - bottomNavBarVM.fabButtonWithBottomNav.observeNonNull(this) { - it?.let { it1 -> handleFabButtonResponse(it1) } - } - } - - private fun observeInsuranceTabFetchFlag() { - lifecycleScope.launchWhenStarted { - loansTabSharedVM.insuranceTabFetchFlag.collect { shouldRefresh -> - if (shouldRefresh) { - fetchGiNavCta() - loansTabSharedVM.setInsuranceTabFetchFlag(false) - } - } - } - } - - private fun observeBottomBarData() { - bottomNavBarVM.bottomBarData.observeNullable(this) { bottomBarData -> - if (bottomBarData?.bottomBarTabs.isNullOrEmpty().not()) { - binding.bottomNavigationView.menu.clear() - bottomBarData?.bottomBarTabs?.forEach { tab -> - tab.tabId?.let { tabId -> - val mappedTabId = bottomNavBarVM.getMappedTabId(tabId) - if (mappedTabId != Menu.NONE) { - binding.bottomNavigationView.menu.add( - Menu.NONE, - mappedTabId, - Menu.NONE, - if (tab.tabName.isNotNullAndNotEmpty()) tab.tabName - else fetchDefaultTabTitle(this@NewDashboardActivity, mappedTabId) - ) - - tab.metaData?.viewedData?.let { viewedData -> - dashboardAnalytics.trackEventWithProperties( - viewedData.eventName.orEmpty(), - viewedData.parameters - ) - } - } - } - } - setBottomBarTabIcons(bottomBarData?.bottomBarTabs) - } else { - showDefaultBottomBar() - } - initUI() - } - } - - private fun observeCachedResponse() { - lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.STARTED) { - bottomNavBarVM.cachedResponse.collect { - TemporaryStorageHelper.updateApiTs(TemporaryStorageHelper.BOTTOM_NAV) - } - } - } - } - - private fun observeBottomBarError() { - bottomNavBarVM.bottomBarError.observeNullable(this) { error -> - if (error.orFalse()) { - showDefaultBottomBar() - if (bottomNavBarVM.bottomBarData.value.isNull()) { - initUI() - } - } - } - } - - private fun observeBottomBarShimmerVisibility() { - bottomNavBarVM.bottomBarShimmerVisibility.observe(this) { shouldShow -> - if (shouldShow) { - binding.shimmerLayout.visibility = View.VISIBLE - binding.bottomNavigationView.visibility = View.GONE - } else { - binding.shimmerLayout.visibility = View.GONE - binding.bottomNavigationView.visibility = View.VISIBLE - } - } - } - - private fun observeLoggedOut() { - dashboardSharedVM.loggedOut.observeNonNull(this) { - if (!it) return@observeNonNull - hideLoader() - dashboardAnalytics.onLogoutYesButtonTap() - deleteCacheAndOpenLoginPage() - } - } - - private fun observeUserProfile() { - dashboardSharedVM.userProfile.observeNonNull(this) { - val userDetail = - UserDetail(name = it.name.orEmpty(), phoneNumber = it.phoneNumber.orEmpty()) - PreferenceManager.setObjectPreference(CURRENT_USER, userDetail) - UserManager.setUserDetail(userDetail) - } - } - - private fun observeOfferData() { - registrationVM.offerData.observeNullable(this) { - it?.let { - if (it.type?.equals(OfferDialogType.OFFER_BOTTOM_SHEET.name) == true) { - if (it.newJourneyCustomer == true) { - val bottomSheet = DailyOfferBottomSheetV2.getInstance(it, screenName) - safelyShowBottomSheet( - bottomSheet = bottomSheet, - tag = DailyOfferBottomSheetV2.TAG - ) - } else { - val bottomSheet = DailyOfferBottomSheet.getInstance(it, screenName) - safelyShowBottomSheet( - bottomSheet = bottomSheet, - tag = DailyOfferBottomSheet.TAG - ) - } - } else { - safelyOpenFragment( - fragment = OfferDialogFragment.getInstance(it), - tag = OfferDialogFragment.TAG - ) - } - } - } - } - - private fun observePtpData() { - registrationVM.ptpData.observeNonNull(this) { ptpDetailsResponse -> - safelyOpenFragment( - fragment = PtpFragment.getInstance(ptpDetailsResponse), - tag = PtpFragment.TAG - ) - } - } - - private fun observePtpErrorData() { - registrationVM.ptpErrorData.observeNonNull(this) { - safelyOpenFragment( - fragment = PtpErrorFragment.getInstance(it), - tag = PtpErrorFragment.TAG - ) - } - } - - private fun observePtpSubmitResponse() { - registrationVM.ptpSubmitResponse.observeNullable(this) { - it?.let { - if (it.spinnerViewData != null) { - val dialogBoxWithSpinnerView = - DialogBoxWithSpinnerView.newInstance( - screenName = NaviAnalytics.EMI_PAYMENT_DATE_DIALOG, - title = it.title, - description = it.subTitle, - isCloseButtonEnabled = it.isCloseButtonEnabled, - spinnerViewData = it.spinnerViewData, - primaryCtaData = it.ctaList?.getOrNull(0), - ctaData = it.ctaList?.getOrNull(1), - iconCode = it.iconCode, - lottieAnimationFile = "success.json", - isCancelable = false - ) - dialogBoxWithSpinnerView.setListener(this) - dialogBoxWithSpinnerView.setOnCancelListener( - listener = - object : DialogCancelListener { - override fun handleDialogCancel() { - (supportFragmentManager.findFragmentByTag(HomeFragment.TAG) - as? HomeFragment) - ?.handleDialogCancel() - } - } - ) - safelyOpenFragment( - fragment = dialogBoxWithSpinnerView, - tag = DialogBoxWithSpinnerView.TAG - ) - } else { - val commonDialogBox = - CommonDialogBox.newInstance( - screenName = NaviAnalytics.EMI_PAYMENT_DATE_DIALOG, - title = it.title, - description = it.subTitle, - primaryCtaData = it.ctaList?.getOrNull(0), - ctaData = it.ctaList?.getOrNull(1), - iconCode = it.iconCode, - primaryCtaIntentInfo = it.paymentInfo, - lottieAnimationFile = "success.json", - isCancelable = false - ) - commonDialogBox.setPrimaryCtaListener(listener = this) - commonDialogBox.setOnCancelListener( - listener = - object : DialogCancelListener { - override fun handleDialogCancel() { - (supportFragmentManager.findFragmentByTag(HomeFragment.TAG) - as? HomeFragment) - ?.handleDialogCancel() - } - } - ) - safelyOpenFragment(fragment = commonDialogBox, tag = CommonDialogBox.TAG) - } - } - ?: run { - Toast.makeText( - this, - getString(InsuranceR.string.something_went_wrong), - Toast.LENGTH_SHORT - ) - .show() - } - } - } - - private fun observeLatePaymentReasonData() { - dashboardSharedVM.latePaymentReasonData.observeNonNull(this) { - dashboardSharedVM.submitLatePaymentReason( - latePaymentReason = - LatePaymentReasonData( - dueReferenceId = registrationVM.ptpData.value?.content?.dueReferenceId, - reason = it.reason - ) - ) - } - } - - private fun observeNetworkConnectivity() { - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { - lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.STARTED) { - homeVM.connectivityObserverHolder.collect { - if (binding.bottomNavigationView.isVisible) { - when (it) { - ConnectivityObserver.Status.Available -> { - fetchHomeItems() - fetchProfileItems() - if (binding.networkConnectivityNudgeLayout.root.isVisible) { - updateNetworkConnectivityNudge( - networkConnectivityNudgeData = - getNudgeDataForInternetConnected() - ) - } - handleFabButtonPosition() - delay(2.seconds) - hideNetworkConnectivityNudge() - handleFabButtonPosition() - } - ConnectivityObserver.Status.Unavailable, - ConnectivityObserver.Status.Losing, - ConnectivityObserver.Status.Lost -> { - updateNetworkConnectivityNudge( - networkConnectivityNudgeData = - getNudgeDataForInternetDisconnected() - ) - handleFabButtonPosition() - } - } - } - } - } - } - } - } - - private fun updateNetworkConnectivityNudge( - networkConnectivityNudgeData: NetworkConnectivityNudgeData - ) { - binding.networkConnectivityNudgeLayout.root.setVisibilityState(View.VISIBLE) - - binding.networkConnectivityNudgeLayout.root.setOnClickListener {} - - binding.networkConnectivityNudgeLayout.apply { - networkConnectivityNudgeData.bgColor?.let { bgColor -> - root.background = - getNaviDrawable( - radii = - CornerRadius( - rightTop = resources.getDimension(R.dimen.layout_dp_8), - leftTop = resources.getDimension(R.dimen.layout_dp_8) - ), - backgroundColor = bgColor.parseColorSafe() - ) - } - - tvTitle.text = - networkConnectivityNudgeData.title - ?.text - ?.spannedText( - context = this@NewDashboardActivity, - span = networkConnectivityNudgeData.title?.span - ) - - tvDescription.text = - networkConnectivityNudgeData.subtitle - ?.text - ?.spannedText( - context = this@NewDashboardActivity, - span = networkConnectivityNudgeData.subtitle?.span - ) - - ivIcon.showWhenDataIsAvailable(networkConnectivityNudgeData.leftIconCode) - - networkConnectivityNudgeData.metaData?.viewedData?.eventName?.let { - trackEventOnClickStream(it) - } - } - } - - private fun hideNetworkConnectivityNudge() { - binding.networkConnectivityNudgeLayout.root.setVisibilityState(View.GONE) - } - - private fun getNudgeDataForInternetDisconnected() = - NetworkConnectivityNudgeData( - title = - NaviTextComponent( - text = DISCONNECTED_TITLE_TEXT, - span = - listOf( - NaviSpan( - startSpan = 0, - endSpan = DISCONNECTED_TITLE_TEXT.length, - fontName = FontWeightEnum.TT_SEMI_BOLD.name, - fontSize = 14.0, - spanColor = DISCONNECTED_TITLE_COLOR - ) - ) - ), - subtitle = - NaviTextComponent( - text = - DISCONNECTED_SUBTITLE_TEXT.plus( - DateUtils.getFormattedDateTimeAsStringFromDateTimeObject( - dateTime = DateTime(homeVM.homeTabLastUpdateTimestamp), - format = DATE_TIME_FORMAT_DATE_MONTH_NAME_AT_TIME - ) - ), - span = - listOf( - NaviSpan( - startSpan = 0, - endSpan = 32, - fontName = FontWeightEnum.TT_MEDIUM.name, - fontSize = 12.0, - spanColor = DISCONNECTED_SUBTITLE_COLOR - ) - ) - ), - bgColor = DISCONNECTED_BACKGROUND_COLOR, - leftIconCode = INTERNET_DISCONNECTED, - metaData = - GenericAnalytics( - viewedData = GenericAnalyticsData(eventName = DISCONNECTED_NUDGE_VIEWED_EVENT) - ), - ) - - private fun getNudgeDataForInternetConnected() = - NetworkConnectivityNudgeData( - title = - NaviTextComponent( - text = CONNECTED_TITLE_TEXT, - span = - listOf( - NaviSpan( - startSpan = 0, - endSpan = CONNECTED_TITLE_TEXT.length, - fontName = FontWeightEnum.TT_SEMI_BOLD.name, - fontSize = 14.0, - spanColor = CONNECTED_TITLE_COLOR - ) - ) - ), - subtitle = - NaviTextComponent( - text = CONNECTED_SUBTITLE_TEXT, - span = - listOf( - NaviSpan( - startSpan = 0, - endSpan = 11, - fontName = FontWeightEnum.TT_MEDIUM.name, - fontSize = 12.0, - spanColor = CONNECTED_SUBTITLE_COLOR - ) - ) - ), - bgColor = CONNECTED_BACKGROUND_COLOR, - leftIconCode = INTERNET_CONNECTED, - metaData = - GenericAnalytics( - viewedData = GenericAnalyticsData(eventName = CONNECTED_NUDGE_VIEWED_EVENT) - ), - ) - - private fun handleFabButtonResponse(homeFabButtonResponse: HomeFabButtonResponse) { - binding.extFloatingActionButton.apply { - homeFabButtonResponse.title?.let { - showWhenDataIsAvailable(homeFabButtonResponse.title) - } - homeFabButtonResponse.iconCode?.let { iconCode -> - setIconResource(NaviWidgetIconUtils.getImageFromIconCode(iconCode)) - } - homeFabButtonResponse.ctaData?.let { actionData -> - setOnClickListener { - homeFabButtonResponse.metaData?.clickedData?.eventName?.let { - trackEventOnClickStream( - it, - mapOf( - Constants.BOTTOM_TABS to - bottomNavBarVM.getTabName( - binding.bottomNavigationView.selectedItemId - ), - CARD_NAME to getFabButtonCardId() - ) - ) - } - NaviDeepLinkNavigator.navigate( - activity = this@NewDashboardActivity, - ctaData = actionData.toCtaData() - ) - } - } - homeFabButtonResponse.metaData?.viewedData?.eventName?.let { - trackEventOnClickStream( - it, - mapOf( - Constants.BOTTOM_TABS to homeFabButtonResponse.bottomBarTabs.toString(), - CARD_NAME to getFabButtonCardId() - ) - ) - } - } - handleFabButtonVisibility(tabId = BottomBarTabType.HOME) - } - - private fun getFabButtonCardId(): String { - return if ( - ::naviPayCustomerStatusHandler.isInitialized && - naviPayCustomerStatusHandler.getCustomerStatusOnMainThread() == - NaviPayCustomerStatus.LINKED_VPA - ) - NAVI_PAY_EXISTING_ACCOUNT - else NAVI_PAY_SETUP_ACCOUNT - } - - override fun openProfileDrawer() { - val drawerLayout = binding.drawerLayout - val profileDrawer = binding.profileDrawer - if (!drawerLayout.isDrawerOpen(profileDrawer)) { - drawerLayout.openDrawer(profileDrawer) - } - } - - private fun closeProfileDrawer() { - val drawerLayout = binding.drawerLayout - val profileDrawer = binding.profileDrawer - if (drawerLayout.isDrawerOpen(profileDrawer)) { - drawerLayout.closeDrawer(profileDrawer) - } - } - - override fun openNotificationDrawer() { - val drawerLayout = binding.drawerLayout - val notificationDrawer = binding.notificationDrawer - if (!drawerLayout.isDrawerOpen(notificationDrawer)) { - drawerLayout.openDrawer(notificationDrawer) - } - } - - private fun closeNotificationDrawer() { - val drawerLayout = binding.drawerLayout - val notificationDrawer = binding.notificationDrawer - if (drawerLayout.isDrawerOpen(notificationDrawer)) { - drawerLayout.closeDrawer(notificationDrawer) - } - } - - private fun handleDrawerLock(tabId: BottomBarTabType) { - val drawerLayout = binding.drawerLayout - val profileDrawer = binding.profileDrawer - val notificationDrawer = binding.notificationDrawer - drawerLayout.apply { - if (tabId == BottomBarTabType.HOME) { - setDrawerLockMode(LOCK_MODE_UNLOCKED, profileDrawer) - handleNotificationDrawerLock( - dashboardSharedVM.isNotificationDrawerEnabled.value ?: false - ) - } else { - setDrawerLockMode(LOCK_MODE_LOCKED_CLOSED, profileDrawer) - setDrawerLockMode(LOCK_MODE_LOCKED_CLOSED, notificationDrawer) - } - } - } - - private fun initListeners() { - isDeeplinkAvailable = - intent.data.isNotNull() || intent.getStringExtra(Constants.DEEPLINK).isNotNull() - lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.STARTED) { - appsFlyerDeeplinkHandler.getFlow()?.collect { - deeplinkData = it - processDeeplink() - } - } - } - listenBottomNavigationView() - setDrawerListener() - listenProfileCloseButton() - } - - private fun setDrawerListener() { - binding.drawerLayout.addDrawerListener(this) - binding.notificationScreen.apply { - shimmerLayout.setOnClickListener {} - notificationComposeView.setOnClickListener {} - } - } - - private fun listenProfileCloseButton() { - binding.profileScreen.myToolbar.setOnClickListener {} - binding.profileScreen.backIcon.setOnClickListener { closeProfileDrawer() } - } - - private fun listenBottomNavigationView() { - binding.bottomNavigationView.setOnClickListener {} - binding.bottomNavigationView.setOnItemSelectedListener { - when (it.itemId) { - R.id.navi -> { - handleTabClick( - BottomBarTabType.HOME, - DashboardFragment.TAG, - NaviAnalytics.NEW_HOME_CLICKED - ) - } - R.id.insurance -> { - if (isAllMandatoryPermissionGranted(permissionsManager = permissionsManager)) { - removeBadgeCount( - badgeDrawable = binding.bottomNavigationView.getBadge(R.id.insurance) - ) - handleTabClick( - tabId = BottomBarTabType.INSURANCE, - defaultFragment = DashboardFragment.TAG, - defaultEvent = NaviAnalytics.NEW_INSURANCE_CLICKED - ) - } else { - launchPermissionActivity() - } - } - R.id.investment -> { - if (isAllMandatoryPermissionGranted(permissionsManager = permissionsManager)) { - removeBadgeCount( - badgeDrawable = binding.bottomNavigationView.getBadge(R.id.investment) - ) - handleTabClick( - tabId = BottomBarTabType.INVESTMENT, - defaultFragment = FundListingFragmentV2.TAG, - defaultEvent = NaviAnalytics.NAV_INVESTMENT_CLICKED - ) - } else { - launchPermissionActivity() - } - } - R.id.loan -> { - if (isAllMandatoryPermissionGranted(permissionsManager)) { - removeBadgeCount( - badgeDrawable = binding.bottomNavigationView.getBadge(R.id.loan) - ) - handleTabClick( - tabId = BottomBarTabType.LOAN, - defaultFragment = DashboardFragment.TAG, - defaultEvent = NaviAnalytics.NAV_LOAN_CLICKED - ) - } else { - launchPermissionActivity() - } - } - } - true - } - } - - private fun launchPermissionActivity() { - launchPermissionActivity( - activity = this, - addIntentFlags = false, - finish = false, - normalFlow = false, - extras = intent.extras - ) - } - - private fun moveToHomeTab() { - if (!this.isHomePageSelected() && binding.bottomNavigationView.isVisible) { - dashboardAnalytics.onFetchHomeCardsForLogoutUser(screenName) - this.updateTab(screen = HomeFragment.TAG) - handleFabButtonVisibility(tabId = BottomBarTabType.HOME) - handleDrawerLock(tabId = BottomBarTabType.HOME) - } else { - val drawerLayout = binding.drawerLayout - val profileDrawer = binding.profileDrawer - val notificationDrawer = binding.notificationDrawer - if (drawerLayout.isDrawerOpen(profileDrawer)) { - drawerLayout.closeDrawer(profileDrawer) - } else if (drawerLayout.isDrawerOpen(notificationDrawer)) { - drawerLayout.closeDrawer(notificationDrawer) - } else { - super.onBackPressed() - } - } - } - - override fun onBackPressed() { - moveToHomeTab() - } - - private fun initErrors() { - initError(registrationVM) - initError(dashboardSharedVM) - } - - private fun updateSystemNavigationBarColor() { - if (FirebaseRemoteConfigHelper.getBoolean(BOTTOM_BAR_COLOR_ENABLED)) { - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - window.insetsController?.setSystemBarsAppearance( - WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, - WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS - ) - } - window.navigationBarColor = resources.getColor(R.color.white) - - val windowInsetsController = ViewCompat.getWindowInsetsController(window.decorView) - windowInsetsController?.isAppearanceLightNavigationBars = true - } catch (e: Exception) { - e.log() - } - } - } - - private fun fetchHomeData() { - fetchTabs() - fetchBottomNavigationBar() - fetchOfferDialog() - fetchPtpDialogData() - fetchAndSaveCoinHomeScreen() - fetchAndSaveReferralHomeScreen() - fetchAndSaveScratchCardImages() - fetchNotificationItems() - } - - private fun fetchAndSaveCoinHomeScreen() { - if (isUserLoggedIn()) { - coinHomeScreenVM.fetchAndSaveCoinHomeScreen() - } - } - - private fun fetchAndSaveReferralHomeScreen() { - if (isUserLoggedIn()) { - referralHomeVM.fetchAndSaveReferralHomeScreen() - } - } - - private fun fetchAndSaveScratchCardImages() { - if (isUserLoggedIn()) { - scratchCardScreenVM.prefetchImages() - } - } - - override fun fetchProfileItems() { - if (isUserLoggedIn()) { - profileVM.fetchProfileItems( - appUpdate = - PreferenceManager.getBooleanPreference( - key = APP_UPDATE_ENABLE, - defValue = false - ), - isPermissionGranted = - isAllMandatoryPermissionGranted(permissionsManager = permissionsManager) - ) - } - } - - private fun fetchNotificationItems() { - if (isUserLoggedIn()) { - binding.notificationScreen.notificationComposeView.setContent { - NotificationScreen( - activity = this, - notificationVM = notificationVM, - notificationsAnalytics = notificationsAnalytics - ) - } - handleNotificationShimmer() - } - } - - private fun handleNotificationShimmer() { - CoroutineScope(Dispatchers.Main).launch { - val data = withContext(Dispatchers.IO) { notificationVM.getAll() } - if (data.isNullOrEmpty()) { - if (notificationVM.hideShimmer.value != true) { - updateNotificationLoader(true) - } - } else { - updateNotificationLoader(false) - notificationVM.updateNotificationData() - } - } - } - - override fun initialisationJobs() { - initLauncherTasks() - initSDKs() - } - - private fun initSDKs() { - initInAppUpdate() - } - - private fun initInAppUpdate() { - inAppUpdateVM.init() - } - - fun navigateToNextScreen(currentScreenTag: String, bundle: Bundle?, subType: String? = null) { - val fragmentTag = - if (subType == null) { - currentScreenTag - } else { - currentScreenTag + subType - } - - val fragment: Fragment - if ( - bundle?.get(OPEN_NEW_FRAGMENT).isNotNull() && bundle?.get(OPEN_NEW_FRAGMENT) == "true" - ) { - fragment = getFragment(screen = currentScreenTag, bundle = bundle, subType = subType) - } else { - fragment = - supportFragmentManager.findFragmentByTag(fragmentTag) - ?: getFragment(screen = currentScreenTag, bundle = bundle, subType = subType) - } - val fragmentTransaction = supportFragmentManager.beginTransaction() - if (!supportFragmentManager.isStateSaved && !supportFragmentManager.isDestroyed) { - hideFragments(fragmentTransaction) - if (fragment.isAdded) { - fragmentTransaction.show(fragment) - } else { - fragmentTransaction.add(R.id.container, fragment, fragmentTag) - } - fragmentTransaction.commitNow() - } - } - - private fun getFragment(screen: String, bundle: Bundle?, subType: String? = null): Fragment { - return when (screen) { - HomeFragment.TAG -> HomeFragment.newInstance(bundle) - DashboardFragment.TAG -> - getDashboardFragment(screen, subType ?: bundle?.getString(SUB_REDIRECT), bundle) - FundListingFragmentV2.TAG -> getInvestmentTabFragment(bundle) - else -> HomeFragment.newInstance(bundle) - } - } - - private fun getDashboardFragment(screen: String, subType: String?, bundle: Bundle?): Fragment { - return when (subType) { - DashboardTypes.Loans.name -> getLoansTabFragment() - DashboardTypes.Insurance.name -> - handleInsuranceDashboardTab(screen = screen, subType = subType, bundle = bundle) - DashboardTypes.Insurance_tab_page.name -> - InsuranceTabFragment.newInstance(bundle) - DashboardTypes.Trial_Insurance_Dashboard.name -> - TrialInsuranceDashboardFragment.newInstance(bundle) - DashboardTypes.Insurance_landing_page.name -> - LandingPageInfoFragment().apply { arguments = bundle } - DashboardTypes.Investment.name, - FundListingFragmentV2.TAG -> getInvestmentTabFragment(bundle) - else -> DashboardFragment.getInstance(bundle) - } - } - - private fun getInvestmentTabFragment(bundle: Bundle?): Fragment { - return if (bottomNavBarVM.isInvestmentTabRevampEnabled()) { - InvestmentFragmentV2.newInstance(bundle) { null } - } else { - InvestmentsFragment.newInstance(bundle) - } - } - - private fun getLoansTabFragment(): Fragment { - return if (bottomNavBarVM.isLoansTabRevampEnabled()) { - LoanTabFragment.getInstance() - } else { - LoanContainerFragment.getInstance() - } - } - - private fun handleInsuranceDashboardTab( - screen: String, - subType: String, - bundle: Bundle? - ): Fragment { - if ( - bundle?.get(OPEN_NEW_FRAGMENT).isNotNull() && bundle?.get(OPEN_NEW_FRAGMENT) == "true" - ) { - for (fragment in supportFragmentManager.fragments) { - supportFragmentManager.beginTransaction().remove(fragment).commit() - } - } else { - val fragment = - supportFragmentManager.findFragmentByTag( - screen + DashboardTypes.Insurance_landing_page.name - ) - if (fragment != null) { - val fragmentTransaction = supportFragmentManager.beginTransaction() - fragmentTransaction.remove(fragment) - fragmentTransaction.commit() - } - } - return ProductFragment.getInstance(DashboardTab(subType), bundle) - } - - override fun onNewIntent(intent: Intent?) { - super.onNewIntent(intent) - setIntent(intent) - isDeeplinkAvailable = false - deeplinkData = null - redirectToDestination() - fetchOfferDialog() - fetchPtpDialogData() - intent?.getStringExtra(Constants.REDIRECT_STATUS)?.let { - updateTab(screen = it, bundle = intent.extras) - } - } - - private fun initUI() { - if (isUserLoggedIn()) { - dashboardSharedVM.fetchUserProfileData() - } - updateTab( - screen = intent.getStringExtra(Constants.REDIRECT_STATUS) ?: HomeFragment.TAG, - bundle = intent.extras - ) - } - - private fun fetchBottomNavigationBar() { - if (isUserLoggedIn()) { - bottomNavBarVM.fetchBottomBarData( - permissionGranted = isAllMandatoryPermissionGranted(this), - installedModules = getInstalledDynamicModulesCommaSeparated() - ) - fetchGiNavCta() - fetchInvestmentTabCta() - fetchLoansTabCta() - } - } - - private fun fetchGiNavCta() { - if (isUserLoggedIn()) { - bottomNavBarVM.fetchGiNavCta() - } - } - - private fun fetchInvestmentTabCta() { - if (isUserLoggedIn()) { - bottomNavBarVM.fetchInvestmentTabRevampEnabled() - } - } - - private fun fetchLoansTabCta(){ - if (isUserLoggedIn()) { - bottomNavBarVM.fetchLoansTabRevampEnabled() - } - } - - private fun fetchOfferDialog() { - if ( - isUserLoggedIn() && - intent?.getStringExtra(Constants.REDIRECT_STATUS) != Constants.EMI_DATE_CHANGE && - intent?.getStringExtra(Constants.REDIRECT_STATUS) != Constants.PTP_CAPTURE - ) - registrationVM.fetchOfferDialog() - } - - private fun fetchPtpDialogData() { - if ( - isUserLoggedIn() && - intent?.getStringExtra(Constants.REDIRECT_STATUS) == Constants.PTP_CAPTURE - ) { - dashboardAnalytics.ptpOpenedThroughDeeplink( - intent?.getBooleanExtra(Constants.DEEPLINK, true) ?: true - ) - registrationVM.fetchPtpDialogData() - } - } - - private fun onMenuLogoutTap() { - val primaryAction = View.OnClickListener { dashboardAnalytics.onLogoutCancelButtonTap() } - val secondaryAction = - View.OnClickListener { - dashboardAnalytics.onLogoutYesButtonTap() - dashboardSharedVM.logout() - showLoader() - } - openWarningDialog( - warning = getLogoutData(this.applicationContext), - primaryAction = primaryAction, - secondaryAction = secondaryAction - ) - } - - override fun showInstallAppSnackBar() { - val appSnackBarBinding = LayoutInAppInstallBinding.inflate(layoutInflater) - Snackbar.make( - binding.root, - com.navi.common.utils.Constants.EMPTY, - Snackbar.LENGTH_INDEFINITE - ) - .apply { - this.anchorView = binding.bottomNavigationView - view.apply { - setBackgroundColor(Color.TRANSPARENT) - (this as? Snackbar.SnackbarLayout)?.apply { - setPadding( - dpToPxInInt(resources.getInteger(R.integer.value_20)), - resources.getInteger(InsuranceR.integer.zero), - dpToPxInInt(resources.getInteger(R.integer.value_20)), - dpToPxInInt(resources.getInteger(R.integer.value_20)) - ) - appSnackBarBinding.tvInstallApp.setOnClickListener { - inAppUpdateVM.inAppUpdateSnackBarClick() - inAppUpdateVM.registerAppUpdateSuccessAnalytics() - inAppUpdateVM.completeUpdate() - dismiss() - } - inAppUpdateVM.appUpdateSnackBarView() - addView(appSnackBarBinding.root, resources.getInteger(CommonR.integer.zero)) - } - } - } - .show() - } - - override fun dialogBoxResponse(reason: String?) { - dashboardSharedVM.setLatePaymentReason( - LatePaymentReasonData( - dueReferenceId = registrationVM.ptpData.value?.content?.dueReferenceId, - reason = reason - ) - ) - } - - override fun onInitializePayment(loan: PaymentInfo?, widgetId: String?) { - loan?.accountNumber?.let { - this.onOpenPaymentPage( - loanAccountNumber = it, - pageType = NaviPaymentActivity.PAYMENT_PAGE, - amount = loan.amount, - minPayableAmount = loan.minPayableAmount, - paymentLabel = loan.paymentLabel, - isPrecloseLoanEnabled = loan.foreclosure?.enabled.orFalse(), - repaymentDelayInfo = loan.repaymentDelayInfo, - payCustomAmountEnable = loan.payCustomAmountEnable, - isPartPrePaymentEnabled = loan.isPrePaymentEnabled, - widgetId = widgetId - ) - } - } - - override fun showBottomSheet(repaymentDelayInfo: BottomSheetData) { - CommonBottomSheet.newInstance( - screenName = NaviAnalytics.HOME_AUTO_DEBIT_PENDING_SHEET, - title = repaymentDelayInfo.title, - description = repaymentDelayInfo.description, - ctaData = repaymentDelayInfo.ctaData - ) - .show(supportFragmentManager, CommonBottomSheet.TAG) - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) { - super.onActivityResult(requestCode, resultCode, intent) - intent?.getParcelableExtra(KEY_CTA_DATA)?.let { ctaData -> - ctaData.analyticsEventProperties?.let { analyticsEvent -> - dashboardAnalytics.trackEventWithProperties( - eventName = analyticsEvent.name.orEmpty(), - map = analyticsEvent.properties - ) - } - NaviDeepLinkNavigator.navigate( - activity = this, - ctaData = ctaData, - finish = ctaData.finish.orFalse(), - clearTask = ctaData.clearTask.orFalse() - ) - return - } - if (requestCode == PAYMENT_METHOD_REQUEST_CODE) { - paymentScreenSharedVM.setPaymentStatusResponse( - PaymentActivityResponse( - requestCode = requestCode, - resultCode = resultCode, - data = intent - ) - ) - } else if (requestCode == Constant.AMC_REQUEST_CODE) { - ScreenNavigator.instance.startActivityWithNoActivityStack( - activity = this, - screenName = ScreenNavigator.DASHBOARD_SCREEN - ) - } else if (requestCode == Constant.GI_REQUEST_CODE) { - if ( - intent?.getBooleanExtra(RESULT_FAILED, false) == true && - intent.getBooleanExtra(IS_INSTALMENT, false) - ) { - dashboardSharedVM.setGiPaymentFailed( - GiPaymentError( - intent.getDoubleExtra(AMOUNT, 0.0), - if (intent.getBooleanExtra(IS_AUTOPAY, false)) NaviAnalytics.AUTO_PAY - else NaviAnalytics.INSTALLMENT, - intent.getBooleanExtra(PAYMENTS_STATUS_IS_USER_CANCELLED_EXTRA, false) - ) - ) - } - } else if (resultCode == Activity.RESULT_OK && requestCode == EMAIL_REQUEST_CODE) { - val shouldRefresh = intent?.getBooleanExtra(IntentConstants.SHOULD_REFRESH, false) - if (shouldRefresh.orFalse()) { - ScreenNavigator.instance.startActivityWithNoActivityStack( - activity = this, - screenName = ScreenNavigator.DASHBOARD_SCREEN - ) - } - } else if (resultCode == Activity.RESULT_OK && requestCode == FAQ_REQUEST_CODE) { - val shouldRefresh = intent?.getBooleanExtra(IntentConstants.SHOULD_REFRESH, false) - if (shouldRefresh.orFalse()) { - ScreenNavigator.instance.startActivityWithNoActivityStack( - activity = this, - screenName = ScreenNavigator.DASHBOARD_SCREEN - ) - } - } else if (requestCode == IN_APP_UPDATE_REQUEST_CODE) { - inAppUpdateVM.inAppUpdateBottomSheetView() - if (resultCode == RESULT_OK) { - inAppUpdateVM.registerAppUpdateFlow() - } else { - inAppUpdateVM.registerAppUpdateFailedAnalytics() - } - } else if (requestCode == NAVI_PAY_REQUEST_CODE) { - if (resultCode == Activity.RESULT_OK) { - dashboardAnalytics.onNaviPayRequestCodeReceived( - actionString = intent?.extras?.getString(KEY_CHECK_BALANCE_ACTION) - ) - @Suppress("UNCHECKED_CAST") - loansTabSharedVM.updateUiTronAction( - uiTronActionHandler = - UiTronActionHandler( - actionsString = intent?.extras?.getString(KEY_CHECK_BALANCE_ACTION), - variableMap = - intent?.extras?.getSerializable(KEY_VALUE_MAPPING) - as? Map - ) - ) - } - } else if (resultCode == Activity.RESULT_OK && requestCode == AP_LAUNCH_REQUEST_CODE) { - updateProfileLoader(true) - } - } - - private fun getTabId(screen: String, subType: String?): Int { - return when (screen) { - HomeFragment.TAG -> R.id.navi - FundListingFragmentV2.TAG -> R.id.investment - DashboardFragment.TAG -> getTabIdForDashboard(subType) - else -> R.id.navi - } - } - - private fun getTabIdForDashboard(subType: String?): Int { - return when (subType) { - DashboardTypes.Investment.name -> R.id.investment - DashboardTypes.Loans.name -> R.id.loan - DashboardTypes.Insurance.name, - DashboardTypes.Insurance_tab_page.name, - DashboardTypes.Trial_Insurance_Dashboard.name -> R.id.insurance - else -> R.id.navi - } - } - - private fun isHomePageSelected() = - binding.bottomNavigationView.menu.findItem(R.id.navi)?.isChecked ?: false - - private fun updateTab(screen: String, bundle: Bundle? = null) { - navigateToNextScreen(screen, bundle, subType = bundle?.getString(SUB_REDIRECT)) - val tabId = getTabId(screen, bundle?.getString(SUB_REDIRECT)) - binding.bottomNavigationView.menu.findItem(tabId)?.isChecked = true - } - - override fun getCurrentFragmentScreenName(): String { - return try { - (supportFragmentManager.findFragmentById(R.id.container) as? BaseFragment)?.screenName - ?: screenName - } catch (e: Exception) { - screenName - } - } - - override fun removeInstallAppSnackBar() { - inAppUpdateVM.setDialogDismiss(true) - NaviApplication.instance.setEnableAppUpdate(false) - } - - private fun hideFragments(fragmentTransaction: FragmentTransaction) { - val fragments = supportFragmentManager.fragments - fragments.forEach { currentFragment -> - currentFragment?.let { fragmentTransaction.hide(it) } - } - } - - private fun handleFabButtonVisibility(tabId: BottomBarTabType) { - if (bottomNavBarVM.bottomBarData.value?.fabData?.enable.orFalse()) { - bottomNavBarVM.bottomBarData.value?.fabData?.bottomBarTabs?.contains(tabId.name).let { - if (binding.extFloatingActionButton.isVisible != it) { - if (it == true) { - binding.extFloatingActionButton.show() - } else { - binding.extFloatingActionButton.hide() - } - } - } - } else { - binding.extFloatingActionButton.hide() - } - } - - private fun handleTabClick( - tabId: BottomBarTabType, - defaultFragment: String, - defaultEvent: String, - ) { - bottomNavBarVM.getBottomBarTabData(tabId.name).let { tabData -> - if (tabData?.isLottieVisible.orFalse()) { - tabData?.isLottieVisible = false - setTabIcon( - context = this@NewDashboardActivity.applicationContext, - bottomNavigationView = binding.bottomNavigationView, - tabId = bottomNavBarVM.getMappedTabId(tabId.name), - iconUrl = tabData?.tabIcon, - unselectedIconColorCode = tabData?.unselectedIconColorCode - ) - } - tabData?.actionData?.let { data -> - NaviDeepLinkNavigator.navigate(activity = this, ctaData = data.toCtaData()) - } - ?: run { - when (tabId) { - BottomBarTabType.HOME -> { - navigateToNextScreen( - currentScreenTag = HomeFragment.TAG, - bundle = intent.extras - ) - } - BottomBarTabType.INVESTMENT -> { - val bundle = getFundListBundle(data = intent.extras) - navigateToNextScreen( - currentScreenTag = defaultFragment, - bundle = bundle - ) - } - BottomBarTabType.LOAN -> { - navigateToNextScreen( - currentScreenTag = defaultFragment, - bundle = null, - subType = DashboardTypes.Loans.name - ) - } - BottomBarTabType.INSURANCE -> { - navigateToNextScreen( - currentScreenTag = defaultFragment, - bundle = bottomNavBarVM.getInsuranceBundle(), - subType = bottomNavBarVM.getInsuranceSubType() - ) - } - } - handleFabButtonVisibility(tabId = tabId) - handleDrawerLock(tabId = tabId) - } - handleStatusBarColor(tabId.name) - bottomNavBarVM.triggerTabClickedEvent( - analytics = tabData?.metaData?.clickedData, - defaultEvent = defaultEvent, - screenName = screenName - ) - } - } - - private fun handleStatusBarColor(tabId: String) { - if ( - tabId == BottomBarTabType.INVESTMENT.name && - bottomNavBarVM.isInvestmentTabRevampEnabled() - ) - return - if (tabId != BottomBarTabType.HOME.name || isDrawerOpen()) { - setStatusBarColor(R.color.white) - } - } - - private fun isDrawerOpen(): Boolean { - return (homeVM.isNotificationDrawerOpen || homeVM.isProfileDrawerOpen) - } - - private fun setBottomBarTabIcons(bottomBarTabs: List?) { - bottomBarTabs?.forEach { tab -> - tab.tabId?.let { tabId -> - val mappedTabId = bottomNavBarVM.getMappedTabId(tabId) - if (mappedTabId != Menu.NONE) { - val lottieUrl = tab.tabLottieData?.lottieUrl - if (lottieUrl != null) { - if ( - lottieRemoteHelper.isLottieFileCached(lottieUrl) && - mappedTabId != R.id.navi - ) { - CoroutineScope(Dispatchers.Main).launch { - binding.bottomNavigationView.menu.findItem(mappedTabId)?.icon = - getLottieDrawable( - lottieUrl = lottieUrl, - view = binding.bottomNavigationView, - replayCount = tab.tabLottieData?.repeatCount, - animationEndCallback = { - if ( - tab.tabLottieData?.showIconOnAnimationEnd.orFalse() - ) { - tab.isLottieVisible = false - setTabIcon( - context = - this@NewDashboardActivity - .applicationContext, - bottomNavigationView = - binding.bottomNavigationView, - tabId = mappedTabId, - iconUrl = tab.tabIcon, - unselectedIconColorCode = - tab.unselectedIconColorCode - ) - } - } - ) - } - tab.isLottieVisible = true - } else { - bottomNavBarVM.cacheLottie(lottieUrl = lottieUrl) - setTabIcon( - context = this@NewDashboardActivity.applicationContext, - bottomNavigationView = binding.bottomNavigationView, - tabId = mappedTabId, - iconUrl = tab.tabIcon, - unselectedIconColorCode = tab.unselectedIconColorCode - ) - } - } else { - setTabIcon( - context = this@NewDashboardActivity.applicationContext, - bottomNavigationView = binding.bottomNavigationView, - tabId = mappedTabId, - iconUrl = tab.tabIcon, - unselectedIconColorCode = tab.unselectedIconColorCode - ) - } - } - } - } - } - - private fun showDefaultBottomBar() { - binding.bottomNavigationView.menu.clear() - binding.bottomNavigationView.inflateMenu(R.menu.home_bottom_nav_menu) - binding.bottomNavigationView.menu.forEach { tab -> - if (tab.isVisible) { - bottomNavBarVM.triggerTabViewedEvent(tab.itemId) - } - } - } - - /** - * this method is used to control bottom bar animation based on fragment type all dashboard - * fragments should call this to set proper behaviour in hidden change method - */ - override fun toggleBottomNavBehavior(scrollToHide: Boolean) { - // Get the layout params of your BottomNavigation - try { - if (FirebaseRemoteConfigHelper.getBoolean(BOTTOM_SCROLL_ENABLED).not()) { - // this is a fallback to avoid unwanted behaviour. Delete in next release - binding.container.updateLayoutParams { - setMargins(0, 0, 0, dpToPx(BOTTOM_BAR_HEIGHT)) - } - return - } - val layoutParams = - binding.bottomNavigationView.layoutParams as CoordinatorLayout.LayoutParams - - if (scrollToHide.not()) { - val bottomViewNavigationBehavior = - layoutParams.behavior as? HideBottomViewOnScrollBehavior - bottomViewNavigationBehavior?.slideUp(binding.bottomNavigationView, false) - } - // Apply LayoutBehavior to the layout params - layoutParams.behavior = - if (scrollToHide) HideBottomViewOnScrollBehavior() else null - - // Add margin to Nav Host Fragment if the layout behavior is NOT added - // bottom_nav_height is 56dp when using Material BottomNavigation - binding.container.updateLayoutParams { - setMargins(0, 0, 0, if (scrollToHide) 0 else binding.bottomNavigationView.height) - } - } catch (e: Exception) { - e.log() - } - } - - override fun toggleBottomNavAndFabButton(visible: Boolean) { - val layoutParams = - binding.bottomNavigationView.layoutParams as CoordinatorLayout.LayoutParams - val bottomViewNavigationBehavior = layoutParams.behavior as? HideBottomViewOnScrollBehavior - if (visible) { - bottomViewNavigationBehavior?.slideUp(binding.bottomNavigationView, true) - } else { - bottomViewNavigationBehavior?.slideDown(binding.bottomNavigationView, true) - } - toggleFabButton(visible) - } - - override fun toggleFabButton(visible: Boolean) { - val layoutParams = - binding.extFloatingActionButton.layoutParams as CoordinatorLayout.LayoutParams - val extendedFabHideOnScrollBehavior = - layoutParams.behavior as? ExtendedFabHideOnScrollBehavior - if (visible) { - extendedFabHideOnScrollBehavior?.slideUp(binding.extFloatingActionButton) - } else { - extendedFabHideOnScrollBehavior?.slideDown(binding.extFloatingActionButton) - } - } - - override fun scrollUpBottomNav() { - val layoutParams = - binding.bottomNavigationView.layoutParams as CoordinatorLayout.LayoutParams - val bottomViewNavigationBehavior = layoutParams.behavior as? HideBottomViewOnScrollBehavior - if (bottomViewNavigationBehavior?.isScrolledDown == true) { - bottomViewNavigationBehavior.slideUp(binding.bottomNavigationView, false) - } - } - - private fun updateStatusBarColorOnDrawerClose() { - if (homeVM.isNestedScrollViewExpanded) { - setStatusBarColor(R.color.white) - } else { - setStatusBarColorInt(loansTabSharedVM.homeStatusColor.value.parseColorSafe()) - } - } - - override fun setAppNudgeVisibility(visible: Boolean, appUpdateData: AppUpdateData?) { - binding.bottomStickyNudgeLayout.root.isVisible = false - if (visible) { - appUpdateData?.let { - showBottomStickyNudge(it) - handleFabButtonPosition() - } - } else { - handleFabButtonPosition() - } - } - - private fun handleFabButtonPosition() { - val networkConnectivityNudgeVisible = binding.networkConnectivityNudgeLayout.root.isVisible - val bottomStickyNudgeVisible = binding.bottomStickyNudgeLayout.root.isVisible - - val isBottomStickyNudgeOrNetworkConnectivityNudgeVisible = - networkConnectivityNudgeVisible || bottomStickyNudgeVisible - - val layoutParams = (binding.fabMarginView.layoutParams as CoordinatorLayout.LayoutParams) - - if ( - isFabButtonIncorrectlyAnchored( - layoutParams, - isBottomStickyNudgeOrNetworkConnectivityNudgeVisible - ) - ) { - layoutParams.anchorId = - if (networkConnectivityNudgeVisible) binding.networkConnectivityNudgeLayout.root.id - else if (bottomStickyNudgeVisible) binding.bottomStickyNudgeLayout.root.id - else binding.bottomNavigationView.id - - layoutParams.anchorGravity = Gravity.TOP or Gravity.END - - binding.fabMarginView.layoutParams = layoutParams - } - } - - private fun isFabButtonIncorrectlyAnchored( - layoutParams: CoordinatorLayout.LayoutParams, - isBottomStickyNudgeOrNetworkConnectivityNudgeVisible: Boolean, - ) = - (layoutParams.anchorId == binding.bottomNavigationView.id && - isBottomStickyNudgeOrNetworkConnectivityNudgeVisible) || - ((layoutParams.anchorId == binding.networkConnectivityNudgeLayout.root.id || - layoutParams.anchorId == binding.bottomStickyNudgeLayout.root.id) && - !isBottomStickyNudgeOrNetworkConnectivityNudgeVisible) - - private fun showBottomStickyNudge(appUpdateData: AppUpdateData) { - binding.bottomStickyNudgeLayout.root.isVisible = true - binding.bottomStickyNudgeLayout.apply { - appUpdateData.bgColor?.let { bgColor -> - root.background = - getNaviDrawable( - radii = - CornerRadius( - rightTop = resources.getDimension(R.dimen.layout_dp_8), - leftTop = resources.getDimension(R.dimen.layout_dp_8) - ), - backgroundColor = bgColor.parseColorSafe() - ) - } - - tvTitle.text = - appUpdateData.title - ?.text - ?.spannedText( - context = this@NewDashboardActivity, - span = appUpdateData.title?.span - ) - tvDescription.text = - appUpdateData.subtitle - ?.text - ?.spannedText( - context = this@NewDashboardActivity, - span = appUpdateData.subtitle?.span - ) - - tvIcon.showWhenDataIsAvailable(appUpdateData.leftIconCode) - appUpdateData.actionData?.let { btnData -> - actionBtn.background = - getNaviDrawable( - cornerRadius = resources.getDimension(R.dimen.layout_dp_4).toInt(), - backgroundColor = btnData.bgColor.parseColorSafe() - ) - btnTitle.text = btnData.title - root.setOnClickListener { - if (btnData.url == IN_APP_UPDATE) { - trackEventOnClickStream( - btnData.metaData?.clickedData?.eventName.orEmpty(), - mapOf(URL to btnData.url.orEmpty()) - ) - inAppUpdateVM.startUpdatingApp() - } else { - dashboardSharedVM.emitCtaDataForHomePageToHandle(btnData) - } - } - } - if (appUpdateData.enableShimmer == true) { - pgvShimmer.isVisible = true - twlParent.post { - if (bottomStickyNudgeShimmer.isNull()) { - bottomStickyNudgeShimmer = - moveViewWithDistanceAnimator( - pgvShimmer, - twlParent.width, - REWARDS_TOOLTIP_ANIMATION_DELAY - ) - } - } - } else { - pgvShimmer.isVisible = false - } - appUpdateData.metaData?.viewedData?.eventName?.let { trackEventOnClickStream(it) } - } - } - - private fun uploadUserData() { - if (isUserLoggedIn()) { - val isReadSmsPermissionGranted = isReadSmsPermissionGranted(applicationContext) - val isReadContactsPermissionGranted = - isReadContactsPermissionGranted(applicationContext) - if (isReadSmsPermissionGranted || isReadContactsPermissionGranted) { - userDataAnalyticsTracker.onDataPermissionAvailable( - screenName = screenName, - isReadSmsPermissionGranted = isReadSmsPermissionGranted, - isReadContactsPermissionGranted = isReadContactsPermissionGranted, - workerType = APP_LAUNCH_DATA_UPLOAD_WORKER - ) - userDataUploadWorkerUseCase.initDataUploadWorker(screenName) - } else { - userDataAnalyticsTracker.onDataPermissionNotAvailable( - screenName = screenName, - isReadSmsPermissionGranted = false, - isReadContactsPermissionGranted = false, - workerType = APP_LAUNCH_DATA_UPLOAD_WORKER - ) - } - userDataUseCase.postInstalledPackages(packageManager) - val screenRefreshRate = - getScreenRefreshRate(context = this, windowManager = this.windowManager) - userDataUseCase.sendDeviceDetails(screenRefreshRate) - } - } - - /** - * Deprecated As of Build.VERSION_CODES.O, this method is no longer available to third party - * applications. For backwards compatibility, it will still return the caller's own services. - * This will returns our services, we can't get any other app running services. - */ - @SuppressWarnings - private fun startAppKillInBackgroundService() { - val manager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager - for (service in manager.getRunningServices(Int.MAX_VALUE)) { - if (KillAppInBackgroundService::class.java.name == service.service.className) { - return - } - } - val intent = Intent(this, KillAppInBackgroundService::class.java) - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - startService(intent) - } - } - - @Synchronized - private fun processDeeplink() { - dashboardAnalytics.sendProcessDeeplinkEvent(deeplinkData) - isDeeplinkAvailable = deeplinkData.isNotNull() - redirectToDestination() - } - - private fun fetchTabs() { - if (isUserLoggedIn() && isAllMandatoryPermissionGranted(permissionsManager)) { - fetchHomeItems() - fetchHomeExtras() - } - } - - private fun fetchHomeItems() { - homeVM.fetchHomeItems( - density = getDensityName(context = this).orEmpty(), - connectivityType = getNetworkType(context = this), - availableAppVersionCode = - PreferenceManager.getIntPreferenceApp(CURRENT_VERSION_IN_STORE), - isPermissionGranted = isAllMandatoryPermissionGranted(permissionsManager), - installedModules = getInstalledDynamicModulesCommaSeparated(), - clearReferralPopupPreferences = false - ) - } - - private fun fetchHomeExtras() { - configVM.fetchHomeExtras() - } - - private fun cancelRedirectionJob() { - if (redirectionScope.isActive) { - redirectionScope.cancel() - Timber.d("cancelRedirectionJob") - } - } - - private fun setApOnBoardingFlag() { - if (isUserLoggedIn()) { - PreferenceManager.setBooleanPreference( - key = IS_HPC_LOGIN_AP_ON_BOARDING_COMPLETED, - value = true - ) - } - } - - private fun redirectToDestination(data: Bundle? = null) { - when { - isDeeplinkAvailable && deeplinkData.isNull() -> { - setApOnBoardingFlag() - return - } - isDeeplinkAvailable && deeplinkData.isNotNull() -> { - setApOnBoardingFlag() - navigateToDeepLink() - } - isUserLoggedIn().not() -> { - val bundle = data ?: Bundle() - bundle.putString(LOGIN_SOURCE, DEFAULT_LOGIN_SOURCE_FOR_WHATSAPP_LOGIN) - navigateUsingScreenNavigator( - screenName = ScreenNavigator.REGISTRATION_SCREEN, - bundle = bundle, - clearTask = true - ) - } - shouldShowOnBoarding() -> { - navigateUsingScreenNavigator( - screenName = ScreenNavigator.BASIC_DETAILS, - bundle = data, - clearTask = isTaskRoot.not() - ) - } - shouldShowApOnBoarding() -> { - navigateUsingScreenNavigator( - screenName = ScreenNavigator.APPLICATION_PLATFORM_ACTIVITY, - bundle = - Bundle().apply { - putString(REDIRECT_STATUS, Constants.LAUNCH) - putString(APP_PLATFORM_APPLICANT_TYPE, CUSTOMER_CAPITAL) - putString(APP_PLATFORM_VERTICAL_TYPE, HPC_LOGIN) - putString( - APP_PLATFORM_APPLICATION_TYPE, - FirebaseRemoteConfigHelper.getString( - PAN_VERIFICATION_HPC_APPLICATION_NAME - ) - .ifEmpty { HPC } - ) - putString(APP_ACTION, APP_PLATFORM_LAUNCH) - putParcelableArrayList( - ADDITIONAL_PARAMETERS, - ArrayList( - listOf( - LineItem(SOURCE, HPC), - LineItem(Constants.JOURNEY_TYPE_CAMEL_CASE, ONBOARDING) - ) - ) - ) - }, - clearTask = isTaskRoot.not() - ) - } - isAllMandatoryPermissionGranted(permissionsManager).not() && - PreferenceManager.getBooleanPreference(SKIP_PERMISSION_SCREEN, false).not() -> { - handlePermissionState() - } - } - cancelRedirectionJob() - } - - private fun shouldShowOnBoarding(): Boolean { - return PreferenceManager.getBooleanPreference(key = ON_BOARDING_BASIC_DETAILS_BACKEND) && - isUserFilledOnBoardingBasicDetails().not() && - PreferenceManager.getBooleanPreference(key = ON_BOARDING_BASIC_DETAILS_VISIT) - } - - private fun shouldShowApOnBoarding(): Boolean { - return PreferenceManager.getBooleanPreference(key = LOGIN_ON_BOARDING_AP_ENABLE) && - isUserFilledApOnBoardingBasicDetails().not() && - PreferenceManager.getBooleanPreference(key = ON_BOARDING_BASIC_DETAILS_AP_VISIT) - } - - override fun shouldUpdateApp(appUpgradeSettings: AppUpgradeResponse) { - if (appUpgradeSettings.hardUpgrade.orTrue() || appUpgradeSettings.softUpgrade.orTrue()) { - val intent = - Intent(this, UpdateAppActivity::class.java).apply { - putExtra(APP_UPGRADE_DATA, appUpgradeSettings) - } - startActivity(intent) - finish() - } - } - - private fun navigateToDeepLink() { - dashboardAnalytics.sendHandleDeeplinkEvent(deeplinkData) - DeeplinkManager.handleDeeplinkData( - activity = this, - jsonObject = deeplinkData?.deeplinkJsonObject, - uriData = deeplinkData?.uriData, - type = deeplinkData?.deeplinkType.toString(), - deepLinkValue = deeplinkData?.deeplinkValue, - originalLink = deeplinkData?.originalDeeplink - ) - } - - private fun navigateUsingScreenNavigator( - screenName: String, - bundle: Bundle?, - clearTask: Boolean - ) { - screenNavigator.startActivityWithNoActivityStack( - activity = this, - screenName = screenName, - bundle = bundle, - clearTask = clearTask - ) - } - - override fun receivedDeeplink() { - isDeeplinkAvailable = true - } - - override fun onOrganicInstall() { - redirectToDestination() - } -} diff --git a/android/app/src/main/java/com/naviapp/home/activity/StoryActivity.kt b/android/app/src/main/java/com/naviapp/home/activity/StoryActivity.kt deleted file mode 100644 index bd78760b29..0000000000 --- a/android/app/src/main/java/com/naviapp/home/activity/StoryActivity.kt +++ /dev/null @@ -1,416 +0,0 @@ -/* - * - * * Copyright © 2022 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.activity - -import com.navi.common.R as CommonR -import android.annotation.SuppressLint -import android.graphics.drawable.Drawable -import android.os.Bundle -import android.os.Handler -import android.view.MotionEvent -import android.view.View -import android.view.View.OnTouchListener -import androidx.core.view.isVisible -import androidx.databinding.DataBindingUtil -import androidx.lifecycle.ViewModelProvider -import com.bumptech.glide.load.DataSource -import com.bumptech.glide.load.engine.GlideException -import com.bumptech.glide.request.RequestListener -import com.bumptech.glide.request.target.Target -import com.navi.base.model.ActionData -import com.navi.base.model.CtaData -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.common.model.ModuleNameV2 -import com.navi.common.ui.activity.BaseActivity -import com.navi.common.utils.* -import com.navi.insurance.util.FALSE -import com.navi.naviwidgets.utils.toCtaData -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.common.navigator.NaviDeepLinkNavigator -import com.naviapp.common.navigator.NaviDeepLinkNavigator.HOME -import com.naviapp.databinding.StoryLayoutBinding -import com.naviapp.models.AppStories -import com.naviapp.models.StoryHeader -import com.naviapp.storyview.StoriesProgressView -import com.naviapp.storyview.StoryVM -import com.naviapp.utils.Constants.CARD_GROUP_REFERENCE_ID -import com.naviapp.utils.Constants.DYNAMIC_CTA -import com.naviapp.utils.Constants.SOURCE -import com.naviapp.utils.isNetworkAvailable -import com.naviapp.utils.loadUrlIntoImageView - -class StoryActivity() : BaseActivity(), StoriesProgressView.StoriesListener { - private lateinit var binding: StoryLayoutBinding - private val storyVM by lazy { ViewModelProvider(this).get(StoryVM::class.java) } - private var counter = 0 - override val screenName: String - get() = NaviAnalytics.STORIES_SCREEN - override val moduleName: ModuleNameV2 - get() = ModuleNameV2.PL - var pressTime = 0L - var limit = 500L - private val naviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Stories() - private var data: AppStories? = null - private var shouldNavigateToHome = true - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = DataBindingUtil.setContentView(this, R.layout.story_layout) - super.setContentView(binding.root) - handleDeepLink() - initObserver() - initError( - viewModel = storyVM, - dialogDismissClicked = { handleDeepLink() }, - showFullScreenError = true - ) - overridePendingTransition(CommonR.anim.activity_slide_in_right, R.anim.nothing) - TemporaryStorageHelper.updateSingleItem(TemporaryStorageHelper.STORY) - } - - private fun handleDeepLink() { - val cardGroupReferenceId = intent.extras?.getString(CARD_GROUP_REFERENCE_ID).orEmpty() - if (intent.extras?.getString(NAVIGATE_TO_HOME).orEmpty() == FALSE) { - shouldNavigateToHome = false - } - if (cardGroupReferenceId.isNotNullAndNotEmpty()) { - showLoader() - storyVM.fetchStories(getDensityName(this.baseContext).orEmpty(), cardGroupReferenceId) - } else { - data = intent.extras?.getParcelable(storyData) - initUI() - } - } - - private fun initObserver() { - storyVM.appStoriesData.observeNonNull(this@StoryActivity) { - hideLoader() - data = it - initUI() - } - storyVM.storyNextCta.observeNonNull(this@StoryActivity) { - hideLoader() - NaviDeepLinkNavigator.navigate(this, it.toCtaData()) - } - } - - @SuppressLint("ClickableViewAccessibility") - private val onTouchListener = OnTouchListener { v, event -> - when (event.action) { - MotionEvent.ACTION_DOWN -> { - pressTime = System.currentTimeMillis() - binding.stories.pause() - return@OnTouchListener false - } - MotionEvent.ACTION_UP -> { - val now = System.currentTimeMillis() - binding.stories.resume() - return@OnTouchListener limit < now - pressTime - } - } - false - } - - private fun initUI() { - val durations = data?.cards?.map { it.duration?.times(1000L) } - storyVM.stories.value = data?.cards - val landingPosition = data?.landingPosition ?: 0 - binding.stories.apply { - setStoriesCount(data?.total ?: 0) - setStoriesCountWithDurations(durations?.toTypedArray()) - startStories(landingPosition) - } - counter = landingPosition - setHeader(storyVM.stories.value?.get(counter)?.header) - setBtnData( - storyVM.stories.value?.get(counter)?.actionData, - storyVM.stories.value?.get(counter)?.referenceId - ) - binding.stories.setStoriesListener(this) - onFirstLoad() - - binding.reverse.setOnClickListener { binding.stories.reverse() } - binding.reverse.setOnTouchListener(onTouchListener) - - binding.skip.setOnClickListener { binding.stories.skip() } - binding.skip.setOnTouchListener(onTouchListener) - - binding.cross.setOnClickListener { - naviAnalyticsEventTracker.onExitStories() - if (shouldNavigateToHome) { - NaviDeepLinkNavigator.navigate(this, CtaData(url = HOME), finish = true) - } else { - onBackPressed() - } - overridePendingTransition(0, CommonR.anim.activity_slide_out_right) - } - } - - private fun setBtnData(actionData: ActionData?, referenceId: String?) { - binding.buttonData = actionData - actionData?.let { data -> - binding.button.setOnClickListener { - referenceId?.let { naviAnalyticsEventTracker.onStoriesRedirect(referenceId) } - var source: String? = null - if (data.url == DYNAMIC_CTA) { - data.parameters?.forEach { lineItem -> - when (lineItem.key) { - SOURCE -> - source = lineItem.value - } - } - source?.let { it1 -> - showLoader() - storyVM.getNextCta(source = it1) - } - - } else { - NaviDeepLinkNavigator.navigate(this, data.toCtaData()) - } - - } - } - } - - private fun setHeader(header: StoryHeader?) { - binding.headerTitle.text = header?.title - loadUrlIntoImageView(this@StoryActivity, header?.image.orEmpty(), binding.headerIcon) - } - - private fun updateList(index: Int) { - val list = storyVM.stories.value?.toMutableList() - if(list?.isNotEmpty().orFalse()) { - list?.set(index, list[index].copy(viewed = true)) - } - storyVM.stories.value = list - } - - fun onFirstLoad() { - if (!(storyVM.stories.value?.get(counter)?.viewed.orTrue())) { - Handler().post { binding.stories.pause() } - binding.loader.apply { - visibility = View.VISIBLE - playAnimation() - } - } - loadUrlIntoImageView( - this.baseContext, - storyVM.stories.value?.get(counter)?.content?.url.orEmpty(), - binding.image, - true, - object : RequestListener { - override fun onLoadFailed( - e: GlideException?, - model: Any?, - target: Target?, - isFirstResource: Boolean - ): Boolean { - - storyVM.stories.value?.getOrNull(counter)?.referenceId?.let { - naviAnalyticsEventTracker.onImageFailed(it, isNetworkAvailable()) - } - - binding.loader.apply { visibility = View.GONE } - if (!binding.reload.isVisible) { - binding.reload.visibility = View.VISIBLE - binding.reload.setOnClickListener { - binding.reload.visibility = View.GONE - onFirstLoad() - } - } - return false - } - - override fun onResourceReady( - resource: Drawable?, - model: Any?, - target: Target?, - dataSource: DataSource?, - isFirstResource: Boolean - ): Boolean { - updateList(counter) - binding.loader.apply { visibility = View.GONE } - naviAnalyticsEventTracker.onStorySplash( - storyVM.stories.value?.get(counter)?.referenceId.orEmpty() - ) - binding.reload.visibility = View.GONE - Handler().post { binding.stories.resume() } - storyVM.postStoryStatus( - storyVM.stories.value?.get(counter)?.referenceId.orEmpty() - ) - binding.image.setImageDrawable(resource) - return true - } - } - ) - } - - override fun onNext() { - if (counter >= storyVM.stories.value?.size.orZero() - 1) return - ++counter - setHeader(storyVM.stories.value?.get(counter)?.header) - setBtnData( - storyVM.stories.value?.get(counter)?.actionData, - storyVM.stories.value?.get(counter)?.referenceId - ) - if (!(storyVM.stories.value?.get(counter)?.viewed.orTrue())) { - Handler().post { binding.stories.pause() } - binding.loader.apply { - visibility = View.VISIBLE - playAnimation() - } - } - loadUrlIntoImageView( - this.baseContext, - storyVM.stories.value?.get(counter)?.content?.url.orEmpty(), - binding.image, - true, - object : RequestListener { - override fun onLoadFailed( - e: GlideException?, - model: Any?, - target: Target?, - isFirstResource: Boolean - ): Boolean { - storyVM.stories.value?.getOrNull(counter)?.referenceId?.let { - naviAnalyticsEventTracker.onImageFailed(it, isNetworkAvailable()) - } - - binding.loader.apply { visibility = View.GONE } - - if (!binding.reload.isVisible) { - binding.reload.visibility = View.VISIBLE - binding.reload.setOnClickListener { - counter-- - binding.reload.visibility = View.GONE - onNext() - } - } - - return false - } - - override fun onResourceReady( - resource: Drawable?, - model: Any?, - target: Target?, - dataSource: DataSource?, - isFirstResource: Boolean - ): Boolean { - naviAnalyticsEventTracker.onStorySplash( - storyVM.stories.value?.get(counter)?.referenceId.orEmpty() - ) - binding.loader.apply { visibility = View.GONE } - binding.reload.visibility = View.GONE - Handler().post { binding.stories.resume() } - updateList(counter) - storyVM.postStoryStatus( - storyVM.stories.value?.get(counter)?.referenceId.orEmpty() - ) - - return false - } - } - ) - } - - override fun onPrev() { - if (counter - 1 < 0) return - --counter - setHeader(storyVM.stories.value?.get(counter)?.header) - setBtnData( - storyVM.stories.value?.get(counter)?.actionData, - storyVM.stories.value?.get(counter)?.referenceId - ) - if (!(storyVM.stories.value?.get(counter)?.viewed.orTrue())) { - Handler().post { binding.stories.pause() } - binding.loader.apply { - visibility = View.VISIBLE - playAnimation() - } - } - loadUrlIntoImageView( - this.baseContext, - (storyVM.stories.value?.get(counter)?.content?.url.orEmpty()), - binding.image, - true, - object : RequestListener { - override fun onLoadFailed( - e: GlideException?, - model: Any?, - target: Target?, - isFirstResource: Boolean - ): Boolean { - - storyVM.stories.value?.getOrNull(counter)?.referenceId?.let { - naviAnalyticsEventTracker.onImageFailed(it, isNetworkAvailable()) - } - - binding.loader.apply { visibility = View.GONE } - if (!binding.reload.isVisible) { - binding.reload.visibility = View.VISIBLE - binding.reload.setOnClickListener { - counter++ - binding.reload.visibility = View.GONE - onPrev() - } - } - Handler().post { binding.stories.pause() } - return false - } - - override fun onResourceReady( - resource: Drawable?, - model: Any?, - target: Target?, - dataSource: DataSource?, - isFirstResource: Boolean - ): Boolean { - - binding.loader.apply { visibility = View.GONE } - binding.reload.visibility = View.GONE - updateList(counter) - Handler().post { binding.stories.resume() } - - return false - } - } - ) - } - - override fun onComplete() { - naviAnalyticsEventTracker.onExitStories() - Handler().post { overridePendingTransition(0, CommonR.anim.activity_slide_out_right) } - if (shouldNavigateToHome) { - NaviDeepLinkNavigator.navigate(this, CtaData(url = HOME), finish = true) - } else { - onBackPressed() - } - } - - override fun onDestroy() { - binding.stories.destroy() - super.onDestroy() - } - - companion object { - const val storyData = "StoryData" - const val NAVIGATE_TO_HOME = "navigateToHome" - } - - override fun onBackPressed() { - super.onBackPressed() - if (shouldNavigateToHome) { - NaviDeepLinkNavigator.navigate(this, CtaData(url = HOME), finish = true) - } - } -} 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 7ce1bfd7d8..6297a0a766 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 @@ -18,6 +18,8 @@ import android.text.TextUtils import android.util.Log import android.view.View import android.view.ViewTreeObserver +import android.view.ViewGroup +import android.webkit.WebViewClient import android.widget.Toast import androidx.activity.SystemBarStyle import androidx.activity.compose.setContent @@ -189,7 +191,6 @@ import com.naviapp.home.dashboard.ui.DashboardFragment import com.naviapp.home.dashboard.ui.ProductFragment.DashboardTypes import com.naviapp.home.dashboard.viewmodels.InvestmentVmV2 import com.naviapp.home.dashboard.viewmodels.LoanTabVm -import com.naviapp.home.fragment.HomeFragment import com.naviapp.home.listener.StickyBottomNudgeListener import com.naviapp.home.model.BottomBarTabType import com.naviapp.home.viewmodel.HomeVM @@ -460,8 +461,7 @@ class HomePageActivity : selectedTabId = tabId handleStatusBarColor() bottomNavBarVM.triggerTabClickedEvent( - analytics = bottomNavBarVM.getBottomBarTabData(tabId)?.metaData?.clickedData, - defaultEvent = BottomBarUtils.getClickedEventName(tabId), + tabId = tabId, screenName = screenName ) } @@ -485,7 +485,7 @@ class HomePageActivity : } private fun navigateToHomeTab() { - updateTab(screen = HomeFragment.TAG) + updateTab(screen = BottomBarTabType.HOME.name) } private fun startPeriodicDataUploadWorker() { @@ -1078,11 +1078,7 @@ class HomePageActivity : dialogBoxWithSpinnerView.setOnCancelListener( listener = object : DialogCancelListener { - override fun handleDialogCancel() { - (supportFragmentManager.findFragmentByTag(HomeFragment.TAG) - as? HomeFragment) - ?.handleDialogCancel() - } + override fun handleDialogCancel() {} } ) safelyOpenFragment( @@ -1106,11 +1102,7 @@ class HomePageActivity : commonDialogBox.setOnCancelListener( listener = object : DialogCancelListener { - override fun handleDialogCancel() { - (supportFragmentManager.findFragmentByTag(HomeFragment.TAG) - as? HomeFragment) - ?.handleDialogCancel() - } + override fun handleDialogCancel() {} } ) safelyOpenFragment(fragment = commonDialogBox, tag = CommonDialogBox.TAG) @@ -1516,10 +1508,6 @@ class HomePageActivity : private fun initHomeItems() { if (homeVM.isUserLoggedIn()) { callHomeItemsApi() - bottomNavBarVM.fetchBottomBarData( - permissionGranted = isAllMandatoryPermissionGranted(this), - installedModules = getInstalledDynamicModulesCommaSeparated() - ) } } diff --git a/android/app/src/main/java/com/naviapp/home/compose/components/BottomBarFragmentManager.kt b/android/app/src/main/java/com/naviapp/home/compose/components/BottomBarFragmentManager.kt index d4e0da4974..bd4f38c22b 100644 --- a/android/app/src/main/java/com/naviapp/home/compose/components/BottomBarFragmentManager.kt +++ b/android/app/src/main/java/com/naviapp/home/compose/components/BottomBarFragmentManager.kt @@ -30,7 +30,6 @@ import com.naviapp.home.dashboard.ui.DashboardFragment import com.naviapp.home.dashboard.ui.InvestmentFragmentV2 import com.naviapp.home.dashboard.ui.InvestmentsFragment import com.naviapp.home.dashboard.ui.ProductFragment -import com.naviapp.home.fragment.HomeFragment import com.naviapp.home.fragment.LoanContainerFragment import com.naviapp.home.fragment.LoanTabFragment import com.naviapp.utils.Constants @@ -69,8 +68,8 @@ private fun getFragment( listState: () -> LazyListState? = { null } ): Fragment { return when (screen) { - HomeFragment.TAG -> HomeFragment.newInstance(bundle) - DashboardFragment.TAG -> + FundListingFragmentV2.TAG -> getInvestmentTabFragment(bundle, investmentTabRevampEnabled, listState) + else -> getDashboardFragment( activity = activity, screen = screen, @@ -80,9 +79,6 @@ private fun getFragment( isLoansTabRevampEnabled = isLoansTabRevampEnabled, listState = listState ) - - FundListingFragmentV2.TAG -> getInvestmentTabFragment(bundle, investmentTabRevampEnabled, listState) - else -> HomeFragment.newInstance(bundle) } } diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/ui/InvestmentFragmentV2.kt b/android/app/src/main/java/com/naviapp/home/dashboard/ui/InvestmentFragmentV2.kt index e822509d51..fcd1cb9fae 100644 --- a/android/app/src/main/java/com/naviapp/home/dashboard/ui/InvestmentFragmentV2.kt +++ b/android/app/src/main/java/com/naviapp/home/dashboard/ui/InvestmentFragmentV2.kt @@ -1,7 +1,6 @@ package com.naviapp.home.dashboard.ui import InvestmentsTab -import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -31,7 +30,6 @@ import com.navi.analytics.utils.NaviTrackEvent import com.navi.base.deeplink.DeepLinkManager import com.navi.base.model.CtaData import com.navi.base.utils.orFalse -import com.navi.common.listeners.DashboardFragmentListener import com.navi.common.ui.errorview.FullScreenErrorComposeView import com.navi.common.ui.fragment.BaseFragment import com.navi.common.utils.setStatusBarColorInt @@ -55,7 +53,6 @@ class InvestmentFragmentV2( private val sharedVM by lazy { ViewModelProvider(requireActivity())[SharedVM::class.java] } - private var dashboardFragmentListener: DashboardFragmentListener? = null private var isFirstHiddenCallDone = false override val screenName: String get() = INVESTMENT_TAB_INIT_LANDING_PAGE @@ -147,11 +144,6 @@ class InvestmentFragmentV2( } } - override fun onAttach(context: Context) { - super.onAttach(context) - dashboardFragmentListener = context as? DashboardFragmentListener - } - private fun sendInitEvent() { NaviTrackEvent.trackEvent(screenName) } @@ -181,7 +173,6 @@ class InvestmentFragmentV2( is InvestmentVmV2.InvestmentsTabUiTronScreenState.Success -> { InvestmentsTab( investmentsTabVm = viewModel, - dashboardFragmentListener = dashboardFragmentListener, toggleStatusBarColor = { toggleStatusBarColor(it) }, lazyListState = listState ) diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/ui/compose/InvestmentsTab.kt b/android/app/src/main/java/com/naviapp/home/dashboard/ui/compose/InvestmentsTab.kt index 0c722cad45..a1f960a78a 100644 --- a/android/app/src/main/java/com/naviapp/home/dashboard/ui/compose/InvestmentsTab.kt +++ b/android/app/src/main/java/com/naviapp/home/dashboard/ui/compose/InvestmentsTab.kt @@ -26,7 +26,6 @@ import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.navi.base.utils.orZero -import com.navi.common.listeners.DashboardFragmentListener import com.navi.uitron.model.UiTronResponse import com.navi.uitron.render.UiTronRenderer import com.naviapp.forge.model.ScreenDefinition @@ -41,7 +40,6 @@ import kotlinx.coroutines.flow.distinctUntilChanged @Composable fun InvestmentsTab( investmentsTabVm: InvestmentVmV2 = hiltViewModel(), - dashboardFragmentListener: DashboardFragmentListener? = null, toggleStatusBarColor: (String) -> Unit, lazyListState: () -> LazyListState? ) { @@ -58,7 +56,6 @@ fun InvestmentsTab( if (state is InvestmentVmV2.InvestmentsTabUiTronScreenState.Success) { RenderWidgets( investmentsTabVm = investmentsTabVm, - dashboardFragmentListener = dashboardFragmentListener, data = state.data, toggleStatusBarColor = toggleStatusBarColor, lazyListState = lazyListState @@ -73,16 +70,11 @@ fun InvestmentsTab( @Composable fun RenderWidgets( investmentsTabVm: InvestmentVmV2 = hiltViewModel(), - dashboardFragmentListener: DashboardFragmentListener? = null, data: ScreenDefinition, toggleStatusBarColor: (String) -> Unit, lazyListState: () -> LazyListState? = { null } ) { val scrollState = lazyListState() ?: rememberLazyListState() - val isScrollingDown = scrollState.isScrollingDown() - LaunchedEffect(isScrollingDown) { - dashboardFragmentListener?.toggleBottomNavAndFabButton(isScrollingDown.not()) - } LaunchedEffect(scrollState) { // Observe the scroll changes in the LazyListState diff --git a/android/app/src/main/java/com/naviapp/home/fragment/HomeFragment.kt b/android/app/src/main/java/com/naviapp/home/fragment/HomeFragment.kt deleted file mode 100644 index c6c39e1f15..0000000000 --- a/android/app/src/main/java/com/naviapp/home/fragment/HomeFragment.kt +++ /dev/null @@ -1,1415 +0,0 @@ -/* - * - * * Copyright © 2019-2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.fragment - -import android.Manifest -import android.animation.ObjectAnimator -import android.content.Context -import android.content.Intent -import android.net.Uri -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.View.GONE -import android.view.View.VISIBLE -import android.view.ViewGroup -import android.widget.LinearLayout -import android.widget.Toast -import androidx.core.widget.NestedScrollView -import androidx.databinding.DataBindingUtil -import androidx.fragment.app.activityViewModels -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.repeatOnLifecycle -import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED -import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED -import com.google.android.play.core.install.model.AppUpdateType -import com.navi.amc.common.activity.CheckerActivity -import com.navi.amc.common.taskProcessor.AmcTaskManager -import com.navi.amc.navigator.NaviAmcDeeplinkNavigator -import com.navi.amc.utils.Constant -import com.navi.amc.utils.TempStorageHelper -import com.navi.analytics.utils.NaviTrackEvent -import com.navi.base.deeplink.util.DeeplinkConstants -import com.navi.base.model.ActionData -import com.navi.base.model.AnalyticsEvent -import com.navi.base.model.BottomSheetData -import com.navi.base.model.CtaData -import com.navi.base.model.CtaType -import com.navi.base.model.GenericAnalyticsData -import com.navi.base.model.LineItem -import com.navi.base.model.NaviClickAction -import com.navi.base.model.NaviWidgetClickWithActionData -import com.navi.base.model.NaviWidgetClickWithCtaData -import com.navi.base.sharedpref.PreferenceManager -import com.navi.base.utils.AppLaunchUtils -import com.navi.base.utils.AppLaunchUtils.HOME_FEATURE_NEGATIVE_REINFORCEMENT -import com.navi.base.utils.AppLaunchUtils.HOME_FEATURE_POSITIVE_REINFORCEMENT -import com.navi.base.utils.AppLaunchUtils.HOME_ITEMS_LAUNCH -import com.navi.base.utils.BaseUtils -import com.navi.base.utils.orElse -import com.navi.base.utils.orFalse -import com.navi.base.utils.orTrue -import com.navi.common.constants.GI -import com.navi.common.constants.NPS_SUBMIT_DIALOG -import com.navi.common.customview.UiTronAndroidView -import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper -import com.navi.common.listeners.DashboardFragmentListener -import com.navi.common.listeners.DialogCancelListener -import com.navi.common.listeners.NewBottomSheetListener -import com.navi.common.managers.NaviLocationManager -import com.navi.common.managers.PermissionsManager -import com.navi.common.model.PreviousScreenNameRequest -import com.navi.common.model.RewardsAnnouncementData -import com.navi.common.model.common.CollapsingTopNavConfig -import com.navi.common.model.common.Header -import com.navi.common.model.common.UiTronDialog -import com.navi.common.ui.activity.BaseActivity -import com.navi.common.ui.fragment.NewCommonBottomSheet -import com.navi.common.ui.fragment.RewardsAnnouncementFragment -import com.navi.common.uitron.model.action.LayoutStateIds -import com.navi.common.uitron.model.action.UpdateViewStateActionV2 -import com.navi.common.utils.Constants.KEY_UPCOMING_LOAN -import com.navi.common.utils.TemporaryStorageHelper -import com.navi.common.utils.getDensityName -import com.navi.common.utils.getDeviceSignature -import com.navi.common.utils.getInstalledDynamicModulesCommaSeparated -import com.navi.common.utils.getLocalStorageLocation -import com.navi.common.utils.getNetworkType -import com.navi.common.utils.getSessionId -import com.navi.common.utils.isInstalledInProfile -import com.navi.common.utils.observeNonNull -import com.navi.common.utils.setStatusBarColorInt -import com.navi.common.utils.toActionData -import com.navi.design.utils.dpToPxInInt -import com.navi.design.utils.ifMeasured -import com.navi.design.utils.parseColorSafe -import com.navi.insurance.navigator.NaviInsuranceDeeplinkNavigator -import com.navi.naviwidgets.actions.ShowInfoBottomSheetV3Action -import com.navi.naviwidgets.adapters.NaviAdapter -import com.navi.naviwidgets.callbacks.WidgetCallback -import com.navi.naviwidgets.models.NaviUiTronWidget -import com.navi.naviwidgets.models.NaviWidget -import com.navi.naviwidgets.models.OptionSelectBottomSheetData -import com.navi.naviwidgets.models.WidgetChangedData -import com.navi.naviwidgets.models.response.ActionIcon -import com.navi.naviwidgets.models.response.AdditionalBottomSheetData -import com.navi.naviwidgets.models.response.BottomSheetInfoV2 -import com.navi.naviwidgets.models.response.UpcomingLoanDetail -import com.navi.naviwidgets.utils.CURRENT_VERSION_IN_STORE -import com.navi.naviwidgets.utils.toCtaData -import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl -import com.navi.naviwidgets.widgets.BottomSheetClickListener -import com.navi.uitron.render.UiTronRenderer -import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics -import com.naviapp.analytics.utils.NaviAnalytics.Companion.AMC_BTN_HOMEPAGE_INVEST_NOW -import com.naviapp.app.NaviApplication -import com.naviapp.common.adapter.OptionSelectorListener -import com.naviapp.common.customview.OptionSelectBottomsheet -import com.naviapp.common.fragment.CommonDialogBox -import com.naviapp.common.fragment.DownLoadPopupFragment -import com.naviapp.common.fragment.InfoBottomSheetListener -import com.naviapp.common.fragment.InfoBottomSheetV3 -import com.naviapp.common.fragment.LoanRepaymentBottomSheet -import com.naviapp.common.fragment.NetPromoterScoreFragment -import com.naviapp.common.navigator.NaviDeepLinkNavigator -import com.naviapp.common.navigator.NaviDeepLinkNavigator.WEB_APP_UPDATE -import com.naviapp.common.navigator.ScreenNavigator -import com.naviapp.common.viewmodel.InAppUpdateVM -import com.naviapp.dashboard.listeners.PlayStoreActionListener -import com.naviapp.dashboard.listeners.ShareAppListener -import com.naviapp.dashboard.rating.PlayStoreInAppRatingHelper -import com.naviapp.dashboard.viewmodels.DashboardSharedVM -import com.naviapp.dashboard.viewmodels.RatingVM -import com.naviapp.dashboard.views.fragment.PaymentFailedBottomSheet -import com.naviapp.dashboard.views.fragment.ShareAppFragment -import com.naviapp.databinding.FragmentHomeLnBinding -import com.naviapp.home.activity.NewDashboardActivity -import com.naviapp.home.activity.StoryActivity -import com.naviapp.home.listener.StickyBottomNudgeListener -import com.naviapp.home.viewmodel.HomeVM -import com.naviapp.home.viewmodel.NotificationVM -import com.naviapp.home.viewmodel.SharedVM -import com.naviapp.models.PageStatusType -import com.naviapp.models.request.RateDataRequest -import com.naviapp.nps.viewmodel.NpsVM -import com.naviapp.part_prepayment.PartPrePaymentActivity -import com.naviapp.part_prepayment.PartPrePaymentActivity.Companion.REPAYMENT_TYPE -import com.naviapp.payment.activities.NaviPaymentActivity -import com.naviapp.payment.fragments.PaymentBaseFragment -import com.naviapp.payment.fragments.PaymentType -import com.naviapp.payment.listeners.PaymentInitListener -import com.naviapp.payment.models.Amount -import com.naviapp.personalloan.getloan.activities.GetLoanActivity -import com.naviapp.personalloan.getloan.loandetails.fragments.UiTronBottomSheetFragment -import com.naviapp.utils.Constants -import com.naviapp.utils.Constants.ANIMATE -import com.naviapp.utils.Constants.EXPAND_STATE_VIEW_EVENT -import com.naviapp.utils.Constants.HERO_TEXT_ANIMATE -import com.naviapp.utils.Constants.HOME_FEATURE -import com.naviapp.utils.Constants.HOME_STATUS_BAR_COLOR -import com.naviapp.utils.Constants.LAST_SESSION_ID -import com.naviapp.utils.Constants.LOAN_TYPE -import com.naviapp.utils.Constants.Notification.IN_APP_NOTIFICATION -import com.naviapp.utils.Constants.PAYMENT_TYPE -import com.naviapp.utils.Constants.RATING_COUNT -import com.naviapp.utils.Constants.STORY_ICON_CHANGE -import com.naviapp.utils.Constants.STORY_ICON_INVISIBLE -import com.naviapp.utils.Constants.TRANSPARENT_COLOR -import com.naviapp.utils.Constants.WHITE_COLOR -import com.naviapp.utils.LOAN_ACCOUNT_NUMBER -import com.naviapp.utils.LOAN_APPLICATION_ID -import com.naviapp.utils.NOTIFICATION_PERMISSION_SHOWN -import com.naviapp.utils.OFFER_ID -import com.naviapp.utils.copyText -import com.naviapp.utils.giDeeplink -import com.naviapp.utils.isAllMandatoryPermissionGranted -import dagger.hilt.android.AndroidEntryPoint -import java.util.concurrent.atomic.AtomicBoolean -import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.launch - -@AndroidEntryPoint -class HomeFragment : - PaymentBaseFragment(), - WidgetCallback, - PlayStoreActionListener, - DialogCancelListener, - NewBottomSheetListener, - InfoBottomSheetListener { - private lateinit var binding: FragmentHomeLnBinding - private var playStoreInAppRatingHelper: PlayStoreInAppRatingHelper? = null - private val ratingVM by lazy { ViewModelProvider(this)[RatingVM::class.java] } - private val naviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Home() - private val widgetNaviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Widget() - private val npsVM by lazy { ViewModelProvider(requireActivity())[NpsVM::class.java] } - private val notificationVM by lazy { - ViewModelProvider(requireActivity())[NotificationVM::class.java] - } - private val bottomBarSharedVM by lazy { - ViewModelProvider(requireActivity())[SharedVM::class.java] - } - private var permissionsManager: PermissionsManager? = null - private val locationManager = NaviLocationManager() - - private val naviAdapter = NaviAdapter(widgetCallback = this, factory = ViewHolderFactoryImpl()) - private val viewModel by lazy { ViewModelProvider(requireActivity())[HomeVM::class.java] } - private var analyticsStartTs = System.currentTimeMillis() - private var totalRenderTs = System.currentTimeMillis() - private var isDataFromCache = false - private var appUpdateShimmer: ObjectAnimator? = null - private var dashboardFragmentListener: DashboardFragmentListener? = null - private var stickyBottomNudgeListener: StickyBottomNudgeListener? = null - private var isAppBarCollapsed: AtomicBoolean = AtomicBoolean(false) - private lateinit var bottomSheetBehavior: BottomSheetBehavior - private val inAppUpdateVM by activityViewModels() - - override val screenName: String - get() = NaviAnalytics.NEW_HOME - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home_ln, container, false) - initError( - viewModel = viewModel, - dialogDismissClicked = { reInitData() }, - showFullScreenError = true, - container = R.id.container - ) - analyticsStartTs = System.currentTimeMillis() - totalRenderTs = System.currentTimeMillis() - naviAnalyticsEventTracker.onHomePageCreated() - activity?.run { permissionsManager = PermissionsManager(this) } - initUI() - initListener() - initObservers() - fetchCards() - viewModel.checkForLoanDetailsWVPrefetchFirebaseCheck() - fetchHomeFeature() - fetchStories() - initializationPaymentDetail(isHomePageNeededToRelaunch = true) - sendFCEvent() - return binding.root - } - - override fun onResume() { - super.onResume() - if (viewModel.shouldMakeAPICall() && isVisible) { - viewModel.triggerOnHiddenUiTronActionList() - apiCallingWithCondition(isVisible.not()) - if (TemporaryStorageHelper.isDataModified(TemporaryStorageHelper.STORY)) { - fetchStories() - } - } - dashboardFragmentListener?.scrollUpBottomNav() - viewModel.updateShouldMakeAPICallState(shouldRefresh = true) - viewModel.updateUPILiteBalance() - } - - override fun onHiddenChanged(hidden: Boolean) { - super.onHiddenChanged(hidden) - viewModel.triggerOnHiddenUiTronActionList() - apiCallingWithCondition(hidden) - dashboardFragmentListener?.toggleBottomNavBehavior(hidden.not()) - stickyBottomNudgeListener?.setAppNudgeVisibility( - hidden.not() && inAppUpdateVM.showAppUpdateStrip.value != false, - viewModel.homeItems.value?.extraData?.appUpdateData - ) - if (hidden.not()) { - viewModel.homeItems.value?.header?.let { setActivityStatusBarColor() } - } - } - - private fun setActivityStatusBarColor() { - viewModel.homeItems.value?.header?.collapsingTopNavConfig?.statusBarColor?.let { - activity?.setStatusBarColorInt( - if (viewModel.isNestedScrollViewExpanded || isDrawerOpen()) - WHITE_COLOR.parseColorSafe() - else it.parseColorSafe(HOME_STATUS_BAR_COLOR) - ) - } - } - - private fun isDrawerOpen(): Boolean { - return viewModel.isNotificationDrawerOpen || viewModel.isProfileDrawerOpen - } - - private fun apiCallingWithCondition(hidden: Boolean) { - TemporaryStorageHelper.updateViewVisibility(TemporaryStorageHelper.HOME, hidden) - if (TemporaryStorageHelper.isDataModified(TemporaryStorageHelper.HOME)) { - fetchCards(true) - } else if (hidden.not()) { - fetchCards(false) - } - } - - override fun widgetAnalytics(analyticsEvent: AnalyticsEvent?) { - NaviAnalytics.naviAnalytics.sendAnalyticsEvent(analyticsEvent) - } - - override fun widgetAnalytics(genericAnalyticsData: GenericAnalyticsData?) { - NaviAnalytics.naviAnalytics.sendGenericAnalyticsData(genericAnalyticsData) - } - - private fun fetchStories() { - if (isAllMandatoryPermissionGranted(permissionsManager)) { - context?.let { viewModel.fetchStories(getDensityName(it).orEmpty()) } - } else { - hideStoryIcon() - } - } - - private fun fetchHomeFeature() { - if (BaseUtils.isUserLoggedIn()) viewModel.fetchHomeFeature(HOME_FEATURE) - } - - private fun onRatingCard(requestData: RateDataRequest) { - NaviAnalytics.naviAnalytics.RatingDetail().onAppRatingWidgetShown() - if (!isAdded || activity?.isFinishing.orTrue()) return - activity?.apply { - context?.let { - playStoreInAppRatingHelper?.inAppRatingCallAgain( - this, - this@HomeFragment, - requestData, - it - ) - } - } - } - - private fun fetchCards(showLoader: Boolean = false) { - /** - * TODO: Remove this check in the next release. - * - * The issue is with `moveToHomeTab` function in NewDashboardActivity and have added a check - * there as well. - **/ - if (BaseUtils.isUserLoggedIn()) { - if ( - showLoader && - !paymentVM.isPaymentLoaderShowing() && - viewModel.isProfileDrawerOpen.not() - ) { - showLoader() - } else { - naviAnalyticsEventTracker.onHomePageInit( - System.currentTimeMillis() - analyticsStartTs - ) - } - naviAnalyticsEventTracker.onHomePageApiCall() - analyticsStartTs = System.currentTimeMillis() - viewModel.fetchHomeItems( - showLoader = showLoader, - density = getDensityName(requireContext()), - connectivityType = getNetworkType(requireContext()), - availableAppVersionCode = - PreferenceManager.getIntPreferenceApp(CURRENT_VERSION_IN_STORE), - isPermissionGranted = isAllMandatoryPermissionGranted(permissionsManager), - installedModules = getInstalledDynamicModulesCommaSeparated(), - clearReferralPopupPreferences = true - ) - } else { - naviAnalyticsEventTracker.onFetchHomeCardsForLogoutUser(screenName) - redirectToLoginPage() - } - } - - private fun redirectToLoginPage() { - NaviDeepLinkNavigator.navigate( - requireActivity(), - CtaData(url = DeeplinkConstants.REGISTRATION), - clearTask = true - ) - } - - private fun initUI() { - binding.shimmerLayout.startShimmer() - bottomSheetBehavior = BottomSheetBehavior.from(binding.bottomSheet) - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.expandedOffset = dpToPxInInt(HEADER_HEIGHT) - binding.apply { - root.ifMeasured { - if (bottomSheetBehavior.peekHeight == DEFAULT_BOTTOM_SHEET_HEIGHT) { - bottomSheetBehavior.peekHeight = - root.height - dpToPxInInt(BANNER_HEIGHT) + dpToPxInInt(CORNER_RADIUS_HEIGHT) - } - } - bottomSheetBehavior.state = STATE_EXPANDED - } - } - - private fun reInitData() { - binding.shimmerLayout.visibility = VISIBLE - binding.nestedScrollView.visibility = GONE - binding.shimmerLayout.startShimmer() - fetchCards() - fetchStories() - } - - override fun onAttach(context: Context) { - super.onAttach(context) - stickyBottomNudgeListener = context as? StickyBottomNudgeListener - dashboardFragmentListener = context as? DashboardFragmentListener - paymentInitListener = context as? PaymentInitListener - playStoreInAppRatingHelper = PlayStoreInAppRatingHelper(context) - } - - private fun initObservers() { - val sharedVM = activity?.let { ViewModelProvider(it)[DashboardSharedVM::class.java] } - - viewModel.appStoriesData.observeNonNull(viewLifecycleOwner) { toShowAvatar() } - viewModel.homeFeatures.observeNonNull(viewLifecycleOwner) { - if ( - it.ppeFeatures?.positiveReinforcement?.cta != null && - it.ppeFeatures.positiveReinforcement.enable == true && - AppLaunchUtils.isLandingFirstTimeAfterAppOpen( - HOME_FEATURE_POSITIVE_REINFORCEMENT - ) - ) { - AppLaunchUtils.setAppOpenStatus(HOME_FEATURE_POSITIVE_REINFORCEMENT) - onClick(it.ppeFeatures.positiveReinforcement.cta) - } else if ( - it.ppeFeatures?.negativeReinforcement?.cta != null && - it.ppeFeatures.negativeReinforcement.enable == true && - AppLaunchUtils.isLandingFirstTimeAfterAppOpen( - HOME_FEATURE_NEGATIVE_REINFORCEMENT - ) - ) { - AppLaunchUtils.setAppOpenStatus(HOME_FEATURE_NEGATIVE_REINFORCEMENT) - onClick(it.ppeFeatures.negativeReinforcement.cta) - } else if (it.appRatingPopup?.enable == true) { - val requestData = - RateDataRequest( - voteCount = RATING_COUNT, - comment = resources.getString(R.string.dummy_rating) - ) - onRatingCard(requestData) - } else if (it.appSharePopup?.enable == true) { - it.appSharePopup?.appShareBannerWidget?.body?.let { cardData -> - val shareBottomSheet = ShareAppFragment.getInstance(cardData = cardData) - shareBottomSheet.setListener( - object : ShareAppListener { - override fun onShareClick(ctaData: CtaData) { - NaviDeepLinkNavigator.navigate(activity, ctaData = ctaData) - } - } - ) - naviAnalyticsEventTracker.onInAppSharePopupDisplayed() - safelyShowBottomSheet(shareBottomSheet, ShareAppFragment.TAG) - } - } - - it.survey?.let { npsResponse -> - safelyShowDialogFragment( - NetPromoterScoreFragment.getInstance(npsResponse), - NetPromoterScoreFragment.TAG - ) - } - } - viewModel.homeItems.observe(viewLifecycleOwner) { response -> - TemporaryStorageHelper.updateApiTs(TemporaryStorageHelper.HOME) - naviAnalyticsEventTracker.onHomePageApiResponse( - System.currentTimeMillis() - analyticsStartTs - ) - analyticsStartTs = System.currentTimeMillis() - binding.shimmerLayout.stopShimmer() - binding.shimmerLayout.visibility = GONE - binding.header.visibility = VISIBLE - response?.header?.let { handleHeader(it) } - response?.contentWidget?.let { contentWidget -> - val composeWidgets = - contentWidget.filter { - it.widgetNameForBaseAdapter == NaviUiTronWidget.WIDGET_NAME - } - showUitronWidgets(binding.composeViewContainer, composeWidgets, this@HomeFragment) - } - response?.extraData?.rewardsIntroPopup?.let { readRewardsAnnouncementData(it) } - response?.extraData?.uitronData?.let { showUiTronDialog(it.uiTronDialog) } - response?.extraData?.isNotificationDrawerEnabled?.let { - sharedVM?.setNotificationDrawerEnabled(it) - } - if (response?.extraData?.bottomStickyNudge != null) { - stickyBottomNudgeListener?.setAppNudgeVisibility( - true, - response.extraData?.bottomStickyNudge - ) - } else if ( - response?.extraData?.appUpdateData != null && - NaviApplication.instance.getEnableAppUpdate() - ) { - stickyBottomNudgeListener?.setAppNudgeVisibility( - true, - response.extraData?.appUpdateData - ) - } else { - stickyBottomNudgeListener?.setAppNudgeVisibility(false) - } - if (!paymentVM.isPaymentLoaderShowing()) { - hideLoader() - } - inAppUpdateVM.showAppUpdateStrip.observeNonNull(viewLifecycleOwner) { - stickyBottomNudgeListener?.setAppNudgeVisibility(it) - } - response?.extraData?.bottomSheetData?.let { - val commonBottomSheet = NewCommonBottomSheet.getInstance(it) - safelyShowBottomSheet(commonBottomSheet, NewCommonBottomSheet.TAG) - } - activity?.let { activity -> - response?.extraData?.redirectionCta?.let { redirectionCta -> - NaviDeepLinkNavigator.navigate(activity, redirectionCta) - } - } - showSkipMandateBottomSheet(response?.extraData?.skipMandateBottomSheetData) - sendLocationUpdates() - naviAnalyticsEventTracker.onDataDisplayed(System.currentTimeMillis() - analyticsStartTs) - TemporaryStorageHelper.clearResponse(TemporaryStorageHelper.HOME) - if (totalRenderTs != 0L) { - naviAnalyticsEventTracker.onDataDisplayedFirstTime( - System.currentTimeMillis() - totalRenderTs, - isDataFromCache - ) - totalRenderTs = 0L - } - showNotificationPermission() - } - viewModel.errorResponse.observe(viewLifecycleOwner) { - binding.shimmerLayout.stopShimmer() - binding.shimmerLayout.visibility = GONE - } - viewLifecycleOwner.lifecycleScope.launch { - viewLifecycleOwner.repeatOnLifecycle(state = Lifecycle.State.STARTED) { - viewModel.cachedResponse.collect { - TemporaryStorageHelper.updateApiTs(TemporaryStorageHelper.HOME) - hideLoader() - binding.shimmerLayout.stopShimmer() - binding.shimmerLayout.visibility = GONE - binding.nestedScrollView.visibility = VISIBLE - binding.header.visibility = VISIBLE - } - } - } - - viewLifecycleOwner.lifecycleScope.launch { - notificationVM.unReadNotificationCount.collect { count -> - if (count > 0) naviAnalyticsEventTracker.onInAppNotificationsCountUpdate(count) - viewModel.updateNotificationCount(count) - } - } - - paymentVM.hidePaymentStatus.observeNonNull(viewLifecycleOwner) { fetchCards(true) } - - ratingVM.ratingData.observeNonNull(viewLifecycleOwner) { fetchCards(true) } - - sharedVM?.loanClosureToHomeWithDelay?.observeNonNull(this) { fetchCards(true) } - - sharedVM?.playStoreBannerViewStatus?.observeNonNull(this) { success -> - if (success) fetchCards(true) - } - - viewLifecycleOwner.lifecycleScope.launch { - viewLifecycleOwner.repeatOnLifecycle(state = Lifecycle.State.STARTED) { - sharedVM?.ctaData?.collect { ctaData -> onClick(ctaData) } - } - } - - lifecycleScope.launchWhenStarted { - sharedVM?.giPaymentFailed?.collectLatest { - val paymentFailedBottomSheet = PaymentFailedBottomSheet.getInstance(it) - safelyShowBottomSheet(paymentFailedBottomSheet, PaymentFailedBottomSheet.TAG) - } - } - - npsVM.ratingSubmitResponse.observeNonNull(viewLifecycleOwner) { - if (it.response == Constants.SUCCESS) { - viewModel.homeFeatures.value?.survey?.content?.dialogBoxInfo?.let { - dialogBoxResponse -> - if ( - arguments - ?.getParcelable(Constants.PREVIOUS_SCREEN) - ?.moduleType - .orEmpty() == GI - ) { - NaviInsuranceDeeplinkNavigator.navigate( - activity = activity, - 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) - } - } - } - } - - viewLifecycleOwner.lifecycleScope.launch { - viewLifecycleOwner.repeatOnLifecycle(state = Lifecycle.State.STARTED) { - viewModel.redirectionCtaData.collect {ctaData -> - ctaData?.let { handleCtaData(it) } - } - } - } - - inAppUpdateVM.callInAppUpdate.observe(viewLifecycleOwner) { shouldUpdate -> - if (shouldUpdate) { - inAppUpdateVM.appUpdateInfo?.let { appUpdateInfo -> - (requireActivity() as? BaseActivity)?.startImmediateInAppUpdate( - inAppUpdateVM.appUpdateManager, - appUpdateInfo, - AppUpdateType.FLEXIBLE - ) - } - } - } - inAppUpdateVM.showInstallAppSnackBar.observe(viewLifecycleOwner) { shouldShowAppUpdateStrip - -> - if (shouldShowAppUpdateStrip) { - (requireActivity() as? NewDashboardActivity)?.showInstallAppSnackBar() - } - } - - viewLifecycleOwner.lifecycleScope.launch { - viewLifecycleOwner.repeatOnLifecycle(state = Lifecycle.State.STARTED) { - viewModel.shouldFetchHomeApi.collect { shouldFetchHomeApi -> - if (shouldFetchHomeApi) { - naviAnalyticsEventTracker.onHomePageApiCalledFromUiTronAction() - fetchCards(true) - } - } - } - } - } - - private fun handleHeader(responseHeader: Header?) { - binding.header.apply { - responseHeader?.toolBarNav?.uiTronResponse?.let { - binding.topNavBar.setContent { - UiTronRenderer(it.data, viewModel) - .Render(composeViews = it.parentComposeView.orEmpty()) - } - bottomBarSharedVM.homeStatusColor.value = - responseHeader.collapsingTopNavConfig - ?.statusBarColor - .orElse(HOME_STATUS_BAR_COLOR) - setActivityStatusBarColor() - } - responseHeader?.collapsingTopNav?.uiTronResponse?.let { - binding.topNavBanner.setContent { - UiTronRenderer(it.data, viewModel) - .Render(composeViews = it.parentComposeView.orEmpty()) - } - responseHeader.collapsingTopNavConfig?.let { handleSessionExpandState(it) } - } ?: kotlin.run { BottomSheetBehavior.from(binding.bottomSheet).isDraggable = false } - } - } - - private fun handleSessionExpandState(collapsingTopNavConfig: CollapsingTopNavConfig) { - val newSession = isNewSession() - if (newSession) { - naviAnalyticsEventTracker.onNewSession(topNavCardId = collapsingTopNavConfig.cardId.orEmpty()) - naviAnalyticsEventTracker.onTopNavRendered(topNavCardId = collapsingTopNavConfig.cardId.orEmpty()) - PreferenceManager.setStringPreference(LAST_SESSION_ID, getSessionId().orEmpty()) - } - if (collapsingTopNavConfig.enableExpandState == false) { - BottomSheetBehavior.from(binding.bottomSheet).isDraggable = false - } else if ( - newSession && - collapsingTopNavConfig.autoExpandState == true && - isAppBarCollapsed.get().not() - ) { - BottomSheetBehavior.from(binding.bottomSheet).state = STATE_COLLAPSED - isAppBarCollapsed.set(true) - viewModel.removeTopMiddlePill() - triggerCollapsedEvent() - naviAnalyticsEventTracker.onTopNavExpandState(topNavCardId = collapsingTopNavConfig.cardId.orEmpty()) - } - } - - private fun isNewSession(): Boolean { - val lastSessionId = PreferenceManager.getStringPreference(LAST_SESSION_ID).orEmpty() - val currentSessionId = getSessionId().orEmpty() - return lastSessionId != currentSessionId - } - - private fun changeHeaderMiddleRowVisibility(alpha: Float) { - val key = (alpha.coerceIn(0f, 1f) * 25).toInt() - viewModel.handleAction( - UpdateViewStateActionV2( - viewStates = - listOf(LayoutStateIds(layoutId = ANIMATE, stateId = Constants.ALPHA + key)) - ) - ) - } - - private fun changeHeroTextVisibility(alpha: Float) { - val key = ((1f - alpha).coerceIn(0f, 1f) * 25).toInt() - viewModel.handleAction( - UpdateViewStateActionV2( - viewStates = - listOf( - LayoutStateIds( - layoutId = HERO_TEXT_ANIMATE, - stateId = Constants.ALPHA + key - ) - ) - ) - ) - } - - private fun showNotificationPermission() { - val listOfPermission = java.util.ArrayList() - listOfPermission.add(Manifest.permission.POST_NOTIFICATIONS) - - if ( - permissionsManager?.hasPermissions(listOfPermission.toTypedArray()) == false && - BaseUtils.isUserLoggedIn() && - PreferenceManager.getBooleanPreference(NOTIFICATION_PERMISSION_SHOWN, false).not() - ) { - PreferenceManager.setBooleanPreference(NOTIFICATION_PERMISSION_SHOWN, true) - permissionsManager?.requestPermissions(listOfPermission.toTypedArray()) - } - } - - private fun showUitronWidgets( - uitronView: LinearLayout, - composeWidgets: List, - homeFragment: HomeFragment - ) { - - // Linear Layout + Nested Scroll to increase scroll performance - binding.nestedScrollView.visibility = VISIBLE - uitronView.removeAllViews() - composeWidgets.forEach { uiTronResponse -> - val composeView = UiTronAndroidView(this@HomeFragment.requireContext()) - val isSensitive = - (uiTronResponse as NaviUiTronWidget) - .uiTronWidget - ?.parentComposeView - ?.getOrNull(0) - ?.data - ?.contains(Constants.SENSITIVE_VIEW) == true - - if (isSensitive) { - activity?.window?.decorView?.rootView?.tag = Constants.SENSITIVE_VIEW - composeView.tag = Constants.SENSITIVE_VIEW - } - composeView.setProperties( - uiTronResponse.uiTronWidget, - uiTronViewModel = homeFragment.viewModel - ) - uitronView.addView(composeView) - } - } - - private fun showSkipMandateBottomSheet(skipMandateBottomSheetData: BottomSheetData?) { - skipMandateBottomSheetData?.let { - if (AppLaunchUtils.isLandingFirstTimeAfterAppOpen(HOME_ITEMS_LAUNCH)) { - AppLaunchUtils.setAppOpenStatus(HOME_ITEMS_LAUNCH) - val skipMandateBottomSheet = NewCommonBottomSheet.getInstance(it) - skipMandateBottomSheet.setListener(this@HomeFragment) - it.metaData?.viewedData?.eventName?.let { - NaviTrackEvent.trackEventOnClickStream(it) - } - safelyShowBottomSheet(skipMandateBottomSheet, NewCommonBottomSheet.TAG) - } - } - } - - private fun readRewardsAnnouncementData(rewardData: RewardsAnnouncementData) { - bottomBarSharedVM.setInsuranceTabFetchFlag(true) - val rewardsAnnouncementFragment = - RewardsAnnouncementFragment.getInstance( - rewardsAnnouncementData = rewardData, - screenName = screenName - ) - (activity as BaseActivity).safelyOpenFragment( - rewardsAnnouncementFragment, - RewardsAnnouncementFragment.TAG - ) - } - - private fun showUiTronDialog(uiTronDialog: UiTronDialog?) { - uiTronDialog ?: return - lifecycleScope.launch { - val uiTronBottomSheetFragment = UiTronBottomSheetFragment.getInstance(uiTronDialog) - (activity as BaseActivity).safelyOpenFragment( - uiTronBottomSheetFragment, - UiTronBottomSheetFragment.TAG - ) - } - } - - private fun sendLocationUpdates() { - if (permissionsManager?.hasLocationPermissionAny().orFalse()) { - activity?.run { locationManager.requestLocationUpdates(this, postLocation = true) } - } - } - - private fun toOpenBottomSheet(url: String?): Boolean { - return url?.let { url.contains(Constants.SHOW_BOTTOMSHEET, true) } ?: run { false } - } - - private fun toShowBottomSheet(action: ActionData?) { - val splitDeepLink = action?.url?.split(Constants.SLASH) - val secondIdentifier = splitDeepLink?.getOrNull(1) - when (secondIdentifier) { - NaviAnalytics.LOAN_REPAYMENT_BOTTOMSHEET -> { - val bundle = - Bundle().apply { putParcelable(LoanRepaymentBottomSheet.ACTION_DATA, action) } - val tag = LoanRepaymentBottomSheet.TAG - val fragment = LoanRepaymentBottomSheet.getInstance(bundle) - safelyShowBottomSheet(fragment, tag) - } - } - } - - override fun handleDialogCancel() { - fetchCards(true) - } - - override fun onPlayStoreRatingSuccess(requestData: RateDataRequest?) { - if (!isAdded || activity?.isFinishing.orTrue()) return - showLoader() - requestData?.let { ratingVM.postRatingReview(it) } - } - - override fun onPlayStoreRatingFailure() {} - - override fun getLifeCycle(): Lifecycle = lifecycle - - override fun onClick(naviClickAction: NaviClickAction, widgetId: String?) { - when (naviClickAction) { - is NaviWidgetClickWithActionData -> { - widgetNaviAnalyticsEventTracker.onWidgetClickEvent(naviClickAction.actionData) - if (navigateToDownloadScreen(widgetId.toString())) { - return - } - NaviTrackEvent.setStartTs(screenName) - naviClickAction.actionData?.let { - if (shouldRedirectToPhone(it.url)) { - redirectToPhone(it.parameters) - return - } - if ( - it.url - ?.contains( - NaviAmcDeeplinkNavigator.AMC.plus(Constants.DIVIDER) - .plus(NaviAmcDeeplinkNavigator.KYC), - true - ) - .orFalse() || - it.url?.contains(CheckerActivity.HPC_PAN_REDIRECTION_PAGE).orFalse() || - it.url?.contains(CheckerActivity.HPC_NAME_REDIRECTION_PAGE).orFalse() - ) { - TempStorageHelper.kycSourceInfo = - mapOf(Constant.KYC_SOURCE_SCREEN to NaviAnalytics.HOME) - } - NaviDeepLinkNavigator.navigate(activity, it.toCtaData()) - } - } - is NaviWidgetClickWithCtaData -> { - naviClickAction.ctaData?.let { - widgetNaviAnalyticsEventTracker.onWidgetClickEvent(it.toActionData()) - if (navigateToDownloadScreen(widgetId.toString())) { - return - } - NaviTrackEvent.setStartTs(screenName) - NaviDeepLinkNavigator.navigate(activity, it) - } - } - is OptionSelectBottomSheetData -> { - widgetNaviAnalyticsEventTracker.onWidgetBottomSheetClickEvent(naviClickAction.type) - showBottomSheet(naviClickAction) - } - is ActionData -> { - if (navigateToDownloadScreen(widgetId.toString())) { - return - } - widgetNaviAnalyticsEventTracker.onWidgetClickEvent( - naviClickAction, - isNeededForFirebase = - naviClickAction.metaData?.clickedData?.eventName.orEmpty() == - AMC_BTN_HOMEPAGE_INVEST_NOW - ) - if ( - naviClickAction.url - ?.contains( - NaviAmcDeeplinkNavigator.AMC.plus(Constants.DIVIDER) - .plus(NaviAmcDeeplinkNavigator.KYC), - true - ) - .orFalse() || - naviClickAction.url - ?.contains(CheckerActivity.HPC_PAN_REDIRECTION_PAGE) - .orFalse() || - naviClickAction.url - ?.contains(CheckerActivity.HPC_NAME_REDIRECTION_PAGE) - .orFalse() - ) { - TempStorageHelper.kycSourceInfo = - mapOf(Constant.KYC_SOURCE_SCREEN to NaviAnalytics.HOME) - } - if (naviClickAction.url == WEB_APP_UPDATE) { - Toast.makeText( - requireContext(), - getString(R.string.download_progress), - Toast.LENGTH_SHORT - ) - .show() - } - - NaviTrackEvent.setStartTs(screenName) - if (shouldRedirectToPhone(naviClickAction.url)) { - redirectToPhone(naviClickAction.parameters) - return - } - if (toOpenBottomSheet(naviClickAction.url)) { - toShowBottomSheet(naviClickAction) - return - } - if (naviClickAction.url == CtaType.PAYMENT_PL.name) { - handlePaymentCtaData(naviClickAction.toCtaData()) - return - } - NaviDeepLinkNavigator.navigate(activity, naviClickAction.toCtaData()) - } - is ActionIcon -> { - naviClickAction.additionalData?.let { - widgetNaviAnalyticsEventTracker.onWidgetBottomSheetClickEvent( - naviClickAction.url - ) - val bottomSheet = UniversalBottomSheet.getInstance(it) - safelyShowBottomSheet(bottomSheet, UniversalBottomSheet.TAG) - } - } - is AdditionalBottomSheetData -> { - widgetNaviAnalyticsEventTracker.onWidgetBottomSheetClickEvent( - naviClickAction.metaData?.clickedData?.eventName - ) - val bottomSheet = SelectableItemsBottomSheet.getInstance(naviClickAction) - safelyShowBottomSheet(bottomSheet, SelectableItemsBottomSheet.TAG) - } - is UpcomingLoanDetail -> { - NaviTrackEvent.setStartTs(screenName) - widgetNaviAnalyticsEventTracker.onWidgetClickEvent( - naviClickAction.cta?.toActionData() - ) - onUpcomingLoanClick(naviClickAction) - } - is ShowInfoBottomSheetV3Action -> handleShowInfoBottomSheetV3Action(naviClickAction) - is CtaData -> handleCtaData(naviClickAction) - } - } - - private fun navigateToDownloadScreen(widgetId: String): Boolean { - if ( - viewModel.homeItems.value - ?.extraData - ?.naviApkData - ?.whitelistedWidgetIds - ?.contains(widgetId) == false - ) { - val bundle = Bundle() - bundle.putParcelable( - DownLoadPopupFragment.DATA, - viewModel.homeItems.value?.extraData?.naviApkData?.downloadApkData - ) - safelyShowDialogFragment( - DownLoadPopupFragment.newInstance(bundle), - DownLoadPopupFragment.TAG - ) - return true - } - return false - } - - private fun handleShowInfoBottomSheetV3Action(naviClickAction: ShowInfoBottomSheetV3Action) { - val bottomSheet = InfoBottomSheetV3.getInstance(naviClickAction.infoBottomSheetInfoV2) - bottomSheet.setListener( - object : BottomSheetClickListener { - override fun onClick(termsAndConditionsBottomSheetInfo: BottomSheetInfoV2?) { - termsAndConditionsBottomSheetInfo?.let { - val termsAndConditionsBottomSheet = - InfoBottomSheetV3.getInstance(termsAndConditionsBottomSheetInfo) - safelyShowBottomSheet(termsAndConditionsBottomSheet, InfoBottomSheetV3.TAG) - } - } - }, - naviClickAction.termsAndConditionsBottomSheet - ) - safelyShowBottomSheet(bottomSheet, InfoBottomSheetV3.TAG) - } - - override fun onPaymentFailed() { - if (this.isVisible) { - openPaymentFailureBottomSheet() - } - } - - private fun handlePaymentCtaData(naviClickAction: CtaData) { - 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 - val repaymentType = - naviClickAction.parameters?.firstOrNull { it.key == REPAYMENT_TYPE }?.value - val paymentType: PaymentType = - PaymentType.get( - naviClickAction.parameters?.firstOrNull { it.key == PAYMENT_TYPE }?.value - ) - val isPreClosure: Boolean = - (repaymentType == PaymentType.SCHEDULED_PRE_CLOSURE.name || - repaymentType == PaymentType.PRE_CLOSURE.name) - loanType = naviClickAction.parameters?.firstOrNull { it.key == LOAN_TYPE }?.value - if (isPreClosure) { - updatePaymentType(PaymentType.PRE_LOAN_CLOSURE) - } else { - updatePaymentType(paymentType) - } - onPaymentClick( - Amount(amountData?.toDoubleOrNull(), currency = currency, symbol = symbol), - isPreClosure, - repaymentType = repaymentType, - loanType = loanType - ) - } - - private fun handleCtaData(naviClickAction: CtaData) { - if (toOpenBottomSheet(naviClickAction.url)) { - toShowBottomSheet(naviClickAction.toActionData()) - return - } else if ( - naviClickAction.url == CtaType.PAYMENT.name || - naviClickAction.url == CtaType.PAYMENT_PL.name - ) { - handlePaymentCtaData(naviClickAction) - } else if (naviClickAction.url == CtaType.STORY.name) { - handleStoryClick() - } else if (naviClickAction.url == NaviDeepLinkNavigator.PROFILE) { - dashboardFragmentListener?.openProfileDrawer() - } else if (naviClickAction.url == IN_APP_NOTIFICATION) { - dashboardFragmentListener?.openNotificationDrawer() - } else { - naviClickAction.analyticsEventProperties?.let { eventProperties -> - eventProperties.name?.let { eventName -> - NaviTrackEvent.trackEventOnClickStream(eventName, eventProperties.properties) - } - } - if (navigateToDownloadScreen(widgetId.toString())) { - return - } - if ( - naviClickAction.url - ?.contains( - NaviAmcDeeplinkNavigator.AMC.plus(Constants.DIVIDER) - .plus(NaviAmcDeeplinkNavigator.KYC), - true - ) - .orFalse() || - naviClickAction.url - ?.contains(CheckerActivity.HPC_PAN_REDIRECTION_PAGE) - .orFalse() || - naviClickAction.url - ?.contains(CheckerActivity.HPC_NAME_REDIRECTION_PAGE) - .orFalse() - ) { - TempStorageHelper.kycSourceInfo = - mapOf(Constant.KYC_SOURCE_SCREEN to NaviAnalytics.HOME) - AmcTaskManager.requestParams[Constant.PREFETCH_SOURCE_SCREEN] = NaviAnalytics.HOME - } - NaviDeepLinkNavigator.navigate( - activity, - naviClickAction, - needsResult = naviClickAction.needsResult, - requestCode = naviClickAction.requestCode - ) - } - } - - private fun handleStoryClick() { - val intent = Intent(activity, StoryActivity::class.java) - val bundle = - Bundle().apply { - putParcelable(StoryActivity.storyData, viewModel.appStoriesData.value) - } - intent.putExtras(bundle) - startActivity(intent) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - initError(paymentVM) - dashboardFragmentListener?.toggleBottomNavBehavior(true) - } - - private fun shouldRedirectToPhone(url: String?): Boolean { - return url == "redirect_to_phone" - } - - private fun redirectToPhone(parameters: List?) { - val intent = - Intent( - Intent.ACTION_DIAL, - Uri.parse( - "tel:" + - (parameters - ?.filter { it.key == com.navi.common.utils.Constants.PHONE } - ?.getOrNull(0) - ?.value - ?: (FirebaseRemoteConfigHelper.getString( - FirebaseRemoteConfigHelper.HELP_LINE_NUMBER - ))) - ) - ) - startActivity(intent) - } - - private fun onUpcomingLoanClick(data: UpcomingLoanDetail?) { - data?.let { - val bundle = Bundle() - val splitDeepLink = data.url?.split("/") - val page = splitDeepLink?.firstOrNull() - val subPage = splitDeepLink?.getOrNull(1) - if (page != PageStatusType.OFFER_GENERATION) { - bundle.putString(OFFER_ID, it.offerId) - PreferenceManager.setStringPreference( - LOAN_APPLICATION_ID, - it.loanApplicationId.orEmpty() - ) - bundle.putBoolean(GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY, true) - } else { - bundle.putParcelable(KEY_UPCOMING_LOAN, data) - } - ScreenNavigator.instance.startActivity( - activity, - page.orEmpty(), - subPage.orEmpty(), - bundle, - isRootActivity = false, - isResultActivity = false - ) - } - } - - private fun toShowAvatar() { - if (viewModel.appStoriesData.value?.cards.isNullOrEmpty()) { - hideStoryIcon() - return - } - TemporaryStorageHelper.updateScreenDataStatus(TemporaryStorageHelper.STORY, false) - naviAnalyticsEventTracker.onStoriesIconDisplayed() - val total = viewModel.appStoriesData.value?.total ?: 0 - val viewed = viewModel.appStoriesData.value?.viewed ?: 0 - if (total - viewed == 0) { - updateStoryIcon() - } - } - - private fun updateStoryIcon() { - viewModel.homeItems.value - ?.header - ?.toolBarNav - ?.uiTronActionWithKey - ?.find { item -> item.key == STORY_ICON_CHANGE } - ?.uiTronAction - ?.let { uiTronAction -> viewModel.handleAction(uiTronAction) } - } - - private fun hideStoryIcon() { - viewModel.homeItems.value - ?.header - ?.toolBarNav - ?.uiTronActionWithKey - ?.find { item -> item.key == STORY_ICON_INVISIBLE } - ?.uiTronAction - ?.let { uiTronAction -> viewModel.handleAction(uiTronAction) } - } - - private fun showBottomSheet(optionSelectBottomSheetData: OptionSelectBottomSheetData) { - val list = ArrayList(optionSelectBottomSheetData.actions) - val bundle = - Bundle().apply { - putParcelableArrayList(OptionSelectBottomsheet.CTA_DATA_LIST, list) - putString(OptionSelectBottomsheet.TITLE, optionSelectBottomSheetData.title) - } - val bottomSheet = - OptionSelectBottomsheet.newInstance( - bundle, - secondaryListener = - object : OptionSelectorListener { - override fun onItemSelected(cta: ActionData) { - widgetNaviAnalyticsEventTracker.onWidgetClickEvent(cta) - NaviDeepLinkNavigator.navigate(activity, cta.toCtaData()) - } - } - ) - safelyShowBottomSheet(bottomSheet, OptionSelectBottomsheet.TAG) - } - - override fun widgetStateChanged(position: Int?, data: Pair?, action: String) { - data?.let {} - - position?.let { naviAdapter.notifyItemChanged(it, WidgetChangedData(action, data?.second)) } - } - - override fun widgetError(position: Int, payload: Any?, action: String) { - naviAdapter.notifyItemChanged(position, WidgetChangedData(action, payload)) - } - - private fun initListener() { - viewLifecycleOwner.lifecycleScope.launch { - viewLifecycleOwner.repeatOnLifecycle(state = Lifecycle.State.STARTED) { - bottomBarSharedVM.uiTronActionHandler.collect { - it?.let { - viewModel.updateHandleActionsFromJson(it) - bottomBarSharedVM.updateUiTronAction(uiTronActionHandler = null) - } - } - } - } - viewLifecycleOwner.lifecycleScope.launch { - viewLifecycleOwner.repeatOnLifecycle(state = Lifecycle.State.STARTED) { - viewModel.copyToClipboard.collect { copyText(context = activity, text = it) } - } - } - var offset = 0f - bottomSheetBehavior.addBottomSheetCallback( - object : BottomSheetBehavior.BottomSheetCallback() { - override fun onStateChanged(bottomSheet: View, newState: Int) { - when (newState) { - BottomSheetBehavior.STATE_SETTLING -> { - if (isAppBarCollapsed.get() && offset < BOTTOM_SHEET_COLLAPSED_OFFSET) { - bottomSheetBehavior.state = STATE_COLLAPSED - } else if ( - isAppBarCollapsed.get().not() && - offset > BOTTOM_SHEET_EXPANDED_OFFSET - ) { - bottomSheetBehavior.state = STATE_EXPANDED - } else { - if (isAppBarCollapsed.get()) { - isAppBarCollapsed.set(false) - bottomSheetBehavior.setState(STATE_EXPANDED) - } else { - isAppBarCollapsed.set(true) - bottomSheetBehavior.state = STATE_COLLAPSED - triggerCollapsedEvent() - } - } - } - STATE_COLLAPSED->{ - if(isAppBarCollapsed.get().not()){ - bottomSheetBehavior.state = STATE_EXPANDED - } - } - STATE_EXPANDED->{ - if(isAppBarCollapsed.get()){ - bottomSheetBehavior.state = STATE_COLLAPSED - } - } - } - } - - override fun onSlide(bottomSheet: View, slideOffset: Float) { - offset = slideOffset - changeHeaderMiddleRowVisibility(slideOffset) - changeHeroTextVisibility(slideOffset) - } - } - ) - nestedScrollViewListener() - } - - private fun nestedScrollViewListener() { - var lastScrollDirectionUp = true - binding.nestedScrollView.setOnScrollChangeListener( - NestedScrollView.OnScrollChangeListener { _, _, scrollY, _, oldScrollY -> - val isScrollingUp = scrollY < oldScrollY - val isScrollingDown = scrollY > oldScrollY - if (isScrollingUp && !lastScrollDirectionUp) { - dashboardFragmentListener?.toggleBottomNavAndFabButton(true) - } else if (isScrollingDown && lastScrollDirectionUp) { - dashboardFragmentListener?.toggleBottomNavAndFabButton(false) - } - lastScrollDirectionUp = isScrollingUp - if (scrollY > HEADER_HEIGHT && isScrollingDown) { - updateHeaderUI( - backgroundColor = WHITE_COLOR, - statusBarColorResId = WHITE_COLOR, - elevation = 24f - ) - viewModel.isNestedScrollViewExpanded = true - binding.nestedScrollView.setBackgroundResource(R.drawable.bg_white_rounded_0) - if (isAppBarCollapsed.get()) { - bottomSheetBehavior.state = STATE_EXPANDED - isAppBarCollapsed.set(false) - } - } else if (scrollY < HEADER_HEIGHT && isScrollingUp) { - updateHeaderUI( - backgroundColor = TRANSPARENT_COLOR, - statusBarColorResId = bottomBarSharedVM.homeStatusColor.value.orElse( - WHITE_COLOR - ), - elevation = 0f - ) - viewModel.isNestedScrollViewExpanded = false - binding.header.setBackgroundColor(TRANSPARENT_COLOR.parseColorSafe()) - binding.nestedScrollView.setBackgroundResource( - R.drawable.bg_white_top_rounded_8 - ) - } - } - ) - } - - private fun updateHeaderUI( - backgroundColor: String, - statusBarColorResId: String, - elevation: Float - ) { - binding.header.setBackgroundColor(backgroundColor.parseColorSafe()) - binding.header.elevation = elevation - activity?.setStatusBarColorInt(statusBarColorResId.parseColorSafe(WHITE_COLOR)) - } - - private fun triggerCollapsedEvent() { - viewModel.homeItems.value - ?.header - ?.collapsingTopNav - ?.uiTronActionWithKey - ?.find { item -> item.key == EXPAND_STATE_VIEW_EVENT } - ?.uiTronAction - ?.let { uiTronAction -> viewModel.handleAction(uiTronAction) } - } - - private fun sendFCEvent() { - context?.let { - naviAnalyticsEventTracker.sendFCEvent( - isInstalledInProfile(it), - getLocalStorageLocation(it), - getDeviceSignature(it) - ) - } - } - - override fun onDestroyView() { - super.onDestroyView() - appUpdateShimmer?.pause() - appUpdateShimmer = null - binding.unbind() - } - - companion object { - const val TAG = "HOME" - const val HEADER_HEIGHT = 60 - const val BANNER_HEIGHT = 324 - const val DEFAULT_BOTTOM_SHEET_HEIGHT = -1 - const val CORNER_RADIUS_HEIGHT = 14 - const val BOTTOM_SHEET_COLLAPSED_OFFSET = 0.2f - const val BOTTOM_SHEET_EXPANDED_OFFSET = 0.8f - - fun newInstance(bundle: Bundle?): HomeFragment { - return HomeFragment().apply { arguments = bundle } - } - } - - override fun buttonClick(actionData: ActionData?) { - actionData?.let { - it.metaData?.clickedData?.eventName?.let { eventName -> - NaviTrackEvent.trackEventOnClickStream(eventName) - } - NaviDeepLinkNavigator.navigate(activity, it.toCtaData()) - } - } - - override fun onPrimaryActionClick(ctaData: CtaData) { - handleCtaData(ctaData) - } - - override fun onSecondaryActionClick(ctaData: CtaData) { - handlePaymentCtaData(ctaData) - } -} diff --git a/android/app/src/main/java/com/naviapp/home/listener/ExtendedFabHideOnScrollBehavior.kt b/android/app/src/main/java/com/naviapp/home/listener/ExtendedFabHideOnScrollBehavior.kt deleted file mode 100644 index 4e45426ee7..0000000000 --- a/android/app/src/main/java/com/naviapp/home/listener/ExtendedFabHideOnScrollBehavior.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.naviapp.home.listener - -import android.content.Context -import android.util.AttributeSet -import android.view.View -import androidx.coordinatorlayout.widget.CoordinatorLayout -import com.google.android.material.behavior.HideBottomViewOnScrollBehavior -import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton - -class ExtendedFabHideOnScrollBehavior(context: Context, attrs: AttributeSet) : - HideBottomViewOnScrollBehavior(context, attrs) { - - override fun onStartNestedScroll( - coordinatorLayout: CoordinatorLayout, - child: ExtendedFloatingActionButton, - directTargetChild: View, - target: View, - axes: Int, - type: Int - ): Boolean { - return axes == View.SCROLL_AXIS_VERTICAL || super.onStartNestedScroll( - coordinatorLayout, - child, - directTargetChild, - target, - axes, - type - ) - } - - override fun slideDown(child: ExtendedFloatingActionButton, animate: Boolean) { - if (child.isExtended) { - child.shrink() - } - } - - override fun slideUp(child: ExtendedFloatingActionButton, animate: Boolean) { - if (child.isExtended.not()) { - child.extend() - } - } -} \ No newline at end of file diff --git a/android/app/src/main/java/com/naviapp/home/model/BottomBarResponse.kt b/android/app/src/main/java/com/naviapp/home/model/BottomBarResponse.kt deleted file mode 100644 index 965e6e7d20..0000000000 --- a/android/app/src/main/java/com/naviapp/home/model/BottomBarResponse.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * * Copyright © 2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.home.model - -import androidx.compose.runtime.Stable -import com.google.gson.annotations.SerializedName -import com.navi.base.model.ActionData -import com.navi.base.model.GenericAnalytics -import com.navi.design.textview.model.TextWithStyle - -@Stable -data class BottomBarResponse( - @SerializedName("bottomBarTabs") var bottomBarTabs: MutableList? = null, - @SerializedName("fab") var fabData: HomeFabButtonResponse? = null -) - -@Stable -data class BottomBarTab( - @SerializedName("tabName") var tabName: String? = null, - @SerializedName("tabId") var tabId: String? = null, - @SerializedName("tabIcon") var tabIcon: String? = null, - @SerializedName("unselectedIconColorCode") var unselectedIconColorCode: String? = null, - @SerializedName("tabLottieData") var tabLottieData: TabLottieData? = null, - @SerializedName("metaData") var metaData: GenericAnalytics? = null, - @SerializedName("actionData") var actionData: ActionData? = null, - var isLottieVisible: Boolean = false -) - -data class TabLottieData( - @SerializedName("lottieUrl") var lottieUrl: String? = null, - @SerializedName("repeatCount") var repeatCount: Int? = null, - @SerializedName("showIconOnAnimationEnd") var showIconOnAnimationEnd: Boolean? = null, -) - -@Stable -data class HomeFabButtonResponse( - @SerializedName("title") var title: TextWithStyle? = null, - @SerializedName("iconCode") var iconCode: String? = null, - @SerializedName("ctaData") var ctaData: ActionData? = null, - @SerializedName("enable") var enable: Boolean? = null, - @SerializedName("fabButtonOnBottomBar") var bottomBarTabs: MutableList? = null, - @SerializedName("metaData") var metaData: GenericAnalytics? = null -) - -enum class BottomBarTabType(val value: String) { - HOME("HOME"), - INVESTMENT("INVESTMENT"), - LOAN("LOAN"), - INSURANCE("INSURANCE") -} diff --git a/android/app/src/main/java/com/naviapp/home/model/BottomBarType.kt b/android/app/src/main/java/com/naviapp/home/model/BottomBarType.kt new file mode 100644 index 0000000000..c09bebb2f0 --- /dev/null +++ b/android/app/src/main/java/com/naviapp/home/model/BottomBarType.kt @@ -0,0 +1,15 @@ +/* + * + * * Copyright © 2023 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.naviapp.home.model + +enum class BottomBarTabType(val value: String) { + HOME("HOME"), + INVESTMENT("INVESTMENT"), + LOAN("LOAN"), + INSURANCE("INSURANCE") +} diff --git a/android/app/src/main/java/com/naviapp/home/respository/HomeRepository.kt b/android/app/src/main/java/com/naviapp/home/respository/HomeRepository.kt index 59424566b8..5caaf4f2a3 100644 --- a/android/app/src/main/java/com/naviapp/home/respository/HomeRepository.kt +++ b/android/app/src/main/java/com/naviapp/home/respository/HomeRepository.kt @@ -61,9 +61,6 @@ constructor(@SuperAppRetroFit private val superAppRetrofitService: RetrofitServi ) } - suspend fun fetchStories(density: String) = - apiResponseCallback(superAppRetrofitService.fetchStories(density)) - suspend fun fetchHomeFeature(type: String) = apiResponseCallback(superAppRetrofitService.fetchHomeFeature(type)) diff --git a/android/app/src/main/java/com/naviapp/home/ui/utils/ProfileScreenUtils.kt b/android/app/src/main/java/com/naviapp/home/ui/utils/ProfileScreenUtils.kt index 0de9002819..54bbdfa301 100644 --- a/android/app/src/main/java/com/naviapp/home/ui/utils/ProfileScreenUtils.kt +++ b/android/app/src/main/java/com/naviapp/home/ui/utils/ProfileScreenUtils.kt @@ -1,18 +1,13 @@ package com.naviapp.home.ui.utils import android.annotation.SuppressLint -import android.view.View import androidx.compose.material3.ExperimentalMaterial3Api import androidx.recyclerview.widget.LinearLayoutManager import com.navi.common.model.common.WidgetResponse import com.navi.common.ui.compose.DrawerState -import com.navi.common.utils.observeNonNull import com.navi.naviwidgets.adapters.NaviAdapter import com.navi.naviwidgets.models.NaviWidget import com.naviapp.databinding.FragmentProfileComposeBinding -import com.naviapp.databinding.FragmentProfileLnBinding -import com.naviapp.home.compose.activity.HomePageActivity -import com.naviapp.home.viewmodel.ProfileVM import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch diff --git a/android/app/src/main/java/com/naviapp/home/utils/HomePageUtils.kt b/android/app/src/main/java/com/naviapp/home/utils/HomePageUtils.kt index 33a4948849..73b2a0211a 100644 --- a/android/app/src/main/java/com/naviapp/home/utils/HomePageUtils.kt +++ b/android/app/src/main/java/com/naviapp/home/utils/HomePageUtils.kt @@ -1,7 +1,5 @@ package com.naviapp.home.utils -import android.content.Context -import android.content.Intent import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.infiniteRepeatable @@ -31,8 +29,6 @@ import com.navi.design.theme.getFontWeight import com.navi.design.theme.ttComposeFontFamily import com.navi.naviwidgets.extensions.NaviText import com.navi.pay.common.theme.color.NaviPayColor -import com.naviapp.home.activity.NewDashboardActivity -import com.naviapp.home.compose.activity.HomePageActivity fun Modifier.shimmerEffect(): Modifier = composed { var size by remember { mutableStateOf(IntSize.Zero) } @@ -90,16 +86,6 @@ fun Modifier.parallelogramShimmer(): Modifier = composed { .onGloballyPositioned { size = it.size } } -fun isHomePageComposeActivityDisabled() = false - -fun getHomeScreenActivityIntent(context: Context): Intent { - return if (isHomePageComposeActivityDisabled()) { - Intent(context, NewDashboardActivity::class.java) - } else { - Intent(context, HomePageActivity::class.java) - } -} - @Composable fun TabText(selectedTabId: String, tabName: String, tabId: String) { val color = diff --git a/android/app/src/main/java/com/naviapp/home/viewmodel/HomeVM.kt b/android/app/src/main/java/com/naviapp/home/viewmodel/HomeVM.kt index f58d6cf36b..9427ed9056 100644 --- a/android/app/src/main/java/com/naviapp/home/viewmodel/HomeVM.kt +++ b/android/app/src/main/java/com/naviapp/home/viewmodel/HomeVM.kt @@ -85,8 +85,6 @@ import com.naviapp.home.model.BottomBarTabType import com.naviapp.home.model.HomeCtaTypes import com.naviapp.home.respository.HomeRepository import com.naviapp.home.ui.state.HomeScreenState -import com.naviapp.home.utils.isHomePageComposeActivityDisabled -import com.naviapp.models.AppStories import com.naviapp.models.response.HomeFeatureResponse import com.naviapp.network.util.getGsonBuilderForWidgetizedResponse import com.naviapp.part_prepayment.PartPrePaymentActivity @@ -154,9 +152,6 @@ constructor( var upperContentSize = 7 private var currentLoadedFragmentScreenName = NaviAnalytics.NEW_HOME - private val _homeItems = MutableLiveData() - val homeItems: LiveData - get() = _homeItems private val _homeScreenState = MutableStateFlow(HomeScreenState.Loading) val homeScreenState = _homeScreenState.asStateFlow() @@ -170,10 +165,6 @@ constructor( val homeFeatures: LiveData get() = _homeFeatures - private val _appStoriesData = MutableLiveData() - val appStoriesData: LiveData - get() = _appStoriesData - private val _redirectionCtaData = MutableSharedFlow() val redirectionCtaData = _redirectionCtaData.asSharedFlow() @@ -195,23 +186,11 @@ constructor( MutableSharedFlow() val initiatePaymentFromComposeScreen = _initiatePaymentFromComposeScreen.asSharedFlow() - private val isHomeDataNonNull: Boolean - get() = homeItems.value.isNotNull() - - private val isErrorDataNonNull: Boolean - get() = errorMessage.value.isNotNull() || errorResponse.value.isNotNull() - private var forceDismissSplash: Boolean = false private var isLoggedLogin: Boolean = false - val isReadyToDismissSplash: Boolean - get() = isHomeDataNonNull || isErrorDataNonNull || forceDismissSplash - - var isNestedScrollViewExpanded: Boolean = false private var homePageRefreshJob: Job? = null - var isNotificationDrawerOpen: Boolean = false - private val _connectivityObserverHolder = MutableSharedFlow() val connectivityObserverHolder = _connectivityObserverHolder.asSharedFlow() @@ -410,7 +389,7 @@ constructor( fun triggerOnHiddenUiTronActionList() { try { - homeItems.value?.extraData?.onHiddenUiTronActionList?.forEach { + getHomeScreenData()?.extraData?.onHiddenUiTronActionList?.forEach { handleActionsFromJson(actionsString = it, variableMap = emptyMap(), gson = gson) } } catch (e: Exception) { @@ -419,7 +398,7 @@ constructor( } fun removeTopMiddlePill() { - homeItems.value + getHomeScreenData() ?.header ?.toolBarNav ?.uiTronActionWithKey @@ -462,7 +441,6 @@ constructor( deserializeWidgetResponseString(response = getHomeTabFromDatabase())?.let { responseData -> _homeScreenState.update { HomeScreenState.Success(responseData) } _homeScreenExtraData.emit(HomePageExtraData(responseData.extraData)) - _homeItems.postValue(responseData) } updateApiTsForHomePage() @@ -510,7 +488,7 @@ constructor( try { if ( showLoader.not() && - _homeItems.value.isNotNull() && + getHomeScreenData().isNotNull() && response.value == homeTabFromDatabase?.value ) { updateCachedResponse(true) @@ -521,7 +499,6 @@ constructor( ) } _homeScreenExtraData.emit(HomePageExtraData(widgetResponse.extraData)) - _homeItems.postValue(widgetResponse) updateApiTsForHomePage() response.updatedAt.let { timestamp -> homeTabLastUpdateTimestamp = timestamp @@ -620,14 +597,10 @@ constructor( response.error?.statusCode != NO_INTERNET && response.error?.statusCode != API_CODE_SOCKET_TIMEOUT ) { - if (isHomePageComposeActivityDisabled()) { - setErrorData(response.errors, response.error, showFullScreenError = true) - } else { - val errorUnifiedResponse = - getErrorUnifiedResponse(errors = response.errors, error = response.error) - sendFailureEvent(NaviAnalytics.NEW_HOME_ACTIVITY, errorUnifiedResponse) - _homeScreenState.emit(HomeScreenState.Error(errorUnifiedResponse.errorResponse)) - } + val errorUnifiedResponse = + getErrorUnifiedResponse(errors = response.errors, error = response.error) + sendFailureEvent(NaviAnalytics.NEW_HOME_ACTIVITY, errorUnifiedResponse) + _homeScreenState.emit(HomeScreenState.Error(errorUnifiedResponse.errorResponse)) } return NaviCacheAltSourceEntity(isSuccess = false) } @@ -672,14 +645,6 @@ constructor( } } - fun fetchStories(density: String) { - viewModelScope.launch(Dispatchers.IO) { - val response = repository.fetchStories(density) - if (response.error == null && response.errors.isNullOrEmpty()) - _appStoriesData.postValue(response.data) - } - } - private fun fetchLoanDetailPrefetchURLs(fullUrl: String) { coroutineScope.launch(Dispatchers.IO) { val response = repository.fetchLoanDetailPrefetchURLs(fullUrl) @@ -735,7 +700,7 @@ constructor( ) ) } - homeItems.value + getHomeScreenData() ?.header ?.toolBarNav ?.uiTronActionWithKey @@ -842,13 +807,13 @@ constructor( private fun navigateToDownloadScreen(activity: HomePageActivity, widgetId: String): Boolean { if ( - homeItems.value?.extraData?.naviApkData?.whitelistedWidgetIds?.contains(widgetId) == + getHomeScreenData()?.extraData?.naviApkData?.whitelistedWidgetIds?.contains(widgetId) == false ) { val bundle = Bundle() bundle.putParcelable( DownLoadPopupFragment.DATA, - homeItems.value?.extraData?.naviApkData?.downloadApkData + getHomeScreenData()?.extraData?.naviApkData?.downloadApkData ) activity.safelyShowDialogFragment( DownLoadPopupFragment.newInstance(bundle), @@ -1048,7 +1013,7 @@ constructor( inAppUpdateVM: InAppUpdateVM ) { if (shouldCallOnHiddenChange(selectedTabId)) { - homeItems.value?.extraData?.appUpdateData?.let { + getHomeScreenData()?.extraData?.appUpdateData?.let { bottomNavBarVM.setBottomNudge( hidden.not() && inAppUpdateVM.showAppUpdateStrip.value != false, BottomStickyNudgeState.AppUpdateNudgeState(it) @@ -1059,7 +1024,7 @@ constructor( } fun triggerCollapsedEvent() { - homeItems.value + getHomeScreenData() ?.header ?.collapsingTopNav ?.uiTronActionWithKey @@ -1077,26 +1042,26 @@ constructor( } fun isScanPayFabButtonEnabled(): Boolean { - return homeItems.value?.fabButtonData?.isVisible ?: true + return getHomeScreenData()?.fabButtonData?.isVisible ?: true } fun trackBottomBarEvent(dashboardAnalytics: NaviAnalytics.Dashboard) { if (isLoggedLogin) { dashboardAnalytics.trackEventWithProperties( "NaviApp_Nav_HomePage_Viewed", - mapOf("position" to "1") + mapOf(NaviAnalytics.POSITION to "1") ) dashboardAnalytics.trackEventWithProperties( "NaviApp_Nav_Investment_Viewed", - mapOf("position" to "2") + mapOf(NaviAnalytics.POSITION to "2") ) dashboardAnalytics.trackEventWithProperties( "NaviApp_Nav_Loan_Viewed", - mapOf("position" to "3") + mapOf(NaviAnalytics.POSITION to "3") ) dashboardAnalytics.trackEventWithProperties( "NaviApp_Nav_Insurance_Viewed", - mapOf("position" to "4") + mapOf(NaviAnalytics.POSITION to "4") ) } } @@ -1106,4 +1071,11 @@ constructor( _topNavOffsetValue.update { value } } } + private fun getHomeScreenData(): WidgetResponse? { + return if (homeScreenState.value is HomeScreenState.Success) { + (homeScreenState.value as HomeScreenState.Success).data + } else { + null + } + } } diff --git a/android/app/src/main/java/com/naviapp/home/viewmodel/ProfileVM.kt b/android/app/src/main/java/com/naviapp/home/viewmodel/ProfileVM.kt index 83266fe7e7..9fdf933e41 100644 --- a/android/app/src/main/java/com/naviapp/home/viewmodel/ProfileVM.kt +++ b/android/app/src/main/java/com/naviapp/home/viewmodel/ProfileVM.kt @@ -38,10 +38,6 @@ class ProfileVM @Inject constructor( private val naviCacheRepository: NaviCacheRepository ) : BaseVM() { - private val _profileItems = MutableLiveData() - val profileItems: LiveData - get() = _profileItems - private val _profileScreenDataState = MutableStateFlow(ProfileScreenState.Loading) val profileScreenDataState = _profileScreenDataState.asStateFlow() @@ -50,9 +46,6 @@ class ProfileVM @Inject constructor( val resetProfileScrollToTop = _resetProfileScrollToTop.asSharedFlow() private lateinit var cacheResponse: WidgetResponse - private val _hideShimmer = MutableLiveData() - val hideShimmer: LiveData - get() = _hideShimmer var canCachedDataBeUsed: Boolean = true @@ -71,7 +64,6 @@ class ProfileVM @Inject constructor( WidgetResponse::class.java ) _profileScreenDataState.update { ProfileScreenState.Success(cacheResponse) } - _profileItems.postValue(cacheResponse) } canCachedDataBeUsed = true } @@ -81,7 +73,6 @@ class ProfileVM @Inject constructor( private suspend fun setSuccessState(response: RepoResult) { _profileScreenDataState.update { ProfileScreenState.Success(response.data!!) } - _profileItems.postValue(response.data!!) naviCacheRepository.save( NaviCacheEntity( key = NaviSharedDbKeys.NAVI_APP_PROFILE.keyName, @@ -101,7 +92,7 @@ class ProfileVM @Inject constructor( if (!isSameWidgetResponse(response.data, cacheResponse)) { setSuccessState(response) } else { - _hideShimmer.postValue(true) + _profileScreenDataState.update { ProfileScreenState.Success(cacheResponse) } } } else { setSuccessState(response) diff --git a/android/app/src/main/java/com/naviapp/models/AppStories.kt b/android/app/src/main/java/com/naviapp/models/AppStories.kt deleted file mode 100644 index 57a1b5a8e5..0000000000 --- a/android/app/src/main/java/com/naviapp/models/AppStories.kt +++ /dev/null @@ -1,73 +0,0 @@ -/* - * - * * Copyright © 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.base.model.ActionData -import kotlinx.parcelize.Parcelize - -@Parcelize -data class AppStories( - @SerializedName("total") - val total: Int? = null, - @SerializedName("viewed") - val viewed: Int? = null, - @SerializedName("cards") - val cards: List? = null, - @SerializedName("landingPosition") - val landingPosition: Int? = null, - @SerializedName("description") - val description: Description? = null -) : Parcelable - -@Parcelize -data class Description( - @SerializedName("text") - val text: String? = null, - @SerializedName("textColor") - val textColor: String? = null, - @SerializedName("bgColor") - val bgColor: String? = null -) : Parcelable - -@Parcelize -data class Story( - @SerializedName("referenceId") - val referenceId: String? = null, - @SerializedName("duration") - val duration: Int? = null, - @SerializedName("type") - val type: String? = null, - @SerializedName("actionData") - val actionData: ActionData? = null, - @SerializedName("content") - val content: MetaData? = null, - @SerializedName("viewed") - val viewed: Boolean? = null, - @SerializedName("header") - val header: StoryHeader? = null -) : Parcelable - -@Parcelize -data class StoryHeader( - @SerializedName("image") - val image: String? = null, - @SerializedName("title") - val title: String? = null -) : Parcelable - -@Parcelize -data class MetaData( - @SerializedName("url") - val url: String? = null, - @SerializedName("width") - val width: Int? = null, - @SerializedName("height") - val height: Int? = null -) : Parcelable 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 166eba6f5d..aad39accfc 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 @@ -37,7 +37,6 @@ import com.navi.common.model.common.WidgetResponse import com.navi.common.network.models.GenericResponse import com.navi.common.useruploaddata.model.IngestionStatusBody import com.navi.common.utils.Constants.AVAILABLE_APP_VERSION_CODE -import com.navi.common.utils.Constants.BOTTOM_NAV_BAR_ENDPOINT import com.navi.common.utils.Constants.HEADER_CONNECTIVITY_TYPE import com.navi.common.utils.Constants.HEADER_DEVICE_DENSITY import com.navi.common.utils.Constants.HEADER_INSTALLED_MODULES @@ -78,14 +77,12 @@ import com.naviapp.home.dashboard.models.response.DashboardTabsResponse import com.naviapp.home.dashboard.models.response.GenerateQuoteResponse import com.naviapp.home.dashboard.models.response.InvestmentsResponse import com.naviapp.home.dashboard.models.response.R11PaymentResponse -import com.naviapp.home.model.BottomBarResponse import com.naviapp.home.model.LoanDashboardResponse import com.naviapp.home.model.NotificationScreenDefinition import com.naviapp.home.model.NotificationUpdateStatus import com.naviapp.home.model.OnBoardingResponse import com.naviapp.models.ABSettings import com.naviapp.models.ActiveLoanApplicationDetails -import com.naviapp.models.AppStories import com.naviapp.models.CreditDataResponse import com.naviapp.models.EMIDateChangeResponse import com.naviapp.models.EMIUpdatedCalendarResponse @@ -951,12 +948,6 @@ interface RetrofitService { @Header(HEADER_SSID) ssid: String? ): Response> - @GET("/v1/cards?groupType=STORY") - suspend fun fetchStories( - @Header("deviceDensity") density: String, - @Query("cardGroupReferenceId") cardGroupReferenceId: String? = null - ): Response> - @POST("/v1/cards/{referenceId}/inbox") suspend fun postStoryStatus( @Path("referenceId") referenceId: String @@ -1902,12 +1893,6 @@ interface RetrofitService { @Query("loanAccountNumber") loanAccountNumber: String ): Response> - @GET(BOTTOM_NAV_BAR_ENDPOINT) - suspend fun fetchBottomNavBarResponse( - @Header(HEADER_PERMISSION_GRANTED) permissionGranted: Boolean, - @Header(HEADER_INSTALLED_MODULES) installedModules: String - ): Response> - @GET("/widgets/sa/gi/nav-bar/cta") suspend fun fetchGiNavCta( @Header("X-Target") target: String = ModuleName.GI.name diff --git a/android/app/src/main/java/com/naviapp/registration/RegistrationActivity.kt b/android/app/src/main/java/com/naviapp/registration/RegistrationActivity.kt index 8ea2d9b951..be07fb35f3 100644 --- a/android/app/src/main/java/com/naviapp/registration/RegistrationActivity.kt +++ b/android/app/src/main/java/com/naviapp/registration/RegistrationActivity.kt @@ -92,7 +92,6 @@ import com.naviapp.appupdate.activities.UpdateAppActivity import com.naviapp.common.listeners.FragmentStateListener import com.naviapp.common.navigator.NaviDeepLinkNavigator import com.naviapp.common.navigator.ScreenNavigator -import com.naviapp.common.viewmodel.BottomNavBarVM import com.naviapp.dashboard.listeners.FragmentInteractionListener import com.naviapp.databinding.RegistrationActivityBinding import com.naviapp.home.viewmodel.HomeVM @@ -140,7 +139,6 @@ class RegistrationActivity : private lateinit var binding: RegistrationActivityBinding private val registrationVM by lazy { ViewModelProvider(this)[RegistrationVM::class.java] } private val homeVM by lazy { ViewModelProvider(this)[HomeVM::class.java] } - private val bottomNavBarVM by lazy { ViewModelProvider(this)[BottomNavBarVM::class.java] } private val otpReceiver by lazy { SmsAutoReadReceiver() } private val permissionsManager by lazy { PermissionsManager(this) } private val registrationSharedVM by lazy { @@ -673,10 +671,6 @@ class RegistrationActivity : installedModules = getInstalledDynamicModulesCommaSeparated(), clearReferralPopupPreferences = false ) - bottomNavBarVM.fetchAndSaveHomeBottomNavigationBar( - permissionGranted = true, - installedModules = getInstalledDynamicModulesCommaSeparated() - ) goToNextScreen(nextCta = otpResponse.nextCta) } .addOnFailureListener { diff --git a/android/app/src/main/java/com/naviapp/storyview/PausableProgressBar.kt b/android/app/src/main/java/com/naviapp/storyview/PausableProgressBar.kt deleted file mode 100644 index 9f7c5a7cb4..0000000000 --- a/android/app/src/main/java/com/naviapp/storyview/PausableProgressBar.kt +++ /dev/null @@ -1,173 +0,0 @@ -/* - * - * * Copyright © 2022 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.naviapp.storyview - -import android.content.Context -import android.graphics.Color -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.view.animation.Animation -import android.view.animation.LinearInterpolator -import android.view.animation.ScaleAnimation -import android.view.animation.Transformation -import android.widget.FrameLayout -import androidx.annotation.AttrRes -import com.navi.common.utils.setCornerRadius -import com.naviapp.R - -class PausableProgressBar -@JvmOverloads -constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr: Int = 0) : - FrameLayout(context, attrs, defStyleAttr) { - private var frontProgressView: View? = null - private var maxProgressView: View? = null - private var animation: PausableScaleAnimation? = null - private var duration = DEFAULT_PROGRESS_DURATION.toLong() - private var callback: Callback? = null - - init { - LayoutInflater.from(context).inflate(R.layout.pausable_progress, this) - frontProgressView = findViewById(R.id.front_progress) - frontProgressView.run { setCornerRadius(20) } - maxProgressView = findViewById(R.id.max_progress) - } - - interface Callback { - fun onStartProgress() - fun onFinishProgress() - } - - fun setDuration(duration: Long) { - this.duration = duration - } - - fun setCallback(callback: Callback) { - this.callback = callback - } - - fun setMax() { - finishProgress(true) - } - - fun setMin() { - finishProgress(false) - } - - fun setMinWithoutCallback() { - maxProgressView?.setBackgroundColor(Color.parseColor("#8affffff")) - maxProgressView?.visibility = VISIBLE - - animation?.setAnimationListener(null) - animation?.cancel() - } - - fun setMaxWithoutCallback() { - maxProgressView?.setBackgroundResource(R.color.white) - maxProgressView?.visibility = VISIBLE - animation?.setAnimationListener(null) - animation?.cancel() - } - - private fun finishProgress(isMax: Boolean) { - if (isMax) maxProgressView?.setBackgroundResource(R.color.white) - maxProgressView?.visibility = if (isMax) VISIBLE else GONE - animation?.setAnimationListener(null) - animation?.cancel() - callback?.onFinishProgress() - } - - fun startProgress() { - maxProgressView?.visibility = GONE - animation = - PausableScaleAnimation( - 0F, - 1F, - 1F, - 1F, - Animation.ABSOLUTE, - 0F, - Animation.RELATIVE_TO_SELF, - 0F - ) - animation?.duration = duration - animation?.interpolator = LinearInterpolator() - animation?.setAnimationListener( - object : Animation.AnimationListener { - override fun onAnimationStart(animation: Animation) { - frontProgressView?.visibility = VISIBLE - callback?.onStartProgress() - } - - override fun onAnimationRepeat(animation: Animation) {} - override fun onAnimationEnd(animation: Animation) { - callback?.onFinishProgress() - } - } - ) - animation?.fillAfter = true - frontProgressView?.startAnimation(animation) - } - - fun pauseProgress() { - animation?.pause() - } - - fun resumeProgress() { - animation?.resume() - } - - fun clear() { - animation?.setAnimationListener(null) - animation?.cancel() - animation = null - } - - private inner class PausableScaleAnimation - internal constructor( - fromX: Float, - toX: Float, - fromY: Float, - toY: Float, - pivotXType: Int, - pivotXValue: Float, - pivotYType: Int, - pivotYValue: Float - ) : ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue) { - private var mElapsedAtPause: Long = 0 - private var mPaused = false - override fun getTransformation( - currentTime: Long, - outTransformation: Transformation, - scale: Float - ): Boolean { - if (mPaused && mElapsedAtPause == 0L) { - mElapsedAtPause = currentTime - startTime - } - if (mPaused) { - startTime = currentTime - mElapsedAtPause - } - return super.getTransformation(currentTime, outTransformation, scale) - } - - fun pause() { - if (mPaused) return - mElapsedAtPause = 0 - mPaused = true - } - - fun resume() { - mPaused = false - } - } - - companion object { - - private const val DEFAULT_PROGRESS_DURATION = 2000 - } -} diff --git a/android/app/src/main/java/com/naviapp/storyview/StoriesProgressView.kt b/android/app/src/main/java/com/naviapp/storyview/StoriesProgressView.kt deleted file mode 100644 index 370cdf8281..0000000000 --- a/android/app/src/main/java/com/naviapp/storyview/StoriesProgressView.kt +++ /dev/null @@ -1,183 +0,0 @@ -package com.naviapp.storyview - -import android.content.Context - -import android.util.AttributeSet -import android.view.View -import android.widget.LinearLayout -import com.naviapp.R - - -class StoriesProgressView(context: Context, attrs: AttributeSet? = null) : - LinearLayout(context, attrs) { - private val PROGRESS_BAR_LAYOUT_PARAM = LayoutParams(0, LayoutParams.WRAP_CONTENT, 1F) - private val SPACE_LAYOUT_PARAM = LayoutParams(8, LayoutParams.WRAP_CONTENT) - private val progressBars: MutableList = ArrayList() - private var storiesCount = -1 - - private var current = -1 - private var storiesListener: StoriesListener? = null - var isComplete = false - private var isSkipStart = false - private var isReverseStart = false - - init { - init(context, attrs) - } - - interface StoriesListener { - fun onNext() - fun onPrev() - fun onComplete() - } - - private fun init(context: Context, attrs: AttributeSet?) { - orientation = HORIZONTAL - val typedArray = context.obtainStyledAttributes(attrs, R.styleable.StoriesProgressView) - storiesCount = typedArray.getInt(R.styleable.StoriesProgressView_progressCount, 0) - typedArray.recycle() - bindViews() - } - - private fun bindViews() { - progressBars.clear() - removeAllViews() - for (i in 0 until storiesCount) { - val progressBar: PausableProgressBar = createProgressBar() - progressBars.add(progressBar) - addView(progressBar) - if (i + 1 < storiesCount) { - addView(createSpace()) - } - } - } - - private fun createProgressBar(): PausableProgressBar { - val progressBar = PausableProgressBar(context) - progressBar.setLayoutParams(PROGRESS_BAR_LAYOUT_PARAM) - return progressBar - } - - private fun createSpace(): View { - val view = View(context) - view.layoutParams = SPACE_LAYOUT_PARAM - return view - } - - fun setStoriesCount(storiesCount: Int) { - this.storiesCount = storiesCount - bindViews() - } - - fun setStoriesListener(storiesListener: StoriesListener?) { - this.storiesListener = storiesListener - } - - - fun skip() { - if (isSkipStart || isReverseStart) return - if (isComplete) return - if (current < 0) return - val progressBar: PausableProgressBar = progressBars[current] - isSkipStart = true - progressBar.setMax() - } - - - fun reverse() { - if (isSkipStart || isReverseStart) return - if (isComplete) return - if (current < 0) return - val progressBar: PausableProgressBar = progressBars[current] - isReverseStart = true - progressBar.setMin() - } - - fun setStoryDuration(duration: Long) { - for (i in progressBars.indices) { - progressBars[i].setDuration(duration) - progressBars[i].setCallback(callback(i)) - } - } - - - fun setStoriesCountWithDurations(durations: Array?) { - storiesCount = durations?.size ?: 0 - bindViews() - for (i in progressBars.indices) { - durations?.get(i)?.let { - progressBars[i].setDuration(it) - } - progressBars[i].setCallback(callback(i)) - } - } - - private fun callback(index: Int): PausableProgressBar.Callback { - return object : PausableProgressBar.Callback { - override fun onStartProgress() { - current = index - } - - override fun onFinishProgress() { - if (isReverseStart) { - storiesListener?.onPrev() - if (0 <= current - 1) { - val singleProgressBar: PausableProgressBar = progressBars[current - 1] - singleProgressBar.setMinWithoutCallback() - progressBars[--current].startProgress() - } else { - progressBars[current].startProgress() - } - isReverseStart = false - return - } - val next = current + 1 - if (next <= progressBars.size - 1) { - storiesListener?.onNext() - progressBars[next].startProgress() - } else { - isComplete = true - storiesListener?.onComplete() - } - isSkipStart = false - } - } - } - - - fun startStories() { - progressBars[0].startProgress() - } - - - fun startStories(from: Int) { - for (i in 0 until from) { - progressBars[i].setMaxWithoutCallback() - } - if(progressBars.isNotEmpty()) { - progressBars[from].startProgress() - } - } - - - fun destroy() { - for (p in progressBars) { - p.clear() - } - } - - - fun pause() { - if (current < 0) return - progressBars[current].pauseProgress() - } - - fun resume() { - if (current < 0) return - progressBars[current].resumeProgress() - } - - companion object { - private val TAG = StoriesProgressView::class.java.simpleName - } -} diff --git a/android/app/src/main/java/com/naviapp/storyview/StoryRepository.kt b/android/app/src/main/java/com/naviapp/storyview/StoryRepository.kt deleted file mode 100644 index 377b3d861e..0000000000 --- a/android/app/src/main/java/com/naviapp/storyview/StoryRepository.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.naviapp.storyview - -import com.naviapp.network.retrofit.ResponseCallback -import com.naviapp.utils.superAppRetrofitService - -class StoryRepository : ResponseCallback() { - suspend fun postStoryStatus(referenceId: String) = - apiResponseCallback(superAppRetrofitService().postStoryStatus(referenceId)) - - suspend fun fetchStories(density: String, cardGroupReferenceId: String? = null) = - apiResponseCallback(superAppRetrofitService().fetchStories(density, cardGroupReferenceId)) - - suspend fun getNextCta(source: String) = - apiResponseCallback(superAppRetrofitService().getNextCtaStory(source)) - -} \ No newline at end of file diff --git a/android/app/src/main/java/com/naviapp/storyview/StoryVM.kt b/android/app/src/main/java/com/naviapp/storyview/StoryVM.kt deleted file mode 100644 index b9b03a0497..0000000000 --- a/android/app/src/main/java/com/naviapp/storyview/StoryVM.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.naviapp.storyview - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.viewModelScope -import com.navi.base.model.ActionData -import com.navi.base.utils.BaseUtils -import com.navi.common.viewmodel.BaseVM -import com.naviapp.models.AppStories -import com.naviapp.models.Story -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch - -class StoryVM(private val repository: StoryRepository = StoryRepository()) : BaseVM() { - - val stories = MutableLiveData>() - private val _appStoriesData = MutableLiveData() - val appStoriesData: LiveData - get() = _appStoriesData - private val _storyNextCta = MutableLiveData() - val storyNextCta: LiveData - get() = _storyNextCta - - - fun postStoryStatus(referenceId: String) { - if (!BaseUtils.isUserLoggedIn()) - return - viewModelScope.launch { - repository.postStoryStatus(referenceId) - } - } - fun getNextCta(source: String) { - viewModelScope.launch { - val response = repository.getNextCta(source) - if (response.error == null && response.errors.isNullOrEmpty()) { - _storyNextCta.postValue(response.data) - } else { - setErrorData(response.errors, response.error) - } - } - } - fun fetchStories(density: String, cardGroupReferenceId: String? = null) { - viewModelScope.launch(Dispatchers.IO) { - val response = repository.fetchStories(density, cardGroupReferenceId) - if (response.error == null && response.errors.isNullOrEmpty()) { - _appStoriesData.postValue(response.data) - } else { - launch(Dispatchers.Main) { - setErrorData(response.errors, response.error) - } - } - } - } -} \ No newline at end of file diff --git a/android/app/src/main/java/com/naviapp/utils/BottomBarUtils.kt b/android/app/src/main/java/com/naviapp/utils/BottomBarUtils.kt index 28ebe59ab1..3773e94ae4 100644 --- a/android/app/src/main/java/com/naviapp/utils/BottomBarUtils.kt +++ b/android/app/src/main/java/com/naviapp/utils/BottomBarUtils.kt @@ -7,56 +7,11 @@ package com.naviapp.utils -import com.navi.design.R as DesignR -import android.animation.Animator -import android.content.Context -import android.graphics.Bitmap -import android.graphics.PorterDuff -import android.graphics.PorterDuffColorFilter -import android.graphics.drawable.BitmapDrawable -import android.graphics.drawable.Drawable -import android.graphics.drawable.StateListDrawable -import android.os.Build -import android.view.View -import androidx.core.content.ContextCompat -import com.airbnb.lottie.LottieCompositionFactory -import com.airbnb.lottie.LottieDrawable -import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.CustomTarget -import com.bumptech.glide.request.transition.Transition -import com.google.android.material.bottomnavigation.BottomNavigationView -import com.navi.common.utils.parseColor import com.naviapp.R -import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.home.model.BottomBarTabType -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext object BottomBarUtils { - fun fetchDefaultTabTitle(context: Context, tabId: Int?): String { - return when (tabId) { - R.id.navi -> context.getString(R.string.navi) - R.id.investment -> context.getString(R.string.investment) - R.id.insurance -> context.getString(R.string.insurance) - R.id.loan -> context.getString(R.string.loan) - else -> "" - } - } - - fun fetchDefaultTabIconImage(context: Context, tabId: Int?): Drawable? { - val icon = - when (tabId) { - R.id.navi -> R.drawable.bottom_nav_navi_icon - R.id.investment -> R.drawable.bottom_nav_investment_icon - R.id.insurance -> R.drawable.bottom_nav_insurance_icon - R.id.loan -> R.drawable.bottom_nav_loan_icon - else -> R.drawable.bottom_nav_placeholder_icon - } - return ContextCompat.getDrawable(context, icon) - } - fun fetchDefaultTabIconResourceId(selectedTabId: String, tabId: String): Int { return if (selectedTabId == tabId) { when (tabId) { @@ -77,156 +32,4 @@ object BottomBarUtils { } } - fun fetchDefaultTabTitleUsingTabId(context: Context, tabId: String): String { - return when (tabId) { - BottomBarTabType.HOME.name -> context.getString(R.string.navi) - BottomBarTabType.INVESTMENT.name -> context.getString(R.string.investment) - BottomBarTabType.INSURANCE.name -> context.getString(R.string.insurance) - BottomBarTabType.LOAN.name -> context.getString(R.string.loan) - else -> EMPTY - } - } - - fun setTabIcon( - context: Context, - bottomNavigationView: BottomNavigationView, - tabId: Int, - iconUrl: String?, - unselectedIconColorCode: String? - ) { - iconUrl?.let { url -> - bottomNavigationView.itemIconTintList = null - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - bottomNavigationView.menu.findItem(tabId)?.iconTintList = null - bottomNavigationView.menu.findItem(tabId)?.iconTintMode = null - } - Glide.with(context) - .asBitmap() - .load(url) - .into( - object : - CustomTarget( - context.resources.getDimensionPixelSize(com.navi.amc.R.dimen.dp_28), - context.resources.getDimensionPixelSize(com.navi.amc.R.dimen.dp_28) - ) { - override fun onResourceReady( - resource: Bitmap, - transition: Transition? - ) { - bottomNavigationView.menu.findItem(tabId)?.icon = - getStateListDrawable(context, resource, unselectedIconColorCode) - } - - override fun onLoadFailed(placeholder: Drawable?) { - bottomNavigationView.menu.findItem(tabId)?.icon = - fetchDefaultTabIconImage(context, tabId) - } - - override fun onLoadStarted(placeholder: Drawable?) { - bottomNavigationView.menu - .findItem(tabId) - ?.setIcon(R.drawable.bottom_nav_placeholder_icon) - } - - override fun onLoadCleared(placeholder: Drawable?) {} - } - ) - } - ?: run { - bottomNavigationView.menu.findItem(tabId)?.icon = - fetchDefaultTabIconImage(context, tabId) - } - } - - fun getStateListDrawable( - context: Context, - resource: Bitmap, - unselectedIconColorCode: String? - ): Drawable { - val selectedDrawable = BitmapDrawable(context.resources, resource) - val unselectedDrawable = - BitmapDrawable(context.resources, resource).apply { - mutate() - colorFilter = - try { - PorterDuffColorFilter( - unselectedIconColorCode?.parseColor() - ?: ContextCompat.getColor( - context, - DesignR.color.descriptionPrimaryColor - ), - PorterDuff.Mode.SRC_IN - ) - } catch (e: Exception) { - PorterDuffColorFilter( - ContextCompat.getColor(context, DesignR.color.descriptionPrimaryColor), - PorterDuff.Mode.SRC_IN - ) - } - } - val drawable = StateListDrawable() - drawable.addState(intArrayOf(-android.R.attr.state_checked), unselectedDrawable) - drawable.addState(intArrayOf(android.R.attr.state_checked), selectedDrawable) - return drawable - } - - suspend fun getLottieDrawable( - lottieUrl: String, - view: View, - replayCount: Int? = null, - animationEndCallback: () -> Unit - ): LottieDrawable { - val lottieDrawable = - LottieDrawable().apply { - withContext(Dispatchers.IO) { - val result = - LottieCompositionFactory.fromUrlSync( - view.context.applicationContext, - lottieUrl - ) - launch(Dispatchers.Main) { - callback = view - composition = result.value - repeatCount = replayCount ?: LottieDrawable.INFINITE - playAnimation() - addAnimatorListener( - object : Animator.AnimatorListener { - override fun onAnimationStart(animation: Animator) {} - - override fun onAnimationEnd(animation: Animator) { - animationEndCallback() - } - - override fun onAnimationCancel(animation: Animator) {} - - override fun onAnimationRepeat(animation: Animator) {} - } - ) - } - } - } - return lottieDrawable - } - - fun getClickedEventName(tabId: String): String { - return when (tabId) { - BottomBarTabType.HOME.name -> { - return NaviAnalytics.NEW_HOME_CLICKED - } - - BottomBarTabType.INVESTMENT.name -> { - return NaviAnalytics.NAV_INVESTMENT_CLICKED - } - - BottomBarTabType.LOAN.name -> { - return NaviAnalytics.NAV_LOAN_CLICKED - } - - BottomBarTabType.INSURANCE.name -> { - return NaviAnalytics.NEW_INSURANCE_CLICKED - } - - else -> com.navi.base.utils.EMPTY - } - } } diff --git a/android/app/src/main/java/com/naviapp/utils/Utility.kt b/android/app/src/main/java/com/naviapp/utils/Utility.kt index d11d3f6964..095afc4576 100644 --- a/android/app/src/main/java/com/naviapp/utils/Utility.kt +++ b/android/app/src/main/java/com/naviapp/utils/Utility.kt @@ -113,8 +113,8 @@ import com.naviapp.common.navigator.NaviDeepLinkNavigator import com.naviapp.common.navigator.NaviDeepLinkNavigator.ERROR_V2 import com.naviapp.common.navigator.NaviDeepLinkNavigator.getPersonalLoanDynamicModuleIntent import com.naviapp.home.activity.OnBoardingActivity +import com.naviapp.home.compose.activity.HomePageActivity import com.naviapp.home.dashboard.models.response.DashboardContentResponse -import com.naviapp.home.utils.getHomeScreenActivityIntent import com.naviapp.manager.usecase.UserDataUploadWorkerUseCase import com.naviapp.models.ColorData import com.naviapp.models.RedirectPageStatus @@ -122,17 +122,14 @@ import com.naviapp.models.response.WidgetConfig import com.naviapp.models.response.WidgetConfigLayoutParams import com.naviapp.permission.fragments.MandatePermissionFragment import com.naviapp.personalloanrevamp.models.response.BottomSheetConfig -import com.naviapp.utils.Constants.ATLEAST_ONE_ALPHANUMERIC import com.naviapp.utils.Constants.ERROR_DATA import com.naviapp.utils.Constants.HYPERVERGE_FILES_PATH import com.naviapp.utils.Constants.INDIAN_COUNTRY_CODE import com.naviapp.utils.Constants.MINIMUM_NUMBER_OF_CHARACTERS_IN_NAME -import com.naviapp.utils.Constants.MIN_COMPANY_NAME_LENGTH import com.naviapp.utils.Constants.PLAY_STORE_REQUEST_CODE import com.naviapp.utils.Constants.REDIRECT_DATA import com.naviapp.utils.Constants.REDIRECT_STATUS import com.naviapp.utils.Constants.UTF_8 -import com.naviapp.utils.Constants.VALID_COMPANY_NAME_REGEX import com.naviapp.utils.Constants.VALID_NAME_REGEX import com.naviapp.utils.Constants.VALID_PHONE_NUMBER_LENGTH import com.naviapp.utils.Constants.WHATSAPP_URI @@ -145,7 +142,6 @@ import java.math.RoundingMode import java.net.URLEncoder import java.text.DecimalFormat import java.util.Calendar -import java.util.Locale import java.util.UUID import java.util.regex.Pattern import okhttp3.MediaType.Companion.toMediaTypeOrNull @@ -163,15 +159,6 @@ fun getAppName(): String { else Constants.APP_NAME_DEBUG } -val defaultLocale: String - get() { - try { - return Locale.getDefault().toString() - } catch (ignored: Exception) {} - - return "" - } - fun deleteCacheAndOpenLoginPage(context: Context = NaviApplication.instance) { try { if (BaseUtils.isUserLoggedIn()) { @@ -179,7 +166,7 @@ fun deleteCacheAndOpenLoginPage(context: Context = NaviApplication.instance) { AmcTaskManager.clearData(true) clearData() clearHypervergeData() - val i = getHomeScreenActivityIntent(context) + val i = Intent(context, HomePageActivity::class.java) i.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or @@ -260,12 +247,6 @@ fun CharSequence?.isValidEmail() = fun String.isValidPhoneNumber() = length == VALID_PHONE_NUMBER_LENGTH && all { it.isDigit() } -fun String.isValidCompanyName(): Boolean { - return (this.trim().length >= MIN_COMPANY_NAME_LENGTH && - VALID_COMPANY_NAME_REGEX.toRegex().matches(this.trim()) && - ATLEAST_ONE_ALPHANUMERIC.toRegex().matches(this.trim())) -} - fun String.isValidName() = this.trim().length >= MINIMUM_NUMBER_OF_CHARACTERS_IN_NAME && VALID_NAME_REGEX.toRegex().matches(this.trim()) @@ -373,18 +354,6 @@ fun openPlayStore( } finally {} } -fun openMobileDialer(mobileNo: String?, activity: FragmentActivity?) { - mobileNo?.let { - val uri = Uri.parse("tel:$mobileNo") - val intent = Intent(Intent.ACTION_DIAL, uri) - try { - activity?.startActivity(intent) - } catch (ex: Exception) { - ex.printStackTrace() - } - } -} - private fun getPackgName(): String { try { return NaviApplication.instance.applicationContext.packageName @@ -575,10 +544,6 @@ fun isAppInstalled(context: Context, pkgName: String): Boolean { } } -fun removeCodeFromPhoneNumber(number: String): String { - return number.replace("+91", "") -} - fun getUniqueRandomNumber(): String? { try { return UUID.randomUUID().toString() @@ -955,15 +920,6 @@ fun isBottomSheetEnabled(type: String, bottomSheetList: List? return false } -fun toOpenBottomSheet(url: String?): Boolean { - url?.let { - return url.contains(Constants.SHOW_BOTTOM_SHEET, true) - } - ?: run { - return false - } -} - fun launchPermissionActivity( activity: Activity, addIntentFlags: Boolean = false, diff --git a/android/app/src/main/res/color/home_bottom_nav_icon_color.xml b/android/app/src/main/res/color/home_bottom_nav_icon_color.xml deleted file mode 100644 index 4e38599d84..0000000000 --- a/android/app/src/main/res/color/home_bottom_nav_icon_color.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/color/home_bottom_nav_text_color.xml b/android/app/src/main/res/color/home_bottom_nav_text_color.xml deleted file mode 100644 index 2dd3984695..0000000000 --- a/android/app/src/main/res/color/home_bottom_nav_text_color.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/drawable-hdpi-v4/black_light_gradient.webp b/android/app/src/main/res/drawable-hdpi-v4/black_light_gradient.webp deleted file mode 100644 index 300e343897075aa2864763ef451ca86a2aabc9bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534 zcmV+x0_puyNk&Ev0ssJ4MM6+kP&il$0000G0000R0sy1{06|PpNR$8o00D3yNs?(j z^V_zK`(JXRIwm6W@BX|0?!Wu*{=5GU{SO;o)A(THjg1#Jp4fPp#vL0sY+SK%!NwUI zC(}4$xZ8nxkBqJgrBQWWhfDMUhZsB$T8$b(Pvgpc*hvm_g6A#OyDkdM7MpR5cE{v#{ zeq9++F#NhQqG9=TWkkdB=*o$Q<8EuRtD_z{}Dgtjxj02+sTCF)A^%~>aaIwpZJOYG;s?n19o};h@bOE8`WTL&p+`K z{%GP5jKqFyqP%|Di2T__c>S{x`Lc@f`(`8aWfkN0kt>}?hkesW=E^I_?U;|vlvj`2 zF&~>KuOGHzKOQ|03flJUolpSn**c&B+p={)1Gi-AfCp~L)c_9Nld1q6yD*nQ0z|{| z=*o$Q<Rb%T%Qyf40P?c?rvLx| diff --git a/android/app/src/main/res/drawable-hdpi-v4/reload.webp b/android/app/src/main/res/drawable-hdpi-v4/reload.webp deleted file mode 100644 index 695a9ac2a461efa897ff219d6e9365bcdcc9f763..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmV;_0W1DeNk&G@0RRA3MM6+kP&il$0000G0000Z001KZ06|PpNL&E`00EF|Yum9$ zPi%H(X(yGsq%^v*ZQHhOd*%>q+qR8s@G3Zfh?oFr1ylN`G=m%5uuJW?`Qn{BXLpRv z)c_WrZH{Ajw}-Ej!jo9uuW-=uJMej9=bXgE+{RTefZtQSY$gC7M}~^lxBFvYf1p`s z;8>g(NA3j<8x{P3Jpp1n0j0+CBpeM8)0Cm3M~@zT@Rv~=_!uw7H!#&4hhgIEyD9@d zg_A zvc#8#0cg6yBA{6tco^m~YVk1!GuY*tOz~Kvv~Z#7hL;N(csn!m9u_683jE#w=`I6z zhBcRTOs;L?u8DJ=Tb?Th5~sCuvgb2&1Wj40u~GH(biJ6JMNc7=*g1win~IN*kN3+# zsK~bK(*6m#`z{<{`1kL_aZlF?E&T5~>kN+zJ=F}mesF3?^ZK`De;x!o?qI#6did`7 Q`>dsY-_t(r1v(E109oX89{>OV diff --git a/android/app/src/main/res/drawable-ldpi-v4/reload.webp b/android/app/src/main/res/drawable-ldpi-v4/reload.webp deleted file mode 100644 index 0d1acdb418d63addce344df2a7078ecda437f22d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276 zcmV+v0qg!!Nk&Et0RRA3MM6+kP&il$0000G0000H000pH06|PpNW1_500DqvZQC;C z8FzPA+>=wC?hegi1D-fjVH%UCu>jW zKM)bU%$Px=|3Z7;^EFXdS^VudpFy{OTMov8qdSJ!XDR*{FD!38(j1_bPW5E1-LcbD8|~0GNHvXNx=}0l<8EmdzA7yz%`*#`#Mu zUyIDChucChTNCd@M4w3?I64|eN85Z599B>`ASwU=0MG&eodGHm01^N`Z7h;Sq#~i1 a1OPw=#I%3_J>+Bn0RHasXzb*Q= zd!x(^@pIXO;^(pl#m{AKh@Z=NmIh0Z09H^qAm{)901y@codGIn0d4?3Z8nrhq$44r zB+**1fDMUhZsBp^8}s@A*6)m0#w+6$@rwAxd}6*aUl^~9SH>&j7I2wG!nx=L2`{85 zbnrh~G!Nb#llI=Wo;uU>blIor;fDz-E>Y}5~gQ5X~=X=ud#g5@#+u#>Em$zoajo=gkO2L`9G6MQ4rL# zAqJ(H2sJFoK_CGB{_w;EGCMZu{LEP+n*~{!9>8D#00(oviw|6?8BRZO&!~}OVSj13 IIP3rb06TQ29RL6T diff --git a/android/app/src/main/res/drawable-mdpi-v4/reload.webp b/android/app/src/main/res/drawable-mdpi-v4/reload.webp deleted file mode 100644 index be30c8e1ae535bd6f40a4cc25dc9538c3e39ea2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmV+@0oVRgNk&E>0RRA3MM6+kP&il$0000G0000N000*N06|PpNYnrT00Dqw+uE_` ziJi`#fh(i8ZBqp%!&g$yHx5c%Y;B$M)`1E&Q8s?cHHoX1^^R_V`_E4pNp!sdPh|~dBwPfa@xi{9 ztXrlL#iZ;KTogKmsX~`9k~KNWtiV~0B`%m|WXp-hC=-AUH5qeAW7Ia0DJ=w7h79@Q z%}0ve1Ja3KftNH<@B_L?s8RzgC)pC2Ma==7nj)f*69{k8NV;Z1?jf?Y5mH&N5`D!z28wd`T1&__=3ke z=hg36ochdY{_WGA$q18WhF(Wf*lJQcsn!m9+oFcfBwZ_GkbGc-r1YG&C}l8 zr4I8PqkoV2+jU9;uIrCUf4eTop>+K*@9*r67QxJU3VIF+9VZnR6}Pf?^G{PSa7meP z(ehC9(e~2<5=urM8FL;wK05rggU4s`)POmA_|I?K(cvhzUn2i@jEh2dJlI&iQV5M{ zeCqAfmSB6bKeqkddc=ui>yN{Aw;n07MEyxz^*w8;8j#+fTPV<^TW4?|ZnC?j=QLCs zpe73(a2HfG_~4*mz~v;A_XWJcRVPiNsp|P~|P-%p~s;dX5AI?p` zv7q6Aq>+H$x*dM2nM9*@82!jy^IJqff?3Up_3Cxbs|il4!`b3_x6V&$VrED=;jnAh zL#s6$p;-@3KiszYO@KpykHn1m4|#6~RA7Ib)u*0g@wCY4g}n>{o7#>RG@xaLuv z4K?c>^sK7`DBayw6vLM0V0+a=$4YFEMT<%Ajnx1zg3L{+1Ink0#=gk_KTNf+0J6G^ z*5DTys@OdS%6f`s&ubdy0!$LqLy|G6;FJcO6!S@F8wV6eT34fR4cIFhha{`jtTYO$ z1zPLSKMZ&!4S7AVw?SP3rZlLhK-UKK0ch2regm+YFP^WH#!T9vnm$I zG1?2Pv}!bP+h`8(*s5*7PNUFTs0p;jJ_(p$BrkyF*7OGo-4zxB*&deM2M&v(S1z#L ziU|O{RAd!U-Ai9+3UF4GeNuqGp}Jh202K*p(ytcy7N*Db48U43yA9w+I~{?K0WR8` zay$)CG0)!Aq*Q=U-eTVI6t>@HJF3_XzJ=|(aM9_w&jvD%PD*qZkodGH^05AYPWhReBq#_|2qyRt$M6`ek@DJc0fFGa~|D#YBO1w0dK0mIw e!<2xz3IH~P*Z|xmbt3DG6P1WDK+N2%KmY*Y773RC diff --git a/android/app/src/main/res/drawable-xxhdpi-v4/black_light_gradient.webp b/android/app/src/main/res/drawable-xxhdpi-v4/black_light_gradient.webp deleted file mode 100644 index f0761dc6847a963b78a2ea0dd0227495041ce2de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1254 zcmWIYbaT7M!oU#j>J$(bU=hK^z`!5?#O5pvo{S8RJ^>zYfjq_rRnKjiuWvouoO`Ce z=kMl6DK1a!|NlH+|L^ns|9_t2X8u=uWdHB^@6=QL|3BA$w!bePZ1;2i`)1Aef6jkD z_P=JmPvyhC9ZmB|8?nf-sA)D85?{w0hI zz;IAF#mvAkA(LS)qm~7W7o%OS*>uk(%1Vlg6Dl$qcsn!m9+uzdedw1Xz*KJ^^~z~d z;J^CMU)L?sRF!}Je<%nn-Pkluw7&Ay}9=9dGS*3O~TUF_Zo7E>+^`sKs8$b zJ}+Lf8;`9e9vIeRv(-cMBsQ0#E6v^^oG=rQZBRd&UPgEp-3TNbUJ_DSt6VJt;uC!hCPmuL^1qZDXx%238lFGkuwj) za7^Ogb>^JV1D6T4*U}26GpRJc+icvjLr_J&bmkn@1Dy)L*PMB%$KuI;H!YpBK*_`I zwXubFqmbiwB+VBTZ};!H&T%>5b8SJdDZe>I%tHQMd$U(^dAk4nfBxF82}`Eb&;Rq6 zSb={H4FCQ=>;@Jo5WqZ5)`FSE{eS`E3I?8^r3{S!Dinmf6ATzc^?Vp)r3w!OqzGK& zX_7iP!8yW+Bb&{UH{pch8i^~xeff6VH^59`@%YEUSuyQc3gfLU^*L$36BsZ1pV}d{ LreXrq9k3bziK2^G diff --git a/android/app/src/main/res/drawable-xxhdpi-v4/reload.webp b/android/app/src/main/res/drawable-xxhdpi-v4/reload.webp deleted file mode 100644 index f905c16d86b0cae050205435472bab1211fe1d6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmV-;1Bd)lNk&F+0{{S5MM6+kP&il$0000G0000-002h-06|PpNW}sG00EFiTifwC zZ^oXfZQHhO+qP|_wr$(CZM#ioYP-#I@xTB7A>~~}OaT3p^szggcAsCt2ml!ID{vSb zT0|<>WybdXcQ5YWJAX)(6cWIy%RS~Y1f2`3`RNzA>wQRlGb5E=k%oVSbk~M7`q)~% zg3|9ZBWaT42$VZYYfil;nu##IT7)DgnB(H`Af<}_;JTtjRxC| zlCHm$lPO zPVGhjzzA#WnCiOOo*Eq1#xvb@O9JB?YaN-Xx>aS)TC2pI)NL5E+*&f`XAI4DGM%l_ zEdv_q73~|7Ltq@UR<8~)zVa3*!hDUd)mdf%33|UZV5&|z!Il-FSVf%a}+=?8Qdn&8<73>_6J&wcbAVmYfU-FmcwU5J{94f*VgMXHk<286z{%D~#Cx z5f(2dCJmc?u)w~*e;>lL14+w7y9FdZEJ@l{yr$x9Z$Hx5v&L~*jvkRn_e>-1i@jY^ z%8T4GS(6#tuDoNMmsWJk=}GP#DPeT_p9la}P&goj0000m2mqY{Do6lG06t+Njzy#* zAsdg306+!=w1X4?4WJL;AAldA6#t`e0c5dPi-jovZC%B8$EiSv5GK}g0qR}GBpY{9 zTM;DOAOPE;{G`F~|H9?*|Nej9|If^S|DO=POb0BN8_LJw|Nk3U<3;_U|Nk3UDSu5& Oea8hkpk$BOUw{Cq38&ov diff --git a/android/app/src/main/res/drawable-xxxhdpi-v4/black_light_gradient.webp b/android/app/src/main/res/drawable-xxxhdpi-v4/black_light_gradient.webp deleted file mode 100644 index ce00da4122a6e0da82713583ec8f0715c086f4a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2114 zcmWIYbaS)fU|FKHO)2 z|L6RC^M9ZJ^VB@8|F;Jya2_Zx43s}nFK_d~zW&|M^Z$)M^!@)?{AfRaA5gCGzuk?` z_t~xgJwHDU$OP)h{`WiKXuZ77&-wP;Ad}{Nwy#eEs+{uQZU#^~`QK;z1ouDB>kse& z&1#VSF#kW}ZJ<}qACUY1Q+`7%NZJ}Cy$vLt`w=Al#Qs0?wuANm*mLIo|6|Xb4U!H6 zNv{Rzj(!G`K2ra0exoZ$H#acBkBZye8jS?Bwp_5%=13Cl{HLroOyyb!(zinlt3V;9vF64 zPx;qaPxo-jJDGlnm8IqGr1LFYoSeH==W~b%372`>323OOy_r^{5a8i^Q|E`nf(f%X zMScjrfXkyeBjv^mtO0{lJung{US2Zs!Luk2XYpuuqf1T_yKY!cnNAtDn!zrS;*5*LekSIqkfhoq0{m7hrDeKg(ri9y>(@425OoGX@|`^lrYC+K-i zo4`HI;(g8>`64^-E4C1;VHeAU%}ewIv(w%vCAhAgy`i&FY+K$THI}HGyE$f1Rd~h0 zo0aqP(r?fF_N;a%JsI;RF#P-fup3w>qXV`Db2FD7JlDW5SKtg#j%k6vqVvmw;sp%G zR~9g=Pd8%Vy)V8e?8hx5H<2ft-I6iPZkx;1^MsR*g)>}SbKhoy1CoL4yI*EKV7U62 vf%(gD+Y}>Y-Jliqux%20&eKt<e5qaIJzi zem_C@Y+nz_ulmhX5v11F?ZO zY=Z!-dFom}5jYl0ntERKaiY?qQo(O7M*0qatj~Jz%K}K}js?1m2EQqg^lp%dP!ig;F_Ho-kG?QeP$qisdW;`vqyZ1O}9U#>AD-A;p9b!Hy&s z@X9Dwz?}4Gu|!q8j1ge_k(On0)cBgqSkGMd=s{(cq{_46nvlfOkC}Po(*0roEW)im zWww)BUtkuyRZ%a~)~y=D{#h}%8poU^w|4zg$jml9;eM__l7bk9i!>pTYZ^D(~W@~9(+=k%+b3w8;q{FSpt z=oWDcY;L5IkTeEQdgv8&68scW+uz6F(LkNT&w^h^s^8<_ou*IKYvAt$Df8dM0pAtY zq*osJhfPU+*i`|XuBSt>Pb~1>0i3!qzm>H}Z@S@LW~rL+Zv*(!TmZ8S?WckcpnzIlB1%j3q;Z-hQaXfo5cI^gG$A zd>h)6;YFq%RFU*v4RXUW3wAz`a`EF19&*jVR*Swnn#tiP6)RMzP@xF@ zuN(kYP&go#0002+2>_h|DqsL$06tY3i$$ZMp&qZi05}Ciw1hYU_yhC<_y9UK5-rUl z+%wMahP;ngtkNDu#uA8$K2|=cw?t;%UiwD3cOM>sG3d6CzQoi;9|l}hEt-G;{?*hE z|Ne&)yzcm*E&u=Maj~@z|M@e||Nlq9sZIZrf8@mg)Y`E3N&Ym) - - - \ No newline at end of file diff --git a/android/app/src/main/res/drawable/story_cross.xml b/android/app/src/main/res/drawable/story_cross.xml deleted file mode 100644 index 8ca8d72198..0000000000 --- a/android/app/src/main/res/drawable/story_cross.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - diff --git a/android/app/src/main/res/layout/app_update_layout.xml b/android/app/src/main/res/layout/app_update_layout.xml deleted file mode 100644 index 44963f3a0c..0000000000 --- a/android/app/src/main/res/layout/app_update_layout.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/dashboard_drawer_notification.xml b/android/app/src/main/res/layout/dashboard_drawer_notification.xml deleted file mode 100644 index cd90fb1df6..0000000000 --- a/android/app/src/main/res/layout/dashboard_drawer_notification.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/fragment_home_ln.xml b/android/app/src/main/res/layout/fragment_home_ln.xml deleted file mode 100644 index 234c0af8b5..0000000000 --- a/android/app/src/main/res/layout/fragment_home_ln.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/fragment_profile_ln.xml b/android/app/src/main/res/layout/fragment_profile_ln.xml deleted file mode 100644 index a9d2473950..0000000000 --- a/android/app/src/main/res/layout/fragment_profile_ln.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/network_connectivity_nudge_layout.xml b/android/app/src/main/res/layout/network_connectivity_nudge_layout.xml deleted file mode 100644 index a7cc2d1705..0000000000 --- a/android/app/src/main/res/layout/network_connectivity_nudge_layout.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/new_dashboard_activity.xml b/android/app/src/main/res/layout/new_dashboard_activity.xml deleted file mode 100644 index 61ca6e40e8..0000000000 --- a/android/app/src/main/res/layout/new_dashboard_activity.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/pausable_progress.xml b/android/app/src/main/res/layout/pausable_progress.xml deleted file mode 100644 index 39824bde79..0000000000 --- a/android/app/src/main/res/layout/pausable_progress.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/shimmer_home_bottombar.xml b/android/app/src/main/res/layout/shimmer_home_bottombar.xml deleted file mode 100644 index 2ae65277d6..0000000000 --- a/android/app/src/main/res/layout/shimmer_home_bottombar.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/layout/shimmer_home_layout.xml b/android/app/src/main/res/layout/shimmer_home_layout.xml deleted file mode 100644 index 2a955b5a62..0000000000 --- a/android/app/src/main/res/layout/shimmer_home_layout.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/layout/story_layout.xml b/android/app/src/main/res/layout/story_layout.xml deleted file mode 100644 index 0678ac5b2a..0000000000 --- a/android/app/src/main/res/layout/story_layout.xml +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/menu/home_bottom_nav_menu.xml b/android/app/src/main/res/menu/home_bottom_nav_menu.xml deleted file mode 100644 index b025a9dd64..0000000000 --- a/android/app/src/main/res/menu/home_bottom_nav_menu.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - diff --git a/android/navi-base/src/main/java/com/navi/base/cache/util/NaviSharedDbKeys.kt b/android/navi-base/src/main/java/com/navi/base/cache/util/NaviSharedDbKeys.kt index 8ec0f3f13e..475d7dc8dd 100644 --- a/android/navi-base/src/main/java/com/navi/base/cache/util/NaviSharedDbKeys.kt +++ b/android/navi-base/src/main/java/com/navi/base/cache/util/NaviSharedDbKeys.kt @@ -9,6 +9,5 @@ package com.navi.base.cache.util enum class NaviSharedDbKeys(val keyName: String) { NAVI_APP_PROFILE("navi_app_profile"), - HOME_TAB("home_tab"), - HOME_BOTTOM_NAVIGATION_BAR("home_bottom_navigation_bar") + HOME_TAB("home_tab") } diff --git a/android/navi-common/src/main/java/com/navi/common/listeners/DashboardFragmentListener.kt b/android/navi-common/src/main/java/com/navi/common/listeners/DashboardFragmentListener.kt deleted file mode 100644 index 10acd75bf3..0000000000 --- a/android/navi-common/src/main/java/com/navi/common/listeners/DashboardFragmentListener.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * - * * Copyright © 2023 by Navi Technologies Limited - * * All rights reserved. Strictly confidential - * - */ - -package com.navi.common.listeners - -interface DashboardFragmentListener { - fun toggleBottomNavBehavior(scrollToHide: Boolean) - - fun scrollUpBottomNav() - - fun openProfileDrawer() - - fun openNotificationDrawer() - - fun fetchProfileItems() - - fun toggleBottomNavAndFabButton(visible: Boolean) - - fun toggleFabButton(visible: Boolean) -} diff --git a/android/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt b/android/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt index 2e178fdacd..2b8febd9f2 100644 --- a/android/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt +++ b/android/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt @@ -1059,11 +1059,7 @@ abstract class BaseActivity : override fun onBackPressed() { try { - if ( - this.javaClass.simpleName != "NewDashboardActivity" && - this.javaClass.simpleName != "HomePageActivity" && - isTaskRoot - ) { + if (this.javaClass.simpleName != "HomePageActivity" && isTaskRoot) { navigateToHome() } else { super.onBackPressed()