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
21 changes: 15 additions & 6 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id("org.jetbrains.kotlin.kapt")
}

android {
namespace 'ru.otus.basicarchitecture'
compileSdk 33
compileSdk 34

defaultConfig {
applicationId "ru.otus.basicarchitecture"
minSdk 24
targetSdk 33
minSdk 26
targetSdk 34
versionCode 1
versionName "1.0"

Expand All @@ -24,15 +25,23 @@ android {
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
buildFeatures {
viewBinding true
}
kotlinOptions {
jvmTarget = '1.8'
jvmTarget = '17'
}
kapt {
correctErrorTypes true
}
}

dependencies {
implementation("com.google.dagger:dagger:2.48.1")
kapt("com.google.dagger:dagger-compiler:2.48.1")

implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
Expand Down
9 changes: 8 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">

<application
android:name=".App"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
Expand All @@ -14,7 +15,13 @@
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="false" />
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

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

import android.app.Application
import ru.otus.basicarchitecture.DI.MainComponent.DaggerMainComponent

class App : Application() {
val component by lazy {
DaggerMainComponent.builder().build()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.otus.basicarchitecture.Core.Model

data class Address(
val country: String,
val city: String,
val address: String
) : BaseModel
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package ru.otus.basicarchitecture.Core.Model

sealed interface BaseModel
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package ru.otus.basicarchitecture.Core.Model

data class Interests (
var interests: String
) : BaseModel
22 changes: 22 additions & 0 deletions app/src/main/java/ru/otus/basicarchitecture/Core/Model/Person.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ru.otus.basicarchitecture.Core.Model

import ru.otus.basicarchitecture.DI.FragmentScope

@FragmentScope
data class Person(
var firstName: String,
var surName: String,
var dateOfBirth: String
) : BaseModel {
companion object {
const val defaultValueProperty = ""

fun defaultPerson(): Person {
return Person(
defaultValueProperty,
defaultValueProperty,
defaultValueProperty
)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ru.otus.basicarchitecture.Core.Model

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

class ViewModelFactory @Inject constructor(
private val viewModels: @JvmSuppressWildcards Map<String, ViewModel>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return viewModels[modelClass.simpleName] as T
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.otus.basicarchitecture.DI.Fragment1

import dagger.Subcomponent
import ru.otus.basicarchitecture.DI.FragmentComponents.FirstScreen.PersonModule
import ru.otus.basicarchitecture.DI.FragmentScope
import ru.otus.basicarchitecture.Ui.Fragment1.Fragment1

@FragmentScope
@Subcomponent(modules = [PersonModule::class, Fragment1ViewModelModule::class])
interface Fragment1SubComponent {
@Subcomponent.Builder
interface Builder {
fun build() : Fragment1SubComponent
}

fun inject(fragment1: Fragment1)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.otus.basicarchitecture.DI.Fragment1

import androidx.lifecycle.ViewModel
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
import dagger.multibindings.StringKey
import ru.otus.basicarchitecture.Ui.Fragment1.Fragment1ViewModel

@Module
interface Fragment1ViewModelModule {

@IntoMap
@StringKey("Fragment1ViewModel")
@Binds
fun bindFirstScreenViewModel(impl: Fragment1ViewModel): ViewModel

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.otus.basicarchitecture.DI.FragmentComponents.FirstScreen

import dagger.Module
import dagger.Provides
import ru.otus.basicarchitecture.Core.Model.Person
import ru.otus.basicarchitecture.DI.FragmentScope


@Module
class PersonModule {
@FragmentScope
@Provides
fun providePerson(): Person {
return Person.defaultPerson()
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ru.otus.basicarchitecture.DI.Fragment2
import dagger.Module
import dagger.Provides
import ru.otus.basicarchitecture.Core.Model.Address
import ru.otus.basicarchitecture.DI.FragmentScope

@Module
class AddressModule {
@FragmentScope
@Provides
fun providesAddress(): Address {
return Address("","","")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.otus.basicarchitecture.DI.Fragment2

import dagger.Subcomponent
import ru.otus.basicarchitecture.DI.FragmentComponents.FirstScreen.PersonModule
import ru.otus.basicarchitecture.DI.FragmentScope
import ru.otus.basicarchitecture.Ui.Fragment1.Fragment2

@FragmentScope
@Subcomponent(modules = [PersonModule::class, Fragment2ViewModelModule::class])
interface Fragment2SubComponent {
@Subcomponent.Builder
interface Builder {
fun build() : Fragment2SubComponent
}

fun inject(fragment2: Fragment2)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.otus.basicarchitecture.DI.Fragment2
import androidx.lifecycle.ViewModel
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
import dagger.multibindings.StringKey
import ru.otus.basicarchitecture.Ui.Fragment1.Fragment2ViewModel

@Module
interface Fragment2ViewModelModule {

@IntoMap
@StringKey("Fragment2ViewModel")
@Binds
fun bindFirstScreenViewModel(impl: Fragment2ViewModel): ViewModel

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ru.otus.basicarchitecture.DI.Fragment3

import dagger.Subcomponent
import ru.otus.basicarchitecture.DI.FragmentScope
import ru.otus.basicarchitecture.Ui.Fragment3.Fragment3

@FragmentScope
@Subcomponent(modules = [Fragment3ViewModelModule::class])
interface Fragment3SubComponent {

@Subcomponent.Builder
interface Builder {
fun build() : Fragment3SubComponent
}

fun inject(fragmentThird: Fragment3)


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.otus.basicarchitecture.DI.Fragment3

import androidx.lifecycle.ViewModel
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
import dagger.multibindings.StringKey
import ru.otus.basicarchitecture.Ui.Fragment3.Fragment3ViewModel

@Module
interface Fragment3ViewModelModule {

@IntoMap
@StringKey("Fragment3ViewModel")
@Binds
fun bindThirdScreenViewModel(impl: Fragment3ViewModel): ViewModel

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ru.otus.basicarchitecture.DI.FragmentComponents.Fragment4

import dagger.Subcomponent
import ru.otus.basicarchitecture.DI.FragmentScope
import ru.otus.basicarchitecture.Ui.Fragment4.Fragment4

@FragmentScope
@Subcomponent(modules = [Fragment4ViewModelModule::class])
interface Fragment4SubComponent {


@Subcomponent.Builder
interface Builder {
fun build() : Fragment4SubComponent
}

fun inject(fragment: Fragment4)

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.otus.basicarchitecture.DI.FragmentComponents.Fragment4

import androidx.lifecycle.ViewModel
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
import dagger.multibindings.StringKey
import ru.otus.basicarchitecture.Ui.Fragment4.Fragment4ViewModel


@Module
interface Fragment4ViewModelModule {

@IntoMap
@StringKey("Fragment4ViewModel")
@Binds
fun bindFourthScreenViewModel(impl: Fragment4ViewModel): ViewModel
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.otus.basicarchitecture.DI

import javax.inject.Scope

@Scope
@Retention(value = AnnotationRetention.RUNTIME)
annotation class FragmentScope()
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package ru.otus.basicarchitecture.DI.MainComponent

import dagger.Component
import ru.otus.basicarchitecture.DI.Fragment1.Fragment1SubComponent
import ru.otus.basicarchitecture.DI.Fragment2.Fragment2SubComponent
import ru.otus.basicarchitecture.DI.Fragment3.Fragment3SubComponent
import ru.otus.basicarchitecture.DI.FragmentComponents.Fragment4.Fragment4SubComponent
import ru.otus.basicarchitecture.Domain.Repository
import ru.otus.basicarchitecture.data.WizardCache
import javax.inject.Singleton

@Singleton
@Component(modules = [WizardCacheModule::class, RepositoryModule::class])
interface MainComponent {
fun fragment1SubComponent() : Fragment1SubComponent.Builder
fun fragment2SubComponent() : Fragment2SubComponent.Builder
fun fragment3SubComponent() : Fragment3SubComponent.Builder
fun fragment4SubComponent() : Fragment4SubComponent.Builder

fun wizardCache(): WizardCache

fun repository(): Repository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ru.otus.basicarchitecture.DI.MainComponent

import dagger.Binds
import dagger.Module
import ru.otus.basicarchitecture.data.RepositoryImpl
import ru.otus.basicarchitecture.Domain.Repository
import javax.inject.Singleton

@Module
interface RepositoryModule {
@Singleton
@Binds
fun getRepository(impl: RepositoryImpl) : Repository
}
Loading