From 21e4d78c95b846cb7c6719f9e34ce704562262ce Mon Sep 17 00:00:00 2001 From: Florina Muntenescu Date: Sat, 14 Apr 2018 14:46:35 +0100 Subject: [PATCH 1/9] Paging codelab - solution --- .../codelabs/paging/data/GithubRepository.kt | 49 ++++------- .../paging/data/RepoBoundaryCallback.kt | 83 +++++++++++++++++++ .../codelabs/paging/db/GithubLocalCache.kt | 5 +- .../android/codelabs/paging/db/RepoDao.kt | 4 +- .../codelabs/paging/model/RepoSearchResult.kt | 3 +- .../codelabs/paging/ui/ReposAdapter.kt | 4 +- .../paging/ui/SearchRepositoriesActivity.kt | 18 +--- .../paging/ui/SearchRepositoriesViewModel.kt | 16 +--- 8 files changed, 110 insertions(+), 72 deletions(-) create mode 100644 app/src/main/java/com/example/android/codelabs/paging/data/RepoBoundaryCallback.kt 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..b01973a4 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.arch.paging.LivePagedListBuilder import android.util.Log 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..7db1cc80 --- /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.arch.lifecycle.LiveData +import android.arch.lifecycle.MutableLiveData +import android.arch.paging.PagedList +import android.util.Log +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..b4fd025f 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,7 +16,6 @@ package com.example.android.codelabs.paging.db -import android.arch.lifecycle.LiveData import android.arch.paging.DataSource import android.util.Log import com.example.android.codelabs.paging.model.Repo @@ -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..a9a1fa66 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,7 +16,7 @@ package com.example.android.codelabs.paging.db -import android.arch.lifecycle.LiveData +import android.arch.paging.DataSource import android.arch.persistence.room.Dao import android.arch.persistence.room.Insert import android.arch.persistence.room.OnConflictStrategy @@ -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/model/RepoSearchResult.kt b/app/src/main/java/com/example/android/codelabs/paging/model/RepoSearchResult.kt index 3654fb5e..32c31b77 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 @@ -17,12 +17,13 @@ package com.example.android.codelabs.paging.model import android.arch.lifecycle.LiveData +import android.arch.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/ReposAdapter.kt b/app/src/main/java/com/example/android/codelabs/paging/ui/ReposAdapter.kt index 5c23d30b..81f60e2a 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,7 +16,7 @@ package com.example.android.codelabs.paging.ui -import android.support.v7.recyclerview.extensions.ListAdapter +import android.arch.paging.PagedListAdapter import android.support.v7.util.DiffUtil import android.support.v7.widget.RecyclerView import android.view.ViewGroup @@ -25,7 +25,7 @@ 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..e6eb00af 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 @@ -18,6 +18,7 @@ package com.example.android.codelabs.paging.ui import android.arch.lifecycle.Observer import android.arch.lifecycle.ViewModelProviders +import android.arch.paging.PagedList import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.support.v7.widget.DividerItemDecoration @@ -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) @@ -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..72cfe533 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 @@ -20,6 +20,7 @@ import android.arch.lifecycle.LiveData import android.arch.lifecycle.MutableLiveData import android.arch.lifecycle.Transformations import android.arch.lifecycle.ViewModel +import android.arch.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. */ From fa7e77e9c8f2a4dcfcb895d9e504ad19828c7602 Mon Sep 17 00:00:00 2001 From: XinyueZ Date: Mon, 16 Jul 2018 10:21:57 +0200 Subject: [PATCH 2/9] Update to jetpack(androidx) --- app/build.gradle | 23 +++++++++--------- build.gradle | 30 +++++++++++++----------- gradle.properties | 3 +++ gradle/wrapper/gradle-wrapper.properties | 4 ++-- 4 files changed, 32 insertions(+), 28 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f56d86fe..8d88eab0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,18 +39,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 +59,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/build.gradle b/build.gradle index c1e025c2..b2fd6864 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.51' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.2.0-alpha09' + classpath 'com.android.tools.build:gradle:3.3.0-alpha03' 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-beta011" + 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" + + retrofitVersion = "2.3.0" + okhttpLoggingInterceptorVersion = "3.9.0" } \ No newline at end of file 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..63a22cf0 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-rc-1-all.zip From f123383b1bc0a51d5beef14b8176f7b00268aced Mon Sep 17 00:00:00 2001 From: XinyueZ Date: Mon, 16 Jul 2018 10:59:24 +0200 Subject: [PATCH 3/9] Update layout and k-files for jetpack-upgrade --- .../android/codelabs/paging/Injection.kt | 2 +- .../codelabs/paging/data/GithubRepository.kt | 2 +- .../paging/data/RepoBoundaryCallback.kt | 6 ++--- .../codelabs/paging/db/GithubLocalCache.kt | 2 +- .../android/codelabs/paging/db/RepoDao.kt | 10 ++++----- .../codelabs/paging/db/RepoDatabase.kt | 6 ++--- .../android/codelabs/paging/model/Repo.kt | 4 ++-- .../codelabs/paging/model/RepoSearchResult.kt | 4 ++-- .../codelabs/paging/ui/RepoViewHolder.kt | 2 +- .../codelabs/paging/ui/ReposAdapter.kt | 6 ++--- .../paging/ui/SearchRepositoriesActivity.kt | 22 +++++++++---------- .../paging/ui/SearchRepositoriesViewModel.kt | 10 ++++----- .../codelabs/paging/ui/ViewModelFactory.kt | 4 ++-- .../layout/activity_search_repositories.xml | 12 +++++----- app/src/main/res/layout/repo_view_item.xml | 4 ++-- 15 files changed, 48 insertions(+), 48 deletions(-) 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 b01973a4..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,8 +16,8 @@ package com.example.android.codelabs.paging.data -import android.arch.paging.LivePagedListBuilder import android.util.Log +import androidx.paging.LivePagedListBuilder import com.example.android.codelabs.paging.api.GithubService import com.example.android.codelabs.paging.db.GithubLocalCache import com.example.android.codelabs.paging.model.RepoSearchResult 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 index 7db1cc80..666b284e 100644 --- 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 @@ -16,10 +16,10 @@ package com.example.android.codelabs.paging.data -import android.arch.lifecycle.LiveData -import android.arch.lifecycle.MutableLiveData -import android.arch.paging.PagedList 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 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 b4fd025f..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,8 +16,8 @@ package com.example.android.codelabs.paging.db -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 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 a9a1fa66..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.paging.DataSource -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 /** 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 32c31b77..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,8 +16,8 @@ package com.example.android.codelabs.paging.model -import android.arch.lifecycle.LiveData -import android.arch.paging.PagedList +import androidx.lifecycle.LiveData +import androidx.paging.PagedList /** * RepoSearchResult from a search, which contains LiveData> holding query data, 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 81f60e2a..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,10 +16,10 @@ package com.example.android.codelabs.paging.ui -import android.arch.paging.PagedListAdapter -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 /** 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 e6eb00af..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,24 +16,24 @@ package com.example.android.codelabs.paging.ui -import android.arch.lifecycle.Observer -import android.arch.lifecycle.ViewModelProviders -import android.arch.paging.PagedList 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() { @@ -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) } 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 72cfe533..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,11 +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 android.arch.paging.PagedList +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 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 From ad7df9da3f434ae339540e26ca82d94f177b14be Mon Sep 17 00:00:00 2001 From: XinyueZ Date: Mon, 16 Jul 2018 10:59:40 +0200 Subject: [PATCH 4/9] Correct appCompat version and add compileOptions --- app/build.gradle | 4 ++++ build.gradle | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 8d88eab0..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" diff --git a/build.gradle b/build.gradle index b2fd6864..fccd147e 100644 --- a/build.gradle +++ b/build.gradle @@ -46,7 +46,7 @@ ext { compileSdkVersion = 28 minSdkVersion = 15 targetSdkVersion = 28 - appCompat = "1.0.0-beta011" + appCompat = "1.0.0-beta01" constraintLayoutVersion = "1.1.2" design = "1.0.0-beta01" pagingVersion = "2.0.0-beta01" From 7eafdeec6f307c9e44dec6f33ebb081f38652c5f Mon Sep 17 00:00:00 2001 From: ChrisDEV Date: Sun, 5 Aug 2018 14:46:23 +0200 Subject: [PATCH 5/9] Update build.gradle --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index fccd147e..0dd93525 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.51' + ext.kotlin_version = '1.2.60' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0-alpha03' + classpath 'com.android.tools.build:gradle:3.3.0-alpha04' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong @@ -60,4 +60,4 @@ ext { retrofitVersion = "2.3.0" okhttpLoggingInterceptorVersion = "3.9.0" -} \ No newline at end of file +} From f1832800b2769f5459b57ea02f65791dcf76c1a1 Mon Sep 17 00:00:00 2001 From: ChrisDEV Date: Sun, 5 Aug 2018 14:47:04 +0200 Subject: [PATCH 6/9] Update gradle-wrapper.properties --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 63a22cf0..9e9e6c81 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-rc-1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip From 7fae980ad848137be89c7deea31f2a8183541346 Mon Sep 17 00:00:00 2001 From: ChrisDEV Date: Wed, 8 Aug 2018 09:58:48 +0200 Subject: [PATCH 7/9] Update build.gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0dd93525..e594212c 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0-alpha04' + classpath 'com.android.tools.build:gradle:3.3.0-alpha05' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong From 9455e15be6a343f9971fdb1872eb185fbf35a755 Mon Sep 17 00:00:00 2001 From: ChrisDEV Date: Mon, 20 Aug 2018 15:54:05 +0200 Subject: [PATCH 8/9] Update build.gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e594212c..2aeef53a 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0-alpha05' + classpath 'com.android.tools.build:gradle:3.3.0-alpha06' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong From 10a467084591e5302ba85463b6e33a77afcf94da Mon Sep 17 00:00:00 2001 From: ChrisDEV Date: Mon, 3 Sep 2018 15:39:32 +0200 Subject: [PATCH 9/9] Update build.gradle --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 2aeef53a..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.60' + ext.kotlin_version = '1.2.61' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0-alpha06' + 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