From f05748af6e62e4300a80cf1b3cd5fc977b345853 Mon Sep 17 00:00:00 2001 From: Egor Shklyarevsky Date: Tue, 19 Nov 2024 12:04:55 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20DI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 5 ++- app/src/main/AndroidManifest.xml | 4 ++- .../main/java/ru/otus/daggerhomework/App.kt | 12 ++++++- .../daggerhomework/ApplicationComponent.kt | 13 ++++++++ .../ru/otus/daggerhomework/ColorGenerator.kt | 6 ++-- .../otus/daggerhomework/FragmentProducer.kt | 20 +++++++++-- .../FragmentProducerComponent.kt | 23 +++++++++++++ .../otus/daggerhomework/FragmentReceiver.kt | 31 ++++++++++++++--- .../FragmentReceiverComponent.kt | 23 +++++++++++++ .../ru/otus/daggerhomework/MainActivity.kt | 11 +++++++ .../daggerhomework/MainActivityComponent.kt | 33 +++++++++++++++++++ .../otus/daggerhomework/ViewModelProducer.kt | 10 ++++-- .../otus/daggerhomework/ViewModelReceiver.kt | 12 +++++-- app/src/main/res/layout/activity_main.xml | 15 ++------- 14 files changed, 187 insertions(+), 31 deletions(-) create mode 100644 app/src/main/java/ru/otus/daggerhomework/FragmentProducerComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/FragmentReceiverComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/MainActivityComponent.kt diff --git a/app/build.gradle b/app/build.gradle index 705d0941..db7dd529 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,7 +33,10 @@ android { } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-stdlib:1.6.0" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0" // For coroutines + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0" // For Android + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0' implementation 'androidx.core:core-ktx:1.6.0' implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'com.google.android.material:material:1.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fe328c68..89276e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,13 +4,15 @@ package="ru.otus.daggerhomework"> - + diff --git a/app/src/main/java/ru/otus/daggerhomework/App.kt b/app/src/main/java/ru/otus/daggerhomework/App.kt index de363626..4c99db42 100644 --- a/app/src/main/java/ru/otus/daggerhomework/App.kt +++ b/app/src/main/java/ru/otus/daggerhomework/App.kt @@ -2,5 +2,15 @@ package ru.otus.daggerhomework import android.app.Application -class App :Application() { +class App : Application() { + + private lateinit var component: ApplicationComponent + + override fun onCreate() { + super.onCreate() + + component = DaggerApplicationComponent.factory().create(this) + } + + fun getAppComponent(): ApplicationComponent = 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 index fc47f256..f7b6f3c9 100644 --- a/app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt +++ b/app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt @@ -1,4 +1,17 @@ package ru.otus.daggerhomework +import android.app.Application +import dagger.BindsInstance +import dagger.Component + +@Component interface ApplicationComponent { + + fun provideApplication(): Application + + @Component.Factory + interface Factory { + + fun create(@BindsInstance application: Application): 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..b1d9fdd9 100644 --- a/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt +++ b/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt @@ -2,8 +2,8 @@ package ru.otus.daggerhomework import android.graphics.Color import androidx.annotation.ColorInt -import androidx.annotation.ColorRes -import java.util.* +import java.util.Random +import javax.inject.Inject interface ColorGenerator { @@ -11,7 +11,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 index 00dd10dc..ce15076c 100644 --- a/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt +++ b/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt @@ -1,26 +1,42 @@ package ru.otus.daggerhomework +import android.app.Application 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 javax.inject.Inject class FragmentProducer : Fragment() { + @Inject + lateinit var application: Application + + @Inject + lateinit var viewModelProducer: ViewModelProducer + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_a, container, true) + return inflater.inflate(R.layout.fragment_a, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + + DaggerFragmentProducerComponent + .builder() + .applicationComponent((requireActivity().application as App).getAppComponent()) + .mainActivityComponent((requireActivity() as MainActivity).getComponent()) + .build() + .inject(this) + view.findViewById