Update from Dagger2.x to Android-Hilt.

This commit is contained in:
Ahmed Eltaher
2021-01-27 22:40:52 +01:00
parent 9c11eb0652
commit 53455134e0
24 changed files with 93 additions and 281 deletions

View File

@@ -3,10 +3,12 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-platform-android'
apply plugin: 'dagger.hilt.android.plugin'
android {
compileSdkVersion rootProject.compileSdkVersion
buildToolsVersion '29.0.3'
compileSdkVersion 30
buildToolsVersion '30.0.2'
defaultConfig {
applicationId 'com.eltaher.task'
minSdkVersion rootProject.minSdkVersion
@@ -59,6 +61,14 @@ android {
pickFirst 'META-INF/kotlinx-coroutines-core.kotlin_module'
pickFirst 'META-INF/kotlinx-coroutines-io.kotlin_module'
}
configurations.all {
resolutionStrategy {
exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug"
}
}
testOptions {
unitTests.returnDefaultValues = true
}
@@ -79,7 +89,6 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//kotlin
//implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
implementation "androidx.annotation:annotation:$annotationVersion"
@@ -89,7 +98,6 @@ dependencies {
//junit 5
testImplementation "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"
testImplementation "org.junit.platform:junit-platform-runner:$junitRunnerVersion"
androidTestImplementation "androidx.test.ext:junit:$androidXJunitVersion"
androidTestImplementation "org.assertj:assertj-core:$assertjVersion"
@@ -111,20 +119,12 @@ dependencies {
implementation "androidx.recyclerview:recyclerview:$recyclerviewVersion"
implementation "androidx.appcompat:appcompat:$appcompatVersion"
implementation "com.google.android.material:material:$materialVersion"
implementation "androidx.core:core-ktx:$coreKtxVersion"
implementation "androidx.coordinatorlayout:coordinatorlayout:$coordinatorLayoutVersion"
implementation "androidx.constraintlayout:constraintlayout:$constraintLayoutVersion"
implementation "androidx.cardview:cardview:$cardViewVersion"
implementation "androidx.activity:activity:$activityVersion"
implementation "androidx.activity:activity-ktx:$activityKtxVersion"
//Dagger
implementation "com.google.dagger:dagger:$daggerVersion"
kapt "com.google.dagger:dagger-compiler:$daggerVersion"
implementation "com.google.dagger:dagger-android:$daggerVersion"
implementation "com.google.dagger:dagger-android-support:$daggerVersion"
kapt "com.google.dagger:dagger-android-processor:$daggerVersion"
kaptAndroidTest "com.google.dagger:dagger-compiler:$daggerVersion"
//Logging
implementation "com.squareup.okhttp3:logging-interceptor:$okhttpInterceptorVersion"
@@ -142,8 +142,6 @@ dependencies {
//MultiDex
implementation "androidx.multidex:multidex:$multiDexVersion"
//Mockk
// androidTestImplementation "io.mockk:mockk-android:$mockVersion"
testImplementation "io.mockk:mockk:$mockVersion"
//coroutines
@@ -152,4 +150,12 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycleExtensionsVersion"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleKTXVersion"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleKTXVersion"
implementation "androidx.core:core-ktx:$coreKtxVersion"
implementation "androidx.activity:activity-ktx:$activityKtxVersion"
implementation 'com.google.dagger:hilt-android:2.31.2-alpha'
kapt 'com.google.dagger:hilt-android-compiler:2.31.2-alpha'
}
kapt {
correctErrorTypes true
}

View File

@@ -1,8 +1,4 @@
package com.task
import com.task.di.DaggerTestAppComponent
class AppTest: App() {
override fun initDagger() {
DaggerTestAppComponent.builder().application(this).build().inject(this)
}
}

View File

@@ -1,27 +0,0 @@
package com.task.di
import android.app.Application
import com.task.AppTest
import dagger.BindsInstance
import dagger.Component
import dagger.android.AndroidInjectionModule
import javax.inject.Singleton
@Singleton
@Component(
modules = [TestDataModule::class,
AndroidInjectionModule::class,
AppModule::class,
ActivityModuleBuilder::class
, ViewModelModule::class])
interface TestAppComponent : AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): TestAppComponent
}
fun inject(app: AppTest)
}

View File

@@ -4,9 +4,12 @@ import com.task.TestDataRepository
import com.task.data.DataRepositorySource
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
abstract class TestDataModule {
@Binds
@Singleton

View File

@@ -1,32 +1,18 @@
package com.task
import android.app.Application
import android.content.Context
import androidx.multidex.MultiDexApplication
import com.task.di.DaggerAppComponent
import dagger.android.AndroidInjector
import dagger.android.DispatchingAndroidInjector
import dagger.android.HasAndroidInjector
import javax.inject.Inject
import dagger.hilt.android.HiltAndroidApp
/**
* Created by AhmedEltaher
*/
open class App : MultiDexApplication(), HasAndroidInjector {
@Inject
lateinit var androidInjector: DispatchingAndroidInjector<Any>
override fun androidInjector(): AndroidInjector<Any> = androidInjector
@HiltAndroidApp
open class App : Application() {
override fun onCreate() {
super.onCreate()
context = applicationContext
initDagger()
}
open fun initDagger() {
DaggerAppComponent.builder().build().inject(this)
}
companion object {

View File

@@ -1,24 +0,0 @@
package com.task.di
import com.task.ui.component.details.DetailsActivity
import com.task.ui.component.login.LoginActivity
import com.task.ui.component.recipes.RecipesListActivity
import com.task.ui.component.splash.SplashActivity
import dagger.Module
import dagger.android.ContributesAndroidInjector
@Suppress("unused")
@Module
abstract class ActivityModuleBuilder {
@ContributesAndroidInjector()
abstract fun contributeSplashActivity(): SplashActivity
@ContributesAndroidInjector()
abstract fun contributeHomeActivity(): RecipesListActivity
@ContributesAndroidInjector()
abstract fun contributeDetailsActivity(): DetailsActivity
@ContributesAndroidInjector()
abstract fun contributeLoginActivity(): LoginActivity
}

View File

@@ -1,26 +0,0 @@
package com.task.di
import com.task.App
import dagger.Component
import dagger.android.AndroidInjectionModule
import javax.inject.Singleton
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
AppModule::class,
DataModule::class,
ErrorModule::class,
ActivityModuleBuilder::class
, ViewModelModule::class
]
)
interface AppComponent {
@Component.Builder
interface Builder {
fun build(): AppComponent
}
fun inject(app: App)
}

View File

@@ -6,11 +6,14 @@ import com.task.utils.Network
import com.task.utils.NetworkConnectivity
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.Dispatchers
import javax.inject.Singleton
import kotlin.coroutines.CoroutineContext
@Module
@InstallIn(SingletonComponent::class)
class AppModule {
@Provides
@Singleton

View File

@@ -5,10 +5,13 @@ import com.task.data.DataRepository
import com.task.data.DataRepositorySource
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
// Tells Dagger this is a Dagger module
@Module
@InstallIn(SingletonComponent::class)
abstract class DataModule {
@Binds
@Singleton

View File

@@ -6,10 +6,13 @@ import com.task.usecase.errors.ErrorFactory
import com.task.usecase.errors.ErrorManager
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
// with @Module we Telling Dagger that, this is a Dagger module
@Module
@InstallIn(SingletonComponent::class)
abstract class ErrorModule {
@Binds
@Singleton

View File

@@ -1,15 +0,0 @@
package com.task.di
import androidx.lifecycle.ViewModel
import dagger.MapKey
import kotlin.reflect.KClass
@MustBeDocumented
@Target(
AnnotationTarget.FUNCTION,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER
)
@Retention(AnnotationRetention.RUNTIME)
@MapKey
annotation class ViewModelKey(val value: KClass<out ViewModel>)

View File

@@ -1,43 +0,0 @@
package com.task.di
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.task.ui.ViewModelFactory
import com.task.ui.component.details.DetailsViewModel
import com.task.ui.component.login.LoginViewModel
import com.task.ui.component.recipes.RecipesListViewModel
import com.task.ui.component.splash.SplashViewModel
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
/**
* Since dagger
* support multibinding you are free to bind as may ViewModels as you want.
*/
@Suppress("unused")
@Module
abstract class ViewModelModule {
@Binds
internal abstract fun bindViewModelFactory(viewModelFactory: ViewModelFactory): ViewModelProvider.Factory
@Binds
@IntoMap
@ViewModelKey(RecipesListViewModel::class)
abstract fun bindUserViewModel(viewModel: RecipesListViewModel): ViewModel
@Binds
@IntoMap
@ViewModelKey(SplashViewModel::class)
abstract fun bindSplashViewModel(viewModel: SplashViewModel): ViewModel
@Binds
@IntoMap
@ViewModelKey(DetailsViewModel::class)
internal abstract fun bindSplashViewModel(viewModel: DetailsViewModel): ViewModel
@Binds
@IntoMap
@ViewModelKey(LoginViewModel::class)
internal abstract fun bindLoginViewModel(viewModel: LoginViewModel): ViewModel
}

View File

@@ -1,25 +0,0 @@
package com.task.ui
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import javax.inject.Inject
import javax.inject.Provider
import javax.inject.Singleton
@Singleton
class ViewModelFactory @Inject constructor(@JvmSuppressWildcards private val creators: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
val creator = creators[modelClass] ?: creators.entries.firstOrNull {
modelClass.isAssignableFrom(it.key)
}?.value ?: throw IllegalArgumentException("unknown model class $modelClass")
try {
@Suppress("UNCHECKED_CAST")
return creator.get() as T
} catch (e: Exception) {
throw RuntimeException(e)
}
}
}

View File

@@ -3,7 +3,6 @@ package com.task.ui.base
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import dagger.android.AndroidInjection
/**
* Created by AhmedEltaher
@@ -12,15 +11,12 @@ import dagger.android.AndroidInjection
abstract class BaseActivity : AppCompatActivity() {
protected abstract fun initializeViewModel()
abstract fun observeViewModel()
protected abstract fun initViewBinding()
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
initViewBinding()
initializeViewModel()
observeViewModel()
}

View File

@@ -3,6 +3,7 @@ package com.task.ui.component.details
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import androidx.activity.viewModels
import androidx.core.content.ContextCompat
import com.squareup.picasso.Picasso
import com.task.R
@@ -10,24 +11,20 @@ import com.task.RECIPE_ITEM_KEY
import com.task.data.Resource
import com.task.data.dto.recipes.RecipesItem
import com.task.databinding.DetailsLayoutBinding
import com.task.ui.ViewModelFactory
import com.task.ui.base.BaseActivity
import com.task.utils.observe
import com.task.utils.toGone
import com.task.utils.toVisible
import javax.inject.Inject
import dagger.hilt.android.AndroidEntryPoint
/**
* Created by AhmedEltaher
*/
@AndroidEntryPoint
class DetailsActivity : BaseActivity() {
@Inject
lateinit var viewModel: DetailsViewModel
@Inject
lateinit var viewModelFactory: ViewModelFactory
private val viewModel: DetailsViewModel by viewModels()
private lateinit var binding: DetailsLayoutBinding
private var menu: Menu? = null
@@ -66,10 +63,6 @@ class DetailsActivity : BaseActivity() {
observe(viewModel.isFavourite, ::handleIsFavourite)
}
override fun initializeViewModel() {
viewModel = viewModelFactory.create(viewModel::class.java)
}
private fun handleIsFavourite(isFavourite: Resource<Boolean>) {
when (isFavourite) {
is Resource.Loading -> {

View File

@@ -9,6 +9,7 @@ import com.task.data.Resource
import com.task.data.dto.recipes.RecipesItem
import com.task.ui.base.BaseViewModel
import com.task.utils.wrapEspressoIdlingResource
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import javax.inject.Inject
@@ -16,7 +17,7 @@ import javax.inject.Inject
/**
* Created by AhmedEltaher
*/
@HiltViewModel
open class DetailsViewModel @Inject constructor(private val dataRepository: DataRepositorySource) : BaseViewModel() {
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)

View File

@@ -2,27 +2,24 @@ package com.task.ui.component.login
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.lifecycle.LiveData
import com.google.android.material.snackbar.Snackbar
import com.task.data.Resource
import com.task.data.dto.login.LoginResponse
import com.task.databinding.LoginActivityBinding
import com.task.ui.ViewModelFactory
import com.task.ui.base.BaseActivity
import com.task.ui.component.recipes.RecipesListActivity
import com.task.utils.*
import javax.inject.Inject
import dagger.hilt.android.AndroidEntryPoint
/**
* Created by AhmedEltaher
*/
@AndroidEntryPoint
class LoginActivity : BaseActivity() {
@Inject
lateinit var viewModelFactory: ViewModelFactory
@Inject
lateinit var loginViewModel: LoginViewModel
private val loginViewModel: LoginViewModel by viewModels()
private lateinit var binding: LoginActivityBinding
@@ -37,10 +34,6 @@ class LoginActivity : BaseActivity() {
setContentView(view)
}
override fun initializeViewModel() {
loginViewModel = viewModelFactory.create(loginViewModel::class.java)
}
override fun observeViewModel() {
observe(loginViewModel.loginLiveData, ::handleLoginResult)
observeSnackBarMessages(loginViewModel.showSnackBar)
@@ -48,8 +41,10 @@ class LoginActivity : BaseActivity() {
}
private fun doLogin() {
loginViewModel.doLogin(binding.username.text.trim().toString(),
binding.password.text.toString())
loginViewModel.doLogin(
binding.username.text.trim().toString(),
binding.password.text.toString()
)
}
private fun handleLoginResult(status: Resource<LoginResponse>) {

View File

@@ -15,6 +15,7 @@ import com.task.ui.base.BaseViewModel
import com.task.utils.RegexUtils.isValidEmail
import com.task.utils.SingleEvent
import com.task.utils.wrapEspressoIdlingResource
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import javax.inject.Inject
@@ -22,7 +23,7 @@ import javax.inject.Inject
/**
* Created by AhmedEltaher
*/
@HiltViewModel
class LoginViewModel @Inject constructor(private val dataRepository: DataRepository) : BaseViewModel() {
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)

View File

@@ -10,6 +10,7 @@ import android.view.View.GONE
import android.view.View.VISIBLE
import android.widget.SearchView
import android.widget.SearchView.OnQueryTextListener
import androidx.activity.viewModels
import androidx.lifecycle.LiveData
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.snackbar.Snackbar
@@ -20,25 +21,20 @@ import com.task.data.dto.recipes.Recipes
import com.task.data.dto.recipes.RecipesItem
import com.task.data.error.SEARCH_ERROR
import com.task.databinding.HomeActivityBinding
import com.task.ui.ViewModelFactory
import com.task.ui.base.BaseActivity
import com.task.ui.component.details.DetailsActivity
import com.task.ui.component.recipes.adapter.RecipesAdapter
import com.task.utils.*
import javax.inject.Inject
import dagger.hilt.android.AndroidEntryPoint
/**
* Created by AhmedEltaher
*/
@AndroidEntryPoint
class RecipesListActivity : BaseActivity() {
private lateinit var binding: HomeActivityBinding
@Inject
lateinit var recipesListViewModel: RecipesListViewModel
@Inject
lateinit var viewModelFactory: ViewModelFactory
private val recipesListViewModel: RecipesListViewModel by viewModels()
private lateinit var recipesAdapter: RecipesAdapter
override fun initViewBinding() {
@@ -47,10 +43,6 @@ class RecipesListActivity : BaseActivity() {
setContentView(view)
}
override fun initializeViewModel() {
recipesListViewModel = viewModelFactory.create(RecipesListViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar?.title = getString(R.string.recipe)

View File

@@ -11,6 +11,7 @@ import com.task.data.dto.recipes.RecipesItem
import com.task.ui.base.BaseViewModel
import com.task.utils.SingleEvent
import com.task.utils.wrapEspressoIdlingResource
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import java.util.Locale.ROOT
@@ -19,7 +20,7 @@ import javax.inject.Inject
/**
* Created by AhmedEltaher
*/
@HiltViewModel
class RecipesListViewModel @Inject
constructor(private val dataRepositoryRepository: DataRepositorySource) : BaseViewModel() {

View File

@@ -3,23 +3,20 @@ package com.task.ui.component.splash
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import androidx.activity.viewModels
import com.task.databinding.SplashLayoutBinding
import com.task.ui.ViewModelFactory
import com.task.ui.base.BaseActivity
import com.task.ui.component.login.LoginActivity
import com.task.SPLASH_DELAY
import javax.inject.Inject
import dagger.hilt.android.AndroidEntryPoint
/**
* Created by AhmedEltaher
*/
@AndroidEntryPoint
class SplashActivity : BaseActivity(){
@Inject
lateinit var viewModelFactory: ViewModelFactory
@Inject
lateinit var splashViewModel: SplashViewModel
private val splashViewModel: SplashViewModel by viewModels()
private lateinit var binding: SplashLayoutBinding
@@ -29,17 +26,12 @@ class SplashActivity : BaseActivity(){
setContentView(view)
}
override fun initializeViewModel() {
splashViewModel = viewModelFactory.create(splashViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
navigateToMainScreen()
}
override fun observeViewModel() {
}
private fun navigateToMainScreen() {

View File

@@ -1,10 +1,11 @@
package com.task.ui.component.splash
import com.task.ui.base.BaseViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
/**
* Created by AhmedEltaher
*/
@HiltViewModel
class SplashViewModel @Inject constructor() : BaseViewModel()

View File

@@ -1,6 +1,6 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.4.10'
ext.kotlin_version = '1.4.21'
repositories {
google()
jcenter()
@@ -9,12 +9,12 @@ buildscript {
maven { url "https://maven.google.com" }
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.android.tools.build:gradle:4.1.2'
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.31.2-alpha'
classpath 'com.google.dagger:hilt-android-gradle-plugin:<version>'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:4.3.3'
classpath 'com.google.gms:google-services:4.3.4'
classpath 'com.android.support.test.espresso:espresso-idling-resource:3.0.2'
}
}
@@ -37,13 +37,13 @@ ext {
// Sdk and tools
// Support library and architecture components support minSdk 14 and above.
minSdkVersion = 21
targetSdkVersion = 29
compileSdkVersion = 29
targetSdkVersion = 30
compileSdkVersion = 30
junitVersion = '5.6.2'
junitRunnerVersion = '1.6.2'
junitVersion = '5.7.0'
junitRunnerVersion = '1.7.0'
androidXJunitVersion = '1.1.2'
assertjVersion = '3.16.1'
assertjVersion = '3.19.0'
coreTestingVersion = '2.1.0'
espressoIntentsVersion = '3.3.0'
espressoCoreVersion = '3.3.0'
@@ -51,32 +51,32 @@ ext {
runnerVersion = '1.3.0'
espressoVersion = '3.3.0'
coreTestingVersion = '2.1.0'
coroutinesTestVersion = '1.3.2'
coroutinesTestVersion = '1.4.2-native-mt'
recyclerviewVersion = '1.1.0'
appcompatVersion='1.2.0'
materialVersion='1.3.0-alpha02'
coreKtxVersion='1.3.0'
materialVersion= '1.3.0-rc01'
coreKtxVersion= '1.3.2'
coordinatorLayoutVersion='1.1.0'
constraintLayoutVersion='2.0.1'
constraintLayoutVersion= '2.0.4'
cardViewVersion='1.0.0'
activityVersion='1.2.0-alpha08'
activityKtxVersion='1.2.0-alpha05'
daggerVersion = '2.28.3'
activityVersion= '1.2.0-rc01'
activityKtxVersion= '1.2.0-rc01'
daggerVersion = '2.31.2'
retrofitVersion = '2.9.0'
moshiVersion = '1.9.3'
okhttpVersion = '4.8.1'
okhttpInterceptorVersion ='4.8.1'
moshiVersion = '1.11.0'
okhttpVersion = '4.9.0'
okhttpInterceptorVersion = '4.9.0'
multiDexVersion = '2.0.1'
picassoVersion = '2.71828'
mockVersion = '1.10.0'
mockVersion = '1.10.5'
coroutinesCoreVersion ='1.3.4'
coroutinesCoreCommonVersion = '1.3.7'
lifecycleExtensionsVersion ='2.2.0'
lifecycleKTXVersion = '2.3.0-alpha04'
coroutinesCoreVersion ='1.3.4'
coroutinesCommonVersion = '1.3.7'
coroutinesCoreVersion = '1.4.2-native-mt'
coroutinesCommonVersion = '1.3.8'
lifecycleExtensionsVersion ='2.2.0'
lifecycleKTXVersion = '2.3.0-alpha04'
kotlinVersion ='1.4.0'
lifecycleKTXVersion = '2.3.0-rc01'
kotlinVersion = '1.4.21'
annotationVersion ='1.1.0'
}

View File

@@ -1,6 +1,6 @@
#Sat Sep 26 20:38:20 CEST 2020
#Mon Jan 25 23:44:31 CET 2021
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip