diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index eae16063..89276e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ package="ru.otus.daggerhomework"> = _state + + override fun saveColor(color: Int) { + _state.value = color + } + + lateinit var component: MainActivityComponent -class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) + component = DaggerMainActivityComponent.factory().build(applicationContext,this) + try { + setContentView(R.layout.activity_main) + } + catch (e: Exception) { + println(e) + } } -} \ No newline at end of file +} + +val MainActivity.Component: MainActivityComponent get() = this.component diff --git a/app/src/main/java/ru/otus/daggerhomework/MainActivityComponent.kt b/app/src/main/java/ru/otus/daggerhomework/MainActivityComponent.kt new file mode 100644 index 00000000..e608bd4d --- /dev/null +++ b/app/src/main/java/ru/otus/daggerhomework/MainActivityComponent.kt @@ -0,0 +1,57 @@ +package ru.otus.daggerhomework + +import android.content.Context +import dagger.BindsInstance +import dagger.Component +import dagger.Module +import dagger.Provides +import kotlinx.coroutines.flow.StateFlow +import javax.inject.Qualifier + +@MainActivityScope +@Component( + modules = [ColorModule::class, MainActivityModule::class]) +interface MainActivityComponent { + + @Component.Factory + interface Factory { + fun build(@BindsInstance appContext: Context, + @BindsInstance activity: MainActivity): MainActivityComponent + } + + fun producerComponent(): ProducerFragmentComponent.Factory + + fun receiverComponent(): ReceiverFragmentComponent.Factory +} + +@Qualifier +@Retention(AnnotationRetention.RUNTIME) +annotation class MainActivityContext + +@Module +object MainActivityModule { + @Provides + @MainActivityContext + fun getMainActivityContext(activity: MainActivity): Context = activity + +} + +@Module +class ColorModule { + + @Provides + @MainActivityScope + fun colorState(activity: MainActivity) : ColorState = activity + + @Provides + @MainActivityScope + fun colorSetter(activity: MainActivity) : ColorSaver = activity +} + +interface ColorSaver{ + fun saveColor(color: Int) +} + +interface ColorState{ + val color: StateFlow +} diff --git a/app/src/main/java/ru/otus/daggerhomework/ProducerFragment.kt b/app/src/main/java/ru/otus/daggerhomework/ProducerFragment.kt index e0613b12..c4f672e3 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 javax.inject.Inject +import javax.inject.Scope + +@Scope +@Retention(AnnotationRetention.RUNTIME) +annotation class ProducerFragmentScope() class ProducerFragment : Fragment() { + @Inject + lateinit var model: ProducerViewModel + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_producer, container, true) + (requireActivity() as MainActivity).Component + .producerComponent() + .create() + .inject(this) + return inflater.inflate(R.layout.fragment_producer, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) view.findViewById