TP-65817 | Dagger to hilt migration for chat module (#10740)

This commit is contained in:
Varun Jain
2024-05-20 17:56:07 +05:30
committed by GitHub
parent 6e4b5aca6e
commit 1e6ceecd20
26 changed files with 73 additions and 309 deletions

View File

@@ -1,58 +0,0 @@
/*
*
* * Copyright © 2022-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.chat.di.components
import android.content.Context
import com.navi.chat.di.dependencies.NaviChatModuleDependencies
import com.navi.chat.di.modules.NaviChatModule
import com.navi.chat.di.scopes.NaviChatScope
import com.navi.chat.ui.activities.NaviChatViewImageActivity
import com.navi.chat.ui.activities.NaviChatViewVideoActivity
import com.navi.chat.ui.activities.NaviHelpCenterActivity
import com.navi.chat.ui.activities.NaviTicketViewActivity
import com.navi.chat.ui.activities.SupportScreenActivity
import com.navi.chat.ui.fragments.ChatAttachmentBottomSheet
import com.navi.chat.ui.fragments.ChatExitBottomSheet
import com.navi.chat.ui.fragments.FaqSearchFragment
import com.navi.chat.ui.fragments.NaviChatFragment
import dagger.BindsInstance
import dagger.Component
@Component(dependencies = [NaviChatModuleDependencies::class], modules = [NaviChatModule::class])
@NaviChatScope
interface NaviChatComponent {
@Component.Builder
interface Builder {
@BindsInstance fun naviChatModule(naviChatModule: NaviChatModule): Builder
fun context(@BindsInstance context: Context): Builder
fun appDependencies(chatModuleDependencies: NaviChatModuleDependencies): Builder
fun build(): NaviChatComponent
}
fun inject(naviChatFragment: NaviChatFragment)
fun inject(naviChatViewImageActivity: NaviChatViewImageActivity)
fun inject(chatAttachmentBottomSheet: ChatAttachmentBottomSheet)
fun inject(chatExitBottomSheet: ChatExitBottomSheet)
fun inject(naviChatViewVideoActivity: NaviChatViewVideoActivity)
fun inject(naviHelpCenterActivity: NaviHelpCenterActivity)
fun inject(naviTicketViewActivity: NaviTicketViewActivity)
fun inject(supportScreenActivity: SupportScreenActivity)
fun inject(faqSearchFragment: FaqSearchFragment)
}

View File

@@ -1,26 +0,0 @@
/*
*
* * Copyright © 2022 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.chat.di.dependencies
import android.content.Context
import com.navi.common.model.NetworkInfo
import com.navi.common.network.BaseUrls
import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
@EntryPoint
@InstallIn(SingletonComponent::class)
interface NaviChatModuleDependencies {
@ApplicationContext fun getAppInstance(): Context
fun getNetworkInfo(): NetworkInfo
fun getBaseUrls(): BaseUrls
}

View File

@@ -7,21 +7,11 @@
package com.navi.chat.di.modules
import android.content.Context
import androidx.room.Room
import com.google.gson.GsonBuilder
import com.navi.base.cache.dao.NaviCacheDao
import com.navi.base.cache.database.NaviSharedDatabase
import com.navi.base.cache.repository.NaviCacheRepositoryImpl
import com.navi.base.cache.util.NaviSharedDBConstant
import com.navi.base.utils.ConnectivityObserver
import com.navi.base.utils.ConnectivityObserverImpl
import com.navi.chat.di.scopes.NaviChatScope
import com.navi.chat.network.CoroutineProvider
import com.navi.chat.network.NaviChatApiInterface
import com.navi.chat.network.retrofit.NaviChatHttpClient
import com.navi.chat.provider.firestore.FireStoreDataProvider
import com.navi.chat.repositories.NaviChatRepository
import com.navi.chat.utils.ChatJsonDeserializer
import com.navi.common.model.ModuleNameV2
import com.navi.common.network.BaseUrls
@@ -31,17 +21,18 @@ import com.navi.naviwidgets.models.NaviWidget
import com.navi.naviwidgets.widgets.NaviWidgetJsonDeserializer
import dagger.Module
import dagger.Provides
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.migration.DisableInstallInCheck
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
@Module(includes = [NaviChatNetworkModule::class])
@DisableInstallInCheck
@InstallIn(SingletonComponent::class)
object NaviChatModule {
@Provides
@NaviChatScope
@Singleton
fun provideChatService(
naviChatHttpClient: NaviChatHttpClient,
baseUrls: BaseUrls,
@@ -78,34 +69,7 @@ object NaviChatModule {
.create(clazz)
}
@Provides
@NaviChatScope
fun providesNaviChatRepository(naviChatApiInterface: NaviChatApiInterface) =
NaviChatRepository(chatApiInterface = naviChatApiInterface)
@Provides @Singleton fun providesCoroutineScope() = CoroutineProvider
@Provides
@NaviChatScope
fun providesNaviCacheRepository(naviCacheDao: NaviCacheDao) =
NaviCacheRepositoryImpl(naviCacheDao)
@Provides
@NaviChatScope
fun providesNaviCacheDao(naviSharedDatabase: NaviSharedDatabase) =
naviSharedDatabase.naviCacheDao()
@Provides
@NaviChatScope
fun providesNaviSharedDatabase(@ApplicationContext context: Context) =
Room.databaseBuilder(context, NaviSharedDatabase::class.java, NaviSharedDBConstant.DB_NAME)
.build()
@Provides
@NaviChatScope
fun bindsConnectivityObserver(
connectivityObserverImpl: ConnectivityObserverImpl
): ConnectivityObserver = connectivityObserverImpl
@Provides @NaviChatScope fun providesCoroutineScope() = CoroutineProvider
@Provides @NaviChatScope fun providesFireStoreDataProvider() = FireStoreDataProvider()
@Provides fun providesFireStoreDataProvider() = FireStoreDataProvider()
}

View File

@@ -8,20 +8,21 @@
package com.navi.chat.di.modules
import android.content.Context
import com.navi.chat.di.scopes.NaviChatScope
import com.navi.chat.network.retrofit.NaviChatHttpClient
import com.navi.common.model.NetworkInfo
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.migration.DisableInstallInCheck
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@DisableInstallInCheck
@InstallIn(SingletonComponent::class)
object NaviChatNetworkModule {
@Provides
@NaviChatScope
@Singleton
fun providesOkHttpClient(
networkInfo: NetworkInfo,
@ApplicationContext context: Context

View File

@@ -1,15 +0,0 @@
/*
*
* * Copyright © 2022 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.chat.di.scopes
import javax.inject.Scope
@Scope
@MustBeDocumented
@Retention(value = AnnotationRetention.RUNTIME)
annotation class NaviChatScope

View File

@@ -7,7 +7,6 @@
package com.navi.chat.network
import com.navi.chat.di.scopes.NaviChatScope
import com.navi.chat.models.ChatConfigResponse
import com.navi.chat.models.request.NaviChatInitiateRequest
import com.navi.chat.models.request.NaviMarkConversationsReadRequest
@@ -25,7 +24,6 @@ import okhttp3.RequestBody
import retrofit2.Response
import retrofit2.http.*
@NaviChatScope
interface NaviChatApiInterface {
@POST("/crm/api/v1/customersupport/start/conversation")

View File

@@ -13,13 +13,13 @@ import androidx.lifecycle.OnLifecycleEvent
import com.google.firebase.Timestamp
import com.navi.base.utils.isNotNullAndNotEmpty
import com.navi.chat.data.firestore.ChatFireStoreDatabase
import com.navi.chat.di.scopes.NaviChatScope
import com.navi.chat.models.FireStoreDataProviderModel
import com.navi.chat.provider.ChatDataProvider
import com.navi.chat.provider.MessageOperation
import com.navi.naviwidgets.models.NaviChatWidget
import dagger.hilt.android.scopes.ActivityRetainedScoped
@NaviChatScope
@ActivityRetainedScoped
class FireStoreDataProvider : ChatDataProvider, LifecycleObserver {
private lateinit var chatFireStoreDatabase: ChatFireStoreDatabase

View File

@@ -7,7 +7,6 @@
package com.navi.chat.repositories
import com.navi.chat.di.scopes.NaviChatScope
import com.navi.chat.models.request.NaviChatInitiateRequest
import com.navi.chat.models.request.NaviMarkConversationsReadRequest
import com.navi.chat.network.NaviChatApiInterface
@@ -21,7 +20,6 @@ import retrofit2.http.Part
import retrofit2.http.PartMap
import retrofit2.http.Url
@NaviChatScope
class NaviChatRepository @Inject constructor(private val chatApiInterface: NaviChatApiInterface) :
ResponseCallback(), AwsRepositoryInterface {

View File

@@ -35,7 +35,9 @@ import com.navi.chat.utils.NaviChatAnalytics.Companion.SEND_MEDIA_ATTACHMENTS_CL
import com.navi.chat.utils.URI_LIST
import com.navi.common.model.ModuleNameV2
import com.navi.common.ui.activity.BaseActivity
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class AttachmentConfirmationActivity : BaseActivity() {
private val crmEventTracker = NaviChatAnalytics.naviChatAnalytics.CRM()

View File

@@ -43,7 +43,9 @@ import com.navi.chat.viewmodels.NaviChatSharedViewModel
import com.navi.common.model.ModuleNameV2
import com.navi.common.ui.activity.BaseActivity
import com.navi.common.utils.getSessionId
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class NaviChatActivity :
BaseActivity(),
AttachmentOptionClickListener,

View File

@@ -16,18 +16,16 @@ import com.bumptech.glide.Glide
import com.navi.chat.R
import com.navi.chat.base.ChatBaseActivity
import com.navi.chat.databinding.ActivityNaviChatViewImageBinding
import com.navi.chat.di.components.DaggerNaviChatComponent
import com.navi.chat.di.dependencies.NaviChatModuleDependencies
import com.navi.chat.di.modules.NaviChatModule
import com.navi.chat.utils.ChatFileHelper
import com.navi.chat.utils.FILENAME
import com.navi.chat.utils.FILE_URI
import com.navi.chat.utils.ToolbarInteraction
import com.navi.common.utils.log
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.android.AndroidEntryPoint
import java.io.File
import javax.inject.Inject
@AndroidEntryPoint
class NaviChatViewImageActivity : ChatBaseActivity(), ToolbarInteraction {
override val screenName: String
get() = NaviChatViewImageActivity::class.java.simpleName
@@ -40,7 +38,6 @@ class NaviChatViewImageActivity : ChatBaseActivity(), ToolbarInteraction {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_navi_chat_view_image)
setContentView(binding.root)
injectDependencies()
val filename = intent?.extras?.getString(FILENAME)
initUi(filename)
showImageInImageView(filename)
@@ -53,20 +50,6 @@ class NaviChatViewImageActivity : ChatBaseActivity(), ToolbarInteraction {
)
}
private fun injectDependencies() {
DaggerNaviChatComponent.builder()
.context(this)
.naviChatModule(NaviChatModule)
.appDependencies(
EntryPointAccessors.fromApplication(
this.applicationContext,
NaviChatModuleDependencies::class.java
)
)
.build()
.inject(this)
}
private fun showImageInImageView(fileName: String?) {
fileName?.let {
try {

View File

@@ -25,13 +25,11 @@ import androidx.databinding.DataBindingUtil
import com.navi.chat.R
import com.navi.chat.base.ChatBaseActivity
import com.navi.chat.databinding.ActivityNaviChatViewVideoBinding
import com.navi.chat.di.components.DaggerNaviChatComponent
import com.navi.chat.di.dependencies.NaviChatModuleDependencies
import com.navi.chat.di.modules.NaviChatModule
import com.navi.chat.utils.*
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.android.AndroidEntryPoint
import java.io.File
@AndroidEntryPoint
class NaviChatViewVideoActivity :
ChatBaseActivity(),
ToolbarInteraction,
@@ -54,7 +52,6 @@ class NaviChatViewVideoActivity :
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_navi_chat_view_video)
setContentView(binding.root)
injectDependencies()
binding.progressBar.visibility = View.VISIBLE
fileName = intent?.extras?.getString(FILENAME)
fileType = intent?.extras?.getString(FILE_TYPE_PARAM)
@@ -131,20 +128,6 @@ class NaviChatViewVideoActivity :
)
}
private fun injectDependencies() {
DaggerNaviChatComponent.builder()
.context(this)
.naviChatModule(NaviChatModule)
.appDependencies(
EntryPointAccessors.fromApplication(
this.applicationContext,
NaviChatModuleDependencies::class.java
)
)
.build()
.inject(this)
}
override fun onToolbarBackClicked() {
this.onBackPressed()
}

View File

@@ -10,6 +10,7 @@ package com.navi.chat.ui.activities
import android.os.Bundle
import android.view.View
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.navi.base.deeplink.DeepLinkManager
import com.navi.base.model.ActionData
@@ -17,9 +18,6 @@ import com.navi.base.model.CtaData
import com.navi.base.model.NaviClickAction
import com.navi.chat.R
import com.navi.chat.databinding.ActivityHelpCenterBinding
import com.navi.chat.di.components.DaggerNaviChatComponent
import com.navi.chat.di.dependencies.NaviChatModuleDependencies
import com.navi.chat.di.modules.NaviChatModule
import com.navi.chat.utils.CONVERSATION_ID
import com.navi.chat.utils.CONVERSATION_ID_PARAM
import com.navi.chat.utils.NaviChatAnalytics
@@ -43,9 +41,9 @@ import com.navi.common.ui.activity.BaseActivity
import com.navi.naviwidgets.adapters.NaviAdapter
import com.navi.naviwidgets.callbacks.WidgetCallback
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
import dagger.hilt.android.EntryPointAccessors
import javax.inject.Inject
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class NaviHelpCenterActivity : BaseActivity(), HeaderInteractionListener, WidgetCallback {
override val screenName: String
@@ -57,7 +55,7 @@ class NaviHelpCenterActivity : BaseActivity(), HeaderInteractionListener, Widget
private lateinit var binding: ActivityHelpCenterBinding
private val naviAdapter = NaviAdapter(widgetCallback = this, factory = ViewHolderFactoryImpl())
@Inject lateinit var viewModel: HelpCenterViewModel
private val viewModel by lazy { ViewModelProvider(this)[HelpCenterViewModel::class.java] }
private val crmEventTracker = NaviChatAnalytics.naviChatAnalytics.CRM()
@@ -65,7 +63,6 @@ class NaviHelpCenterActivity : BaseActivity(), HeaderInteractionListener, Widget
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_help_center)
setContentView(binding.root)
injectDependencies()
initObservers()
initError(
viewModel = viewModel,
@@ -130,20 +127,6 @@ class NaviHelpCenterActivity : BaseActivity(), HeaderInteractionListener, Widget
onBackPressed()
}
private fun injectDependencies() {
DaggerNaviChatComponent.builder()
.context(this)
.naviChatModule(NaviChatModule)
.appDependencies(
EntryPointAccessors.fromApplication(
this.applicationContext,
NaviChatModuleDependencies::class.java
)
)
.build()
.inject(this)
}
override fun onClick(naviClickAction: NaviClickAction, widgetId: String?) {
when (naviClickAction) {
is ActionData -> {

View File

@@ -9,6 +9,7 @@ package com.navi.chat.ui.activities
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.lifecycle.ViewModelProvider
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.deeplink.DeepLinkManager
import com.navi.base.model.CtaData
@@ -16,9 +17,6 @@ import com.navi.base.model.LineItem
import com.navi.base.sharedpref.CommonPrefConstants
import com.navi.base.sharedpref.PreferenceManager
import com.navi.chat.db.utils.crmEventTracker
import com.navi.chat.di.components.DaggerNaviChatComponent
import com.navi.chat.di.dependencies.NaviChatModuleDependencies
import com.navi.chat.di.modules.NaviChatModule
import com.navi.chat.models.TicketDetailsData
import com.navi.chat.ui.compose.TicketScreen
import com.navi.chat.utils.CONVERSATION_ID
@@ -34,9 +32,9 @@ import com.navi.chat.utils.TICKET_CLICKED
import com.navi.chat.viewmodels.TicketListViewModel
import com.navi.common.model.ModuleNameV2
import com.navi.common.ui.activity.BaseActivity
import dagger.hilt.android.EntryPointAccessors
import javax.inject.Inject
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class NaviTicketViewActivity : BaseActivity() {
override val screenName: String
@@ -45,8 +43,7 @@ class NaviTicketViewActivity : BaseActivity() {
override val moduleName: ModuleNameV2
get() = ModuleNameV2.CHAT
@Inject lateinit var viewModel: TicketListViewModel
private val viewModel by lazy { ViewModelProvider(this)[TicketListViewModel::class.java] }
private val userExternalId =
PreferenceManager.getStringPreference(CommonPrefConstants.USER_EXTERNAL_ID)
@@ -59,27 +56,12 @@ class NaviTicketViewActivity : BaseActivity() {
ticketListVM = viewModel
)
}
injectDependencies()
}
override fun onResume() {
super.onResume()
}
private fun injectDependencies() {
DaggerNaviChatComponent.builder()
.context(this)
.naviChatModule(NaviChatModule)
.appDependencies(
EntryPointAccessors.fromApplication(
this.applicationContext,
NaviChatModuleDependencies::class.java
)
)
.build()
.inject(this)
}
private fun ticketDetailClick(ticketDetailsData: TicketDetailsData) {
val ticketIdFormatted = ticketDetailsData.ticketId.substringAfter(":", "")
NaviTrackEvent.trackEventOnClickStream(

View File

@@ -28,9 +28,6 @@ import com.navi.base.sharedpref.PreferenceManager
import com.navi.base.utils.isNotNull
import com.navi.chat.R
import com.navi.chat.databinding.ActivitySupportScreenBinding
import com.navi.chat.di.components.DaggerNaviChatComponent
import com.navi.chat.di.dependencies.NaviChatModuleDependencies
import com.navi.chat.di.modules.NaviChatModule
import com.navi.chat.interfaces.ChatCtaClickListener
import com.navi.chat.interfaces.FaqClickListener
import com.navi.chat.interfaces.FaqCtaClickListener
@@ -83,9 +80,9 @@ import com.navi.design.utils.getNaviDrawable
import com.navi.design.utils.setFontStyle
import com.navi.naviwidgets.actions.ChatDeepLinkClickAction
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
import dagger.hilt.android.EntryPointAccessors
import javax.inject.Inject
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SupportScreenActivity :
BaseActivity(),
HeaderInteractionListener,
@@ -101,7 +98,7 @@ class SupportScreenActivity :
override val moduleName: ModuleNameV2
get() = ModuleNameV2.CHAT
@Inject lateinit var viewModel: SupportScreenViewModel
private val viewModel by lazy { ViewModelProvider(this)[SupportScreenViewModel::class.java] }
private lateinit var binding: ActivitySupportScreenBinding
private lateinit var commonBottomSheet: NewCommonBottomSheet
private var sourceScreenName: String? = null
@@ -120,7 +117,6 @@ class SupportScreenActivity :
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_support_screen)
setContentView(binding.root)
injectDependencies()
initListeners()
initObservers()
sourceScreenName = intent?.extras?.getString(KEY_SCREEN_NAME)
@@ -221,6 +217,7 @@ class SupportScreenActivity :
Pair("product", binding.titleTv.text.toString()),
Pair("screen_name", sourceScreenName.orEmpty()),
Pair("customer_id", userExternalId.toString()),
Pair("session_id", getSessionId().orEmpty())
)
)
moveToNextScreen(actionData, bundle)
@@ -294,20 +291,6 @@ class SupportScreenActivity :
binding.shimmerLayout.startShimmer()
}
private fun injectDependencies() {
DaggerNaviChatComponent.builder()
.context(this)
.naviChatModule(NaviChatModule)
.appDependencies(
EntryPointAccessors.fromApplication(
this.applicationContext,
NaviChatModuleDependencies::class.java
)
)
.build()
.inject(this)
}
override fun setProperties(header: Header?) {
binding.headerView.setProperties(header, this)
}

View File

@@ -30,6 +30,7 @@ import com.navi.chat.utils.ToolbarInteraction
import com.navi.chat.viewmodels.NaviChatSharedViewModel
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
import com.navi.naviwidgets.models.response.ChatLanguages
import dagger.hilt.android.internal.managers.ViewComponentManager
class NaviChatToolbar
@JvmOverloads
@@ -43,7 +44,19 @@ constructor(
private var languageSelected: String? = null
private var conversationId: String? = null
private val naviChatSharedViewModel by lazy {
ViewModelProvider(context as NaviChatActivity)[NaviChatSharedViewModel::class.java]
val activityContext = getActivityContext()
if (activityContext != null && activityContext is NaviChatActivity) {
ViewModelProvider(activityContext)[NaviChatSharedViewModel::class.java]
} else {
null
}
}
private fun getActivityContext(): Context? {
val currentContext = context
return if (currentContext is ViewComponentManager.FragmentContextWrapper) {
currentContext.baseContext
} else currentContext
}
init {
@@ -133,7 +146,7 @@ constructor(
) {
setSelectedLanguage(languageKeys[position])
if (position != selectedItemPosition) {
naviChatSharedViewModel.setLanguageSelected(true)
naviChatSharedViewModel?.setLanguageSelected(true)
languages[position]?.let {
crmEventTracker.sendEvent(
LANGUAGE_SELECTION_CLICK,

View File

@@ -38,6 +38,7 @@ import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -60,7 +61,7 @@ import kotlinx.coroutines.launch
@Composable
fun TicketScreen(
ticketListVM: TicketListViewModel,
ticketListVM: TicketListViewModel = hiltViewModel(),
onBackPress: () -> Unit = {},
onTicketClick: TicketDetailsData.() -> Unit
) {

View File

@@ -24,9 +24,6 @@ import com.navi.chat.R
import com.navi.chat.adapters.ChatAttachmentOptionAdapter
import com.navi.chat.common.fragment.BaseBottomSheet
import com.navi.chat.databinding.ChatAttachmentBottomSheetBinding
import com.navi.chat.di.components.DaggerNaviChatComponent
import com.navi.chat.di.dependencies.NaviChatModuleDependencies
import com.navi.chat.di.modules.NaviChatModule
import com.navi.chat.interfaces.AttachmentOptionClickListener
import com.navi.chat.interfaces.ChatAttachmentOptionsInterface
import com.navi.chat.models.ChatAttachmentData
@@ -41,10 +38,11 @@ import com.navi.chat.utils.NaviChatAnalytics.Companion.CHAT_ATTACHMENT_BOTTOM_SH
import com.navi.chat.utils.NaviChatAnalytics.Companion.FILE_ATTACHMENT_CLICK
import com.navi.chat.utils.NaviChatAnalytics.Companion.MEDIA_FILE_ATTACHMENT_CLICK
import com.navi.chat.viewmodels.AttachmentPickerViewModel
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import timber.log.Timber
@AndroidEntryPoint
class ChatAttachmentBottomSheet : BaseBottomSheet(), ChatAttachmentOptionsInterface {
private lateinit var binding: ChatAttachmentBottomSheetBinding
@@ -72,18 +70,6 @@ class ChatAttachmentBottomSheet : BaseBottomSheet(), ChatAttachmentOptionsInterf
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
DaggerNaviChatComponent.builder()
.context(requireContext())
.naviChatModule(NaviChatModule)
.appDependencies(
EntryPointAccessors.fromApplication(
requireContext().applicationContext,
NaviChatModuleDependencies::class.java
)
)
.build()
.inject(this)
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
launch {
attachmentPickerViewModel.dismissBottomSheetDialog.collect {

View File

@@ -33,9 +33,6 @@ import com.navi.chat.R
import com.navi.chat.adapters.RecentSearchOptionAdapter
import com.navi.chat.databinding.FragmentFaqSearchBinding
import com.navi.chat.db.utils.crmEventTracker
import com.navi.chat.di.components.DaggerNaviChatComponent
import com.navi.chat.di.dependencies.NaviChatModuleDependencies
import com.navi.chat.di.modules.NaviChatModule
import com.navi.chat.interfaces.ChatCtaClickListener
import com.navi.chat.interfaces.FaqClickListener
import com.navi.chat.interfaces.FaqCtaClickListener
@@ -62,11 +59,11 @@ import com.navi.common.utils.hideKeyboard
import com.navi.common.utils.observeNonNull
import com.navi.design.utils.underlinedText
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
import dagger.hilt.android.EntryPointAccessors
import javax.inject.Inject
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@AndroidEntryPoint
class FaqSearchFragment : BaseFragment(), RecentSearchClickInterface, HeaderInteractionListener {
private lateinit var binding: FragmentFaqSearchBinding
private lateinit var supportScreenFaqListAdapter: SupportScreenFaqAdapter
@@ -85,7 +82,7 @@ class FaqSearchFragment : BaseFragment(), RecentSearchClickInterface, HeaderInte
ViewModelProvider(requireActivity())[SupportScreenSharedViewModel::class.java]
}
@Inject lateinit var viewModel: FaqSearchScreenViewModel
private val viewModel by lazy { ViewModelProvider(this)[FaqSearchScreenViewModel::class.java] }
override fun onAttach(context: Context) {
super.onAttach(context)
@@ -114,17 +111,6 @@ class FaqSearchFragment : BaseFragment(), RecentSearchClickInterface, HeaderInte
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
DaggerNaviChatComponent.builder()
.context(requireContext())
.naviChatModule(NaviChatModule)
.appDependencies(
EntryPointAccessors.fromApplication(
requireContext().applicationContext,
NaviChatModuleDependencies::class.java
)
)
.build()
.inject(this)
readArguments()
binding.searchEt.requestFocus()
openKeyboard(binding.searchEt) {}

View File

@@ -65,9 +65,6 @@ import com.navi.chat.db.utils.getLanguageSelectedResponse
import com.navi.chat.db.utils.getNaviChatResolutionStatusResponse
import com.navi.chat.db.utils.getNaviChatUserCsatResponse
import com.navi.chat.db.utils.getTimerExpiredResponse
import com.navi.chat.di.components.DaggerNaviChatComponent
import com.navi.chat.di.dependencies.NaviChatModuleDependencies
import com.navi.chat.di.modules.NaviChatModule
import com.navi.chat.interfaces.ChatConversationIdListenerInterface
import com.navi.chat.interfaces.ChatTopBackButtonClickListener
import com.navi.chat.models.ChatDataProviderModel
@@ -128,7 +125,7 @@ import com.navi.naviwidgets.models.NaviTextComponent
import com.navi.naviwidgets.models.response.*
import com.navi.naviwidgets.utils.*
import com.navi.naviwidgets.viewholder.NaviChatViewHolderFactoryImpl
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.android.AndroidEntryPoint
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
@@ -141,9 +138,9 @@ import kotlinx.coroutines.launch
import org.joda.time.DateTime
import timber.log.Timber
@AndroidEntryPoint
class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, ToolbarInteraction {
@Inject lateinit var naviChatViewModel: NaviChatViewModel
@Inject lateinit var fireStoreDataProvider: FireStoreDataProvider
@Inject lateinit var fileUploadManager: FileUploadManager
@Inject lateinit var fileHelper: ChatFileHelper
@@ -180,6 +177,7 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
private val crmEventTracker = NaviChatAnalytics.naviChatAnalytics.CRM()
private val botMessageList = ArrayList<NaviChatWidget>()
private val fileSizes = HashMap<String, Int>()
private val naviChatViewModel by lazy { ViewModelProvider(this)[NaviChatViewModel::class.java] }
private val attachmentPickerViewModel by lazy {
ViewModelProvider(requireActivity())[AttachmentPickerViewModel::class.java]
}
@@ -204,17 +202,6 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
private val genericChatErrorOnRetryClick = View.OnClickListener { fetchChatData() }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
DaggerNaviChatComponent.builder()
.context(requireContext())
.naviChatModule(NaviChatModule)
.appDependencies(
EntryPointAccessors.fromApplication(
requireContext().applicationContext,
NaviChatModuleDependencies::class.java
)
)
.build()
.inject(this)
initError(
viewModel = naviChatViewModel,
dialogDismissClicked = { fetchChatData() },

View File

@@ -25,7 +25,9 @@ import com.navi.chat.models.response.QuestionAnswerList
import com.navi.chat.ui.adapters.SupportScreenFaqAdapter
import com.navi.chat.viewmodels.SupportScreenSharedViewModel
import com.navi.common.ui.fragment.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SupportScreenFaqFragment : BaseFragment() {
private lateinit var binding: FragmentSupportScreenFaqBinding

View File

@@ -16,6 +16,7 @@ import com.navi.chat.utils.FAQ_SEARCH_QUERY_MIN_LENGTH
import com.navi.chat.utils.FAQ_SEARCH_THRESHOLD_LIMIT
import com.navi.common.utils.log
import com.navi.common.viewmodel.BaseVM
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.FlowPreview
@@ -30,6 +31,7 @@ import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@HiltViewModel
class FaqSearchScreenViewModel
@Inject
constructor(private val naviChatRepository: NaviChatRepository) : BaseVM() {

View File

@@ -30,9 +30,11 @@ import com.navi.naviwidgets.validations.ValidationJsonDeserializer
import com.navi.naviwidgets.widgets.NaviWidgetJsonDeserializer
import com.navi.naviwidgets.widgets.NaviWidgetJsonSerializer
import com.navi.naviwidgets.widgets.ParameterValueJsonDeserializer
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.coroutines.launch
@HiltViewModel
class HelpCenterViewModel
@Inject
constructor(

View File

@@ -22,7 +22,6 @@ import com.navi.base.utils.isNotNullAndNotEmpty
import com.navi.base.utils.orZero
import com.navi.chat.db.utils.crmEventTracker
import com.navi.chat.db.utils.getDisplayableMessages
import com.navi.chat.di.scopes.NaviChatScope
import com.navi.chat.models.ChatActivityRedirectionConstructedResponse
import com.navi.chat.models.ChatConfigConstructedResponse
import com.navi.chat.models.ChatConfigResponse
@@ -50,6 +49,8 @@ import com.navi.naviwidgets.utils.getCalendarDate
import com.navi.naviwidgets.utils.getCalendarMonth
import com.navi.naviwidgets.utils.getCalendarYear
import com.navi.naviwidgets.utils.isDateSameWithCurrentDay
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -59,12 +60,12 @@ import kotlinx.coroutines.launch
import timber.log.Timber
@SuppressLint("StaticFieldLeak")
@NaviChatScope
@HiltViewModel
class NaviChatViewModel
@Inject
constructor(
private val naviChatRepository: NaviChatRepository,
private val context: Context,
@ApplicationContext private val context: Context,
private val connectivityObserver: ConnectivityObserver
) : BaseVM(), FileDownloadManager.StatusCallBack {

View File

@@ -28,9 +28,11 @@ import com.navi.naviwidgets.validations.BaseInputValidation
import com.navi.naviwidgets.validations.ValidationJsonDeserializer
import com.navi.naviwidgets.widgets.NaviWidgetJsonDeserializer
import com.navi.naviwidgets.widgets.ParameterValueJsonDeserializer
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.coroutines.launch
@HiltViewModel
class SupportScreenViewModel
@Inject
constructor(

View File

@@ -16,6 +16,7 @@ import com.navi.chat.repositories.NaviChatRepository
import com.navi.chat.repositories.TicketsListSource
import com.navi.common.utils.log
import com.navi.common.viewmodel.BaseVM
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
@@ -24,6 +25,7 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
@HiltViewModel
class TicketListViewModel @Inject constructor(private val naviChatRepository: NaviChatRepository) :
BaseVM() {