From 19d40b124f11b1e4a9a9fbe4a62a6ec054549a8e Mon Sep 17 00:00:00 2001 From: Danny Burge Date: Wed, 7 Dec 2022 17:47:15 +0500 Subject: [PATCH 1/2] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=81=D0=B5=D1=85=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 ++ app/src/main/AndroidManifest.xml | 8 ++-- .../main/java/ru/otus/daggerhomework/App.kt | 13 ++++- .../daggerhomework/ApplicationComponent.kt | 4 -- .../ru/otus/daggerhomework/ColorGenerator.kt | 10 +++- .../otus/daggerhomework/FragmentProducer.kt | 40 +++++++++++++++- .../otus/daggerhomework/FragmentReceiver.kt | 47 +++++++++++++++++-- .../ru/otus/daggerhomework/IDataKeeper.kt | 31 ++++++++++++ .../ru/otus/daggerhomework/MainActivity.kt | 31 +++++++++++- .../otus/daggerhomework/ViewModelProducer.kt | 9 ++-- .../otus/daggerhomework/ViewModelReceiver.kt | 18 +++++-- .../ru/otus/daggerhomework/di/Qualifiers.kt | 9 ++++ .../java/ru/otus/daggerhomework/di/Scopes.kt | 12 +++++ .../di/components/ActivityComponent.kt | 31 ++++++++++++ .../di/components/ApplicationComponent.kt | 20 ++++++++ .../components/FragmentProducerComponent.kt | 23 +++++++++ .../components/FragmentReceiverComponent.kt | 23 +++++++++ .../di/modules/DataKeeperModule.kt | 15 ++++++ app/src/main/res/layout/activity_main.xml | 17 +++---- 19 files changed, 331 insertions(+), 33 deletions(-) delete mode 100644 app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/IDataKeeper.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/Qualifiers.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/Scopes.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/components/ActivityComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/components/ApplicationComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/components/FragmentProducerComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/components/FragmentReceiverComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/modules/DataKeeperModule.kt diff --git a/app/build.gradle b/app/build.gradle index 705d0941..cca2437e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,4 +40,7 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.1.0' implementation 'com.google.dagger:dagger:2.42' kapt 'com.google.dagger:dagger-compiler:2.42' + + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fe328c68..82191fee 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,16 +1,18 @@ - - + diff --git a/app/src/main/java/ru/otus/daggerhomework/App.kt b/app/src/main/java/ru/otus/daggerhomework/App.kt index de363626..1de6cb32 100644 --- a/app/src/main/java/ru/otus/daggerhomework/App.kt +++ b/app/src/main/java/ru/otus/daggerhomework/App.kt @@ -1,6 +1,17 @@ package ru.otus.daggerhomework import android.app.Application +import ru.otus.daggerhomework.di.components.ApplicationComponent +import ru.otus.daggerhomework.di.components.DaggerApplicationComponent -class App :Application() { +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..86ea124b 100644 --- a/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt +++ b/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt @@ -1,8 +1,8 @@ package ru.otus.daggerhomework import android.graphics.Color +import android.util.Log import androidx.annotation.ColorInt -import androidx.annotation.ColorRes import java.util.* interface ColorGenerator { @@ -15,6 +15,12 @@ class ColorGeneratorImpl : ColorGenerator { override fun generateColor(): Int { val rnd = Random() - return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)) + val color = Color.argb( + 255, + rnd.nextInt(256), + rnd.nextInt(256), + rnd.nextInt(256) + ) + return color } } \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt b/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt index 00dd10dc..cb605c38 100644 --- a/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt +++ b/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt @@ -1,26 +1,62 @@ package ru.otus.daggerhomework +import android.content.Context 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 +import androidx.lifecycle.lifecycleScope +import kotlinx.coroutines.launch +import ru.otus.daggerhomework.di.ActivityContext +import ru.otus.daggerhomework.di.ApplicationContext +import ru.otus.daggerhomework.di.components.DaggerFragmentProducerComponent +import ru.otus.daggerhomework.di.components.FragmentProducerComponent +import javax.inject.Inject +import javax.inject.Provider class FragmentProducer : Fragment() { + @Inject + lateinit var dataKeeper: Provider + + @Inject + @ActivityContext + lateinit var activityContext: Context + + lateinit var fragmentProducerComponent: FragmentProducerComponent + private val colorGenerator = ColorGeneratorImpl() + lateinit var viewModelProducer: ViewModelProducer + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_a, container, true) + val activityComponent = (requireActivity() as MainActivity).activityComponent + fragmentProducerComponent = DaggerFragmentProducerComponent + .builder() + .activityComponent(activityComponent) + .build() + + fragmentProducerComponent.inject(this) + viewModelProducer = ViewModelProducer( + colorGenerator, + activityContext, + dataKeeper.get() + ) + + return inflater.inflate(R.layout.fragment_a, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) view.findViewById