Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Remove Dagger/Hilt, add custom DI #73

Merged
merged 5 commits into from
Oct 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ Did you find a bug or have an idea of how the app could be improved? Please repo
## Technical implementation

This app is also meant as a blueprint for modern Android development, presenting and evaluating
recommended and cutting-edge technologies and libraries such as:
recommended and cutting-edge technologies, patterns and libraries such as:

- [Kotlin](https://kotlinlang.org/) programming language
- Kotlin [coroutines](https://kotlinlang.org/docs/coroutines-overview.html)
- Jetpack [Compose](https://developer.android.com/jetpack/compose)
- Jetpack [Navigation](https://developer.android.com/guide/navigation)
- Jetpack [Hilt](https://dagger.dev/hilt/)
- [Material Design 3](https://m3.material.io/)
- Dependency Injection pattern with custom implementation
- several other Jetpack & AndroidX libraries
11 changes: 5 additions & 6 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,7 @@ import java.util.*
plugins {
id("com.android.application")
kotlin("android")
kotlin("kapt")
kotlin("plugin.parcelize")
id("dagger.hilt.android.plugin")
id("com.mikepenz.aboutlibraries.plugin")
alias(libs.plugins.triplet.play)
alias(libs.plugins.adarshr.test.logger)
Expand Down Expand Up @@ -104,6 +102,10 @@ android {
it.useJUnitPlatform()
}
}

lint {
disable.add("EnsureInitializerMetadata")
}
}

play {
Expand Down Expand Up @@ -146,24 +148,21 @@ dependencies {
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.hilt.navigation.compose)
implementation(libs.mikepenz.aboutlibraries.compose)
implementation(libs.google.accompanist.systemuicontroller)
//endregion

implementation(libs.androidx.startup.runtime)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.viewmodel.ktx)
implementation(libs.androidx.datastore.preferences)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.google.hilt.android)
implementation(libs.androidx.browser)
implementation(libs.jakewharton.timber)

debugImplementation(libs.facebook.stetho)

kapt(libs.google.hilt.android.compiler)

testImplementation(libs.kotest.runner.junit5)
testImplementation(libs.kotest.assertions.core)
testImplementation(libs.mockk)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,10 @@ package com.svenjacobs.app.leon.startup

import android.content.Context
import com.facebook.stetho.Stetho
import javax.inject.Inject

class StethoHelperImpl @Inject constructor() : StethoHelper {
class StethoHelper {

override fun initialize(context: Context) {
fun initialize(context: Context) {
Stetho.initializeWithDefaults(context)
}
}
1 change: 0 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
xmlns:tools="http://schemas.android.com/tools">

<application
android:name=".LeonApp"
android:allowBackup="true"
android:fullBackupOnly="true"
android:icon="@mipmap/ic_launcher"
Expand Down
25 changes: 0 additions & 25 deletions app/src/main/kotlin/com/svenjacobs/app/leon/LeonApp.kt

This file was deleted.

2 changes: 0 additions & 2 deletions app/src/main/kotlin/com/svenjacobs/app/leon/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@ import androidx.browser.customtabs.CustomTabsServiceConnection
import androidx.core.view.WindowCompat
import com.svenjacobs.app.leon.ui.screens.main.MainScreen
import com.svenjacobs.app.leon.ui.screens.main.model.MainScreenViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
private val mainScreenViewModel: MainScreenViewModel by viewModels()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import com.svenjacobs.app.leon.core.domain.inject.AppComponent
import javax.inject.Singleton
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
Expand All @@ -33,8 +32,8 @@ import kotlinx.coroutines.flow.map
* Manages app specific preferences stored via [DataStore].
*/
@Singleton
class AppDataStoreManager @Inject constructor(
@ApplicationContext private val context: Context,
class AppDataStoreManager(
private val context: Context = AppComponent.appContext,
) {
private val Context.dataStore by preferencesDataStore(name = "settings")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,8 @@ import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.preferencesDataStore
import com.svenjacobs.app.leon.core.domain.inject.AppComponent
import com.svenjacobs.app.leon.core.domain.sanitizer.Sanitizer
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import javax.inject.Singleton
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
Expand All @@ -35,8 +34,8 @@ import kotlinx.coroutines.flow.map
* Manages [Sanitizer] specific preferences stored via [DataStore].
*/
@Singleton
class SanitizerDataStoreManager @Inject constructor(
@ApplicationContext private val context: Context,
class SanitizerDataStoreManager(
private val context: Context = AppComponent.appContext,
) {
private val Context.dataStore by preferencesDataStore(name = "sanitizers")

Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,21 @@

package com.svenjacobs.app.leon.sanitizer

import com.svenjacobs.app.leon.core.domain.sanitizer.Registrations
import com.svenjacobs.app.leon.core.domain.inject.AppComponent
import com.svenjacobs.app.leon.core.domain.sanitizer.SanitizerId
import com.svenjacobs.app.leon.core.domain.sanitizer.SanitizerRegistrations
import com.svenjacobs.app.leon.core.domain.sanitizer.SanitizerRepository
import com.svenjacobs.app.leon.core.domain.sanitizer.SanitizerRepository.SanitizerState
import com.svenjacobs.app.leon.datastore.SanitizerDataStoreManager
import javax.inject.Inject
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map

class SanitizerRepositoryImpl @Inject constructor(
private val dataStoreManager: SanitizerDataStoreManager,
@Registrations private val registrations: SanitizerRegistrations,
class SanitizerRepositoryImpl(
private val dataStoreManager: SanitizerDataStoreManager = SanitizerDataStoreManager(),
private val registrations: SanitizerRegistrations = AppComponent.sanitizerRegistrations,
) : SanitizerRepository {

override val state: Flow<ImmutableList<SanitizerState>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,6 @@ import android.content.Context
import androidx.startup.Initializer
import com.svenjacobs.app.leon.BuildConfig
import com.svenjacobs.app.leon.datastore.AppDataStoreManager
import dagger.hilt.EntryPoint
import dagger.hilt.EntryPoints
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.runBlocking

/**
Expand All @@ -34,31 +30,19 @@ import kotlinx.coroutines.runBlocking
@Suppress("unused")
class AppInitializer : Initializer<Unit> {

@EntryPoint
@InstallIn(SingletonComponent::class)
interface AppInitializerEntryPoint {

val appDataStoreManager: AppDataStoreManager

val migrations: Migrations

val stethoHelper: StethoHelper
}

override fun create(context: Context) {
val entryPoint = EntryPoints.get(context, AppInitializerEntryPoint::class.java)

val migrations = entryPoint.migrations
val appDataStoreManager = entryPoint.appDataStoreManager
val stethoHelper = entryPoint.stethoHelper
val appDataStoreManager = AppDataStoreManager()
val stethoHelper = StethoHelper()

stethoHelper.initialize(context)
migrations.migrate(context)

runBlocking {
appDataStoreManager.setVersionCode(BuildConfig.VERSION_CODE)
}
}

override fun dependencies() = listOf(TimberInitializer::class.java)
override fun dependencies() = listOf(
ComponentInitializer::class.java,
TimberInitializer::class.java,
)
}