Skip to content

Instantly share code, notes, and snippets.

View arnaudgiuliani's full-sized avatar

Arnaud Giuliani arnaudgiuliani

View GitHub Profile
@arnaudgiuliani
arnaudgiuliani / MyActivity.kt
Last active March 13, 2018 08:59
Koin 0.9.1 shared ViewModel instances
class MyActivity() : AppCompatActivity(){
val myModel by viewModel<MyViewModel>()
}
@arnaudgiuliani
arnaudgiuliani / MyActivityEager.kt
Created March 13, 2018 09:03
Koin 0.9.1 - Android lazy inject vs eager inject
class MyActivity() : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//...
// Direct/Eager inject
val presenter = get<MyPresenter>()
}
@arnaudgiuliani
arnaudgiuliani / Component.kt
Created March 13, 2018 09:10
Koin 0.9.1 - parameters are now functional
class Component : KoinComponent {
// just add parameter map in Lambda
val compA: ComponentA by inject { mapOf(PARAM_URL to URL1) }
}
@arnaudgiuliani
arnaudgiuliani / components.kt
Created March 13, 2018 09:18
Koin 0.9.1 - propagate parameters
class ComponentA(val componentC: ComponentC)
class ComponentB(val componentA: ComponentA)
class ComponentC : KoinComponent {
// push parameters values
val componentB: ComponentB by inject { mapOf("this" to this) }
}
@arnaudgiuliani
arnaudgiuliani / WeatherEntity.kt
Last active April 30, 2018 09:27
Android Room components #1
@Entity(tableName = "weather")
data class WeatherEntity(
@PrimaryKey
val id: String,
val location: String,
val day: String,
val temp_low: String,
val temp_high: String,
val wind_kph: Int,
val wind_dir: String,
@arnaudgiuliani
arnaudgiuliani / WeatherDAO.kt
Created April 30, 2018 09:26
Android Room components #2
@Dao
interface WeatherDAO {
/**
* Save entities
*/
@Insert
fun saveAll(entities: List<WeatherEntity>)
/**
@arnaudgiuliani
arnaudgiuliani / module.kt
Last active May 1, 2018 19:22
Android Room components #3
// Room Database instance
bean {
Room.databaseBuilder(androidApplication(), WeatherDatabase::class.java, "weather-db")
.build()
}
// WeatherDAO instance (get instance from WeatherDatabase)
bean { get<WeatherDatabase>().weatherDAO() }
@arnaudgiuliani
arnaudgiuliani / RoomTestModule.kt
Last active April 30, 2018 14:20
Android Room components - test #1
/**
* In-Memory Room Database definition
*/
val roomTestModule = applicationContext {
bean {
// In-Memory database config
Room.inMemoryDatabaseBuilder(get(), WeatherDatabase::class.java)
.allowMainThreadQueries()
.build()
}
@arnaudgiuliani
arnaudgiuliani / WeatherDAOTest.kt
Last active April 30, 2018 14:52
Android Room components - test #2
/**
* WeatherDAOTest is a KoinTest with AndroidJUnit4 runner
*
* KoinTest help inject Koin components from actual runtime
*/
@RunWith(AndroidJUnit4::class)
class WeatherDAOTest : KoinTest {
/*
* Inject needed components from Koin
// WeatherRepository contract
interface WeatherRepository{ ... }
// WeatherRepository implementation using WeatherDAO
class WeatherRepositoryImpl(private val weatherDAO: WeatherDAO) : WeatherRepository { ... }