diff --git a/app/build.gradle b/app/build.gradle index 705d0941..e5f7d73d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,11 +33,21 @@ android { } dependencies { + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0" + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0' + implementation 'androidx.activity:activity-ktx:1.2.3' + 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-android:2.42" + implementation "com.google.dagger:dagger-android-support:2.42" + kapt "com.google.dagger:dagger-android-processor:2.42" + implementation 'com.google.dagger:dagger:2.42' kapt 'com.google.dagger:dagger-compiler:2.42' } \ No newline at end of file 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..522c461f 100644 --- a/app/src/main/java/ru/otus/daggerhomework/App.kt +++ b/app/src/main/java/ru/otus/daggerhomework/App.kt @@ -3,4 +3,14 @@ package ru.otus.daggerhomework import android.app.Application class App :Application() { + lateinit var appCompoment: ApplicationComponent + override fun onCreate() { + super.onCreate() + appCompoment = DaggerApplicationComponent.factory().newAppComponent(applicationContext) + } + +} + +fun Application.asApp(): App { + return this as App } \ 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..63de287d 100644 --- a/app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt +++ b/app/src/main/java/ru/otus/daggerhomework/ApplicationComponent.kt @@ -1,4 +1,24 @@ package ru.otus.daggerhomework +import android.content.Context +import dagger.BindsInstance +import dagger.Component +import javax.inject.Qualifier +import javax.inject.Singleton + +@Component +@Singleton interface ApplicationComponent { -} \ No newline at end of file + + @ApplicationContext + fun provideContext(): Context + + @Component.Factory + interface Factory{ + + fun newAppComponent(@ApplicationContext @BindsInstance context: Context): ApplicationComponent + } +} + +@Qualifier +annotation class ApplicationContext \ 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..e87ddf9b 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,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/EventsReader.kt b/app/src/main/java/ru/otus/daggerhomework/EventsReader.kt new file mode 100644 index 00000000..9521a883 --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/EventsReader.kt @@ -0,0 +1,7 @@ +package ru.otus.daggerhomework + +import kotlinx.coroutines.flow.Flow + +interface EventsReader { + val eventsFlow: Flow +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/EventsWriter.kt b/app/src/main/java/ru/otus/daggerhomework/EventsWriter.kt new file mode 100644 index 00000000..266adf03 --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/EventsWriter.kt @@ -0,0 +1,5 @@ +package ru.otus.daggerhomework + +interface EventsWriter { + fun writeEvent(color: Int) +} \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/EventsWriterReader.kt b/app/src/main/java/ru/otus/daggerhomework/EventsWriterReader.kt new file mode 100644 index 00000000..df0b509d --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/EventsWriterReader.kt @@ -0,0 +1,17 @@ +package ru.otus.daggerhomework + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.asSharedFlow +import javax.inject.Inject + +class EventsWriterReader @Inject constructor() : EventsReader, EventsWriter { + private val _eventsFlow = MutableSharedFlow(replay = 1) + + override val eventsFlow: Flow + get() = _eventsFlow.asSharedFlow() + + override fun writeEvent(color: Int) { + _eventsFlow.tryEmit(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..2a67aecb 100644 --- a/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt +++ b/app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt @@ -6,21 +6,26 @@ 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 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) + FragmentProducerComponent.getFragmentProducerComponent( + (requireActivity() as MainActivity).mainActivityComponent).inject(this) view.findViewById