Skip to content

Add Koin instead of dagger-hilt as DI #49

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

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
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
9 changes: 1 addition & 8 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,7 @@
.gradle
/local.properties
/gradle.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
/.idea/gradle.xml
/.idea/*
.idea
/app/prod/release/*
/fastlane/report.xml
.DS_Store
Expand Down
3 changes: 1 addition & 2 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 9 additions & 8 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ apply plugin: 'kotlin-kapt'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'dagger.hilt.android.plugin'

apply plugin: 'com.google.gms.google-services'

apply plugin: 'com.google.firebase.crashlytics'
Expand All @@ -21,7 +19,7 @@ android {
targetSdkVersion 29
versionCode 42
versionName "1.0"
testInstrumentationRunner 'com.rootstrap.android.CustomTestRunner'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

viewBinding {
Expand Down Expand Up @@ -148,6 +146,8 @@ dependencies {
implementation 'com.google.android.material:material:1.2.1'
testImplementation 'junit:junit:4.13.1'
testImplementation 'org.mockito:mockito-core:2.28.2'
androidTestImplementation "io.mockk:mockk-android:1.12.0"
testImplementation "io.mockk:mockk:1.12.0"
androidTestImplementation 'androidx.test:runner:1.3.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
androidTestImplementation 'androidx.test.espresso:espresso-intents:3.3.0'
Expand Down Expand Up @@ -188,12 +188,13 @@ dependencies {
//---- Linters ----
ktlint "com.pinterest:ktlint:0.35.0"
//---- Hilt ----
implementation "com.google.dagger:hilt-android:2.28-alpha"
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02'
kapt "com.google.dagger:hilt-android-compiler:2.28-alpha"
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha02'
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.28-alpha'
kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.28-alpha'

// Koin
def koin_version = "2.1.3"
implementation "org.koin:koin-android:$koin_version"
implementation "org.koin:koin-androidx-scope:$koin_version"
implementation "org.koin:koin-androidx-viewmodel:$koin_version"

//security crypto
implementation "androidx.security:security-crypto:1.1.0-alpha03"
Expand Down
6 changes: 6 additions & 0 deletions app/src/androidTest/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.package">

<application android:extractNativeLibs="true" />
</manifest>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd add a new line here

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,23 @@ import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.rootstrap.android.R
import com.rootstrap.android.ui.activity.main.ProfileActivity
import com.rootstrap.android.ui.activity.main.SignUpActivity
import com.rootstrap.android.utils.BaseTests
import dagger.hilt.android.testing.HiltAndroidTest
import com.rootstrap.android.utils.BaseTest
import io.mockk.every
import okhttp3.mockwebserver.Dispatcher
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.RecordedRequest
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

@HiltAndroidTest
class ProfileActivityTest : BaseTests() {
@RunWith(AndroidJUnit4::class)
class ProfileActivityTest : BaseTest() {

private lateinit var activity: ProfileActivity
private lateinit var scenario: ActivityScenario<ProfileActivity>
Expand All @@ -27,7 +29,7 @@ class ProfileActivityTest : BaseTests() {
override fun before() {
super.before()
setServerDispatch(logoutDispatcher())
sessionManager.user = testUser()
every { sessionManager.user } returns testUser()
scenario = ActivityScenario.launch(ProfileActivity::class.java)
scenario.onActivity { activity -> this.activity = activity }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ import com.rootstrap.android.R
import com.rootstrap.android.network.models.UserSerializer
import com.rootstrap.android.ui.activity.main.ProfileActivity
import com.rootstrap.android.ui.activity.main.SignInActivity
import com.rootstrap.android.utils.BaseTests
import dagger.hilt.android.testing.HiltAndroidTest
import com.rootstrap.android.utils.BaseTest
import okhttp3.mockwebserver.Dispatcher
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.RecordedRequest
Expand All @@ -16,8 +15,7 @@ import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test

@HiltAndroidTest
class SignInActivityTest : BaseTests() {
class SignInActivityTest : BaseTest() {

private lateinit var activity: SignInActivity
private lateinit var scenario: ActivityScenario<SignInActivity>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ import com.rootstrap.android.network.models.UserSerializer
import com.rootstrap.android.ui.activity.main.ProfileActivity
import com.rootstrap.android.ui.activity.main.SignInActivity
import com.rootstrap.android.ui.activity.main.SignUpActivity
import com.rootstrap.android.utils.BaseTests
import dagger.hilt.android.testing.HiltAndroidTest
import com.rootstrap.android.utils.BaseTest
import okhttp3.mockwebserver.Dispatcher
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.RecordedRequest
Expand All @@ -17,8 +16,7 @@ import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test

@HiltAndroidTest
class SignUpActivityTest : BaseTests() {
class SignUpActivityTest : BaseTest() {

private lateinit var activity: SignUpActivity
private lateinit var scenario: ActivityScenario<SignUpActivity>
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.rootstrap.android.tests.utils

import android.content.SharedPreferences
import com.rootstrap.android.util.Prefs
import io.mockk.every
import io.mockk.mockk
import io.mockk.spyk
import org.junit.Assert
import org.junit.Test
import java.util.UUID

class PrefsTest {

@Test
fun savingSecureDataPrefs() {
val uid = UUID.randomUUID().toString()
val preferences = mockk<SharedPreferences>()
val prefs = spyk(Prefs(preferences), recordPrivateCalls = true)
every { preferences.edit().putString("uid", uid).apply() } returns Unit
every { preferences.getString("uid", "")!! } returns uid
every { prefs ["getPref"]() } returns preferences

prefs.uid = uid

Assert.assertEquals(prefs.uid, uid)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package com.rootstrap.android.utils

import android.app.Activity
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.typeText
import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
import androidx.test.espresso.action.ViewActions.scrollTo
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.clearText
import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.typeText
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withId
Expand All @@ -15,31 +15,35 @@ import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry
import androidx.test.runner.lifecycle.Stage
import com.rootstrap.android.network.managers.session.SessionManager
import com.rootstrap.android.network.models.User
import com.rootstrap.android.network.providers.ServiceProviderModule
import dagger.hilt.android.testing.HiltAndroidRule
import io.mockk.every
import io.mockk.spyk
import okhttp3.mockwebserver.Dispatcher
import org.junit.Rule
import org.junit.runner.RunWith
import javax.inject.Inject

@RunWith(AndroidJUnit4ClassRunner::class)
open class BaseTests {
open class BaseTest {

@Inject lateinit var sessionManager: SessionManager
lateinit var sessionManager: SessionManager

var mockServer: MockServer = MockServer

@get:Rule
var hiltRule = HiltAndroidRule(this)

open fun setServerDispatch(dispatcher: Dispatcher) {
mockServer.server().dispatcher = dispatcher
}

open fun before() {
sessionManager = spyk<SessionManager>()
val user = User(
"9032",
"user123@mail.com",
"Richard",
"Richard",
"99090909",
"asdasdasdasda",
"Richard"
)
every { sessionManager.user } returns user
mockServer.startServer()
ServiceProviderModule.URL_API = mockServer.server().url("/").toString()
hiltRule.inject()
}

open fun after() {
Expand Down
10 changes: 7 additions & 3 deletions app/src/main/java/com/rootstrap/android/App.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
package com.rootstrap.android

import android.app.Application
import com.rootstrap.android.di.myModule
import com.rootstrap.android.metrics.Analytics
import com.rootstrap.android.metrics.GoogleAnalytics
import dagger.hilt.android.HiltAndroidApp
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin

@HiltAndroidApp
class App : Application() {

override fun onCreate() {
super.onCreate()

startKoin {
androidContext(this@App)
modules(myModule)
}
Analytics.addProvider(GoogleAnalytics(this))
// You need the api key in order to use MixPanel
// Analytics.addProvider(MixPanelAnalytics(this))
Expand Down
35 changes: 35 additions & 0 deletions app/src/main/java/com/rootstrap/android/di/AppModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.rootstrap.android.di

import android.content.Context
import android.content.SharedPreferences
import com.rootstrap.android.network.managers.session.SessionManager
import com.rootstrap.android.network.managers.session.SessionManagerImpl
import com.rootstrap.android.network.managers.user.UserManager
import com.rootstrap.android.network.managers.user.UserManagerImpl
import com.rootstrap.android.network.managers.user.UserManagerRetrofitBuilder
import com.rootstrap.android.network.services.AuthenticationInterceptor
import com.rootstrap.android.network.services.ResponseInterceptor
import com.rootstrap.android.ui.activity.main.ProfileActivityViewModel
import com.rootstrap.android.ui.activity.main.SignInActivityViewModel
import com.rootstrap.android.ui.activity.main.SignUpActivityViewModel
import com.rootstrap.android.util.Prefs
import org.koin.android.ext.koin.androidApplication
import org.koin.core.module.Module
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module

val myModule: Module = module {

single { AuthenticationInterceptor(get()) }
single { ResponseInterceptor(get(), get()) }
single { UserManagerRetrofitBuilder(get(), get()) }
single<UserManager> { UserManagerImpl(get()) }
single<SharedPreferences> { androidApplication().getSharedPreferences("userPreferences", Context.MODE_PRIVATE) }
factory { Prefs(get()) }
single<SessionManager> { SessionManagerImpl(get()) }
viewModel { SignInActivityViewModel(get(), get()) }
viewModel { ProfileActivityViewModel(get(), get()) }
viewModel { SignUpActivityViewModel(get(), get()) }
// viewModel { BottomBarViewModel(androidApplication()) }
// single { provideIotDao(androidContext()) }
Comment on lines +33 to +34

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what do you think of removing these commented lines if they are no longer needed?

}

This file was deleted.

Loading