diff --git a/README.md b/README.md index 4d77164a..2a43b6c2 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,27 @@ ### Реализуйте ApplicationComponent -Это корень нашего дерева компонентов. Инициализируется в классе App, прокидывает в граф через Component Dependencies/Subcomponents ниже по графу следующие сущности: -- Context(Application) до FragmentProducerComponent и FragmentReceiverComponent. -Проброс Context в граф реализуйте через BindsInstance + ComponentFactory + +Это корень нашего дерева компонентов. Инициализируется в классе App, прокидывает в граф через +Component Dependencies/Subcomponents ниже по графу следующие сущности: + +- Context(Application) до FragmentProducerComponent и FragmentReceiverComponent. + Проброс Context в граф реализуйте через BindsInstance + ComponentFactory ### Реализуйте MainActivityComponent + Инициализируется в MainActivity. Прокидывает следующие сущности: + - Context(Activity). Проброс в граф реализуйте через BindsInstance + ComponentFactory -- Ваша реализация обсервера(Coroutine Channel/StateFlow/Subject либо другую реализацию обсервера). Он понадобится нам чтобы отправлять евенты из одного фрагмента и принимать их в другом, в обоих фрагментах должен быть один и тот же инстанс обсервера. +- Ваша реализация обсервера(Coroutine Channel/StateFlow/Subject либо другую реализацию обсервера). + Он понадобится нам чтобы отправлять евенты из одного фрагмента и принимать их в другом, в обоих + фрагментах должен быть один и тот же инстанс обсервера. ### Реализуйте FragmentReceiverComponent/FragmentProducerComponent -Коммуникацию между Producer и Receiver осуществите через канал/StateFlow/Subject либо другую реализацию обсервера которая уже есть в графе. ViewModelProducer должна отправлять эвенты, ViewModelReceiver должна получать эвенты. Обсерверы должны прокидываться в конструкторы вьюмоделей и существовать в единственном экземпляре в Activity. + +Коммуникацию между Producer и Receiver осуществите через канал/StateFlow/Subject либо другую +реализацию обсервера которая уже есть в графе. ViewModelProducer должна отправлять эвенты, +ViewModelReceiver должна получать эвенты. Обсерверы должны прокидываться в конструкторы вьюмоделей и +существовать в единственном экземпляре в Activity. Флоу отправки эвента выглядит следующим образом: -Клик на кнопку button в FragmentProducer -> вызов метода вьюмодели -> проброс евента в обсервер -> евент ловится на стороне ViewModelReceiver -> евент передается FragmentReceiver и вызывается функция ru.otus.daggerhomework.FragmentReceiver#populateColor +Клик на кнопку button в FragmentProducer -> вызов метода вьюмодели -> проброс евента в обсервер -> +евент ловится на стороне ViewModelReceiver -> евент передается FragmentReceiver и вызывается функция +ru.otus.daggerhomework.FragmentReceiver#populateColor diff --git a/app/build.gradle b/app/build.gradle index 705d0941..08e0cc16 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,12 +5,12 @@ plugins { } android { - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "ru.otus.daggerhomework" minSdkVersion 23 - targetSdkVersion 31 + targetSdkVersion 33 versionCode 1 versionName "1.0" @@ -30,14 +30,22 @@ android { kotlinOptions { jvmTarget = '1.8' } + namespace 'ru.otus.daggerhomework' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'androidx.core:core-ktx:1.6.0' - implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.0' - implementation 'com.google.dagger:dagger:2.42' - kapt 'com.google.dagger:dagger-compiler:2.42' + implementation 'androidx.core:core-ktx:1.9.0' + implementation 'androidx.appcompat:appcompat:1.6.0' + implementation 'com.google.android.material:material:1.8.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'com.google.dagger:dagger:2.44.2' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + kapt 'com.google.dagger:dagger-compiler:2.44.2' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' + implementation 'androidx.activity:activity-ktx:1.6.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation 'androidx.fragment:fragment-ktx:1.5.5' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fe328c68..538fb642 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,16 +1,17 @@ + xmlns:android="http://schemas.android.com/apk/res/android"> - + diff --git a/app/src/main/java/ru/otus/daggerhomework/App.kt b/app/src/main/java/ru/otus/daggerhomework/App.kt index de363626..484f7970 100644 --- a/app/src/main/java/ru/otus/daggerhomework/App.kt +++ b/app/src/main/java/ru/otus/daggerhomework/App.kt @@ -1,6 +1,15 @@ package ru.otus.daggerhomework import android.app.Application +import ru.otus.daggerhomework.components.ApplicationComponent +import ru.otus.daggerhomework.components.DaggerApplicationComponent class App :Application() { + + lateinit var appComponent: ApplicationComponent + + override fun onCreate() { + super.onCreate() + appComponent = DaggerApplicationComponent.factory().create(this) + } } \ 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/ColorGenerator.kt b/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt index a9e25a27..f0ca940b 100644 --- a/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt +++ b/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt @@ -4,6 +4,7 @@ import android.graphics.Color import androidx.annotation.ColorInt import androidx.annotation.ColorRes import java.util.* +import javax.inject.Inject interface ColorGenerator { @@ -11,7 +12,7 @@ interface ColorGenerator { fun generateColor(): Int } -class ColorGeneratorImpl : ColorGenerator { +class ColorGeneratorImpl @Inject constructor() : ColorGenerator { override fun generateColor(): Int { val rnd = Random() diff --git a/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt b/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt deleted file mode 100644 index 00dd10dc..00000000 --- a/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt +++ /dev/null @@ -1,26 +0,0 @@ -package ru.otus.daggerhomework - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.Button -import androidx.fragment.app.Fragment - -class FragmentProducer : Fragment() { - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_a, container, true) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - view.findViewById