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..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" @@ -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..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" @@ -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..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" @@ -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..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" @@ -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..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" @@ -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 index bdb88310..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" @@ -52,11 +52,11 @@ 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" -versions.room = "2.3.0-alpha01" +versions.room = "2.3.0-alpha04" versions.rx_android = "2.0.1" versions.rxjava2 = "2.1.3" versions.timber = "4.7.1" 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..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" @@ -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..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" @@ -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..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" @@ -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/build.gradle b/PagingWithNetworkSample/app/build.gradle index 399282e7..b38c3c87 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" @@ -79,18 +83,12 @@ 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 - testImplementation deps.junit - testImplementation deps.retrofit.mock - testImplementation deps.arch_core.testing - testImplementation deps.mockito.core + testImplementation deps.coroutines.test + testImplementation deps.kotlin.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 23f27461..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,11 +18,9 @@ package com.android.example.paging.pagingwithnetwork.reddit.ui import android.app.Application import android.content.Intent -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 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 @@ -32,17 +30,11 @@ 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.CoreMatchers.notNullValue -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 -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit -import java.util.concurrent.TimeoutException /** * Simple sanity test to ensure data is displayed @@ -55,10 +47,8 @@ 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 fun init() { val fakeApi = FakeRedditApi() @@ -68,45 +58,27 @@ 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 + } ) } @Test - @Throws(InterruptedException::class, TimeoutException::class) + @UiThreadTest fun showSomeResults() { - val intent = RedditActivity.intentFor( + val scenario = 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() - } - - override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { - latch.countDown() - } - }) - } - testRule.drainTasks(1, TimeUnit.SECONDS) - if (recyclerView.adapter?.itemCount ?: 0 > 0) { - return + scenario.onActivity { activity -> + val recyclerView = activity.binding.list + assertEquals(3, recyclerView.adapter?.itemCount) } - 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/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/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/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/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/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..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 @@ -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,8 @@ 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 - } - } + lateinit var binding: ActivityRedditBinding + private set private val model: SubRedditViewModel by viewModels { object : AbstractSavedStateViewModelFactory(this, null) { @@ -74,7 +67,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 +78,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 +101,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 +118,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 +129,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/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/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..6a3e9d09 --- /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], fakePosts[1]), + prevKey = fakePosts[0].name, + nextKey = fakePosts[1].name + ), + actual = pagingSource.load( + Refresh( + key = null, + loadSize = 2, + placeholdersEnabled = false + ) + ), + ) + } + + @Test + fun pageKeyedSubredditPagingSource() = runBlockingTest { + val pagingSource = PageKeyedSubredditPagingSource(fakeApi, DEFAULT_SUBREDDIT) + assertEquals( + expected = Page( + data = listOf(fakePosts[0], fakePosts[1]), + prevKey = null, + nextKey = fakePosts[1].name + ), + actual = pagingSource.load( + Refresh( + key = null, + loadSize = 2, + placeholdersEnabled = false + ) + ), + ) + } +} \ No newline at end of file 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..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,29 +16,35 @@ 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 -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() + @VisibleForTesting + 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, @@ -68,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 9469a6f0..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,10 +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 kotlinx.android.synthetic.main.activity_benchmark.* import org.junit.Assert.assertTrue import org.junit.Rule import org.junit.Test @@ -35,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.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.list.scrollByOneItem() - runWithTimingDisabled { - activity.testExecutor.flush() + benchmarkRule.measureRepeated { + activity.binding.list.scrollByOneItem() + runWithTimingDisabled { + activity.testExecutor.flush() + } } } } 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/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 { diff --git a/PagingWithNetworkSample/versions.gradle b/PagingWithNetworkSample/versions.gradle index 2dc4c1a7..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" @@ -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..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" @@ -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..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" @@ -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..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" @@ -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..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" @@ -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..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" @@ -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"