Skip to content

Instantly share code, notes, and snippets.

View cdmunoz's full-sized avatar

Carlos Daniel cdmunoz

View GitHub Profile
@Singleton
@Component(
modules = arrayOf(AndroidInjectionModule::class, BuildersModule::class, AppModule::class)
)
interface AppComponent {
fun inject(app: Application)
}
@Module
class AppModule(val app: Application){
@Provides
@Singleton
fun provideApplication(): Application = app
}
@Module
abstract class BuildersModule {
@ContributesAndroidInjector
abstract fun contributeCryptocurrenciesActivity(): CryptocurrenciesActivity
}
dependencies {
//android libs
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
implementation "com.android.support.constraint:constraint-layout:${rootProject.ext.constraintLayoutVersion}"
//moshi
implementation "com.squareup.moshi:moshi-kotlin:${rootProject.ext.moshiKotlinVersion}"
//dagger2
implementation "com.google.dagger:dagger-android:${rootProject.ext.dagger2Version}"
class CryptocurrencyApplication: Application(), HasActivityInjector {
@Inject lateinit var activityInjector: DispatchingAndroidInjector<Activity>
override fun onCreate() {
super.onCreate()
DaggerAppComponent.builder().appModule(AppModule(this)).build().inject(this)
}
dependencies {
//android libs
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
implementation "com.android.support.constraint:constraint-layout:${rootProject.ext.constraintLayoutVersion}"
//moshi
implementation "com.squareup.moshi:moshi-kotlin:${rootProject.ext.moshiKotlinVersion}"
//dagger2
implementation "com.google.dagger:dagger-android:${rootProject.ext.dagger2Version}"
@Entity(
tableName = "cryptocurrency"
)
data class Cryptocurrency(
@Json(name = "id")
@PrimaryKey
val id: Int,
@Json(name = "name")
@Database(entities = arrayOf(Cryptocurrency::class), version = 1)
abstract class Database : RoomDatabase() {
abstract fun cryptocurrenciesDao(): CryptocurrenciesDao
}
@Dao
interface CryptocurrenciesDao {
@Query("SELECT * FROM cryptocurrency")
fun queryCryptocurrencies(): LiveData<List<Cryptocurrency>>
@Insert(
onConflict = OnConflictStrategy.REPLACE
)
fun insertCryptocurrency(cryptocurrency: Cryptocurrency)
@Module
class AppModule(val app: Application) {
@Provides
@Singleton
fun provideApplication(): Application = app
@Provides
@Singleton
fun provideCryptocurrenciesDatabase(app: Application): Database = Room.databaseBuilder(app,