diff --git a/android/navi-chat/src/main/java/com/navi/chat/di/components/NaviChatComponent.kt b/android/navi-chat/src/main/java/com/navi/chat/di/components/NaviChatComponent.kt deleted file mode 100644 index c23998880f..0000000000 --- a/android/navi-chat/src/main/java/com/navi/chat/di/components/NaviChatComponent.kt +++ /dev/null @@ -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) -} diff --git a/android/navi-chat/src/main/java/com/navi/chat/di/dependencies/NaviChatModuleDependencies.kt b/android/navi-chat/src/main/java/com/navi/chat/di/dependencies/NaviChatModuleDependencies.kt deleted file mode 100644 index 21e94f22f5..0000000000 --- a/android/navi-chat/src/main/java/com/navi/chat/di/dependencies/NaviChatModuleDependencies.kt +++ /dev/null @@ -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 -} diff --git a/android/navi-chat/src/main/java/com/navi/chat/di/modules/NaviChatModule.kt b/android/navi-chat/src/main/java/com/navi/chat/di/modules/NaviChatModule.kt index 54efd26ad9..41d635b51d 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/di/modules/NaviChatModule.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/di/modules/NaviChatModule.kt @@ -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() } diff --git a/android/navi-chat/src/main/java/com/navi/chat/di/modules/NaviChatNetworkModule.kt b/android/navi-chat/src/main/java/com/navi/chat/di/modules/NaviChatNetworkModule.kt index 620aa56f22..1728ff8f1a 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/di/modules/NaviChatNetworkModule.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/di/modules/NaviChatNetworkModule.kt @@ -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 diff --git a/android/navi-chat/src/main/java/com/navi/chat/di/scopes/scopes.kt b/android/navi-chat/src/main/java/com/navi/chat/di/scopes/scopes.kt deleted file mode 100644 index efdd7532ff..0000000000 --- a/android/navi-chat/src/main/java/com/navi/chat/di/scopes/scopes.kt +++ /dev/null @@ -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 diff --git a/android/navi-chat/src/main/java/com/navi/chat/network/NaviChatApiInterface.kt b/android/navi-chat/src/main/java/com/navi/chat/network/NaviChatApiInterface.kt index df9e22025a..511ef591ba 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/network/NaviChatApiInterface.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/network/NaviChatApiInterface.kt @@ -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") diff --git a/android/navi-chat/src/main/java/com/navi/chat/provider/firestore/FireStoreDataProvider.kt b/android/navi-chat/src/main/java/com/navi/chat/provider/firestore/FireStoreDataProvider.kt index c9baffff66..6d312a9c1f 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/provider/firestore/FireStoreDataProvider.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/provider/firestore/FireStoreDataProvider.kt @@ -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 diff --git a/android/navi-chat/src/main/java/com/navi/chat/repositories/NaviChatRepository.kt b/android/navi-chat/src/main/java/com/navi/chat/repositories/NaviChatRepository.kt index 22e1bbfd1a..37b032b479 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/repositories/NaviChatRepository.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/repositories/NaviChatRepository.kt @@ -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 { diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/AttachmentConfirmationActivity.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/AttachmentConfirmationActivity.kt index 94c4f9ed2c..610eeec2ac 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/AttachmentConfirmationActivity.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/AttachmentConfirmationActivity.kt @@ -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() diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatActivity.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatActivity.kt index 817de6e25c..f468856bc5 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatActivity.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatActivity.kt @@ -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, diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatViewImageActivity.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatViewImageActivity.kt index 00c75ba5fe..5529f44cf6 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatViewImageActivity.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatViewImageActivity.kt @@ -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 { diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatViewVideoActivity.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatViewVideoActivity.kt index 1831ef967a..169f6c2e7a 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatViewVideoActivity.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviChatViewVideoActivity.kt @@ -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() } diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviHelpCenterActivity.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviHelpCenterActivity.kt index 0cb5d37f7d..a5421f3d15 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviHelpCenterActivity.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviHelpCenterActivity.kt @@ -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 -> { diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviTicketViewActivity.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviTicketViewActivity.kt index ecdf9d19b4..7b831ff522 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviTicketViewActivity.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviTicketViewActivity.kt @@ -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( diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/SupportScreenActivity.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/SupportScreenActivity.kt index 4707dd3d06..f83c1fd816 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/SupportScreenActivity.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/SupportScreenActivity.kt @@ -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) } diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/components/NaviChatToolbar.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/components/NaviChatToolbar.kt index 33bbaa43df..2377f26111 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/components/NaviChatToolbar.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/components/NaviChatToolbar.kt @@ -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, diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/compose/TicketScreen.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/compose/TicketScreen.kt index 8196d19d70..dc14ed755a 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/compose/TicketScreen.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/compose/TicketScreen.kt @@ -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 ) { diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/ChatAttachmentBottomSheet.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/ChatAttachmentBottomSheet.kt index 36617de7f2..4f6fc82d4e 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/ChatAttachmentBottomSheet.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/ChatAttachmentBottomSheet.kt @@ -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 { diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/FaqSearchFragment.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/FaqSearchFragment.kt index 678c803d5d..91759ae67d 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/FaqSearchFragment.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/FaqSearchFragment.kt @@ -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) {} diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/NaviChatFragment.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/NaviChatFragment.kt index e050e1316b..aa2515de39 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/NaviChatFragment.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/NaviChatFragment.kt @@ -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() private val fileSizes = HashMap() + 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() }, diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/SupportScreenFaqFragment.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/SupportScreenFaqFragment.kt index 34fda0f01a..373f909ee3 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/SupportScreenFaqFragment.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/fragments/SupportScreenFaqFragment.kt @@ -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 diff --git a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/FaqSearchScreenViewModel.kt b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/FaqSearchScreenViewModel.kt index ac57d71503..a14b44de19 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/FaqSearchScreenViewModel.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/FaqSearchScreenViewModel.kt @@ -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() { diff --git a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/HelpCenterViewModel.kt b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/HelpCenterViewModel.kt index 16f091afd1..d67379f562 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/HelpCenterViewModel.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/HelpCenterViewModel.kt @@ -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( diff --git a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/NaviChatViewModel.kt b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/NaviChatViewModel.kt index 6a6f9a343c..9d21bd5fa2 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/NaviChatViewModel.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/NaviChatViewModel.kt @@ -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 { diff --git a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/SupportScreenViewModel.kt b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/SupportScreenViewModel.kt index 8b85eccd3a..ced9b1ba24 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/SupportScreenViewModel.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/SupportScreenViewModel.kt @@ -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( diff --git a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/TicketListViewModel.kt b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/TicketListViewModel.kt index c0f9d421df..156ba30214 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/TicketListViewModel.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/TicketListViewModel.kt @@ -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() {