From e175b3256904cbb37470bd4f853dec6c3233fb09 Mon Sep 17 00:00:00 2001 From: Dustin Lam Date: Fri, 5 Feb 2021 11:06:26 -0800 Subject: [PATCH 1/8] Bump gradle to 6.7.1 and paging to alpha13 --- .../gradle/wrapper/gradle-wrapper.properties | 2 +- BasicRxJavaSample/versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- BasicRxJavaSampleKotlin/versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- BasicSample/versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- GithubBrowserSample/versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- LiveDataSample/versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- MADSkillsNavigationSample/versions.gradle | 226 ------------------ .../gradle/wrapper/gradle-wrapper.properties | 2 +- NavigationAdvancedSample/versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- NavigationBasicSample/versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- PagingSample/versions.gradle | 2 +- .../byItem/ItemKeyedSubredditPagingSource.kt | 22 +- .../byPage/PageKeyedSubredditPagingSource.kt | 11 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- PagingWithNetworkSample/versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- PersistenceMigrationsSample/versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- ViewBindingSample/versions.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- WorkManagerSample/versions.gradle | 4 +- gradle-wrapper.properties | 2 +- versions.gradle | 2 +- 32 files changed, 52 insertions(+), 267 deletions(-) delete mode 100644 MADSkillsNavigationSample/versions.gradle diff --git a/BasicRxJavaSample/gradle/wrapper/gradle-wrapper.properties b/BasicRxJavaSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/BasicRxJavaSample/gradle/wrapper/gradle-wrapper.properties +++ b/BasicRxJavaSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/BasicRxJavaSample/versions.gradle b/BasicRxJavaSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/BasicRxJavaSample/versions.gradle +++ b/BasicRxJavaSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/BasicRxJavaSampleKotlin/gradle/wrapper/gradle-wrapper.properties b/BasicRxJavaSampleKotlin/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/BasicRxJavaSampleKotlin/gradle/wrapper/gradle-wrapper.properties +++ b/BasicRxJavaSampleKotlin/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/BasicRxJavaSampleKotlin/versions.gradle b/BasicRxJavaSampleKotlin/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/BasicRxJavaSampleKotlin/versions.gradle +++ b/BasicRxJavaSampleKotlin/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/BasicSample/gradle/wrapper/gradle-wrapper.properties b/BasicSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/BasicSample/gradle/wrapper/gradle-wrapper.properties +++ b/BasicSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/BasicSample/versions.gradle b/BasicSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/BasicSample/versions.gradle +++ b/BasicSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/GithubBrowserSample/gradle/wrapper/gradle-wrapper.properties b/GithubBrowserSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/GithubBrowserSample/gradle/wrapper/gradle-wrapper.properties +++ b/GithubBrowserSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/GithubBrowserSample/versions.gradle b/GithubBrowserSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/GithubBrowserSample/versions.gradle +++ b/GithubBrowserSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/LiveDataSample/gradle/wrapper/gradle-wrapper.properties b/LiveDataSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/LiveDataSample/gradle/wrapper/gradle-wrapper.properties +++ b/LiveDataSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/LiveDataSample/versions.gradle b/LiveDataSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/LiveDataSample/versions.gradle +++ b/LiveDataSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/MADSkillsNavigationSample/gradle/wrapper/gradle-wrapper.properties b/MADSkillsNavigationSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/MADSkillsNavigationSample/gradle/wrapper/gradle-wrapper.properties +++ b/MADSkillsNavigationSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/MADSkillsNavigationSample/versions.gradle b/MADSkillsNavigationSample/versions.gradle deleted file mode 100644 index bdb88310..00000000 --- a/MADSkillsNavigationSample/versions.gradle +++ /dev/null @@ -1,226 +0,0 @@ -/* - * 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. - */ - - -/** - * Shared file between builds so that they can all use the same dependencies and - * maven repositories. - **/ -ext.deps = [:] -def versions = [:] -versions.activity = '1.1.0' -versions.android_gradle_plugin = '4.0.0' -versions.annotations = "1.0.0" -versions.apache_commons = "2.5" -versions.appcompat = "1.2.0-alpha02" -versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" -versions.benchmark = "1.1.0-alpha01" -versions.cardview = "1.0.0" -versions.constraint_layout = "2.0.0-alpha2" -versions.core_ktx = "1.1.0" -versions.coroutines = "1.4.1" -versions.dagger = "2.16" -versions.dexmaker = "2.2.0" -versions.espresso = "3.2.0" -versions.fragment = "1.2.1" -versions.glide = "4.8.0" -versions.hamcrest = "1.3" -versions.junit = "4.12" -versions.kotlin = "1.4.21" -versions.lifecycle = "2.2.0" -versions.material = "1.0.0" -versions.mockito = "2.25.0" -versions.mockito_all = "1.10.19" -versions.mockito_android = "2.25.0" -versions.mockwebserver = "3.8.1" -versions.navigation = "2.3.0-alpha01" -versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" -versions.recyclerview = "1.2.0-beta01" -versions.retrofit = "2.9.0" -versions.robolectric = "4.2" -versions.room = "2.3.0-alpha01" -versions.rx_android = "2.0.1" -versions.rxjava2 = "2.1.3" -versions.timber = "4.7.1" -versions.transition = "1.3.0" -versions.truth = "1.0.1" -versions.work = "2.4.0" -ext.versions = versions - -def build_versions = [:] -build_versions.min_sdk = 14 -build_versions.compile_sdk = 29 -build_versions.target_sdk = 29 -build_versions.build_tools = "29.0.3" -ext.build_versions = build_versions - -def deps = [:] - -def activity = [:] -activity.activity_ktx = "androidx.activity:activity-ktx:$versions.activity" -deps.activity = activity - -deps.android_gradle_plugin = "com.android.tools.build:gradle:$versions.android_gradle_plugin" - -deps.annotations = "androidx.annotation:annotation:$versions.annotations" - -deps.app_compat = "androidx.appcompat:appcompat:$versions.appcompat" - -def arch_core = [:] -arch_core.runtime = "androidx.arch.core:core-runtime:$versions.arch_core" -arch_core.testing = "androidx.arch.core:core-testing:$versions.arch_core" -deps.arch_core = arch_core - -def atsl = [:] -atsl.core = "androidx.test:core:$versions.atsl_core" -atsl.ext_junit = "androidx.test.ext:junit:$versions.atsl_junit" -atsl.runner = "androidx.test:runner:$versions.atsl_runner" -atsl.rules = "androidx.test:rules:$versions.atsl_rules" -deps.atsl = atsl - -deps.benchmark = "androidx.benchmark:benchmark-junit4:$versions.benchmark" -deps.benchmark_gradle = "androidx.benchmark:benchmark-gradle-plugin:$versions.benchmark" - -deps.cardview = "androidx.cardview:cardview:$versions.cardview" - -deps.constraint_layout = "androidx.constraintlayout:constraintlayout:$versions.constraint_layout" - -deps.core_ktx = "androidx.core:core-ktx:$versions.core_ktx" - -def coroutines = [:] -coroutines.android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$versions.coroutines" -coroutines.test = "org.jetbrains.kotlinx:kotlinx-coroutines-test:$versions.coroutines" -deps.coroutines = coroutines - -def dagger = [:] -dagger.runtime = "com.google.dagger:dagger:$versions.dagger" -dagger.android = "com.google.dagger:dagger-android:$versions.dagger" -dagger.android_support = "com.google.dagger:dagger-android-support:$versions.dagger" -dagger.compiler = "com.google.dagger:dagger-compiler:$versions.dagger" -dagger.android_support_compiler = "com.google.dagger:dagger-android-processor:$versions.dagger" -deps.dagger = dagger - -deps.dexmaker = "com.linkedin.dexmaker:dexmaker-mockito:$versions.dexmaker" - -def espresso = [:] -espresso.core = "androidx.test.espresso:espresso-core:$versions.espresso" -espresso.contrib = "androidx.test.espresso:espresso-contrib:$versions.espresso" -espresso.intents = "androidx.test.espresso:espresso-intents:$versions.espresso" -deps.espresso = espresso - -def fragment = [:] -fragment.runtime = "androidx.fragment:fragment:${versions.fragment}" -fragment.runtime_ktx = "androidx.fragment:fragment-ktx:${versions.fragment}" -fragment.testing = "androidx.fragment:fragment-testing:${versions.fragment}" -deps.fragment = fragment - -def glide = [:] -glide.runtime = "com.github.bumptech.glide:glide:$versions.glide" -glide.compiler = "com.github.bumptech.glide:compiler:$versions.glide" -deps.glide = glide - -deps.hamcrest = "org.hamcrest:hamcrest-all:$versions.hamcrest" - -deps.junit = "junit:junit:$versions.junit" - -def kotlin = [:] -kotlin.stdlib = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$versions.kotlin" -kotlin.test = "org.jetbrains.kotlin:kotlin-test-junit:$versions.kotlin" -kotlin.plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin" -kotlin.allopen = "org.jetbrains.kotlin:kotlin-allopen:$versions.kotlin" -deps.kotlin = kotlin - -def lifecycle = [:] -lifecycle.runtime = "androidx.lifecycle:lifecycle-runtime:$versions.lifecycle" -lifecycle.java8 = "androidx.lifecycle:lifecycle-common-java8:$versions.lifecycle" -lifecycle.compiler = "androidx.lifecycle:lifecycle-compiler:$versions.lifecycle" -lifecycle.viewmodel_ktx = "androidx.lifecycle:lifecycle-viewmodel-ktx:$versions.lifecycle" -lifecycle.livedata_ktx = "androidx.lifecycle:lifecycle-livedata-ktx:$versions.lifecycle" -deps.lifecycle = lifecycle - -deps.material = "com.google.android.material:material:$versions.material" - -def mockito = [:] -mockito.core = "org.mockito:mockito-core:$versions.mockito" -mockito.all = "org.mockito:mockito-all:$versions.mockito_all" -mockito.android = "org.mockito:mockito-android:$versions.mockito_android" -deps.mockito = mockito - -deps.mock_web_server = "com.squareup.okhttp3:mockwebserver:$versions.mockwebserver" - -def navigation = [:] -navigation.runtime = "androidx.navigation:navigation-runtime:$versions.navigation" -navigation.runtime_ktx = "androidx.navigation:navigation-runtime-ktx:$versions.navigation" -navigation.fragment = "androidx.navigation:navigation-fragment:$versions.navigation" -navigation.fragment_ktx = "androidx.navigation:navigation-fragment-ktx:$versions.navigation" -navigation.testing = "androidx.navigation:navigation-testing:$versions.navigation" -navigation.ui = "androidx.navigation:navigation-ui:$versions.navigation" -navigation.ui_ktx = "androidx.navigation:navigation-ui-ktx:$versions.navigation" -navigation.safe_args_plugin = "androidx.navigation:navigation-safe-args-gradle-plugin:$versions.navigation" -deps.navigation = navigation - -deps.okhttp_logging_interceptor = "com.squareup.okhttp3:logging-interceptor:${versions.okhttp_logging_interceptor}" - -deps.paging_runtime = "androidx.paging:paging-runtime:$versions.paging" - -deps.recyclerview = "androidx.recyclerview:recyclerview:$versions.recyclerview" - -def retrofit = [:] -retrofit.runtime = "com.squareup.retrofit2:retrofit:$versions.retrofit" -retrofit.gson = "com.squareup.retrofit2:converter-gson:$versions.retrofit" -retrofit.mock = "com.squareup.retrofit2:retrofit-mock:$versions.retrofit" -deps.retrofit = retrofit - -deps.robolectric = "org.robolectric:robolectric:$versions.robolectric" - -def room = [:] -room.runtime = "androidx.room:room-runtime:$versions.room" -room.compiler = "androidx.room:room-compiler:$versions.room" -room.ktx = "androidx.room:room-ktx:$versions.room" -room.rxjava2 = "androidx.room:room-rxjava2:$versions.room" -room.testing = "androidx.room:room-testing:$versions.room" -deps.room = room - -deps.rx_android = "io.reactivex.rxjava2:rxandroid:$versions.rx_android" - -deps.rxjava2 = "io.reactivex.rxjava2:rxjava:$versions.rxjava2" - -deps.timber = "com.jakewharton.timber:timber:$versions.timber" - -deps.transition = "androidx.transition:transition:$versions.transition" - -deps.truth = "com.google.truth:truth:$versions.truth" - -def work = [:] -work.runtime = "androidx.work:work-runtime:$versions.work" -work.testing = "androidx.work:work-testing:$versions.work" -work.firebase = "androidx.work:work-firebase:$versions.work" -work.runtime_ktx = "androidx.work:work-runtime-ktx:$versions.work" -deps.work = work - -ext.deps = deps - -def addRepos(RepositoryHandler handler) { - handler.google() - handler.jcenter() - handler.maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } -} -ext.addRepos = this.&addRepos diff --git a/NavigationAdvancedSample/gradle/wrapper/gradle-wrapper.properties b/NavigationAdvancedSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/NavigationAdvancedSample/gradle/wrapper/gradle-wrapper.properties +++ b/NavigationAdvancedSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/NavigationAdvancedSample/versions.gradle b/NavigationAdvancedSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/NavigationAdvancedSample/versions.gradle +++ b/NavigationAdvancedSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/NavigationBasicSample/gradle/wrapper/gradle-wrapper.properties b/NavigationBasicSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/NavigationBasicSample/gradle/wrapper/gradle-wrapper.properties +++ b/NavigationBasicSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/NavigationBasicSample/versions.gradle b/NavigationBasicSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/NavigationBasicSample/versions.gradle +++ b/NavigationBasicSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/PagingSample/gradle/wrapper/gradle-wrapper.properties b/PagingSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/PagingSample/gradle/wrapper/gradle-wrapper.properties +++ b/PagingSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/PagingSample/versions.gradle b/PagingSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/PagingSample/versions.gradle +++ b/PagingSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byItem/ItemKeyedSubredditPagingSource.kt b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byItem/ItemKeyedSubredditPagingSource.kt index c6fe4dba..d8217bd4 100644 --- a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byItem/ItemKeyedSubredditPagingSource.kt +++ b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byItem/ItemKeyedSubredditPagingSource.kt @@ -22,6 +22,7 @@ import androidx.paging.PagingSource.LoadParams.Prepend import androidx.paging.PagingSource.LoadResult.Page import androidx.paging.PagingState import com.android.example.paging.pagingwithnetwork.reddit.api.RedditApi +import com.android.example.paging.pagingwithnetwork.reddit.repository.inMemory.byPage.PageKeyedSubredditPagingSource import com.android.example.paging.pagingwithnetwork.reddit.vo.RedditPost import retrofit2.HttpException import java.io.IOException @@ -32,26 +33,25 @@ import java.io.IOException * Note that this is not the correct consumption of the Reddit API but rather shown here as an * alternative implementation which might be more suitable for your backend. * - * @see [com.android.example.paging.pagingwithnetwork.reddit.repository.inMemory.byPage.PageKeyedSubredditPagingSource] + * @see [PageKeyedSubredditPagingSource] */ class ItemKeyedSubredditPagingSource( - private val redditApi: RedditApi, - private val subredditName: String + private val redditApi: RedditApi, + private val subredditName: String ) : PagingSource() { - override suspend fun load(params: LoadParams): LoadResult { return try { val items = redditApi.getTop( - subreddit = subredditName, - after = if (params is Append) params.key else null, - before = if (params is Prepend) params.key else null, - limit = params.loadSize + subreddit = subredditName, + after = if (params is Append) params.key else null, + before = if (params is Prepend) params.key else null, + limit = params.loadSize ).data.children.map { it.data } Page( - data = items, - prevKey = items.firstOrNull()?.name, - nextKey = items.lastOrNull()?.name + data = items, + prevKey = items.firstOrNull()?.name, + nextKey = items.lastOrNull()?.name ) } catch (e: IOException) { LoadResult.Error(e) diff --git a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byPage/PageKeyedSubredditPagingSource.kt b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byPage/PageKeyedSubredditPagingSource.kt index d260a3e4..af20356d 100644 --- a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byPage/PageKeyedSubredditPagingSource.kt +++ b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byPage/PageKeyedSubredditPagingSource.kt @@ -20,6 +20,7 @@ import androidx.paging.PagingSource import androidx.paging.PagingSource.LoadParams.Append import androidx.paging.PagingSource.LoadParams.Prepend import androidx.paging.PagingSource.LoadResult.Page +import androidx.paging.PagingState import com.android.example.paging.pagingwithnetwork.reddit.api.RedditApi import com.android.example.paging.pagingwithnetwork.reddit.repository.inMemory.byItem.ItemKeyedSubredditPagingSource import com.android.example.paging.pagingwithnetwork.reddit.vo.RedditPost @@ -55,4 +56,14 @@ class PageKeyedSubredditPagingSource( LoadResult.Error(e) } } + + override fun getRefreshKey(state: PagingState): String? { + return state.anchorPosition?.let { anchorPosition -> + // This loads starting from previous page, but since PagingConfig.initialLoadSize spans + // multiple pages, the initial load will still load items centered around + // anchorPosition. This also prevents needing to immediately launch prepend due to + // prefetchDistance. + state.closestPageToPosition(anchorPosition)?.prevKey + } + } } diff --git a/PagingWithNetworkSample/gradle/wrapper/gradle-wrapper.properties b/PagingWithNetworkSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/PagingWithNetworkSample/gradle/wrapper/gradle-wrapper.properties +++ b/PagingWithNetworkSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/PagingWithNetworkSample/versions.gradle b/PagingWithNetworkSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/PagingWithNetworkSample/versions.gradle +++ b/PagingWithNetworkSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/PersistenceContentProviderSample/gradle/wrapper/gradle-wrapper.properties b/PersistenceContentProviderSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/PersistenceContentProviderSample/gradle/wrapper/gradle-wrapper.properties +++ b/PersistenceContentProviderSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/PersistenceContentProviderSample/versions.gradle b/PersistenceContentProviderSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/PersistenceContentProviderSample/versions.gradle +++ b/PersistenceContentProviderSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/PersistenceMigrationsSample/gradle/wrapper/gradle-wrapper.properties b/PersistenceMigrationsSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/PersistenceMigrationsSample/gradle/wrapper/gradle-wrapper.properties +++ b/PersistenceMigrationsSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/PersistenceMigrationsSample/versions.gradle b/PersistenceMigrationsSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/PersistenceMigrationsSample/versions.gradle +++ b/PersistenceMigrationsSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/ViewBindingSample/gradle/wrapper/gradle-wrapper.properties b/ViewBindingSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/ViewBindingSample/gradle/wrapper/gradle-wrapper.properties +++ b/ViewBindingSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/ViewBindingSample/versions.gradle b/ViewBindingSample/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/ViewBindingSample/versions.gradle +++ b/ViewBindingSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" diff --git a/WorkManagerSample/gradle/wrapper/gradle-wrapper.properties b/WorkManagerSample/gradle/wrapper/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/WorkManagerSample/gradle/wrapper/gradle-wrapper.properties +++ b/WorkManagerSample/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/WorkManagerSample/versions.gradle b/WorkManagerSample/versions.gradle index d9fd9575..119dab97 100644 --- a/WorkManagerSample/versions.gradle +++ b/WorkManagerSample/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" @@ -62,7 +62,7 @@ versions.rxjava2 = "2.1.3" versions.timber = "4.7.1" versions.transition = "1.3.0" versions.truth = "1.0.1" -versions.work = "2.5.0" +versions.work = "2.4.0" ext.versions = versions def build_versions = [:] diff --git a/gradle-wrapper.properties b/gradle-wrapper.properties index 99f79add..db78223b 100644 --- a/gradle-wrapper.properties +++ b/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/versions.gradle b/versions.gradle index 2dc4c1a7..119dab97 100644 --- a/versions.gradle +++ b/versions.gradle @@ -52,7 +52,7 @@ versions.mockito_android = "2.25.0" versions.mockwebserver = "3.8.1" versions.navigation = "2.3.0-alpha01" versions.okhttp_logging_interceptor = "3.9.0" -versions.paging = "3.0.0-alpha11" +versions.paging = "3.0.0-alpha13" versions.recyclerview = "1.2.0-beta01" versions.retrofit = "2.9.0" versions.robolectric = "4.2" From 38e808f135d5870f37a6f27f456640fa5f61a91d Mon Sep 17 00:00:00 2001 From: Dustin Lam Date: Fri, 5 Feb 2021 11:40:57 -0800 Subject: [PATCH 2/8] Use viewbinding --- PagingWithNetworkSample/app/build.gradle | 12 ++++-- .../reddit/ui/RedditActivityTest.kt | 27 ++++++------- .../paging/pagingwithnetwork/MainActivity.kt | 13 ++++--- .../byItem/InMemoryByItemRepository.kt | 12 +++--- .../byPage/InMemoryByPageKeyRepository.kt | 7 ++-- .../reddit/ui/RedditActivity.kt | 39 ++++++++++--------- .../reddit/ui/SubRedditViewModel.kt | 0 .../benchmark/build.gradle | 9 ++--- .../example/benchmark/BenchmarkActivity.kt | 9 +++-- .../benchmark/PostsAdapterBenchmark.kt | 5 +-- PagingWithNetworkSample/lib/build.gradle | 14 +++---- 11 files changed, 78 insertions(+), 69 deletions(-) rename PagingWithNetworkSample/{lib => app}/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/SubRedditViewModel.kt (100%) diff --git a/PagingWithNetworkSample/app/build.gradle b/PagingWithNetworkSample/app/build.gradle index 399282e7..fddaa5cf 100644 --- a/PagingWithNetworkSample/app/build.gradle +++ b/PagingWithNetworkSample/app/build.gradle @@ -15,11 +15,7 @@ */ apply plugin: 'com.android.application' - apply plugin: 'kotlin-android' - -apply plugin: 'kotlin-android-extensions' - apply plugin: 'kotlin-kapt' android { @@ -33,20 +29,28 @@ android { versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } + + buildFeatures { + viewBinding = true + } + buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + kotlinOptions { jvmTarget = "1.8" freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"] } + sourceSets { androidTest.java.srcDirs += "src/test-common/java" test.java.srcDirs += "src/test-common/java" diff --git a/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt b/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt index 23f27461..704751c1 100644 --- a/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt +++ b/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt @@ -59,6 +59,7 @@ class RedditActivityTest(private val type: RedditPostRepository.Type) { var testRule = CountingTaskExecutorRule() private val postFactory = PostFactory() + @Before fun init() { val fakeApi = FakeRedditApi() @@ -68,9 +69,9 @@ class RedditActivityTest(private val type: RedditPostRepository.Type) { val app = ApplicationProvider.getApplicationContext() // use a controlled service locator w/ fake API ServiceLocator.swap( - object : DefaultServiceLocator(app = app, useInMemoryDb = true) { - override fun getRedditApi(): RedditApi = fakeApi - } + object : DefaultServiceLocator(app = app, useInMemoryDb = true) { + override fun getRedditApi(): RedditApi = fakeApi + } ) } @@ -78,8 +79,8 @@ class RedditActivityTest(private val type: RedditPostRepository.Type) { @Throws(InterruptedException::class, TimeoutException::class) fun showSomeResults() { val intent = RedditActivity.intentFor( - context = ApplicationProvider.getApplicationContext(), - type = type + context = ApplicationProvider.getApplicationContext(), + type = type ) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) val activity = InstrumentationRegistry.getInstrumentation().startActivitySync(intent) @@ -93,15 +94,15 @@ class RedditActivityTest(private val type: RedditPostRepository.Type) { val latch = CountDownLatch(1) InstrumentationRegistry.getInstrumentation().runOnMainSync { recyclerView.adapter?.registerAdapterDataObserver( - object : RecyclerView.AdapterDataObserver() { - override fun onChanged() { - latch.countDown() - } + object : RecyclerView.AdapterDataObserver() { + override fun onChanged() { + latch.countDown() + } - override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { - latch.countDown() - } - }) + override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { + latch.countDown() + } + }) } testRule.drainTasks(1, TimeUnit.SECONDS) if (recyclerView.adapter?.itemCount ?: 0 > 0) { diff --git a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/MainActivity.kt b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/MainActivity.kt index 16affd80..98828a58 100644 --- a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/MainActivity.kt +++ b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/MainActivity.kt @@ -18,25 +18,28 @@ package com.android.example.paging.pagingwithnetwork import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import com.android.example.paging.pagingwithnetwork.databinding.ActivityMainBinding import com.android.example.paging.pagingwithnetwork.reddit.repository.RedditPostRepository import com.android.example.paging.pagingwithnetwork.reddit.ui.RedditActivity -import kotlinx.android.synthetic.main.activity_main.* /** * chooser activity for the demo. */ class MainActivity : AppCompatActivity() { + private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - withDatabase.setOnClickListener { + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + + binding.withDatabase.setOnClickListener { show(RedditPostRepository.Type.DB) } - networkOnly.setOnClickListener { + binding.networkOnly.setOnClickListener { show(RedditPostRepository.Type.IN_MEMORY_BY_ITEM) } - networkOnlyWithPageKeys.setOnClickListener { + binding.networkOnlyWithPageKeys.setOnClickListener { show(RedditPostRepository.Type.IN_MEMORY_BY_PAGE) } } diff --git a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byItem/InMemoryByItemRepository.kt b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byItem/InMemoryByItemRepository.kt index 0a87713e..993aad58 100644 --- a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byItem/InMemoryByItemRepository.kt +++ b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byItem/InMemoryByItemRepository.kt @@ -27,14 +27,14 @@ import com.android.example.paging.pagingwithnetwork.reddit.repository.RedditPost */ class InMemoryByItemRepository(private val redditApi: RedditApi) : RedditPostRepository { override fun postsOfSubreddit(subReddit: String, pageSize: Int) = Pager( - PagingConfig( - pageSize = pageSize, - enablePlaceholders = false - ) + PagingConfig( + pageSize = pageSize, + enablePlaceholders = false + ) ) { ItemKeyedSubredditPagingSource( - redditApi = redditApi, - subredditName = subReddit + redditApi = redditApi, + subredditName = subReddit ) }.flow } diff --git a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byPage/InMemoryByPageKeyRepository.kt b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byPage/InMemoryByPageKeyRepository.kt index 95ddf0c9..20e1c328 100644 --- a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byPage/InMemoryByPageKeyRepository.kt +++ b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/inMemory/byPage/InMemoryByPageKeyRepository.kt @@ -27,12 +27,11 @@ import com.android.example.paging.pagingwithnetwork.reddit.repository.RedditPost */ class InMemoryByPageKeyRepository(private val redditApi: RedditApi) : RedditPostRepository { override fun postsOfSubreddit(subReddit: String, pageSize: Int) = Pager( - PagingConfig(pageSize) + PagingConfig(pageSize) ) { PageKeyedSubredditPagingSource( - redditApi = redditApi, - subredditName = subReddit + redditApi = redditApi, + subredditName = subReddit ) }.flow } - diff --git a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivity.kt b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivity.kt index 0cd4117c..206139a7 100644 --- a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivity.kt +++ b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivity.kt @@ -29,10 +29,9 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.lifecycleScope import androidx.paging.LoadState import com.android.example.paging.pagingwithnetwork.GlideApp -import com.android.example.paging.pagingwithnetwork.R +import com.android.example.paging.pagingwithnetwork.databinding.ActivityRedditBinding import com.android.example.paging.pagingwithnetwork.reddit.ServiceLocator import com.android.example.paging.pagingwithnetwork.reddit.repository.RedditPostRepository -import kotlinx.android.synthetic.main.activity_reddit.* import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChangedBy @@ -44,14 +43,7 @@ import kotlinx.coroutines.flow.filter * The intent arguments can be modified to make it use a different repository (see MainActivity). */ class RedditActivity : AppCompatActivity() { - companion object { - const val KEY_REPOSITORY_TYPE = "repository_type" - fun intentFor(context: Context, type: RedditPostRepository.Type): Intent { - val intent = Intent(context, RedditActivity::class.java) - intent.putExtra(KEY_REPOSITORY_TYPE, type.ordinal) - return intent - } - } + private lateinit var binding: ActivityRedditBinding private val model: SubRedditViewModel by viewModels { object : AbstractSavedStateViewModelFactory(this, null) { @@ -74,7 +66,9 @@ class RedditActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_reddit) + binding = ActivityRedditBinding.inflate(layoutInflater) + setContentView(binding.root) + initAdapter() initSwipeToRefresh() initSearch() @@ -83,14 +77,14 @@ class RedditActivity : AppCompatActivity() { private fun initAdapter() { val glide = GlideApp.with(this) adapter = PostsAdapter(glide) - list.adapter = adapter.withLoadStateHeaderAndFooter( + binding.list.adapter = adapter.withLoadStateHeaderAndFooter( header = PostsLoadStateAdapter(adapter), footer = PostsLoadStateAdapter(adapter) ) lifecycleScope.launchWhenCreated { adapter.loadStateFlow.collectLatest { loadStates -> - swipe_refresh.isRefreshing = loadStates.refresh is LoadState.Loading + binding.swipeRefresh.isRefreshing = loadStates.refresh is LoadState.Loading } } @@ -106,16 +100,16 @@ class RedditActivity : AppCompatActivity() { .distinctUntilChangedBy { it.refresh } // Only react to cases where Remote REFRESH completes i.e., NotLoading. .filter { it.refresh is LoadState.NotLoading } - .collect { list.scrollToPosition(0) } + .collect { binding.list.scrollToPosition(0) } } } private fun initSwipeToRefresh() { - swipe_refresh.setOnRefreshListener { adapter.refresh() } + binding.swipeRefresh.setOnRefreshListener { adapter.refresh() } } private fun initSearch() { - input.setOnEditorActionListener { _, actionId, _ -> + binding.input.setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_GO) { updatedSubredditFromInput() true @@ -123,7 +117,7 @@ class RedditActivity : AppCompatActivity() { false } } - input.setOnKeyListener { _, keyCode, event -> + binding.input.setOnKeyListener { _, keyCode, event -> if (event.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) { updatedSubredditFromInput() true @@ -134,10 +128,19 @@ class RedditActivity : AppCompatActivity() { } private fun updatedSubredditFromInput() { - input.text.trim().toString().let { + binding.input.text.trim().toString().let { if (it.isNotBlank() && model.shouldShowSubreddit(it)) { model.showSubreddit(it) } } } + + companion object { + const val KEY_REPOSITORY_TYPE = "repository_type" + fun intentFor(context: Context, type: RedditPostRepository.Type): Intent { + val intent = Intent(context, RedditActivity::class.java) + intent.putExtra(KEY_REPOSITORY_TYPE, type.ordinal) + return intent + } + } } diff --git a/PagingWithNetworkSample/lib/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/SubRedditViewModel.kt b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/SubRedditViewModel.kt similarity index 100% rename from PagingWithNetworkSample/lib/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/SubRedditViewModel.kt rename to PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/SubRedditViewModel.kt diff --git a/PagingWithNetworkSample/benchmark/build.gradle b/PagingWithNetworkSample/benchmark/build.gradle index 3ccd7774..a9d41428 100644 --- a/PagingWithNetworkSample/benchmark/build.gradle +++ b/PagingWithNetworkSample/benchmark/build.gradle @@ -1,11 +1,6 @@ apply plugin: 'com.android.library' - apply plugin: 'kotlin-android' - -apply plugin: 'kotlin-android-extensions' - apply plugin: 'kotlin-kapt' - apply plugin: 'androidx.benchmark' android { @@ -29,6 +24,10 @@ android { testBuildType = "release" + buildFeatures { + viewBinding = true + } + buildTypes { release { isDefault = true diff --git a/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/BenchmarkActivity.kt b/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/BenchmarkActivity.kt index 51eba522..d758e3d9 100644 --- a/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/BenchmarkActivity.kt +++ b/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/BenchmarkActivity.kt @@ -24,21 +24,24 @@ import androidx.paging.PagingSource import com.android.example.paging.pagingwithnetwork.GlideApp import com.android.example.paging.pagingwithnetwork.reddit.ui.PostsAdapter import com.android.example.paging.pagingwithnetwork.reddit.vo.RedditPost -import kotlinx.android.synthetic.main.activity_benchmark.* +import com.example.benchmark.databinding.ActivityBenchmarkBinding import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch class BenchmarkActivity : AppCompatActivity() { val testExecutor = TestExecutor() + lateinit var binding: ActivityBenchmarkBinding + private set override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_benchmark) + binding = ActivityBenchmarkBinding.inflate(layoutInflater) + setContentView(binding.root) val glide = GlideApp.with(this) val adapter = PostsAdapter(glide) - list.adapter = adapter + binding.list.adapter = adapter val config = PagingConfig( pageSize = 5, diff --git a/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/PostsAdapterBenchmark.kt b/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/PostsAdapterBenchmark.kt index 9469a6f0..4a3ca242 100644 --- a/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/PostsAdapterBenchmark.kt +++ b/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/PostsAdapterBenchmark.kt @@ -22,7 +22,6 @@ import androidx.test.annotation.UiThreadTest import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.LargeTest import androidx.test.rule.ActivityTestRule -import kotlinx.android.synthetic.main.activity_benchmark.* import org.junit.Assert.assertTrue import org.junit.Rule import org.junit.Test @@ -44,10 +43,10 @@ class PostsAdapterBenchmark { // If RecyclerView has children, the items are attached, bound, and gone through layout. // Ready to benchmark. - assertTrue("RecyclerView expected to have children", activity.list.childCount > 0) + assertTrue("RecyclerView expected to have children", activity.binding.list.childCount > 0) benchmarkRule.measureRepeated { - activity.list.scrollByOneItem() + activity.binding.list.scrollByOneItem() runWithTimingDisabled { activity.testExecutor.flush() } diff --git a/PagingWithNetworkSample/lib/build.gradle b/PagingWithNetworkSample/lib/build.gradle index 50d143b4..7a13a9ff 100644 --- a/PagingWithNetworkSample/lib/build.gradle +++ b/PagingWithNetworkSample/lib/build.gradle @@ -1,9 +1,5 @@ apply plugin: 'com.android.library' - apply plugin: 'kotlin-android' - -apply plugin: 'kotlin-android-extensions' - apply plugin: 'kotlin-kapt' android { @@ -17,18 +13,20 @@ android { versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } + + buildFeatures { + viewBinding = true + } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + kotlinOptions { jvmTarget = "1.8" freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"] } - - buildFeatures { - viewBinding = true - } } dependencies { From e9cc2d6428a9125e781db2a5e7c081dcda7f2e44 Mon Sep 17 00:00:00 2001 From: Dustin Lam Date: Fri, 5 Feb 2021 13:26:09 -0800 Subject: [PATCH 3/8] Add back MADSkillsNavigationSample versions.gradle --- MADSkillsNavigationSample/versions.gradle | 226 ++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 MADSkillsNavigationSample/versions.gradle diff --git a/MADSkillsNavigationSample/versions.gradle b/MADSkillsNavigationSample/versions.gradle new file mode 100644 index 00000000..119dab97 --- /dev/null +++ b/MADSkillsNavigationSample/versions.gradle @@ -0,0 +1,226 @@ +/* + * 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. + */ + + +/** + * Shared file between builds so that they can all use the same dependencies and + * maven repositories. + **/ +ext.deps = [:] +def versions = [:] +versions.activity = '1.1.0' +versions.android_gradle_plugin = '4.0.0' +versions.annotations = "1.0.0" +versions.apache_commons = "2.5" +versions.appcompat = "1.2.0-alpha02" +versions.arch_core = "2.1.0" +versions.atsl_core = "1.2.0" +versions.atsl_junit = "1.1.1" +versions.atsl_rules = "1.2.0" +versions.atsl_runner = "1.2.0" +versions.benchmark = "1.1.0-alpha01" +versions.cardview = "1.0.0" +versions.constraint_layout = "2.0.0-alpha2" +versions.core_ktx = "1.1.0" +versions.coroutines = "1.4.1" +versions.dagger = "2.16" +versions.dexmaker = "2.2.0" +versions.espresso = "3.2.0" +versions.fragment = "1.2.1" +versions.glide = "4.8.0" +versions.hamcrest = "1.3" +versions.junit = "4.12" +versions.kotlin = "1.4.21" +versions.lifecycle = "2.2.0" +versions.material = "1.0.0" +versions.mockito = "2.25.0" +versions.mockito_all = "1.10.19" +versions.mockito_android = "2.25.0" +versions.mockwebserver = "3.8.1" +versions.navigation = "2.3.0-alpha01" +versions.okhttp_logging_interceptor = "3.9.0" +versions.paging = "3.0.0-alpha13" +versions.recyclerview = "1.2.0-beta01" +versions.retrofit = "2.9.0" +versions.robolectric = "4.2" +versions.room = "2.3.0-alpha04" +versions.rx_android = "2.0.1" +versions.rxjava2 = "2.1.3" +versions.timber = "4.7.1" +versions.transition = "1.3.0" +versions.truth = "1.0.1" +versions.work = "2.4.0" +ext.versions = versions + +def build_versions = [:] +build_versions.min_sdk = 14 +build_versions.compile_sdk = 29 +build_versions.target_sdk = 29 +build_versions.build_tools = "29.0.3" +ext.build_versions = build_versions + +def deps = [:] + +def activity = [:] +activity.activity_ktx = "androidx.activity:activity-ktx:$versions.activity" +deps.activity = activity + +deps.android_gradle_plugin = "com.android.tools.build:gradle:$versions.android_gradle_plugin" + +deps.annotations = "androidx.annotation:annotation:$versions.annotations" + +deps.app_compat = "androidx.appcompat:appcompat:$versions.appcompat" + +def arch_core = [:] +arch_core.runtime = "androidx.arch.core:core-runtime:$versions.arch_core" +arch_core.testing = "androidx.arch.core:core-testing:$versions.arch_core" +deps.arch_core = arch_core + +def atsl = [:] +atsl.core = "androidx.test:core:$versions.atsl_core" +atsl.ext_junit = "androidx.test.ext:junit:$versions.atsl_junit" +atsl.runner = "androidx.test:runner:$versions.atsl_runner" +atsl.rules = "androidx.test:rules:$versions.atsl_rules" +deps.atsl = atsl + +deps.benchmark = "androidx.benchmark:benchmark-junit4:$versions.benchmark" +deps.benchmark_gradle = "androidx.benchmark:benchmark-gradle-plugin:$versions.benchmark" + +deps.cardview = "androidx.cardview:cardview:$versions.cardview" + +deps.constraint_layout = "androidx.constraintlayout:constraintlayout:$versions.constraint_layout" + +deps.core_ktx = "androidx.core:core-ktx:$versions.core_ktx" + +def coroutines = [:] +coroutines.android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$versions.coroutines" +coroutines.test = "org.jetbrains.kotlinx:kotlinx-coroutines-test:$versions.coroutines" +deps.coroutines = coroutines + +def dagger = [:] +dagger.runtime = "com.google.dagger:dagger:$versions.dagger" +dagger.android = "com.google.dagger:dagger-android:$versions.dagger" +dagger.android_support = "com.google.dagger:dagger-android-support:$versions.dagger" +dagger.compiler = "com.google.dagger:dagger-compiler:$versions.dagger" +dagger.android_support_compiler = "com.google.dagger:dagger-android-processor:$versions.dagger" +deps.dagger = dagger + +deps.dexmaker = "com.linkedin.dexmaker:dexmaker-mockito:$versions.dexmaker" + +def espresso = [:] +espresso.core = "androidx.test.espresso:espresso-core:$versions.espresso" +espresso.contrib = "androidx.test.espresso:espresso-contrib:$versions.espresso" +espresso.intents = "androidx.test.espresso:espresso-intents:$versions.espresso" +deps.espresso = espresso + +def fragment = [:] +fragment.runtime = "androidx.fragment:fragment:${versions.fragment}" +fragment.runtime_ktx = "androidx.fragment:fragment-ktx:${versions.fragment}" +fragment.testing = "androidx.fragment:fragment-testing:${versions.fragment}" +deps.fragment = fragment + +def glide = [:] +glide.runtime = "com.github.bumptech.glide:glide:$versions.glide" +glide.compiler = "com.github.bumptech.glide:compiler:$versions.glide" +deps.glide = glide + +deps.hamcrest = "org.hamcrest:hamcrest-all:$versions.hamcrest" + +deps.junit = "junit:junit:$versions.junit" + +def kotlin = [:] +kotlin.stdlib = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$versions.kotlin" +kotlin.test = "org.jetbrains.kotlin:kotlin-test-junit:$versions.kotlin" +kotlin.plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin" +kotlin.allopen = "org.jetbrains.kotlin:kotlin-allopen:$versions.kotlin" +deps.kotlin = kotlin + +def lifecycle = [:] +lifecycle.runtime = "androidx.lifecycle:lifecycle-runtime:$versions.lifecycle" +lifecycle.java8 = "androidx.lifecycle:lifecycle-common-java8:$versions.lifecycle" +lifecycle.compiler = "androidx.lifecycle:lifecycle-compiler:$versions.lifecycle" +lifecycle.viewmodel_ktx = "androidx.lifecycle:lifecycle-viewmodel-ktx:$versions.lifecycle" +lifecycle.livedata_ktx = "androidx.lifecycle:lifecycle-livedata-ktx:$versions.lifecycle" +deps.lifecycle = lifecycle + +deps.material = "com.google.android.material:material:$versions.material" + +def mockito = [:] +mockito.core = "org.mockito:mockito-core:$versions.mockito" +mockito.all = "org.mockito:mockito-all:$versions.mockito_all" +mockito.android = "org.mockito:mockito-android:$versions.mockito_android" +deps.mockito = mockito + +deps.mock_web_server = "com.squareup.okhttp3:mockwebserver:$versions.mockwebserver" + +def navigation = [:] +navigation.runtime = "androidx.navigation:navigation-runtime:$versions.navigation" +navigation.runtime_ktx = "androidx.navigation:navigation-runtime-ktx:$versions.navigation" +navigation.fragment = "androidx.navigation:navigation-fragment:$versions.navigation" +navigation.fragment_ktx = "androidx.navigation:navigation-fragment-ktx:$versions.navigation" +navigation.testing = "androidx.navigation:navigation-testing:$versions.navigation" +navigation.ui = "androidx.navigation:navigation-ui:$versions.navigation" +navigation.ui_ktx = "androidx.navigation:navigation-ui-ktx:$versions.navigation" +navigation.safe_args_plugin = "androidx.navigation:navigation-safe-args-gradle-plugin:$versions.navigation" +deps.navigation = navigation + +deps.okhttp_logging_interceptor = "com.squareup.okhttp3:logging-interceptor:${versions.okhttp_logging_interceptor}" + +deps.paging_runtime = "androidx.paging:paging-runtime:$versions.paging" + +deps.recyclerview = "androidx.recyclerview:recyclerview:$versions.recyclerview" + +def retrofit = [:] +retrofit.runtime = "com.squareup.retrofit2:retrofit:$versions.retrofit" +retrofit.gson = "com.squareup.retrofit2:converter-gson:$versions.retrofit" +retrofit.mock = "com.squareup.retrofit2:retrofit-mock:$versions.retrofit" +deps.retrofit = retrofit + +deps.robolectric = "org.robolectric:robolectric:$versions.robolectric" + +def room = [:] +room.runtime = "androidx.room:room-runtime:$versions.room" +room.compiler = "androidx.room:room-compiler:$versions.room" +room.ktx = "androidx.room:room-ktx:$versions.room" +room.rxjava2 = "androidx.room:room-rxjava2:$versions.room" +room.testing = "androidx.room:room-testing:$versions.room" +deps.room = room + +deps.rx_android = "io.reactivex.rxjava2:rxandroid:$versions.rx_android" + +deps.rxjava2 = "io.reactivex.rxjava2:rxjava:$versions.rxjava2" + +deps.timber = "com.jakewharton.timber:timber:$versions.timber" + +deps.transition = "androidx.transition:transition:$versions.transition" + +deps.truth = "com.google.truth:truth:$versions.truth" + +def work = [:] +work.runtime = "androidx.work:work-runtime:$versions.work" +work.testing = "androidx.work:work-testing:$versions.work" +work.firebase = "androidx.work:work-firebase:$versions.work" +work.runtime_ktx = "androidx.work:work-runtime-ktx:$versions.work" +deps.work = work + +ext.deps = deps + +def addRepos(RepositoryHandler handler) { + handler.google() + handler.jcenter() + handler.maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } +} +ext.addRepos = this.&addRepos From 60024326cf5384978aa93a3a7795cc1a4f3b011c Mon Sep 17 00:00:00 2001 From: Dustin Lam Date: Fri, 5 Feb 2021 20:36:08 -0800 Subject: [PATCH 4/8] Bump atsl --- BasicRxJavaSample/versions.gradle | 8 ++++---- BasicRxJavaSampleKotlin/versions.gradle | 8 ++++---- BasicSample/versions.gradle | 8 ++++---- GithubBrowserSample/versions.gradle | 8 ++++---- LiveDataSample/versions.gradle | 8 ++++---- MADSkillsNavigationSample/versions.gradle | 8 ++++---- NavigationAdvancedSample/versions.gradle | 8 ++++---- NavigationBasicSample/versions.gradle | 8 ++++---- PagingSample/versions.gradle | 8 ++++---- PagingWithNetworkSample/versions.gradle | 8 ++++---- PersistenceContentProviderSample/versions.gradle | 8 ++++---- PersistenceMigrationsSample/versions.gradle | 8 ++++---- ViewBindingSample/versions.gradle | 8 ++++---- WorkManagerSample/versions.gradle | 8 ++++---- versions.gradle | 8 ++++---- 15 files changed, 60 insertions(+), 60 deletions(-) diff --git a/BasicRxJavaSample/versions.gradle b/BasicRxJavaSample/versions.gradle index 119dab97..32666d38 100644 --- a/BasicRxJavaSample/versions.gradle +++ b/BasicRxJavaSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/BasicRxJavaSampleKotlin/versions.gradle b/BasicRxJavaSampleKotlin/versions.gradle index 119dab97..32666d38 100644 --- a/BasicRxJavaSampleKotlin/versions.gradle +++ b/BasicRxJavaSampleKotlin/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/BasicSample/versions.gradle b/BasicSample/versions.gradle index 119dab97..32666d38 100644 --- a/BasicSample/versions.gradle +++ b/BasicSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/GithubBrowserSample/versions.gradle b/GithubBrowserSample/versions.gradle index 119dab97..32666d38 100644 --- a/GithubBrowserSample/versions.gradle +++ b/GithubBrowserSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/LiveDataSample/versions.gradle b/LiveDataSample/versions.gradle index 119dab97..32666d38 100644 --- a/LiveDataSample/versions.gradle +++ b/LiveDataSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/MADSkillsNavigationSample/versions.gradle b/MADSkillsNavigationSample/versions.gradle index 119dab97..32666d38 100644 --- a/MADSkillsNavigationSample/versions.gradle +++ b/MADSkillsNavigationSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/NavigationAdvancedSample/versions.gradle b/NavigationAdvancedSample/versions.gradle index 119dab97..32666d38 100644 --- a/NavigationAdvancedSample/versions.gradle +++ b/NavigationAdvancedSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/NavigationBasicSample/versions.gradle b/NavigationBasicSample/versions.gradle index 119dab97..32666d38 100644 --- a/NavigationBasicSample/versions.gradle +++ b/NavigationBasicSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/PagingSample/versions.gradle b/PagingSample/versions.gradle index 119dab97..32666d38 100644 --- a/PagingSample/versions.gradle +++ b/PagingSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/PagingWithNetworkSample/versions.gradle b/PagingWithNetworkSample/versions.gradle index 119dab97..32666d38 100644 --- a/PagingWithNetworkSample/versions.gradle +++ b/PagingWithNetworkSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/PersistenceContentProviderSample/versions.gradle b/PersistenceContentProviderSample/versions.gradle index 119dab97..32666d38 100644 --- a/PersistenceContentProviderSample/versions.gradle +++ b/PersistenceContentProviderSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/PersistenceMigrationsSample/versions.gradle b/PersistenceMigrationsSample/versions.gradle index 119dab97..32666d38 100644 --- a/PersistenceMigrationsSample/versions.gradle +++ b/PersistenceMigrationsSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/ViewBindingSample/versions.gradle b/ViewBindingSample/versions.gradle index 119dab97..32666d38 100644 --- a/ViewBindingSample/versions.gradle +++ b/ViewBindingSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/WorkManagerSample/versions.gradle b/WorkManagerSample/versions.gradle index 119dab97..32666d38 100644 --- a/WorkManagerSample/versions.gradle +++ b/WorkManagerSample/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" diff --git a/versions.gradle b/versions.gradle index 119dab97..32666d38 100644 --- a/versions.gradle +++ b/versions.gradle @@ -27,10 +27,10 @@ versions.annotations = "1.0.0" versions.apache_commons = "2.5" versions.appcompat = "1.2.0-alpha02" versions.arch_core = "2.1.0" -versions.atsl_core = "1.2.0" -versions.atsl_junit = "1.1.1" -versions.atsl_rules = "1.2.0" -versions.atsl_runner = "1.2.0" +versions.atsl_core = "1.3.0" +versions.atsl_junit = "1.1.2" +versions.atsl_rules = "1.3.0" +versions.atsl_runner = "1.3.0" versions.benchmark = "1.1.0-alpha01" versions.cardview = "1.0.0" versions.constraint_layout = "2.0.0-alpha2" From b9ed64be61e6c4e45bcf16e912fcf78e0589f48f Mon Sep 17 00:00:00 2001 From: Dustin Lam Date: Fri, 5 Feb 2021 20:36:13 -0800 Subject: [PATCH 5/8] ActivityScenario based UI tests --- PagingWithNetworkSample/app/build.gradle | 11 +--- .../reddit/ui/RedditActivityTest.kt | 58 ++++++++----------- .../reddit/ui/RedditActivity.kt | 3 +- .../repository/FakeRedditApi.kt | 28 ++++----- .../example/benchmark/BenchmarkActivity.kt | 6 ++ .../benchmark/PostsAdapterBenchmark.kt | 24 ++++---- 6 files changed, 62 insertions(+), 68 deletions(-) diff --git a/PagingWithNetworkSample/app/build.gradle b/PagingWithNetworkSample/app/build.gradle index fddaa5cf..94eb588f 100644 --- a/PagingWithNetworkSample/app/build.gradle +++ b/PagingWithNetworkSample/app/build.gradle @@ -83,18 +83,13 @@ dependencies { implementation deps.glide.runtime // Android Testing Support Library's runner and rules - androidTestImplementation deps.atsl.core + androidTestImplementation deps.atsl.ext_junit androidTestImplementation deps.atsl.runner androidTestImplementation deps.atsl.rules androidTestImplementation deps.arch_core.testing - - androidTestImplementation deps.junit - androidTestImplementation deps.retrofit.mock - androidTestImplementation deps.mockito.core - androidTestImplementation deps.mockito.android + androidTestImplementation deps.espresso.contrib + androidTestImplementation deps.espresso.core testImplementation deps.junit - testImplementation deps.retrofit.mock testImplementation deps.arch_core.testing - testImplementation deps.mockito.core } diff --git a/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt b/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt index 704751c1..8863baf7 100644 --- a/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt +++ b/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt @@ -18,10 +18,16 @@ package com.android.example.paging.pagingwithnetwork.reddit.ui import android.app.Application import android.content.Intent +import android.view.View import androidx.arch.core.executor.testing.CountingTaskExecutorRule import androidx.recyclerview.widget.RecyclerView +import androidx.test.annotation.UiThreadTest +import androidx.test.core.app.ActivityScenario import androidx.test.core.app.ApplicationProvider -import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.NoMatchingViewException +import androidx.test.espresso.ViewAssertion +import androidx.test.espresso.matcher.ViewMatchers.withId import com.android.example.paging.pagingwithnetwork.R import com.android.example.paging.pagingwithnetwork.reddit.DefaultServiceLocator import com.android.example.paging.pagingwithnetwork.reddit.ServiceLocator @@ -33,16 +39,12 @@ import com.android.example.paging.pagingwithnetwork.reddit.ui.SubRedditViewModel import com.android.example.paging.pagingwithnetwork.repository.FakeRedditApi import com.android.example.paging.pagingwithnetwork.repository.PostFactory import org.hamcrest.CoreMatchers.`is` -import org.hamcrest.CoreMatchers.notNullValue import org.hamcrest.MatcherAssert.assertThat import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit -import java.util.concurrent.TimeoutException /** * Simple sanity test to ensure data is displayed @@ -76,38 +78,28 @@ class RedditActivityTest(private val type: RedditPostRepository.Type) { } @Test - @Throws(InterruptedException::class, TimeoutException::class) + @UiThreadTest fun showSomeResults() { - val intent = RedditActivity.intentFor( - context = ApplicationProvider.getApplicationContext(), - type = type + ActivityScenario.launch( + RedditActivity.intentFor( + context = ApplicationProvider.getApplicationContext(), + type = type + ).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } ) - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - val activity = InstrumentationRegistry.getInstrumentation().startActivitySync(intent) - val recyclerView = activity.findViewById(R.id.list) - assertThat(recyclerView.adapter, notNullValue()) - waitForAdapterChange(recyclerView) - assertThat(recyclerView.adapter?.itemCount, `is`(3)) - } - private fun waitForAdapterChange(recyclerView: RecyclerView) { - val latch = CountDownLatch(1) - InstrumentationRegistry.getInstrumentation().runOnMainSync { - recyclerView.adapter?.registerAdapterDataObserver( - object : RecyclerView.AdapterDataObserver() { - override fun onChanged() { - latch.countDown() - } + onView(withId(R.id.list)).check(RecyclerViewItemCountAssertion(3)) + } - override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { - latch.countDown() - } - }) - } - testRule.drainTasks(1, TimeUnit.SECONDS) - if (recyclerView.adapter?.itemCount ?: 0 > 0) { - return + class RecyclerViewItemCountAssertion(private val expectedCount: Int) : ViewAssertion { + override fun check(view: View, noViewFoundException: NoMatchingViewException?) { + if (noViewFoundException != null) { + throw noViewFoundException + } + val recyclerView = view as RecyclerView + val adapter = recyclerView.adapter + assertThat(adapter!!.itemCount, `is`(expectedCount)) } - assertThat(latch.await(10, TimeUnit.SECONDS), `is`(true)) } } \ No newline at end of file diff --git a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivity.kt b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivity.kt index 206139a7..31cae632 100644 --- a/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivity.kt +++ b/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivity.kt @@ -43,7 +43,8 @@ import kotlinx.coroutines.flow.filter * The intent arguments can be modified to make it use a different repository (see MainActivity). */ class RedditActivity : AppCompatActivity() { - private lateinit var binding: ActivityRedditBinding + lateinit var binding: ActivityRedditBinding + private set private val model: SubRedditViewModel by viewModels { object : AbstractSavedStateViewModelFactory(this, null) { diff --git a/PagingWithNetworkSample/app/src/test-common/java/com/android/example/paging/pagingwithnetwork/repository/FakeRedditApi.kt b/PagingWithNetworkSample/app/src/test-common/java/com/android/example/paging/pagingwithnetwork/repository/FakeRedditApi.kt index 6e25d6ad..8abb5ada 100644 --- a/PagingWithNetworkSample/app/src/test-common/java/com/android/example/paging/pagingwithnetwork/repository/FakeRedditApi.kt +++ b/PagingWithNetworkSample/app/src/test-common/java/com/android/example/paging/pagingwithnetwork/repository/FakeRedditApi.kt @@ -38,10 +38,10 @@ class FakeRedditApi : RedditApi { } private fun findPosts( - subreddit: String, - limit: Int, - after: String? = null, - before: String? = null + subreddit: String, + limit: Int, + after: String? = null, + before: String? = null ): List { // only support paging forward if (before != null) return emptyList() @@ -52,13 +52,13 @@ class FakeRedditApi : RedditApi { } private fun findSubReddit(subreddit: String) = - model.getOrDefault(subreddit, SubReddit()) + model.getOrDefault(subreddit, SubReddit()) override suspend fun getTop( - @Path("subreddit") subreddit: String, - @Query("limit") limit: Int, - @Query("after") after: String?, - @Query("before") before: String? + @Path("subreddit") subreddit: String, + @Query("limit") limit: Int, + @Query("after") after: String?, + @Query("before") before: String? ): RedditApi.ListingResponse { failureMsg?.let { throw IOException(it) @@ -66,11 +66,11 @@ class FakeRedditApi : RedditApi { val items = findPosts(subreddit, limit, after, before) val nextAfter = items.lastOrNull()?.data?.name return RedditApi.ListingResponse( - RedditApi.ListingData( - children = items, - after = nextAfter, - before = null - ) + RedditApi.ListingData( + children = items, + after = nextAfter, + before = null + ) ) } diff --git a/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/BenchmarkActivity.kt b/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/BenchmarkActivity.kt index d758e3d9..a9d102e5 100644 --- a/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/BenchmarkActivity.kt +++ b/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/BenchmarkActivity.kt @@ -16,11 +16,13 @@ package com.example.benchmark import android.os.Bundle +import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.PagingSource +import androidx.paging.PagingState import com.android.example.paging.pagingwithnetwork.GlideApp import com.android.example.paging.pagingwithnetwork.reddit.ui.PostsAdapter import com.android.example.paging.pagingwithnetwork.reddit.vo.RedditPost @@ -31,6 +33,7 @@ import kotlinx.coroutines.launch class BenchmarkActivity : AppCompatActivity() { val testExecutor = TestExecutor() + @VisibleForTesting lateinit var binding: ActivityBenchmarkBinding private set @@ -71,4 +74,7 @@ class MockPagingSource : PagingSource() { val key = params.key ?: 0 return LoadResult.Page(List(200) { generatePost() }.toList(), key - 1, key + 1) } + + // Unused in benchmark. + override fun getRefreshKey(state: PagingState): Int? = null } \ No newline at end of file diff --git a/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/PostsAdapterBenchmark.kt b/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/PostsAdapterBenchmark.kt index 4a3ca242..e1a1d474 100644 --- a/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/PostsAdapterBenchmark.kt +++ b/PagingWithNetworkSample/benchmark/src/androidTest/java/com/example/benchmark/PostsAdapterBenchmark.kt @@ -19,9 +19,9 @@ import androidx.benchmark.junit4.BenchmarkRule import androidx.benchmark.junit4.measureRepeated import androidx.recyclerview.widget.RecyclerView import androidx.test.annotation.UiThreadTest +import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.LargeTest -import androidx.test.rule.ActivityTestRule import org.junit.Assert.assertTrue import org.junit.Rule import org.junit.Test @@ -34,21 +34,21 @@ class PostsAdapterBenchmark { val benchmarkRule = BenchmarkRule() @get:Rule - val activityRule = ActivityTestRule(BenchmarkActivity::class.java) + val activityRule = ActivityScenarioRule(BenchmarkActivity::class.java) - @UiThreadTest @Test + @UiThreadTest fun scrollItem() { - val activity = activityRule.activity - - // If RecyclerView has children, the items are attached, bound, and gone through layout. - // Ready to benchmark. - assertTrue("RecyclerView expected to have children", activity.binding.list.childCount > 0) + activityRule.scenario.onActivity { activity -> + // If RecyclerView has children, the items are attached, bound, and gone through layout. + // Ready to benchmark. + assertTrue("RecyclerView expected to have children", activity.binding.list.childCount > 0) - benchmarkRule.measureRepeated { - activity.binding.list.scrollByOneItem() - runWithTimingDisabled { - activity.testExecutor.flush() + benchmarkRule.measureRepeated { + activity.binding.list.scrollByOneItem() + runWithTimingDisabled { + activity.testExecutor.flush() + } } } } From 8fc29ab47174cab9d192a32f7d8591ade6ef0f8e Mon Sep 17 00:00:00 2001 From: Dustin Lam Date: Fri, 5 Feb 2021 21:54:46 -0800 Subject: [PATCH 6/8] Add sample PagingSource tests --- PagingWithNetworkSample/app/build.gradle | 3 +- .../repository/SubredditPagingSourceTest.kt | 64 +++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 PagingWithNetworkSample/app/src/test/java/com/android/example/paging/pagingwithnetwork/reddit/repository/SubredditPagingSourceTest.kt diff --git a/PagingWithNetworkSample/app/build.gradle b/PagingWithNetworkSample/app/build.gradle index 94eb588f..dcd3ce8a 100644 --- a/PagingWithNetworkSample/app/build.gradle +++ b/PagingWithNetworkSample/app/build.gradle @@ -91,5 +91,6 @@ dependencies { androidTestImplementation deps.espresso.core testImplementation deps.junit - testImplementation deps.arch_core.testing + testImplementation deps.coroutines.test + testImplementation deps.kotlin.test } diff --git a/PagingWithNetworkSample/app/src/test/java/com/android/example/paging/pagingwithnetwork/reddit/repository/SubredditPagingSourceTest.kt b/PagingWithNetworkSample/app/src/test/java/com/android/example/paging/pagingwithnetwork/reddit/repository/SubredditPagingSourceTest.kt new file mode 100644 index 00000000..a1aac5c5 --- /dev/null +++ b/PagingWithNetworkSample/app/src/test/java/com/android/example/paging/pagingwithnetwork/reddit/repository/SubredditPagingSourceTest.kt @@ -0,0 +1,64 @@ +package com.android.example.paging.pagingwithnetwork.reddit.repository + +import androidx.paging.PagingSource.LoadParams.Refresh +import androidx.paging.PagingSource.LoadResult.Page +import com.android.example.paging.pagingwithnetwork.reddit.ui.SubRedditViewModel.Companion.DEFAULT_SUBREDDIT +import com.android.example.paging.pagingwithnetwork.reddit.repository.inMemory.byItem.ItemKeyedSubredditPagingSource +import com.android.example.paging.pagingwithnetwork.reddit.repository.inMemory.byPage.PageKeyedSubredditPagingSource +import com.android.example.paging.pagingwithnetwork.repository.FakeRedditApi +import com.android.example.paging.pagingwithnetwork.repository.PostFactory +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.runBlockingTest +import org.junit.Test +import kotlin.test.assertEquals + +@OptIn(ExperimentalCoroutinesApi::class) +class SubredditPagingSourceTest { + private val postFactory = PostFactory() + private val fakePosts = listOf( + postFactory.createRedditPost(DEFAULT_SUBREDDIT), + postFactory.createRedditPost(DEFAULT_SUBREDDIT), + postFactory.createRedditPost(DEFAULT_SUBREDDIT) + ) + private val fakeApi = FakeRedditApi().apply { + fakePosts.forEach { post -> addPost(post) } + } + + @Test + fun itemKeyedSubredditPagingSource() = runBlockingTest { + val pagingSource = ItemKeyedSubredditPagingSource(fakeApi, DEFAULT_SUBREDDIT) + assertEquals( + expected = Page( + data = listOf(fakePosts[0]), + prevKey = fakePosts[0].name, + nextKey = fakePosts[0].name + ), + actual = pagingSource.load( + Refresh( + key = null, + loadSize = 1, + placeholdersEnabled = false + ) + ), + ) + } + + @Test + fun pageKeyedSubredditPagingSource() = runBlockingTest { + val pagingSource = PageKeyedSubredditPagingSource(fakeApi, DEFAULT_SUBREDDIT) + assertEquals( + expected = Page( + data = listOf(fakePosts[0]), + prevKey = null, + nextKey = fakePosts[0].name + ), + actual = pagingSource.load( + Refresh( + key = null, + loadSize = 1, + placeholdersEnabled = false + ) + ), + ) + } +} \ No newline at end of file From 2f4878004ff5f89daceb6c1f1c1b1a22f3bc08cb Mon Sep 17 00:00:00 2001 From: Dustin Lam Date: Mon, 8 Feb 2021 17:19:29 -0800 Subject: [PATCH 7/8] Use loadSize = 2 in tests --- .../reddit/repository/SubredditPagingSourceTest.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PagingWithNetworkSample/app/src/test/java/com/android/example/paging/pagingwithnetwork/reddit/repository/SubredditPagingSourceTest.kt b/PagingWithNetworkSample/app/src/test/java/com/android/example/paging/pagingwithnetwork/reddit/repository/SubredditPagingSourceTest.kt index a1aac5c5..6a3e9d09 100644 --- a/PagingWithNetworkSample/app/src/test/java/com/android/example/paging/pagingwithnetwork/reddit/repository/SubredditPagingSourceTest.kt +++ b/PagingWithNetworkSample/app/src/test/java/com/android/example/paging/pagingwithnetwork/reddit/repository/SubredditPagingSourceTest.kt @@ -29,14 +29,14 @@ class SubredditPagingSourceTest { val pagingSource = ItemKeyedSubredditPagingSource(fakeApi, DEFAULT_SUBREDDIT) assertEquals( expected = Page( - data = listOf(fakePosts[0]), + data = listOf(fakePosts[0], fakePosts[1]), prevKey = fakePosts[0].name, - nextKey = fakePosts[0].name + nextKey = fakePosts[1].name ), actual = pagingSource.load( Refresh( key = null, - loadSize = 1, + loadSize = 2, placeholdersEnabled = false ) ), @@ -48,14 +48,14 @@ class SubredditPagingSourceTest { val pagingSource = PageKeyedSubredditPagingSource(fakeApi, DEFAULT_SUBREDDIT) assertEquals( expected = Page( - data = listOf(fakePosts[0]), + data = listOf(fakePosts[0], fakePosts[1]), prevKey = null, - nextKey = fakePosts[0].name + nextKey = fakePosts[1].name ), actual = pagingSource.load( Refresh( key = null, - loadSize = 1, + loadSize = 2, placeholdersEnabled = false ) ), From 0e001bf4ba76303c94c643c4e996552f7354c751 Mon Sep 17 00:00:00 2001 From: Dustin Lam Date: Mon, 8 Feb 2021 17:41:22 -0800 Subject: [PATCH 8/8] Further simplify instrumented test --- PagingWithNetworkSample/app/build.gradle | 2 -- .../reddit/ui/RedditActivityTest.kt | 31 +++---------------- 2 files changed, 5 insertions(+), 28 deletions(-) diff --git a/PagingWithNetworkSample/app/build.gradle b/PagingWithNetworkSample/app/build.gradle index dcd3ce8a..b38c3c87 100644 --- a/PagingWithNetworkSample/app/build.gradle +++ b/PagingWithNetworkSample/app/build.gradle @@ -87,8 +87,6 @@ dependencies { androidTestImplementation deps.atsl.runner androidTestImplementation deps.atsl.rules androidTestImplementation deps.arch_core.testing - androidTestImplementation deps.espresso.contrib - androidTestImplementation deps.espresso.core testImplementation deps.junit testImplementation deps.coroutines.test diff --git a/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt b/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt index 8863baf7..7d5437bb 100644 --- a/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt +++ b/PagingWithNetworkSample/app/src/androidTest/java/com/android/example/paging/pagingwithnetwork/reddit/ui/RedditActivityTest.kt @@ -18,17 +18,9 @@ package com.android.example.paging.pagingwithnetwork.reddit.ui import android.app.Application import android.content.Intent -import android.view.View -import androidx.arch.core.executor.testing.CountingTaskExecutorRule -import androidx.recyclerview.widget.RecyclerView import androidx.test.annotation.UiThreadTest import androidx.test.core.app.ActivityScenario import androidx.test.core.app.ApplicationProvider -import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.NoMatchingViewException -import androidx.test.espresso.ViewAssertion -import androidx.test.espresso.matcher.ViewMatchers.withId -import com.android.example.paging.pagingwithnetwork.R import com.android.example.paging.pagingwithnetwork.reddit.DefaultServiceLocator import com.android.example.paging.pagingwithnetwork.reddit.ServiceLocator import com.android.example.paging.pagingwithnetwork.reddit.api.RedditApi @@ -38,10 +30,8 @@ import com.android.example.paging.pagingwithnetwork.reddit.repository.RedditPost import com.android.example.paging.pagingwithnetwork.reddit.ui.SubRedditViewModel.Companion.DEFAULT_SUBREDDIT import com.android.example.paging.pagingwithnetwork.repository.FakeRedditApi import com.android.example.paging.pagingwithnetwork.repository.PostFactory -import org.hamcrest.CoreMatchers.`is` -import org.hamcrest.MatcherAssert.assertThat +import org.junit.Assert.assertEquals import org.junit.Before -import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized @@ -57,9 +47,6 @@ class RedditActivityTest(private val type: RedditPostRepository.Type) { fun params() = arrayOf(IN_MEMORY_BY_ITEM, IN_MEMORY_BY_PAGE) } - @get:Rule - var testRule = CountingTaskExecutorRule() - private val postFactory = PostFactory() @Before @@ -80,7 +67,7 @@ class RedditActivityTest(private val type: RedditPostRepository.Type) { @Test @UiThreadTest fun showSomeResults() { - ActivityScenario.launch( + val scenario = ActivityScenario.launch( RedditActivity.intentFor( context = ApplicationProvider.getApplicationContext(), type = type @@ -89,17 +76,9 @@ class RedditActivityTest(private val type: RedditPostRepository.Type) { } ) - onView(withId(R.id.list)).check(RecyclerViewItemCountAssertion(3)) - } - - class RecyclerViewItemCountAssertion(private val expectedCount: Int) : ViewAssertion { - override fun check(view: View, noViewFoundException: NoMatchingViewException?) { - if (noViewFoundException != null) { - throw noViewFoundException - } - val recyclerView = view as RecyclerView - val adapter = recyclerView.adapter - assertThat(adapter!!.itemCount, `is`(expectedCount)) + scenario.onActivity { activity -> + val recyclerView = activity.binding.list + assertEquals(3, recyclerView.adapter?.itemCount) } } } \ No newline at end of file