Fixed
Status Update
Comments
cl...@google.com <cl...@google.com>
ap...@google.com <ap...@google.com> #2
Yigit, do you have time to fix it?
reemission of the same liveData is racy
reemission of the same liveData is racy
ap...@google.com <ap...@google.com> #3
yea i'll take it.
ap...@google.com <ap...@google.com> #4
Thanks for the detailed analysis. This may not be an issue anymore since we've started using Main.immediate there but I' not sure; I'll try to create a test case.
ap...@google.com <ap...@google.com> #5
just emitting same live data reproduces the issue.
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
ap...@google.com <ap...@google.com> #6
With 2.2.0-alpha04 (that use Main.immediate), the issue seems to be still there (I tested it by calling emitSource() twice, like your test case)
ap...@google.com <ap...@google.com> #7
yea sorry immediate does not fix it.
I actually have a WIP fix for it:
https://android-review.googlesource.com/c/platform/frameworks/support/+/1112186
if your case is the one i found (emitting same LiveData multiple times, as shown in #5) you can work around it by adding a dummy transformation.
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData.map {it })
emitSource(subLiveData.map {it} )
}
I actually have a WIP fix for it:
if your case is the one i found (emitting same LiveData multiple times, as shown in #5) you can work around it by adding a dummy transformation.
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData.map {it })
emitSource(subLiveData.map {it} )
}
ap...@google.com <ap...@google.com> #8
Project: platform/frameworks/support
Branch: androidx-master-dev
commit af12e75e6b4110f48e44ca121466943909de8f06
Author: Yigit Boyar <yboyar@google.com>
Date: Tue Sep 03 12:58:11 2019
Fix coroutine livedata race condition
This CL fixes a bug in liveData builder where emitting same
LiveData source twice would make it crash because the second
emission registry could possibly happen before first one is
removed as source.
We fix it by using a suspending dispose function. It does feel
a bit hacky but we cannot make DisposableHandle.dispose async
and we do not want to block there. This does not mean that there
is a problem if developer disposes it manually since our emit
functions take care of making sure it disposes (and there is
no other way to add source to the underlying MediatorLiveData)
Bug: 140249349
Test: BuildLiveDataTest#raceTest_*
Change-Id: I0b464c242a583da4669af195cf2504e2adc4de40
M lifecycle/lifecycle-livedata-ktx/api/2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/current.txt
M lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_current.txt
M lifecycle/lifecycle-livedata-ktx/api/restricted_2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
M lifecycle/lifecycle-livedata-ktx/src/main/java/androidx/lifecycle/CoroutineLiveData.kt
M lifecycle/lifecycle-livedata-ktx/src/test/java/androidx/lifecycle/BuildLiveDataTest.kt
https://android-review.googlesource.com/1112186
https://goto.google.com/android-sha1/af12e75e6b4110f48e44ca121466943909de8f06
Branch: androidx-master-dev
commit af12e75e6b4110f48e44ca121466943909de8f06
Author: Yigit Boyar <yboyar@google.com>
Date: Tue Sep 03 12:58:11 2019
Fix coroutine livedata race condition
This CL fixes a bug in liveData builder where emitting same
LiveData source twice would make it crash because the second
emission registry could possibly happen before first one is
removed as source.
We fix it by using a suspending dispose function. It does feel
a bit hacky but we cannot make DisposableHandle.dispose async
and we do not want to block there. This does not mean that there
is a problem if developer disposes it manually since our emit
functions take care of making sure it disposes (and there is
no other way to add source to the underlying MediatorLiveData)
Bug: 140249349
Test: BuildLiveDataTest#raceTest_*
Change-Id: I0b464c242a583da4669af195cf2504e2adc4de40
M lifecycle/lifecycle-livedata-ktx/api/2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/current.txt
M lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_current.txt
M lifecycle/lifecycle-livedata-ktx/api/restricted_2.2.0-alpha05.txt
M lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
M lifecycle/lifecycle-livedata-ktx/src/main/java/androidx/lifecycle/CoroutineLiveData.kt
M lifecycle/lifecycle-livedata-ktx/src/test/java/androidx/lifecycle/BuildLiveDataTest.kt
ap...@google.com <ap...@google.com> #9
Project: platform/frameworks/support
Branch: androidx-main
commit a74dfb56fc5e9a39602c74ced3db06222d32ce4b
Author: Clara Fok <clarafok@google.com>
Date: Fri Oct 21 12:22:29 2022
Initial implementation of asSnapshot API
The initial structure to enable Flow<PagingData<T>>.asSnapshot API to return a snapshot of first refresh load.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: A Flow<PagingData<T>> extension method to execute test loading operations and returns a List<T>.
Change-Id: Ib29b92793c33a759b52d6b4881d3a3f812b26382
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/build.gradle
A paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
A paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
A paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2264590
Branch: androidx-main
commit a74dfb56fc5e9a39602c74ced3db06222d32ce4b
Author: Clara Fok <clarafok@google.com>
Date: Fri Oct 21 12:22:29 2022
Initial implementation of asSnapshot API
The initial structure to enable Flow<PagingData<T>>.asSnapshot API to return a snapshot of first refresh load.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: A Flow<PagingData<T>> extension method to execute test loading operations and returns a List<T>.
Change-Id: Ib29b92793c33a759b52d6b4881d3a3f812b26382
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/build.gradle
A paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
A paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
A paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #10
Project: platform/frameworks/support
Branch: androidx-main
commit 43466fc1a3f1e163d1b0796eee53de8657911553
Author: Clara Fok <clarafok@google.com>
Date: Tue Nov 15 13:47:44 2022
Add multi-generational support in paging-testing Pager layer
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: Added new SnapshotLoader#refresh API to fake UI-driven refresh signals such as swipe-to-refresh.
Change-Id: Ic4babf6783f51dbdab690693e176f65820fa3a38
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2303484
Branch: androidx-main
commit 43466fc1a3f1e163d1b0796eee53de8657911553
Author: Clara Fok <clarafok@google.com>
Date: Tue Nov 15 13:47:44 2022
Add multi-generational support in paging-testing Pager layer
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: Added new SnapshotLoader#refresh API to fake UI-driven refresh signals such as swipe-to-refresh.
Change-Id: Ic4babf6783f51dbdab690693e176f65820fa3a38
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #11
Project: platform/frameworks/support
Branch: androidx-main
commit 321535f5d4f9bbdbf5f3b900cf5dd7e7f82604e2
Author: Clara Fok <clarafok@google.com>
Date: Tue Nov 15 16:55:32 2022
Add appendScrollWhile API for Pager layer testing
This SnapshotLoader API takes a predicate and will fake append scroll while the most recently loaded item matches the predicate.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: Added a SnapshotLoader#appendScrollWhile API which takes a predicate and will fake append scroll while the most recently loaded item matches the predicate.
Change-Id: Id6223b81ebf221456147e41c428a7718e9c494e6
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2295938
Branch: androidx-main
commit 321535f5d4f9bbdbf5f3b900cf5dd7e7f82604e2
Author: Clara Fok <clarafok@google.com>
Date: Tue Nov 15 16:55:32 2022
Add appendScrollWhile API for Pager layer testing
This SnapshotLoader API takes a predicate and will fake append scroll while the most recently loaded item matches the predicate.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: Added a SnapshotLoader#appendScrollWhile API which takes a predicate and will fake append scroll while the most recently loaded item matches the predicate.
Change-Id: Id6223b81ebf221456147e41c428a7718e9c494e6
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #12
Project: platform/frameworks/support
Branch: androidx-main
commit e952c8c46bea807d609272fdde7d390ee7de300d
Author: Clara Fok <clarafok@google.com>
Date: Tue Dec 06 16:16:01 2022
Add appendScrollWhile tests
Test: ./gradlew paging:paging-testing:ktlint
Bug: 235528239
Change-Id: I8088ce624bdabc6b287c14bb84cc46e0c6d0505b
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2330004
Branch: androidx-main
commit e952c8c46bea807d609272fdde7d390ee7de300d
Author: Clara Fok <clarafok@google.com>
Date: Tue Dec 06 16:16:01 2022
Add appendScrollWhile tests
Test: ./gradlew paging:paging-testing:ktlint
Bug: 235528239
Change-Id: I8088ce624bdabc6b287c14bb84cc46e0c6d0505b
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #13
Project: platform/frameworks/support
Branch: androidx-main
commit bc67295c7f0760ae58b6ce31380940b08eb57a2e
Author: Clara Fok <clarafok@google.com>
Date: Wed Dec 07 14:17:40 2022
Adjust PagerFlowSnapshot initial lastAccessedIndex calculation
Upon a Refresh load, Paging would attempt to trigger prefetches on either direction if the [center index of initial load] - [presentedItemsBeyondAnchor] < prefetchDistance of that direction. This "anchor" essentially is the center index of the initial loaded items with placeholders accounted for.
In PagerFlowSnapshot, the initial lastAccessedIndex was based on index of initial load's last item. Since future loads are based on this initial lastAccessedIndex, it essentially acts as the initial "anchor" and so we want to match its computation with the computation of real paging's initial "anchor".
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Change-Id: I654e3a142c702b93a6df8f85bb73860b10e20d99
M paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
https://android-review.googlesource.com/2333747
Branch: androidx-main
commit bc67295c7f0760ae58b6ce31380940b08eb57a2e
Author: Clara Fok <clarafok@google.com>
Date: Wed Dec 07 14:17:40 2022
Adjust PagerFlowSnapshot initial lastAccessedIndex calculation
Upon a Refresh load, Paging would attempt to trigger prefetches on either direction if the [center index of initial load] - [presentedItemsBeyondAnchor] < prefetchDistance of that direction. This "anchor" essentially is the center index of the initial loaded items with placeholders accounted for.
In PagerFlowSnapshot, the initial lastAccessedIndex was based on index of initial load's last item. Since future loads are based on this initial lastAccessedIndex, it essentially acts as the initial "anchor" and so we want to match its computation with the computation of real paging's initial "anchor".
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Change-Id: I654e3a142c702b93a6df8f85bb73860b10e20d99
M paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
ap...@google.com <ap...@google.com> #14
Project: platform/frameworks/support
Branch: androidx-main
commit 9dc3878a25ea31709f07780191742550c4e9195f
Author: Clara Fok <clarafok@google.com>
Date: Fri Dec 02 16:16:47 2022
Add prependScrollWhile API for Pager layer testing
This SnapshotLoader API takes a predicate and will fake prepend scroll while the most recently loaded item matches the predicate.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: Added a SnapshotLoader#prependScrollWhile API which takes a predicate and will fake prepend scroll while the most recently loaded item matches the predicate.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Change-Id: I2249f7147213881bdef9acd42287d9fca0dfcc09
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2326116
Branch: androidx-main
commit 9dc3878a25ea31709f07780191742550c4e9195f
Author: Clara Fok <clarafok@google.com>
Date: Fri Dec 02 16:16:47 2022
Add prependScrollWhile API for Pager layer testing
This SnapshotLoader API takes a predicate and will fake prepend scroll while the most recently loaded item matches the predicate.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: Added a SnapshotLoader#prependScrollWhile API which takes a predicate and will fake prepend scroll while the most recently loaded item matches the predicate.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Change-Id: I2249f7147213881bdef9acd42287d9fca0dfcc09
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #15
Project: platform/frameworks/support
Branch: androidx-main
commit aa6d1cc8b24e96b0250132f8e376d0448d109545
Author: Clara Fok <clarafok@google.com>
Date: Mon Jan 09 17:45:04 2023
ScrollTo prepend with await placeholders
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: "Added SnapshotLoader api scrollTo(index) to fake prepend scrolls from current index to a smaller index."
Change-Id: I51f4d2bba2a98a829eeac3ed689ecc0ea0fc7a19
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2333964
Branch: androidx-main
commit aa6d1cc8b24e96b0250132f8e376d0448d109545
Author: Clara Fok <clarafok@google.com>
Date: Mon Jan 09 17:45:04 2023
ScrollTo prepend with await placeholders
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: "Added SnapshotLoader api scrollTo(index) to fake prepend scrolls from current index to a smaller index."
Change-Id: I51f4d2bba2a98a829eeac3ed689ecc0ea0fc7a19
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #16
Project: platform/frameworks/support
Branch: androidx-main
commit 053d429897a13fae3e0b295c5b5d660769a5ead8
Author: Clara Fok <clarafok@google.com>
Date: Wed Jan 18 10:50:21 2023
PrependTo supports negative indices
PrependTo now supports negative indices. If there were placeholders, loads will be capped to index[0]. If there were no placeholders, it will scroll until it either hits requested scroll distance or no more items can be prepended.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Change-Id: I8e80c1aaed221b7d8686e93042c9782aabdcc153
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2393018
Branch: androidx-main
commit 053d429897a13fae3e0b295c5b5d660769a5ead8
Author: Clara Fok <clarafok@google.com>
Date: Wed Jan 18 10:50:21 2023
PrependTo supports negative indices
PrependTo now supports negative indices. If there were placeholders, loads will be capped to index[0]. If there were no placeholders, it will scroll until it either hits requested scroll distance or no more items can be prepended.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Change-Id: I8e80c1aaed221b7d8686e93042c9782aabdcc153
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #17
Project: platform/frameworks/support
Branch: androidx-main
commit 5103421baa2e2cbf2b4438f5092cc4804ac0f06a
Author: Clara Fok <clarafok@google.com>
Date: Tue Jan 17 13:03:04 2023
ScrollTo append with await placeholders
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: "Expanded SnapshotLoader api scrollTo(index) to support fake append scrolls from current index to a larger index."
Change-Id: I96def78b99fcc9ee088a0a912ba69866d8667715
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2392032
Branch: androidx-main
commit 5103421baa2e2cbf2b4438f5092cc4804ac0f06a
Author: Clara Fok <clarafok@google.com>
Date: Tue Jan 17 13:03:04 2023
ScrollTo append with await placeholders
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: "Expanded SnapshotLoader api scrollTo(index) to support fake append scrolls from current index to a larger index."
Change-Id: I96def78b99fcc9ee088a0a912ba69866d8667715
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #18
Project: platform/frameworks/support
Branch: androidx-main
commit 2a62135ffbe8b26982596c97ea661c0840875383
Author: Clara Fok <clarafok@google.com>
Date: Wed Jan 18 12:45:51 2023
Add testing for separators and page drops
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Change-Id: I16830f9dc11f3c48a2609767bbcf3f09c52f4ebc
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2393023
Branch: androidx-main
commit 2a62135ffbe8b26982596c97ea661c0840875383
Author: Clara Fok <clarafok@google.com>
Date: Wed Jan 18 12:45:51 2023
Add testing for separators and page drops
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Change-Id: I16830f9dc11f3c48a2609767bbcf3f09c52f4ebc
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #19
Project: platform/frameworks/support
Branch: androidx-main
commit ec11bf52e0477e193db14719ec82a7f8fe3e13a9
Author: Clara Fok <clarafok@google.com>
Date: Thu Jan 26 16:27:57 2023
Refactor scrollTo to focus on await loads
We are splitting scrolls and flings into two separate APIs.
Test: n/a
Bug: 235528239
Relnote: "SnapshotLoader.scrollTo will now only support scrolling that awaits for placeholders to be loaded in."
Change-Id: I7ce345200d07fa1eef9f5d1028fd88caab1477b3
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2404351
Branch: androidx-main
commit ec11bf52e0477e193db14719ec82a7f8fe3e13a9
Author: Clara Fok <clarafok@google.com>
Date: Thu Jan 26 16:27:57 2023
Refactor scrollTo to focus on await loads
We are splitting scrolls and flings into two separate APIs.
Test: n/a
Bug: 235528239
Relnote: "SnapshotLoader.scrollTo will now only support scrolling that awaits for placeholders to be loaded in."
Change-Id: I7ce345200d07fa1eef9f5d1028fd88caab1477b3
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #20
Project: platform/frameworks/support
Branch: androidx-main
commit 83a253e7d9ddc36c1d2005c4a75188704e2378a3
Author: Clara Fok <clarafok@google.com>
Date: Fri Jan 27 14:34:29 2023
Clean up PagerFlowSnapshotTest
Adjust test names and test setups
Test: ./gradlew paging:paging-testing:cC
Bug: 235528239
Change-Id: Iab1debb310a84b0b3333d3bfa6e3e11c7a46e1b7
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2406434
Branch: androidx-main
commit 83a253e7d9ddc36c1d2005c4a75188704e2378a3
Author: Clara Fok <clarafok@google.com>
Date: Fri Jan 27 14:34:29 2023
Clean up PagerFlowSnapshotTest
Adjust test names and test setups
Test: ./gradlew paging:paging-testing:cC
Bug: 235528239
Change-Id: Iab1debb310a84b0b3333d3bfa6e3e11c7a46e1b7
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #21
Project: platform/frameworks/support
Branch: androidx-main
commit 60e95021f93cfa2105dec2e8f04932efa949c9d2
Author: Clara Fok <clarafok@google.com>
Date: Fri Jan 27 15:59:40 2023
Add new SnapshotLoader api #flingTo
Fakes flinging from one item to another on screen. It is a version of fast scrolling that will not wait for placeholders to load. This function supports jumps.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: "Added new SnapshotLoader api flingTo(index) to support prepend scrolls without waiting for placeholders. This fakes fast prepend scrolls where jumps may be triggered if traversed placeholders fulfills jumpThreshold."
Change-Id: I5bd26ec7d66f52696a3d4ea6a610b0ccabd95a84
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2406435
Branch: androidx-main
commit 60e95021f93cfa2105dec2e8f04932efa949c9d2
Author: Clara Fok <clarafok@google.com>
Date: Fri Jan 27 15:59:40 2023
Add new SnapshotLoader api #flingTo
Fakes flinging from one item to another on screen. It is a version of fast scrolling that will not wait for placeholders to load. This function supports jumps.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: "Added new SnapshotLoader api flingTo(index) to support prepend scrolls without waiting for placeholders. This fakes fast prepend scrolls where jumps may be triggered if traversed placeholders fulfills jumpThreshold."
Change-Id: I5bd26ec7d66f52696a3d4ea6a610b0ccabd95a84
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #22
Project: platform/frameworks/support
Branch: androidx-main
commit 73e02d3b1b5dc56ca0acbae46559042aadf4a82e
Author: Clara Fok <clarafok@google.com>
Date: Mon Jan 30 15:04:46 2023
Expand SnapshotLoader api #flingTo Append
Add flingTo support for Append flinging from one item to another. It is a version of fast scrolling that will not wait for placeholders to load. This function supports jumps.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: "Expanded SnapshotLoader api flingTo(index) to support append scrolls without waiting for placeholders. This fakes fast append scrolls where jumps may be triggered if traversed placeholders fulfills jumpThreshold."
Change-Id: Ic1238184b82106a5ac6ec5f517819a489dd13218
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2407781
Branch: androidx-main
commit 73e02d3b1b5dc56ca0acbae46559042aadf4a82e
Author: Clara Fok <clarafok@google.com>
Date: Mon Jan 30 15:04:46 2023
Expand SnapshotLoader api #flingTo Append
Add flingTo support for Append flinging from one item to another. It is a version of fast scrolling that will not wait for placeholders to load. This function supports jumps.
Test: ./gradlew paging:paging-testing:test
Bug: 235528239
Relnote: "Expanded SnapshotLoader api flingTo(index) to support append scrolls without waiting for placeholders. This fakes fast append scrolls where jumps may be triggered if traversed placeholders fulfills jumpThreshold."
Change-Id: Ic1238184b82106a5ac6ec5f517819a489dd13218
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
ap...@google.com <ap...@google.com> #23
Project: platform/frameworks/support
Branch: androidx-main
commit 1676f58d3cf28c2c309bb2c8f52cf11585ffd519
Author: Clara Fok <clarafok@google.com>
Date: Wed Feb 01 09:48:31 2023
Implement load error recovery in snapshots
When PagingSource reutrns LoadResult.Error, the default behavior is to rethrow the LoadResult.Error.Throwable. Users can also choose to retry the failed load or return the current snapshot.
Test: ./gradlew paging:paging-testing:cC
Bug: 235528239
Relnote: "asSnapshot api now takes in an onError param as error recovery strategy when PagingSource returns LoadResult.Error. Default behavior is to rethrow the load error with optional strategies `retry` and `return current snapshot`."
Change-Id: I55fd2374b68f8e18a292865a92143f9de50bbad0
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
A paging/paging-testing/src/main/java/androidx/paging/testing/LoadErrorHandler.kt
M paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
https://android-review.googlesource.com/2413143
Branch: androidx-main
commit 1676f58d3cf28c2c309bb2c8f52cf11585ffd519
Author: Clara Fok <clarafok@google.com>
Date: Wed Feb 01 09:48:31 2023
Implement load error recovery in snapshots
When PagingSource reutrns LoadResult.Error, the default behavior is to rethrow the LoadResult.Error.Throwable. Users can also choose to retry the failed load or return the current snapshot.
Test: ./gradlew paging:paging-testing:cC
Bug: 235528239
Relnote: "asSnapshot api now takes in an onError param as error recovery strategy when PagingSource returns LoadResult.Error. Default behavior is to rethrow the load error with optional strategies `retry` and `return current snapshot`."
Change-Id: I55fd2374b68f8e18a292865a92143f9de50bbad0
M paging/paging-testing/api/current.txt
M paging/paging-testing/api/public_plus_experimental_current.txt
M paging/paging-testing/api/restricted_current.txt
A paging/paging-testing/src/main/java/androidx/paging/testing/LoadErrorHandler.kt
M paging/paging-testing/src/main/java/androidx/paging/testing/PagerFlowSnapshot.kt
M paging/paging-testing/src/main/java/androidx/paging/testing/SnapshotLoader.kt
M paging/paging-testing/src/test/kotlin/androidx/paging/testing/PagerFlowSnapshotTest.kt
cl...@google.com <cl...@google.com> #24
First alpha with complete API available in paging-testing 3.2.0-alpha04
Description
Component used: Paging
Version used: 3.2.0-alpha01
Right now, testing any layer of Paging (e.g., your
PagingSource
or aPager
in yourViewModel
) requires setting up ~every other layer by hand. This is particularly challenging when trying to mirror what is actually going to happen at the UI layer without actually scrolling aRecyclerView
or trying to use aLazyColumn
as part of your ViewModel test.It would be really helpful if there was a
paging-testing
artifact that allowed creating:PagingSource
that you could use to simulate loading multiple pages of data and invalidation triggered from thePagingSource
sideThere are a probably other helpful APIs that may have to be exposed to make testing and separating each layer easier as well so this work should also take into account making changes in the Paging artifact itself to facilitate this separation of concerns.