diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eae16063..2068d776 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,8 +9,10 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.DaggerHomework"> - + diff --git a/app/src/main/java/ru/otus/daggerhomework/App.kt b/app/src/main/java/ru/otus/daggerhomework/App.kt index 1113a982..2c0627c4 100644 --- a/app/src/main/java/ru/otus/daggerhomework/App.kt +++ b/app/src/main/java/ru/otus/daggerhomework/App.kt @@ -1,5 +1,12 @@ package ru.otus.daggerhomework import android.app.Application +import ru.otus.daggerhomework.di.ApplicationComponent +import ru.otus.daggerhomework.di.DaggerApplicationComponent -class App :Application() \ No newline at end of file +class App : Application() { + + val component: ApplicationComponent = DaggerApplicationComponent.factory().build(this) +} + +val Application.component: ApplicationComponent get() = (this as App).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 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/ColorObserver.kt b/app/src/main/java/ru/otus/daggerhomework/ColorObserver.kt new file mode 100644 index 00000000..cf7f1d9c --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/ColorObserver.kt @@ -0,0 +1,30 @@ +package ru.otus.daggerhomework + +import androidx.annotation.ColorInt +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.asSharedFlow + +interface ColorObserver { + + val colorFlow: Flow + + fun fireColorEvent(@ColorInt color: Int) + +} + +class ColorObserverImpl : ColorObserver { + + private val _colorFlow = MutableSharedFlow( + extraBufferCapacity = 1, + replay = 1 + ) + + override val colorFlow: Flow + get() = _colorFlow.asSharedFlow() + + override fun fireColorEvent(color: Int) { + _colorFlow.tryEmit(color) + } + +} \ 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 ad87df48..ecc2f43b 100644 --- a/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt +++ b/app/src/main/java/ru/otus/daggerhomework/MainActivity.kt @@ -1,11 +1,25 @@ package ru.otus.daggerhomework import android.os.Bundle -import androidx.activity.ComponentActivity +import androidx.fragment.app.FragmentActivity +import ru.otus.daggerhomework.di.DaggerMainActivityComponent +import ru.otus.daggerhomework.di.MainActivityComponent + +class MainActivity : FragmentActivity(), MainActivityComponentProvider { + private lateinit var component: MainActivityComponent -class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + component = DaggerMainActivityComponent.factory().build(application.component) + } + + override fun provideMainActivityComponent(): MainActivityComponent = component +} + +interface MainActivityComponentProvider { + fun provideMainActivityComponent(): MainActivityComponent } \ No newline at end of file diff --git a/app/src/main/java/ru/otus/daggerhomework/ProducerFragment.kt b/app/src/main/java/ru/otus/daggerhomework/ProducerFragment.kt index e0613b12..c309fcb5 100644 --- a/app/src/main/java/ru/otus/daggerhomework/ProducerFragment.kt +++ b/app/src/main/java/ru/otus/daggerhomework/ProducerFragment.kt @@ -6,21 +6,34 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import androidx.fragment.app.Fragment +import ru.otus.daggerhomework.di.DaggerProducerFragmentComponent +import ru.otus.daggerhomework.di.ProducerFragmentComponent class ProducerFragment : Fragment() { + private lateinit var producerFragmentComponent: ProducerFragmentComponent + + private lateinit var viewModel: ProducerViewModel + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_producer, container, true) + producerFragmentComponent = DaggerProducerFragmentComponent.factory() + .build( + contextActivity = requireActivity(), + appComponent = (requireActivity() as MainActivity).application.component, + mainActivityComponent = (requireActivity() as MainActivityComponentProvider).provideMainActivityComponent() + ) + viewModel = producerFragmentComponent.producerVM() + return inflater.inflate(R.layout.fragment_producer, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) view.findViewById