diff --git a/app/build.gradle b/app/build.gradle index f56d86fe..affb4e8d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,6 +20,10 @@ apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' android { + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } compileSdkVersion rootProject.compileSdkVersion defaultConfig { applicationId "com.example.android.codelabs.paging" @@ -39,18 +43,17 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" - implementation "com.android.support:appcompat-v7:$supportLibVersion" - implementation "com.android.support.constraint:constraint-layout:$constraintLayoutVersion" - implementation "com.android.support:design:$supportLibVersion" + implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "androidx.appcompat:appcompat:$appCompat" + implementation "androidx.constraintlayout:constraintlayout:$constraintLayoutVersion" + implementation "com.google.android.material:material:$design" // architecture components - implementation "android.arch.lifecycle:extensions:$archComponentsVersion" - implementation "android.arch.lifecycle:runtime:$archComponentsVersion" - implementation "android.arch.persistence.room:runtime:$roomVersion" - implementation "android.arch.paging:runtime:$pagingVersion" - kapt "android.arch.lifecycle:compiler:$archComponentsVersion" - kapt "android.arch.persistence.room:compiler:$roomVersion" + implementation "androidx.paging:paging-runtime:$pagingVersion" + kapt "androidx.room:room-compiler:$roomVersion" + implementation "androidx.room:room-runtime:$roomVersion" + implementation "androidx.lifecycle:lifecycle-extensions:$archComponentsVersion" + implementation "androidx.lifecycle:lifecycle-common-java8:$archComponentsVersion" // retrofit implementation "com.squareup.retrofit2:retrofit:$retrofitVersion" @@ -60,6 +63,6 @@ dependencies { // testing testImplementation "junit:junit:$junitVersion" - androidTestImplementation "com.android.support.test:runner:$runnerVersion" - androidTestImplementation "com.android.support.test.espresso:espresso-core:$espressoVersion" + androidTestImplementation "androidx.test:runner:$runnerVersion" + androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion" } diff --git a/app/src/main/java/com/example/android/codelabs/paging/Injection.kt b/app/src/main/java/com/example/android/codelabs/paging/Injection.kt index 64eb8232..232767af 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/Injection.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/Injection.kt @@ -16,8 +16,8 @@ package com.example.android.codelabs.paging -import android.arch.lifecycle.ViewModelProvider import android.content.Context +import androidx.lifecycle.ViewModelProvider import com.example.android.codelabs.paging.api.GithubService import com.example.android.codelabs.paging.data.GithubRepository import com.example.android.codelabs.paging.db.GithubLocalCache diff --git a/app/src/main/java/com/example/android/codelabs/paging/data/GithubRepository.kt b/app/src/main/java/com/example/android/codelabs/paging/data/GithubRepository.kt index 267f3fcb..d7b6ab62 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/data/GithubRepository.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/data/GithubRepository.kt @@ -16,10 +16,9 @@ package com.example.android.codelabs.paging.data -import android.arch.lifecycle.MutableLiveData import android.util.Log +import androidx.paging.LivePagedListBuilder import com.example.android.codelabs.paging.api.GithubService -import com.example.android.codelabs.paging.api.searchRepos import com.example.android.codelabs.paging.db.GithubLocalCache import com.example.android.codelabs.paging.model.RepoSearchResult @@ -31,49 +30,31 @@ class GithubRepository( private val cache: GithubLocalCache ) { - // keep the last requested page. When the request is successful, increment the page number. - private var lastRequestedPage = 1 - - // LiveData of network errors. - private val networkErrors = MutableLiveData() - - // avoid triggering multiple requests in the same time - private var isRequestInProgress = false - /** * Search repositories whose names match the query. */ fun search(query: String): RepoSearchResult { Log.d("GithubRepository", "New query: $query") - lastRequestedPage = 1 - requestAndSaveData(query) - - // Get data from the local cache - val data = cache.reposByName(query) - return RepoSearchResult(data, networkErrors) - } + // Get data source factory from the local cache + val dataSourceFactory = cache.reposByName(query) - fun requestMore(query: String) { - requestAndSaveData(query) - } + // every new query creates a new BoundaryCallback + // The BoundaryCallback will observe when the user reaches to the edges of + // the list and update the database with extra data + val boundaryCallback = RepoBoundaryCallback(query, service, cache) + val networkErrors = boundaryCallback.networkErrors - private fun requestAndSaveData(query: String) { - if (isRequestInProgress) return + // Get the paged list + val data = LivePagedListBuilder(dataSourceFactory, DATABASE_PAGE_SIZE) + .setBoundaryCallback(boundaryCallback) + .build() - isRequestInProgress = true - searchRepos(service, query, lastRequestedPage, NETWORK_PAGE_SIZE, { repos -> - cache.insert(repos, { - lastRequestedPage++ - isRequestInProgress = false - }) - }, { error -> - networkErrors.postValue(error) - isRequestInProgress = false - }) + // Get the network errors exposed by the boundary callback + return RepoSearchResult(data, networkErrors) } companion object { - private const val NETWORK_PAGE_SIZE = 50 + private const val DATABASE_PAGE_SIZE = 20 } } \ No newline at end of file diff --git a/app/src/main/java/com/example/android/codelabs/paging/data/RepoBoundaryCallback.kt b/app/src/main/java/com/example/android/codelabs/paging/data/RepoBoundaryCallback.kt new file mode 100644 index 00000000..666b284e --- /dev/null +++ b/app/src/main/java/com/example/android/codelabs/paging/data/RepoBoundaryCallback.kt @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * 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 + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.codelabs.paging.data + +import android.util.Log +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.paging.PagedList +import com.example.android.codelabs.paging.api.GithubService +import com.example.android.codelabs.paging.api.searchRepos +import com.example.android.codelabs.paging.db.GithubLocalCache +import com.example.android.codelabs.paging.model.Repo + +/** + * This boundary callback gets notified when user reaches to the edges of the list for example when + * the database cannot provide any more data. + **/ +class RepoBoundaryCallback( + private val query: String, + private val service: GithubService, + private val cache: GithubLocalCache +) : PagedList.BoundaryCallback() { + + companion object { + private const val NETWORK_PAGE_SIZE = 50 + } + + // keep the last requested page. When the request is successful, increment the page number. + private var lastRequestedPage = 1 + + private val _networkErrors = MutableLiveData() + // LiveData of network errors. + val networkErrors: LiveData + get() = _networkErrors + + // avoid triggering multiple requests in the same time + private var isRequestInProgress = false + + /** + * Database returned 0 items. We should query the backend for more items. + */ + override fun onZeroItemsLoaded() { + Log.d("RepoBoundaryCallback", "onZeroItemsLoaded") + requestAndSaveData(query) + } + + /** + * When all items in the database were loaded, we need to query the backend for more items. + */ + override fun onItemAtEndLoaded(itemAtEnd: Repo) { + Log.d("RepoBoundaryCallback", "onItemAtEndLoaded") + requestAndSaveData(query) + } + + private fun requestAndSaveData(query: String) { + if (isRequestInProgress) return + + isRequestInProgress = true + searchRepos(service, query, lastRequestedPage, NETWORK_PAGE_SIZE, { repos -> + cache.insert(repos, { + lastRequestedPage++ + isRequestInProgress = false + }) + }, { error -> + _networkErrors.postValue(error) + isRequestInProgress = false + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/android/codelabs/paging/db/GithubLocalCache.kt b/app/src/main/java/com/example/android/codelabs/paging/db/GithubLocalCache.kt index a014fd2f..963765d9 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/db/GithubLocalCache.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/db/GithubLocalCache.kt @@ -16,9 +16,8 @@ package com.example.android.codelabs.paging.db -import android.arch.lifecycle.LiveData -import android.arch.paging.DataSource import android.util.Log +import androidx.paging.DataSource import com.example.android.codelabs.paging.model.Repo import java.util.concurrent.Executor @@ -34,7 +33,7 @@ class GithubLocalCache( /** * Insert a list of repos in the database, on a background thread. */ - fun insert(repos: List, insertFinished: ()-> Unit) { + fun insert(repos: List, insertFinished: () -> Unit) { ioExecutor.execute { Log.d("GithubLocalCache", "inserting ${repos.size} repos") repoDao.insert(repos) @@ -48,7 +47,7 @@ class GithubLocalCache( * any characters between the words. * @param name repository name */ - fun reposByName(name: String): LiveData> { + fun reposByName(name: String): DataSource.Factory { // appending '%' so we can allow other characters to be before and after the query string val query = "%${name.replace(' ', '%')}%" return repoDao.reposByName(query) diff --git a/app/src/main/java/com/example/android/codelabs/paging/db/RepoDao.kt b/app/src/main/java/com/example/android/codelabs/paging/db/RepoDao.kt index f5a371f7..fc63ac42 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/db/RepoDao.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/db/RepoDao.kt @@ -16,11 +16,11 @@ package com.example.android.codelabs.paging.db -import android.arch.lifecycle.LiveData -import android.arch.persistence.room.Dao -import android.arch.persistence.room.Insert -import android.arch.persistence.room.OnConflictStrategy -import android.arch.persistence.room.Query +import androidx.paging.DataSource +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query import com.example.android.codelabs.paging.model.Repo /** @@ -37,6 +37,6 @@ interface RepoDao { // and order those results descending, by the number of stars and then by name @Query("SELECT * FROM repos WHERE (name LIKE :queryString) OR (description LIKE " + ":queryString) ORDER BY stars DESC, name ASC") - fun reposByName(queryString: String): LiveData> + fun reposByName(queryString: String): DataSource.Factory } \ No newline at end of file diff --git a/app/src/main/java/com/example/android/codelabs/paging/db/RepoDatabase.kt b/app/src/main/java/com/example/android/codelabs/paging/db/RepoDatabase.kt index b15bf798..096054e0 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/db/RepoDatabase.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/db/RepoDatabase.kt @@ -16,10 +16,10 @@ package com.example.android.codelabs.paging.db -import android.arch.persistence.room.Database -import android.arch.persistence.room.Room -import android.arch.persistence.room.RoomDatabase import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase import com.example.android.codelabs.paging.model.Repo /** diff --git a/app/src/main/java/com/example/android/codelabs/paging/model/Repo.kt b/app/src/main/java/com/example/android/codelabs/paging/model/Repo.kt index 88691aa7..ac301924 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/model/Repo.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/model/Repo.kt @@ -16,8 +16,8 @@ package com.example.android.codelabs.paging.model -import android.arch.persistence.room.Entity -import android.arch.persistence.room.PrimaryKey +import androidx.room.Entity +import androidx.room.PrimaryKey import com.google.gson.annotations.SerializedName /** diff --git a/app/src/main/java/com/example/android/codelabs/paging/model/RepoSearchResult.kt b/app/src/main/java/com/example/android/codelabs/paging/model/RepoSearchResult.kt index 3654fb5e..0a8d021e 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/model/RepoSearchResult.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/model/RepoSearchResult.kt @@ -16,13 +16,14 @@ package com.example.android.codelabs.paging.model -import android.arch.lifecycle.LiveData +import androidx.lifecycle.LiveData +import androidx.paging.PagedList /** * RepoSearchResult from a search, which contains LiveData> holding query data, * and a LiveData of network error state. */ data class RepoSearchResult( - val data: LiveData>, + val data: LiveData>, val networkErrors: LiveData ) \ No newline at end of file diff --git a/app/src/main/java/com/example/android/codelabs/paging/ui/RepoViewHolder.kt b/app/src/main/java/com/example/android/codelabs/paging/ui/RepoViewHolder.kt index 861698c5..3dc584cf 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/ui/RepoViewHolder.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/ui/RepoViewHolder.kt @@ -18,11 +18,11 @@ package com.example.android.codelabs.paging.ui import android.content.Intent import android.net.Uri -import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView import com.example.android.codelabs.paging.R import com.example.android.codelabs.paging.model.Repo diff --git a/app/src/main/java/com/example/android/codelabs/paging/ui/ReposAdapter.kt b/app/src/main/java/com/example/android/codelabs/paging/ui/ReposAdapter.kt index 5c23d30b..660dd87a 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/ui/ReposAdapter.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/ui/ReposAdapter.kt @@ -16,16 +16,16 @@ package com.example.android.codelabs.paging.ui -import android.support.v7.recyclerview.extensions.ListAdapter -import android.support.v7.util.DiffUtil -import android.support.v7.widget.RecyclerView import android.view.ViewGroup +import androidx.paging.PagedListAdapter +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.RecyclerView import com.example.android.codelabs.paging.model.Repo /** * Adapter for the list of repositories. */ -class ReposAdapter : ListAdapter(REPO_COMPARATOR) { +class ReposAdapter : PagedListAdapter(REPO_COMPARATOR) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return RepoViewHolder.create(parent) diff --git a/app/src/main/java/com/example/android/codelabs/paging/ui/SearchRepositoriesActivity.kt b/app/src/main/java/com/example/android/codelabs/paging/ui/SearchRepositoriesActivity.kt index 097b145b..8d2cde51 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/ui/SearchRepositoriesActivity.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/ui/SearchRepositoriesActivity.kt @@ -16,23 +16,24 @@ package com.example.android.codelabs.paging.ui -import android.arch.lifecycle.Observer -import android.arch.lifecycle.ViewModelProviders import android.os.Bundle -import android.support.v7.app.AppCompatActivity -import android.support.v7.widget.DividerItemDecoration -import android.support.v7.widget.LinearLayoutManager -import android.support.v7.widget.RecyclerView import android.util.Log import android.view.KeyEvent import android.view.View import android.view.inputmethod.EditorInfo import android.widget.Toast -import com.example.android.codelabs.paging.R +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProviders +import androidx.paging.PagedList +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.RecyclerView import com.example.android.codelabs.paging.Injection +import com.example.android.codelabs.paging.R import com.example.android.codelabs.paging.model.Repo -import kotlinx.android.synthetic.main.activity_search_repositories.* - +import kotlinx.android.synthetic.main.activity_search_repositories.emptyList +import kotlinx.android.synthetic.main.activity_search_repositories.list +import kotlinx.android.synthetic.main.activity_search_repositories.search_repo class SearchRepositoriesActivity : AppCompatActivity() { @@ -50,7 +51,6 @@ class SearchRepositoriesActivity : AppCompatActivity() { // add dividers between RecyclerView's row items val decoration = DividerItemDecoration(this, DividerItemDecoration.VERTICAL) list.addItemDecoration(decoration) - setupScrollListener() initAdapter() val query = savedInstanceState?.getString(LAST_SEARCH_QUERY) ?: DEFAULT_QUERY @@ -65,7 +65,7 @@ class SearchRepositoriesActivity : AppCompatActivity() { private fun initAdapter() { list.adapter = adapter - viewModel.repos.observe(this, Observer> { + viewModel.repos.observe(this, Observer> { Log.d("Activity", "list: ${it?.size}") showEmptyList(it?.size == 0) adapter.submitList(it) @@ -99,7 +99,7 @@ class SearchRepositoriesActivity : AppCompatActivity() { private fun updateRepoListFromInput() { search_repo.text.trim().let { if (it.isNotEmpty()) { - list.scrollToPosition(0) + (list as RecyclerView).scrollToPosition(0) viewModel.searchRepo(it.toString()) adapter.submitList(null) } @@ -116,20 +116,6 @@ class SearchRepositoriesActivity : AppCompatActivity() { } } - private fun setupScrollListener() { - val layoutManager = list.layoutManager as LinearLayoutManager - list.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - val totalItemCount = layoutManager.itemCount - val visibleItemCount = layoutManager.childCount - val lastVisibleItem = layoutManager.findLastVisibleItemPosition() - - viewModel.listScrolled(visibleItemCount, lastVisibleItem, totalItemCount) - } - }) - } - companion object { private const val LAST_SEARCH_QUERY: String = "last_search_query" private const val DEFAULT_QUERY = "Android" diff --git a/app/src/main/java/com/example/android/codelabs/paging/ui/SearchRepositoriesViewModel.kt b/app/src/main/java/com/example/android/codelabs/paging/ui/SearchRepositoriesViewModel.kt index 29c380df..c408d646 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/ui/SearchRepositoriesViewModel.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/ui/SearchRepositoriesViewModel.kt @@ -16,10 +16,11 @@ package com.example.android.codelabs.paging.ui -import android.arch.lifecycle.LiveData -import android.arch.lifecycle.MutableLiveData -import android.arch.lifecycle.Transformations -import android.arch.lifecycle.ViewModel +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.Transformations +import androidx.lifecycle.ViewModel +import androidx.paging.PagedList import com.example.android.codelabs.paging.data.GithubRepository import com.example.android.codelabs.paging.model.Repo import com.example.android.codelabs.paging.model.RepoSearchResult @@ -30,16 +31,12 @@ import com.example.android.codelabs.paging.model.RepoSearchResult */ class SearchRepositoriesViewModel(private val repository: GithubRepository) : ViewModel() { - companion object { - private const val VISIBLE_THRESHOLD = 5 - } - private val queryLiveData = MutableLiveData() private val repoResult: LiveData = Transformations.map(queryLiveData, { repository.search(it) }) - val repos: LiveData> = Transformations.switchMap(repoResult, + val repos: LiveData> = Transformations.switchMap(repoResult, { it -> it.data }) val networkErrors: LiveData = Transformations.switchMap(repoResult, { it -> it.networkErrors }) @@ -51,15 +48,6 @@ class SearchRepositoriesViewModel(private val repository: GithubRepository) : Vi queryLiveData.postValue(queryString) } - fun listScrolled(visibleItemCount: Int, lastVisibleItemPosition: Int, totalItemCount: Int) { - if (visibleItemCount + lastVisibleItemPosition + VISIBLE_THRESHOLD >= totalItemCount) { - val immutableQuery = lastQueryValue() - if (immutableQuery != null) { - repository.requestMore(immutableQuery) - } - } - } - /** * Get the last query value. */ diff --git a/app/src/main/java/com/example/android/codelabs/paging/ui/ViewModelFactory.kt b/app/src/main/java/com/example/android/codelabs/paging/ui/ViewModelFactory.kt index 2f94d1d3..470381ed 100644 --- a/app/src/main/java/com/example/android/codelabs/paging/ui/ViewModelFactory.kt +++ b/app/src/main/java/com/example/android/codelabs/paging/ui/ViewModelFactory.kt @@ -16,8 +16,8 @@ package com.example.android.codelabs.paging.ui -import android.arch.lifecycle.ViewModel -import android.arch.lifecycle.ViewModelProvider +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider import com.example.android.codelabs.paging.data.GithubRepository /** diff --git a/app/src/main/res/layout/activity_search_repositories.xml b/app/src/main/res/layout/activity_search_repositories.xml index 3702486e..d7095a05 100644 --- a/app/src/main/res/layout/activity_search_repositories.xml +++ b/app/src/main/res/layout/activity_search_repositories.xml @@ -15,14 +15,14 @@ ~ limitations under the License. --> - - - + - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/repo_view_item.xml b/app/src/main/res/layout/repo_view_item.xml index e1a21e4f..0e9ad64d 100644 --- a/app/src/main/res/layout/repo_view_item.xml +++ b/app/src/main/res/layout/repo_view_item.xml @@ -15,7 +15,7 @@ ~ limitations under the License. --> - - \ No newline at end of file + \ No newline at end of file diff --git a/build.gradle b/build.gradle index c1e025c2..cee39b3b 100644 --- a/build.gradle +++ b/build.gradle @@ -17,13 +17,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.2.21' + ext.kotlin_version = '1.2.61' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.2.0-alpha09' + classpath 'com.android.tools.build:gradle:3.3.0-alpha08' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong @@ -43,19 +43,21 @@ task clean(type: Delete) { } ext { - compileSdkVersion = 27 + compileSdkVersion = 28 minSdkVersion = 15 - targetSdkVersion = 27 - supportLibVersion = "27.1.0" - constraintLayoutVersion = "1.0.2" - archComponentsVersion = "1.1.1" - roomVersion = "1.1.0-beta1" - pagingVersion = "1.0.0-beta1" - retrofitVersion = "2.3.0" - okhttpLoggingInterceptorVersion = "3.9.0" + targetSdkVersion = 28 + appCompat = "1.0.0-beta01" + constraintLayoutVersion = "1.1.2" + design = "1.0.0-beta01" + pagingVersion = "2.0.0-beta01" + roomVersion = "2.0.0-beta01" + archComponentsVersion = "2.0.0-beta01" + + runnerVersion = "1.1.0-alpha1" + espressoVersion = "3.1.0-alpha1" - runnerVersion = "1.0.1" - rulesVersion = "1.0.1" junitVersion = "4.12" - espressoVersion = "3.0.1" -} \ No newline at end of file + + retrofitVersion = "2.3.0" + okhttpLoggingInterceptorVersion = "3.9.0" +} diff --git a/gradle.properties b/gradle.properties index 743d692c..2de2ee23 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,3 +11,6 @@ org.gradle.jvmargs=-Xmx1536m # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true + +android.useAndroidX=true +android.enableJetifier=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 46c2a7bf..9e9e6c81 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Apr 04 14:02:03 BST 2018 +#Mon Jul 16 10:15:28 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip