From 2b65b733074de80b37b46c4e88bfbfa5724826be Mon Sep 17 00:00:00 2001 From: Pavel Mironchik Date: Thu, 7 Nov 2024 20:28:16 +0300 Subject: [PATCH 1/3] implement Dagger based application --- app/build.gradle | 25 +++++----- app/src/main/AndroidManifest.xml | 6 +-- .../main/java/ru/otus/daggerhomework/App.kt | 12 ++++- .../daggerhomework/ApplicationComponent.kt | 4 -- .../ru/otus/daggerhomework/ColorGenerator.kt | 2 - .../otus/daggerhomework/FragmentProducer.kt | 11 ++++- .../otus/daggerhomework/FragmentReceiver.kt | 18 +++++-- .../ru/otus/daggerhomework/MainActivity.kt | 13 ++++- .../otus/daggerhomework/MainActivityState.kt | 26 ++++++++++ .../otus/daggerhomework/ViewModelProducer.kt | 25 +++++++--- .../otus/daggerhomework/ViewModelReceiver.kt | 14 +++--- .../daggerhomework/di/ActivityComponent.kt | 48 +++++++++++++++++++ .../di/FragmentProducerComponent.kt | 35 ++++++++++++++ .../di/FragmentReceiverComponent.kt | 26 ++++++++++ .../otus/daggerhomework/di/FragmentScope.kt | 6 +++ app/src/main/res/layout/activity_main.xml | 26 +++++----- build.gradle | 4 +- gradle.properties | 5 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 19 files changed, 254 insertions(+), 56 deletions(-) delete mode 100644 app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/MainActivityState.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/ActivityComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/FragmentProducerComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/FragmentReceiverComponent.kt create mode 100644 app/src/main/java/ru/otus/daggerhomework/di/FragmentScope.kt diff --git a/app/build.gradle b/app/build.gradle index 705d0941..3f2aa7eb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,12 +5,12 @@ plugins { } android { - compileSdkVersion 31 + compileSdk 35 defaultConfig { applicationId "ru.otus.daggerhomework" minSdkVersion 23 - targetSdkVersion 31 + targetSdkVersion 35 versionCode 1 versionName "1.0" @@ -24,20 +24,23 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = '1.8' + jvmTarget = '17' } + 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.15.0' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'com.google.android.material:material:1.12.0' + implementation 'androidx.constraintlayout:constraintlayout:2.2.0' + implementation 'com.google.dagger:dagger:2.52' + kapt 'com.google.dagger:dagger-compiler:2.52' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fe328c68..ac538d1d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,16 +1,16 @@ + 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..d56d3519 100644 --- a/app/src/main/java/ru/otus/daggerhomework/App.kt +++ b/app/src/main/java/ru/otus/daggerhomework/App.kt @@ -1,6 +1,16 @@ package ru.otus.daggerhomework import android.app.Application +import ru.otus.daggerhomework.di.AppComponent +import ru.otus.daggerhomework.di.DaggerAppComponent -class App :Application() { +class App : Application() { + override fun onCreate() { + super.onCreate() + component = DaggerAppComponent.factory().create(this) + } + + companion object { + lateinit var component: AppComponent + } } \ 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..73098b70 100644 --- a/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt +++ b/app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt @@ -6,13 +6,11 @@ import androidx.annotation.ColorRes import java.util.* interface ColorGenerator { - @ColorInt fun generateColor(): Int } class ColorGeneratorImpl : ColorGenerator { - override fun generateColor(): Int { val rnd = Random() return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)) diff --git a/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt b/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt index 00dd10dc..bbc4b4ab 100644 --- a/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt +++ b/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt @@ -6,21 +6,28 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import androidx.fragment.app.Fragment +import ru.otus.daggerhomework.di.ActivityComponentProvider +import ru.otus.daggerhomework.di.DaggerFragmentProducerComponent +import javax.inject.Inject class FragmentProducer : Fragment() { + @Inject lateinit var viewModel: 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.factory() + .create((activity as ActivityComponentProvider).provideActivityComponent()) + .inject(this) view.findViewById