Skip to content

Instantly share code, notes, and snippets.

@manuelvicnt
manuelvicnt / build.gradle
Last active July 22, 2019 17:11
Dagger kapt build improvements
allprojects {
afterEvaluate {
extensions.findByName('kapt')?.arguments {
arg("dagger.formatGeneratedSource", "disabled")
arg("dagger.gradle.incremental", "enabled")
}
}
}
@manuelvicnt
manuelvicnt / build.gradle.kts
Last active August 9, 2019 15:45
Dagger kapt build improvements DSL kotlin
kapt {
arguments {
arg("dagger.formatGeneratedSource", "disabled")
arg("dagger.gradle.incremental", "enabled")
}
}
@manuelvicnt
manuelvicnt / NetworkModule.kt
Last active July 23, 2019 15:33
Static @provides functions in Dagger with Kotlin
@Module
object NetworkModule {
@JvmStatic
@Provides
fun provideOkHttpClient(): OkHttpClient {
return OkHttpClient.Builder().build()
}
}
@manuelvicnt
manuelvicnt / NetworkModule.kt
Last active July 23, 2019 15:33
Static @provides in an abstract Module
@Module
abstract class NetworkModule {
@Binds abstract fun provideService(retrofitService: RetrofitService): Service
@Module
companion object {
@JvmStatic
@Provides
@manuelvicnt
manuelvicnt / NetworkModule.kt
Last active July 23, 2019 15:33
Static @provides in different Dagger modules
@Module(includes = [OkHttpClientModule::java])
abstract class NetworkModule {
@Binds abstract fun provideService(retrofitService: RetrofitService): Service
}
@Module
object OkHttpClientModule {
@JvmStatic
@manuelvicnt
manuelvicnt / MyModule.kt
Created July 22, 2019 17:17
Inline method bodies Dagger
@Provides
fun provideNetworkPrinter() = NetworkPrinter()
@Provides
fun provideNetworkPrinter(): NetworkPrinter = NetworkPrinter()
@Provides
fun provideNetworkPrinter(): NetworkPrinter {
return NetworkPrinter()
}
@Provides
// configures a `Printer`
fun providePrinter(): Printer = NetworkPrinter()
@Provides
// configures a `NetworkPrinter`, not a plain `Printer`!
fun providePrinter() = NetworkPrinter()
@manuelvicnt
manuelvicnt / LongLastingElement.kt
Created September 13, 2019 10:57
Make an object survive configuration changes. Replacement for onRetainCustomNonConfigurationInstance
/*
* Copyright 2019 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
@manuelvicnt
manuelvicnt / ShotViewModel.kt
Created October 9, 2019 08:53
Plaid - ShotViewModel
class ShotViewModel(...) {
init {
val result = shotsRepository.getShot(shotId)
if (result is Result.Success) {
// FIRST UI EMISSION with an incomplete UI Model
_shotUiModel.value = result.data.toShotUiModel()
processUiModel(result.data)
} else { ... }
}
@manuelvicnt
manuelvicnt / ShowViewModelTest.kt
Created October 9, 2019 08:57
Plaid - ShowViewModelTest
@Test
fun loadShot_emitsTwoUiModels() {
// When the ViewModel has started
val viewModel = ... // Creates viewModel
// Then the fast result has been emitted
val fastResult = viewModel.shotUiModel.getOrAwaitValue()
// THIS FAILS!!! The slow result has already been emitted because the coroutine
// was executed immediately and shotUiModel LiveData contains the slow result
assertTrue(fastResult.formattedDescription.isEmpty())