From 83ade9a2d7045d5f8486709e599d32d15ab7fa44 Mon Sep 17 00:00:00 2001 From: Petr Date: Mon, 10 Mar 2025 01:05:29 +0400 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20dependeci?= =?UTF-8?q?es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 6 ++-- .../main/java/ru/otus/daggerhomework/App.kt | 9 ++++- .../daggerhomework/ApplicationComponent.kt | 4 --- .../ru/otus/daggerhomework/ColorObserver.kt | 30 ++++++++++++++++ .../ru/otus/daggerhomework/MainActivity.kt | 11 ------ .../otus/daggerhomework/MainMainActivity.kt | 25 ++++++++++++++ .../otus/daggerhomework/ProducerFragment.kt | 17 ++++++++-- .../otus/daggerhomework/ProducerViewModel.kt | 5 ++- .../otus/daggerhomework/ReceiverFragment.kt | 34 ++++++++++++++++++- .../otus/daggerhomework/ReceiverViewModel.kt | 19 ++++++++--- .../otus/daggerhomework/di/ActivityScope.kt | 7 ++++ .../daggerhomework/di/ApplicationComponent.kt | 16 +++++++++ .../di/ColorGeneratorFeatureModule.kt | 14 ++++++++ .../otus/daggerhomework/di/FragmentScope.kt | 7 ++++ .../di/MainActivityComponent.kt | 20 +++++++++++ .../di/ProducerFragmentComponent.kt | 29 ++++++++++++++++ .../di/ProducerFragmentModule.kt | 14 ++++++++ .../di/ReceiverFragmentComponent.kt | 28 +++++++++++++++ app/src/main/res/layout/activity_main.xml | 29 ++++++++++------ app/src/main/res/layout/fragment_producer.xml | 3 +- app/src/main/res/layout/fragment_receiver.xml | 3 +- 21 files changed, 292 insertions(+), 38 deletions(-) delete mode 100644 app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/ColorObserver.kt delete mode 100644 app/src/main/java/ru/otus/daggerhomework/MainActivity.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/MainMainActivity.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/ActivityScope.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/ApplicationComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/ColorGeneratorFeatureModule.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/FragmentScope.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/MainActivityComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/ProducerFragmentComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/ProducerFragmentModule.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/ReceiverFragmentComponent.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eae16063..e6c18224 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,8 +9,10 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.DaggerHomework"> - + diff --git a/app/src/main/java/ru/otus/daggerhomework/App.kt b/app/src/main/java/ru/otus/daggerhomework/App.kt index 1113a982..2c0627c4 100644 --- a/app/src/main/java/ru/otus/daggerhomework/App.kt +++ b/app/src/main/java/ru/otus/daggerhomework/App.kt @@ -1,5 +1,12 @@ package ru.otus.daggerhomework import android.app.Application +import ru.otus.daggerhomework.di.ApplicationComponent +import ru.otus.daggerhomework.di.DaggerApplicationComponent -class App :Application() \ No newline at end of file +class App : Application() { + + val component: ApplicationComponent = DaggerApplicationComponent.factory().build(this) +} + +val Application.component: ApplicationComponent get() = (this as App).component \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt b/app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt deleted file mode 100644 index fc47f256..00000000 --- a/app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt +++ /dev/null @@ -1,4 +0,0 @@ -package ru.otus.daggerhomework - -interface ApplicationComponent { -} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/ColorObserver.kt b/app/src/main/java/ru/otus/daggerhomework/ColorObserver.kt new file mode 100644 index 00000000..cf7f1d9c --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/ColorObserver.kt @@ -0,0 +1,30 @@ +package ru.otus.daggerhomework + +import androidx.annotation.ColorInt +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.asSharedFlow + +interface ColorObserver { + + val colorFlow: Flow + + fun fireColorEvent(@ColorInt color: Int) + +} + +class ColorObserverImpl : ColorObserver { + + private val _colorFlow = MutableSharedFlow( + extraBufferCapacity = 1, + replay = 1 + ) + + override val colorFlow: Flow + get() = _colorFlow.asSharedFlow() + + override fun fireColorEvent(color: Int) { + _colorFlow.tryEmit(color) + } + +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt b/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt deleted file mode 100644 index ad87df48..00000000 --- a/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt +++ /dev/null @@ -1,11 +0,0 @@ -package ru.otus.daggerhomework - -import android.os.Bundle -import androidx.activity.ComponentActivity - -class MainActivity : ComponentActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - } -} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/MainMainActivity.kt b/app/src/main/java/ru/otus/daggerhomework/MainMainActivity.kt new file mode 100644 index 00000000..a9365e1f --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/MainMainActivity.kt @@ -0,0 +1,25 @@ +package ru.otus.daggerhomework + +import android.os.Bundle +import androidx.fragment.app.FragmentActivity +import ru.otus.daggerhomework.di.DaggerMainActivityComponent +import ru.otus.daggerhomework.di.MainActivityComponent + +class MainMainActivity : FragmentActivity(), MainActivityComponentProvider { + private lateinit var component: MainActivityComponent + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + setContentView(R.layout.activity_main) + + component = DaggerMainActivityComponent.factory().build(application.component) + + } + + override fun provideMainActivityComponent(): MainActivityComponent = component +} + +interface MainActivityComponentProvider { + fun provideMainActivityComponent(): MainActivityComponent +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/ProducerFragment.kt b/app/src/main/java/ru/otus/daggerhomework/ProducerFragment.kt index e0613b12..45d6ec11 100644 --- a/app/src/main/java/ru/otus/daggerhomework/ProducerFragment.kt +++ b/app/src/main/java/ru/otus/daggerhomework/ProducerFragment.kt @@ -6,21 +6,34 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import androidx.fragment.app.Fragment +import ru.otus.daggerhomework.di.DaggerProducerFragmentComponent +import ru.otus.daggerhomework.di.ProducerFragmentComponent class ProducerFragment : Fragment() { + private lateinit var producerFragmentComponent: ProducerFragmentComponent + + private lateinit var viewModel: ProducerViewModel + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_producer, container, true) + producerFragmentComponent = DaggerProducerFragmentComponent.factory() + .build( + contextActivity = requireActivity(), + appComponent = (requireActivity() as MainMainActivity).application.component, + mainActivityComponent = (requireActivity() as MainActivityComponentProvider).provideMainActivityComponent() + ) + viewModel = producerFragmentComponent.producerVM() + return inflater.inflate(R.layout.fragment_producer, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) view.findViewById