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 300e343897..0000000000
Binary files a/android/app/src/main/res/drawable-hdpi-v4/black_light_gradient.webp and /dev/null differ
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 695a9ac2a4..0000000000
Binary files a/android/app/src/main/res/drawable-hdpi-v4/reload.webp and /dev/null differ
diff --git a/android/app/src/main/res/drawable-ldpi-v4/black_light_gradient.webp b/android/app/src/main/res/drawable-ldpi-v4/black_light_gradient.webp
deleted file mode 100644
index 5ac36aa114..0000000000
Binary files a/android/app/src/main/res/drawable-ldpi-v4/black_light_gradient.webp and /dev/null differ
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 0d1acdb418..0000000000
Binary files a/android/app/src/main/res/drawable-ldpi-v4/reload.webp and /dev/null differ
diff --git a/android/app/src/main/res/drawable-mdpi-v4/black_light_gradient.webp b/android/app/src/main/res/drawable-mdpi-v4/black_light_gradient.webp
deleted file mode 100644
index 927d11c9d3..0000000000
Binary files a/android/app/src/main/res/drawable-mdpi-v4/black_light_gradient.webp and /dev/null differ
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 be30c8e1ae..0000000000
Binary files a/android/app/src/main/res/drawable-mdpi-v4/reload.webp and /dev/null differ
diff --git a/android/app/src/main/res/drawable-xhdpi-v4/black_light_gradient.webp b/android/app/src/main/res/drawable-xhdpi-v4/black_light_gradient.webp
deleted file mode 100644
index a103cfc0d1..0000000000
Binary files a/android/app/src/main/res/drawable-xhdpi-v4/black_light_gradient.webp and /dev/null differ
diff --git a/android/app/src/main/res/drawable-xhdpi-v4/reload.webp b/android/app/src/main/res/drawable-xhdpi-v4/reload.webp
deleted file mode 100644
index 1eeedcaacc..0000000000
Binary files a/android/app/src/main/res/drawable-xhdpi-v4/reload.webp and /dev/null differ
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 f0761dc684..0000000000
Binary files a/android/app/src/main/res/drawable-xxhdpi-v4/black_light_gradient.webp and /dev/null differ
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 f905c16d86..0000000000
Binary files a/android/app/src/main/res/drawable-xxhdpi-v4/reload.webp and /dev/null differ
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 ce00da4122..0000000000
Binary files a/android/app/src/main/res/drawable-xxxhdpi-v4/black_light_gradient.webp and /dev/null differ
diff --git a/android/app/src/main/res/drawable-xxxhdpi-v4/reload.webp b/android/app/src/main/res/drawable-xxxhdpi-v4/reload.webp
deleted file mode 100644
index 6b7a86519b..0000000000
Binary files a/android/app/src/main/res/drawable-xxxhdpi-v4/reload.webp and /dev/null differ
diff --git a/android/app/src/main/res/drawable/gray_gradient.xml b/android/app/src/main/res/drawable/gray_gradient.xml
deleted file mode 100644
index 35ba1d44bf..0000000000
--- a/android/app/src/main/res/drawable/gray_gradient.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
\ 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()