Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@ plugins {
id 'kotlin-kapt'
}

kapt {
correctErrorTypes true
}

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"

Expand Down Expand Up @@ -41,4 +45,7 @@ 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 "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.1"
implementation "androidx.fragment:fragment-ktx:1.4.1"
}
7 changes: 4 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ru.otus.daggerhomework">

<application
android:name=".app.App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.DaggerHomework">
<activity android:name=".MainActivity">
<activity android:name=".main.impl.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand Down
6 changes: 0 additions & 6 deletions app/src/main/java/ru/otus/daggerhomework/App.kt

This file was deleted.

This file was deleted.

3 changes: 2 additions & 1 deletion app/src/main/java/ru/otus/daggerhomework/ColorGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@ import android.graphics.Color
import androidx.annotation.ColorInt
import androidx.annotation.ColorRes
import java.util.*
import javax.inject.Inject

interface ColorGenerator {

@ColorInt
fun generateColor(): Int
}

class ColorGeneratorImpl : ColorGenerator {
class ColorGeneratorImpl @Inject constructor() : ColorGenerator {

override fun generateColor(): Int {
val rnd = Random()
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/java/ru/otus/daggerhomework/Event.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package ru.otus.daggerhomework

interface Event {
class ShowColor(val color: Int) : Event
}
7 changes: 7 additions & 0 deletions app/src/main/java/ru/otus/daggerhomework/EventObservable.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.otus.daggerhomework

import kotlinx.coroutines.flow.SharedFlow

interface EventObservable {
val events: SharedFlow<Event>
}
26 changes: 0 additions & 26 deletions app/src/main/java/ru/otus/daggerhomework/FragmentProducer.kt

This file was deleted.

31 changes: 0 additions & 31 deletions app/src/main/java/ru/otus/daggerhomework/FragmentReceiver.kt

This file was deleted.

11 changes: 0 additions & 11 deletions app/src/main/java/ru/otus/daggerhomework/MainActivity.kt

This file was deleted.

18 changes: 18 additions & 0 deletions app/src/main/java/ru/otus/daggerhomework/MutableEventObservable.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.otus.daggerhomework

import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import ru.otus.daggerhomework.common.ActivityScope
import javax.inject.Inject

@ActivityScope
class MutableEventObservable @Inject constructor() : EventObservable {

override val events get() = mEvents.asSharedFlow()
private val mEvents = MutableSharedFlow<Event>(extraBufferCapacity = 1)

fun post(event: Event) {
mEvents.tryEmit(event)
}

}
19 changes: 0 additions & 19 deletions app/src/main/java/ru/otus/daggerhomework/ViewModelProducer.kt

This file was deleted.

18 changes: 0 additions & 18 deletions app/src/main/java/ru/otus/daggerhomework/ViewModelReceiver.kt

This file was deleted.

17 changes: 17 additions & 0 deletions app/src/main/java/ru/otus/daggerhomework/app/App.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.otus.daggerhomework.app

import android.app.Application
import ru.otus.daggerhomework.app.di.ApplicationComponent

class App : Application() {

override fun onCreate() {
super.onCreate()
initDagger()
}

private fun initDagger() {
ApplicationComponent.init(this.applicationContext)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package ru.otus.daggerhomework.app.di

import android.content.Context
import dagger.BindsInstance
import dagger.Component
import ru.otus.daggerhomework.common.NeedInitializeException
import ru.otus.daggerhomework.main.impl.di.MainActivityComponent
import ru.otus.daggerhomework.producer.di.FragmentProducerComponent
import ru.otus.daggerhomework.receiver.di.FragmentReceiverComponent

@Component
interface ApplicationComponent {

val applicationContext: Context

@Component.Factory
interface Factory {
fun create(
@BindsInstance context: Context
): ApplicationComponent
}

companion object {

private var mInstance: ApplicationComponent? = null

fun init(context: Context) {
mInstance = DaggerApplicationComponent.factory()
.create(context)
MainActivityComponent.init { getInstance().applicationContext }
FragmentProducerComponent.init { MainActivityComponent.getInstance() }
FragmentReceiverComponent.init { MainActivityComponent.getInstance() }
}

fun getInstance() = mInstance ?: throw NeedInitializeException()

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.otus.daggerhomework.common

import javax.inject.Scope

@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class ActivityScope
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.otus.daggerhomework.common

import javax.inject.Scope

@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class FragmentScope
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package ru.otus.daggerhomework.common

class NeedInitializeException : RuntimeException("Need Initialize dagger component")
11 changes: 11 additions & 0 deletions app/src/main/java/ru/otus/daggerhomework/common/ViewModelKey.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ru.otus.daggerhomework.common

import androidx.lifecycle.ViewModel
import dagger.MapKey
import kotlin.reflect.KClass

@MustBeDocumented
@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@MapKey
annotation class ViewModelKey(val value: KClass<out ViewModel>)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ru.otus.daggerhomework.common

import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import javax.inject.Inject
import javax.inject.Provider

class ViewModelProviderFactory @Inject constructor(
private val factories: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>
) : ViewModelProvider.Factory {

override fun <T : ViewModel> create(modelClass: Class<T>): T {
return factories.getValue(modelClass as Class<ViewModel>).get() as T
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ru.otus.daggerhomework.main.api

import android.content.Context
import ru.otus.daggerhomework.MutableEventObservable

interface MainActivityApi {
fun provideApplicationContext(): Context
fun provideActivityContext(): Context
val eventObservable: MutableEventObservable
}
20 changes: 20 additions & 0 deletions app/src/main/java/ru/otus/daggerhomework/main/impl/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package ru.otus.daggerhomework.main.impl

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import ru.otus.daggerhomework.R
import ru.otus.daggerhomework.main.impl.di.MainActivityComponent

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
MainActivityComponent.create(this)
}

override fun onDestroy() {
super.onDestroy()
MainActivityComponent.release()
}
}
Loading