From 34c756e9916b1b7f21362c6bfea0c1f00b1c20f2 Mon Sep 17 00:00:00 2001 From: ilya Date: Sat, 28 May 2022 01:04:55 +0300 Subject: [PATCH 1/7] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20AppComponent.=20=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D1=82=D0=BA=D1=83.=20=D0=9F=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B8=D0=BD=D1=83=D0=BB=D0=BB=20applicationContext?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 +-- .../main/java/ru/otus/daggerhomework/App.kt | 12 +++++++- .../daggerhomework/ApplicationComponent.kt | 4 --- .../ru/otus/daggerhomework/MainActivity.kt | 21 ++++++++++++-- .../di/app/ApplicationComponent.kt | 25 ++++++++++++++++ .../di/customscopes/ActivityScope.kt | 6 ++++ .../di/customscopes/AppScope.kt | 6 ++++ .../di/extentions/ComponentProvider.kt | 8 +++++ .../di/qualifiers/ActivityContext.kt | 6 ++++ .../di/qualifiers/AppContext.kt | 6 ++++ app/src/main/res/layout/activity_main.xml | 29 +++++++++++-------- 11 files changed, 106 insertions(+), 21 deletions(-) delete mode 100644 app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/customscopes/ActivityScope.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/customscopes/AppScope.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/extentions/ComponentProvider.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/qualifiers/ActivityContext.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/qualifiers/AppContext.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fe328c68..1177443b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,9 +1,9 @@ - $appContext") } -} \ No newline at end of file +} + +fun Context.provideDependencies(): ApplicationComponent = + (this as App).componentInstance ?: throw Throwable() \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt b/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt new file mode 100644 index 00000000..bf8b71ae --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt @@ -0,0 +1,25 @@ +package ru.otus.daggerhomework.di.app + +import android.content.Context +import dagger.BindsInstance +import dagger.Component +import ru.otus.daggerhomework.MainActivity +import ru.otus.daggerhomework.di.qualifiers.AppContext +import javax.inject.Singleton + +@Singleton +@Component +interface ApplicationComponent { + + fun inject(activity: MainActivity) + + @Component.Factory + interface Factory { + + fun create( + @AppContext + @BindsInstance + context: Context + ): ApplicationComponent + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/di/customscopes/ActivityScope.kt b/app/src/main/java/ru/otus/daggerhomework/di/customscopes/ActivityScope.kt new file mode 100644 index 00000000..d8b951a2 --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/di/customscopes/ActivityScope.kt @@ -0,0 +1,6 @@ +package ru.otus.daggerhomework.di.customscopes + +import javax.inject.Scope + +@Scope +annotation class ActivityScope \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/di/customscopes/AppScope.kt b/app/src/main/java/ru/otus/daggerhomework/di/customscopes/AppScope.kt new file mode 100644 index 00000000..f83603cc --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/di/customscopes/AppScope.kt @@ -0,0 +1,6 @@ +package ru.otus.daggerhomework.di.customscopes + +import javax.inject.Scope + +@Scope +annotation class AppScope \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/di/extentions/ComponentProvider.kt b/app/src/main/java/ru/otus/daggerhomework/di/extentions/ComponentProvider.kt new file mode 100644 index 00000000..7612e811 --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/di/extentions/ComponentProvider.kt @@ -0,0 +1,8 @@ +package ru.otus.daggerhomework.di.extentions + +import android.content.Context + + +//fun Context.getComponent(): { +// return +//} diff --git a/app/src/main/java/ru/otus/daggerhomework/di/qualifiers/ActivityContext.kt b/app/src/main/java/ru/otus/daggerhomework/di/qualifiers/ActivityContext.kt new file mode 100644 index 00000000..b8c82670 --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/di/qualifiers/ActivityContext.kt @@ -0,0 +1,6 @@ +package ru.otus.daggerhomework.di.qualifiers + +import javax.inject.Qualifier + +@Qualifier +annotation class ActivityContext \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/di/qualifiers/AppContext.kt b/app/src/main/java/ru/otus/daggerhomework/di/qualifiers/AppContext.kt new file mode 100644 index 00000000..10716392 --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/di/qualifiers/AppContext.kt @@ -0,0 +1,6 @@ +package ru.otus.daggerhomework.di.qualifiers + +import javax.inject.Qualifier + +@Qualifier +annotation class AppContext \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 79ae6993..8a963d6e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,19 +1,24 @@ - - + - \ No newline at end of file + + + \ No newline at end of file From 94c460da077bd897441003c3444fe13cbf765cb1 Mon Sep 17 00:00:00 2001 From: ilya Date: Sat, 28 May 2022 01:13:23 +0300 Subject: [PATCH 2/7] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20AppComponent.=20=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D1=82=D0=BA=D1=83.=20=D0=9F=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B8=D0=BD=D1=83=D0=BB=D0=BB=20applicationContext?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/ru/otus/daggerhomework/MainActivity.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt b/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt index 5ca50cf8..a23baefc 100644 --- a/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt +++ b/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt @@ -15,7 +15,7 @@ class MainActivity : AppCompatActivity() { lateinit var appContext: Context override fun onCreate(savedInstanceState: Bundle?) { - applicationContext.provideDependencies().inject(this@MainActivity) + provideDependencies().inject(this@MainActivity) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -25,4 +25,6 @@ class MainActivity : AppCompatActivity() { } fun Context.provideDependencies(): ApplicationComponent = - (this as App).componentInstance ?: throw Throwable() \ No newline at end of file + (this as? App)?.componentInstance + ?: this.applicationContext?.provideDependencies() + ?: throw Throwable() \ No newline at end of file From f576f28f8c109e786f680bc055a9277c3ced159b Mon Sep 17 00:00:00 2001 From: ilya Date: Sat, 28 May 2022 01:14:05 +0300 Subject: [PATCH 3/7] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20AppComponent.=20=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D1=82=D0=BA=D1=83.=20=D0=9F=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B8=D0=BD=D1=83=D0=BB=D0=BB=20applicationContext?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/ru/otus/daggerhomework/MainActivity.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt b/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt index a23baefc..42d60b16 100644 --- a/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt +++ b/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt @@ -15,7 +15,7 @@ class MainActivity : AppCompatActivity() { lateinit var appContext: Context override fun onCreate(savedInstanceState: Bundle?) { - provideDependencies().inject(this@MainActivity) + appComponent().inject(this@MainActivity) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -24,7 +24,7 @@ class MainActivity : AppCompatActivity() { } } -fun Context.provideDependencies(): ApplicationComponent = +fun Context.appComponent(): ApplicationComponent = (this as? App)?.componentInstance - ?: this.applicationContext?.provideDependencies() + ?: this.applicationContext?.appComponent() ?: throw Throwable() \ No newline at end of file From ad9342cdb6ead1213df4951620615e0d97afa507 Mon Sep 17 00:00:00 2001 From: ilya Date: Wed, 1 Jun 2022 23:13:44 +0300 Subject: [PATCH 4/7] =?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=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D1=83=20=D1=81=D0=B0=D0=B1=20=D0=BA=D0=BE=D0=BC=D0=BF?= =?UTF-8?q?=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/ru/otus/daggerhomework/App.kt | 10 ++--- .../otus/daggerhomework/FragmentProducer.kt | 15 +++++++ .../otus/daggerhomework/FragmentReceiver.kt | 16 +++++++- .../ru/otus/daggerhomework/MainActivity.kt | 24 ++++++------ .../di/activity/ActivityComponent.kt | 39 +++++++++++++++++++ .../di/app/ApplicationComponent.kt | 13 ++++--- .../di/fragment/FragmentProducerComponent.kt | 20 ++++++++++ .../di/fragment/FragmentReceiverComponent.kt | 20 ++++++++++ 8 files changed, 134 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/activity/ActivityComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/fragment/FragmentProducerComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/fragment/FragmentReceiverComponent.kt diff --git a/app/src/main/java/ru/otus/daggerhomework/App.kt b/app/src/main/java/ru/otus/daggerhomework/App.kt index a2fe4a5d..48be3d54 100644 --- a/app/src/main/java/ru/otus/daggerhomework/App.kt +++ b/app/src/main/java/ru/otus/daggerhomework/App.kt @@ -6,11 +6,9 @@ import ru.otus.daggerhomework.di.app.DaggerApplicationComponent class App : Application() { - var componentInstance: ApplicationComponent? = null - - override fun onCreate() { - super.onCreate() - componentInstance = - DaggerApplicationComponent.factory().create(context = applicationContext) + val componentInstance: ApplicationComponent by lazy { + DaggerApplicationComponent + .factory() + .create(context = this) } } \ 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..cf02c102 100644 --- a/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt +++ b/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt @@ -9,6 +9,12 @@ import androidx.fragment.app.Fragment class FragmentProducer : Fragment() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + injectDependencies() + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -23,4 +29,13 @@ class FragmentProducer : Fragment() { //отправить результат через livedata в другой фрагмент } } + + private fun injectDependencies() { + val component = (activity as MainActivity) + .activityComponent + .provideFragmentProducerComponentFactory() + .create() + + component.inject(this) + } } \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/FragmentReceiver.kt b/app/src/main/java/ru/otus/daggerhomework/FragmentReceiver.kt index e6a3d9af..e7e73720 100644 --- a/app/src/main/java/ru/otus/daggerhomework/FragmentReceiver.kt +++ b/app/src/main/java/ru/otus/daggerhomework/FragmentReceiver.kt @@ -4,7 +4,6 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Button import androidx.annotation.ColorInt import androidx.fragment.app.Fragment @@ -12,6 +11,12 @@ class FragmentReceiver : Fragment() { private lateinit var frame: View + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + injectDependencies() + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -28,4 +33,13 @@ class FragmentReceiver : Fragment() { fun populateColor(@ColorInt color: Int) { frame.setBackgroundColor(color) } + + private fun injectDependencies() { + val component = (activity as MainActivity) + .activityComponent + .provideFragmentReceiverComponentFactory() + .create() + + component.inject(this) + } } \ 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 index 42d60b16..edb7188b 100644 --- a/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt +++ b/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt @@ -2,9 +2,8 @@ package ru.otus.daggerhomework import android.content.Context import android.os.Bundle -import android.util.Log import androidx.appcompat.app.AppCompatActivity -import ru.otus.daggerhomework.di.app.ApplicationComponent +import ru.otus.daggerhomework.di.activity.ActivityComponent import ru.otus.daggerhomework.di.qualifiers.AppContext import javax.inject.Inject @@ -14,17 +13,20 @@ class MainActivity : AppCompatActivity() { @Inject lateinit var appContext: Context - override fun onCreate(savedInstanceState: Bundle?) { - appComponent().inject(this@MainActivity) + lateinit var activityComponent: ActivityComponent + override fun onCreate(savedInstanceState: Bundle?) { + injectDependencies() super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - - Log.i("myDebug", "onCreate: appContext -> $appContext") } -} -fun Context.appComponent(): ApplicationComponent = - (this as? App)?.componentInstance - ?: this.applicationContext?.appComponent() - ?: throw Throwable() \ No newline at end of file + private fun injectDependencies() { + activityComponent = (application as App) + .componentInstance + .provideActivityComponentFactory() + .create(context = this) + + activityComponent.inject(this) + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/di/activity/ActivityComponent.kt b/app/src/main/java/ru/otus/daggerhomework/di/activity/ActivityComponent.kt new file mode 100644 index 00000000..c3d70eb6 --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/di/activity/ActivityComponent.kt @@ -0,0 +1,39 @@ +package ru.otus.daggerhomework.di.activity + +import android.content.Context +import dagger.BindsInstance +import dagger.Module +import dagger.Subcomponent +import ru.otus.daggerhomework.MainActivity +import ru.otus.daggerhomework.di.customscopes.ActivityScope +import ru.otus.daggerhomework.di.fragment.FragmentProducerComponent +import ru.otus.daggerhomework.di.fragment.FragmentReceiverComponent +import ru.otus.daggerhomework.di.qualifiers.ActivityContext + +@ActivityScope +@Subcomponent(modules = [ActivityComponentModule::class]) +interface ActivityComponent { + + fun provideFragmentProducerComponentFactory(): FragmentProducerComponent.Factory + + fun provideFragmentReceiverComponentFactory(): FragmentReceiverComponent.Factory + + fun inject(activity: MainActivity) + + @Subcomponent.Factory + interface Factory { + fun create( + @ActivityContext + @BindsInstance + context: Context + ): ActivityComponent + } +} + +@Module( + subcomponents = [ + FragmentProducerComponent::class, + FragmentProducerComponent::class + ] +) +class ActivityComponentModule \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt b/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt index bf8b71ae..fdeb5b50 100644 --- a/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt +++ b/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt @@ -3,23 +3,26 @@ package ru.otus.daggerhomework.di.app import android.content.Context import dagger.BindsInstance import dagger.Component -import ru.otus.daggerhomework.MainActivity +import dagger.Module +import ru.otus.daggerhomework.di.activity.ActivityComponent import ru.otus.daggerhomework.di.qualifiers.AppContext import javax.inject.Singleton @Singleton -@Component +@Component(modules = [ApplicationComponentModule::class]) interface ApplicationComponent { - fun inject(activity: MainActivity) + fun provideActivityComponentFactory(): ActivityComponent.Factory @Component.Factory interface Factory { - fun create( @AppContext @BindsInstance context: Context ): ApplicationComponent } -} \ No newline at end of file +} + +@Module(subcomponents = [ActivityComponent::class]) +class ApplicationComponentModule \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/di/fragment/FragmentProducerComponent.kt b/app/src/main/java/ru/otus/daggerhomework/di/fragment/FragmentProducerComponent.kt new file mode 100644 index 00000000..b7f53f83 --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/di/fragment/FragmentProducerComponent.kt @@ -0,0 +1,20 @@ +package ru.otus.daggerhomework.di.fragment + +import dagger.Module +import dagger.Subcomponent +import ru.otus.daggerhomework.FragmentProducer + +@Subcomponent(modules = [FragmentProducerComponentModule::class]) +interface FragmentProducerComponent { + + fun inject(fragment: FragmentProducer) + + @Subcomponent.Factory + interface Factory { + + fun create(): FragmentProducerComponent + } +} + +@Module +class FragmentProducerComponentModule \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/di/fragment/FragmentReceiverComponent.kt b/app/src/main/java/ru/otus/daggerhomework/di/fragment/FragmentReceiverComponent.kt new file mode 100644 index 00000000..02c76693 --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/di/fragment/FragmentReceiverComponent.kt @@ -0,0 +1,20 @@ +package ru.otus.daggerhomework.di.fragment + +import dagger.Module +import dagger.Subcomponent +import ru.otus.daggerhomework.FragmentReceiver + +@Subcomponent(modules = [FragmentReceiverComponentModule::class]) +interface FragmentReceiverComponent { + + fun inject(fragment: FragmentReceiver) + + @Subcomponent.Factory + interface Factory { + + fun create(): FragmentReceiverComponent + } +} + +@Module +class FragmentReceiverComponentModule \ No newline at end of file From cf1278aa37a7f54b5314605ae48140ac3e185567 Mon Sep 17 00:00:00 2001 From: ilya Date: Wed, 1 Jun 2022 23:14:04 +0300 Subject: [PATCH 5/7] =?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=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D1=83=20=D1=81=D0=B0=D0=B1=20=D0=BA=D0=BE=D0=BC=D0=BF?= =?UTF-8?q?=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt b/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt index fdeb5b50..e34d8481 100644 --- a/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt +++ b/app/src/main/java/ru/otus/daggerhomework/di/app/ApplicationComponent.kt @@ -16,6 +16,7 @@ interface ApplicationComponent { @Component.Factory interface Factory { + fun create( @AppContext @BindsInstance From 044ea593f328b1056f63acc7bf89d96f409aa90d Mon Sep 17 00:00:00 2001 From: ilya Date: Wed, 1 Jun 2022 23:18:10 +0300 Subject: [PATCH 6/7] =?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=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D1=83=20=D1=81=D0=B0=D0=B1=20=D0=BA=D0=BE=D0=BC=D0=BF?= =?UTF-8?q?=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/ru/otus/daggerhomework/App.kt | 9 ++++++--- .../java/ru/otus/daggerhomework/MainActivity.kt | 14 ++++++++------ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/ru/otus/daggerhomework/App.kt b/app/src/main/java/ru/otus/daggerhomework/App.kt index 48be3d54..f76932ab 100644 --- a/app/src/main/java/ru/otus/daggerhomework/App.kt +++ b/app/src/main/java/ru/otus/daggerhomework/App.kt @@ -7,8 +7,11 @@ import ru.otus.daggerhomework.di.app.DaggerApplicationComponent class App : Application() { val componentInstance: ApplicationComponent by lazy { - DaggerApplicationComponent - .factory() - .create(context = this) + createApplicationComponent() } + + private fun createApplicationComponent(): ApplicationComponent = DaggerApplicationComponent + .factory() + .create(context = this) + } \ 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 index edb7188b..99d3e801 100644 --- a/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt +++ b/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt @@ -13,7 +13,9 @@ class MainActivity : AppCompatActivity() { @Inject lateinit var appContext: Context - lateinit var activityComponent: ActivityComponent + val activityComponent: ActivityComponent by lazy { + createActivityComponent() + } override fun onCreate(savedInstanceState: Bundle?) { injectDependencies() @@ -22,11 +24,11 @@ class MainActivity : AppCompatActivity() { } private fun injectDependencies() { - activityComponent = (application as App) - .componentInstance - .provideActivityComponentFactory() - .create(context = this) - activityComponent.inject(this) } + + private fun createActivityComponent(): ActivityComponent = (application as App) + .componentInstance + .provideActivityComponentFactory() + .create(context = this) } \ No newline at end of file From 31af38c8838be076dca4a5045a6e95af2b32a87f Mon Sep 17 00:00:00 2001 From: ilya Date: Thu, 16 Jun 2022 20:52:53 +0300 Subject: [PATCH 7/7] =?UTF-8?q?=D0=94=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB?= =?UTF-8?q?=20=D0=B4=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 10 +++++++-- app/src/main/AndroidManifest.xml | 4 +++- .../ru/otus/daggerhomework/ColorGenerator.kt | 11 +++++++--- .../otus/daggerhomework/FragmentProducer.kt | 6 ++++- .../otus/daggerhomework/FragmentReceiver.kt | 15 ++++++++++++- .../otus/daggerhomework/ViewModelProducer.kt | 14 +++++++----- .../otus/daggerhomework/ViewModelReceiver.kt | 22 +++++++++++++------ .../di/activity/ActivityComponent.kt | 9 +++++++- .../di/extentions/ComponentProvider.kt | 8 ------- .../di/fragment/FragmentProducerComponent.kt | 15 ++++++++++--- .../di/fragment/FragmentReceiverComponent.kt | 11 +++++++++- app/src/main/res/layout/activity_main.xml | 8 +++---- app/src/main/res/layout/fragment_a.xml | 4 ++-- 13 files changed, 97 insertions(+), 40 deletions(-) delete mode 100644 app/src/main/java/ru/otus/daggerhomework/di/extentions/ComponentProvider.kt diff --git a/app/build.gradle b/app/build.gradle index a5609bb9..f4d074eb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,13 +5,13 @@ plugins { } android { - compileSdkVersion 30 + compileSdkVersion 31 buildToolsVersion "30.0.3" defaultConfig { applicationId "ru.otus.daggerhomework" minSdkVersion 23 - targetSdkVersion 30 + targetSdkVersion 31 versionCode 1 versionName "1.0" @@ -41,4 +41,10 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.1.0' implementation 'com.google.dagger:dagger:2.38.1' kapt 'com.google.dagger:dagger-compiler:2.38.1' + + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2' + + implementation 'androidx.fragment:fragment-ktx:1.4.1' + // implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.5.0-rc01") } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1177443b..82191fee 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -10,7 +10,9 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.DaggerHomework"> - + diff --git a/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt b/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt index a9e25a27..7262565a 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 javax.inject.Inject interface ColorGenerator { @@ -11,10 +11,15 @@ interface ColorGenerator { fun generateColor(): Int } -class ColorGeneratorImpl : ColorGenerator { +class ColorGeneratorImpl @Inject constructor() : ColorGenerator { override fun generateColor(): Int { val rnd = Random() - return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)) + return Color.argb( + 255, + rnd.nextInt(256), + rnd.nextInt(256), + rnd.nextInt(256) + ) } } \ 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 cf02c102..c5b92744 100644 --- a/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt +++ b/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt @@ -6,9 +6,13 @@ 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 viewModelProducer: ViewModelProducer + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -26,7 +30,7 @@ class FragmentProducer : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) view.findViewById