Skip to content

Instantly share code, notes, and snippets.

View SabagRonen's full-sized avatar

Ronen Sabag SabagRonen

View GitHub Profile
@SabagRonen
SabagRonen / MainContract.kt
Last active December 21, 2017 21:04
dagger android injector post contract between the view and the presenter
interface MainContract {
interface View {
fun showClickText()
}
interface UserAction {
fun createTopic(view: View)
}
}
@SabagRonen
SabagRonen / MainActivity.kt
Last active December 21, 2017 21:05
dagger android injector post main activity
class MainActivity : AppCompatActivity(), View {
@Inject lateinit var userAction: MainContract.UserAction
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
@SabagRonen
SabagRonen / Injections.kt
Last active August 31, 2019 16:01
dagger android injector post all injection issues
class MyApp : Application(), HasActivityInjector {
@Inject lateinit var dispatchingActivityInjector: DispatchingAndroidInjector<Any>
override fun androidInjector() = dispatchingActivityInjector
override fun onCreate() {
super.onCreate()
DaggerAppComponent.builder().application(this).build().inject(this)
}
}
@SabagRonen
SabagRonen / MainActivityInjector.kt
Last active August 31, 2019 15:57
dagger android injector post Main Activity injector
inline fun <reified T : Activity> createFakeMainActivityInjector(crossinline block : T.() -> Unit)
: DispatchingAndroidInjector<Any> {
val injector = AndroidInjector<Activity> { instance ->
if (instance is T) {
instance.block()
}
}
val factory = Factory<Activity> { injector }
val map = mapOf(Pair<Class <*>, Provider<Factory<*>>>(T::class.java, Provider { factory }))
return DispatchingAndroidInjector_Factory.newInstance(map, emptyMap())
@SabagRonen
SabagRonen / MainActivityTests.kt
Last active December 17, 2017 23:22
dagger android injector post main activity tests
@RunWith(AndroidJUnit4::class)
class MainViewTests {
val mockUserAction = mock(MainContract.UserAction::class.java)
@get:Rule val activityTestRule = object : ActivityTestRule<MainActivity>(MainActivity::class.java, true, true) {
override fun beforeActivityLaunched() {
super.beforeActivityLaunched()
val myApp = InstrumentationRegistry.getTargetContext().applicationContext as MyApp
myApp.dispatchingActivityInjector = createFakeMainActivityInjector {
userAction = mockUserAction
@SabagRonen
SabagRonen / InjectorCreator.kt
Last active August 31, 2019 15:55
dagger android injector post fake activity injector
inline fun <reified T : Activity> createFakeActivityInjector(crossinline block : T.() -> Unit)
: DispatchingAndroidInjector<Any> {
val injector = AndroidInjector<Activity> { instance ->
if (instance is T) {
instance.block()
}
}
val factory = Factory<Activity> { injector }
val map = mapOf(Pair<Class <*>, Provider<Factory<*>>>(T::class.java, Provider { factory }))
return DispatchingAndroidInjector_Factory.newInstance(map, emptyMap())
@SabagRonen
SabagRonen / Plugins.kt
Created January 13, 2018 19:41
Clean Architecture and Kotlin Coroutines post plugins
interface Storage {
fun getUrlForKey(key: String) : String
}
interface ImageFetcher {
fun getImageFromUrl(url: String) : Bitmap
}
@SabagRonen
SabagRonen / UseCases.kt
Last active January 13, 2018 19:48
Clean Architecture and Kotlin Coroutines post use case
interface UseCase <in Request, out Response> {
fun handleRequest(request: Request) : Response
}
interface UseCaseResponseHandler <in Response> {
fun handleResponse(response: Response)
}
class UseCaseRunner <Request, Response> {
@SabagRonen
SabagRonen / LoadImage.kt
Created January 13, 2018 19:52
Clean Architecture and Kotlin Coroutines post loading image use case
data class LoadImageUseCaseRequest (
val key: String,
val storage: Storage,
val imageFetcher: ImageFetcher
)
data class LoadImageUseCaseResponse (val bitmap: Bitmap)
class LoadImageUseCase : UseCase<LoadImageUseCaseRequest, LoadImageUseCaseResponse> {
override fun handleRequest(request: LoadImageUseCaseRequest) : LoadImageUseCaseResponse {
@SabagRonen
SabagRonen / AsyncImageFetcher.kt
Last active January 13, 2018 20:20
Clean Architecture and Kotlin Coroutines post loading image async
suspend fun fetchImage(key: String, storage: Storage, imageFetcher: ImageFetcher) : Bitmap {
val url = async {storage.getUrlForKey(key)}.await()
val image = async { imageFetcher.getImageFromUrl(url) }
println("this might be run after the async have started")
return image.await()
}