Status Update
Comments
ap...@google.com <ap...@google.com> #2
Process: work, PID: 7773
java.util.ConcurrentModificationException
at
androidx.compose.runtime.snapshots.StateListIterator.validateModification(SnapshotStateList.kt:297)
at androidx.compose.runtime.snapshots.StateListIterator.next(SnapshotStateList.kt:276)
at
.DashboardViewModel$getCarousalListApi$1$1$1.invokeSuspend(DashboardViewModel.kt:751)
at
.DashboardViewModel$getCarousalListApi$1$1$1.invoke(Unknown
Source:8)
at
.DashboardViewModel$getCarousalListApi$1$1$1.invoke(Unknown
Source:2)
at
.config.common.ExtensionsKt$launchOnIOWithCompletion$1.invokeSuspend(Extensions.kt:28)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:115)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:103)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@5443283, Dispatchers.IO]
na...@google.com <na...@google.com> #3
reverse()
constructs two iterators (if the list is > 18 in size), one forward walking and one backwards walking and will modify the array using both iterators. This is currently treated as a concurrent modification as the array was modified after the iterator was created. This is too strict for the Java algorithms. They expect a concurrent modification exception to only be thrown if a structural chagne to the list is made, e.g. an insert or delete, not a value change.
First, mutableStateListOf()
lists will be changed to not interpret setting the value of the slot of an element as a concurrent. Second, they will be changed to support RandomAccess
which avoids the algorithms using the iterators for operations that would be faster if they used get
and set
directly.
jk...@gmail.com <jk...@gmail.com> #4
Branch: androidx-main
commit 75f720e1695c3574930d0385211341fac876a834
Author: Chuck Jazdzewski <chuckj@google.com>
Date: Thu Sep 14 15:22:33 2023
Relax concurrent modification exception for snapshot state list
The snapshot state list iterator considered any change made outside the
iterator as a concurrent change. This change relaxes the checking to
only consider structural changes (adding and removing) to be treated as
a concurrent change. This allows SnapshotStateList to be used with
`reverse()` which assumes that setting the value of an element is not a
concurrent change.
Adds RandomeAccess interface to MutableStateList to signal collection
extensions functions they can use direct indexing versions of their
algorithm.
Corrects the set() after a call previous() to update the correct
element.
Fixes: 219554654
Test: ./gradlew :compose:r:r:tDUT
Relnote: """SnapshotStateList is not marked as RandomAccess to enable
the direct indexing version of list helpers to be used"
Change-Id: I5210ca5c0f490619381ecf93ac0b1ccb03071e36
M compose/runtime/runtime/api/current.txt
M compose/runtime/runtime/api/restricted_current.txt
M compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
M compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
ia...@gmail.com <ia...@gmail.com> #5
mi...@gmail.com <mi...@gmail.com> #6
ap...@google.com <ap...@google.com> #7
Branch: androidx-main
commit 3fc05b928c858af7bb318cc5f36a97715c6663a8
Author: Chris Craik <ccraik@google.com>
Date: Wed Mar 15 11:25:45 2023
Bump fragment's profileinstaller dependency to 1.3
Bug: 243851384
Test: None
Change-Id: I57274bd56d10fa38aa363419eb6b5cc30a3e967d
M fragment/fragment/build.gradle
ap...@google.com <ap...@google.com> #8
Branch: androidx-main
commit 47f41950723415b5fd857530298ddd6a7aac952a
Author: Chris Craik <ccraik@google.com>
Date: Wed Mar 15 11:22:56 2023
Bump compose's profileinstaller dependency to 1.3
Test: None
Bug: 243851384
Change-Id: I9dff371686203fd18cb8dc5680c79d8c16989d96
M compose/ui/ui/build.gradle
ap...@google.com <ap...@google.com> #9
Branch: androidx-main
commit 512f0c047e135deb054d7764677f981ffdbb1817
Author: Chris Craik <ccraik@google.com>
Date: Wed Mar 15 11:19:01 2023
Bump profileinstaller dependency to 1.3
Test: None
Bug: 243851384
Change-Id: I373f22c9285abf024c051dc22ff2183d743b7360
M appcompat/appcompat/build.gradle
M benchmark/benchmark-macro/build.gradle
M constraintlayout/constraintlayout/build.gradle
M navigation/navigation-common/build.gradle
M recyclerview/recyclerview/build.gradle
M tv/tv-foundation/build.gradle
M tv/tv-material/build.gradle
M wear/compose/compose-foundation/build.gradle
M wear/compose/compose-material-core/build.gradle
M wear/compose/compose-material/build.gradle
M wear/compose/compose-material3/build.gradle
M wear/compose/compose-navigation/build.gradle
ap...@google.com <ap...@google.com> #10
Branch: androidx-main
commit a8729785427262edc8c694584fb5cbaf323bfb80
Author: Chris Craik <ccraik@google.com>
Date: Wed Mar 15 11:24:39 2023
Bump activity's profileinstaller dependency to 1.3
Bug: 243851384
Test: None
Change-Id: Idc9af745ac5774491215980d26b0169b39195f30
M activity/activity/build.gradle
ap...@google.com <ap...@google.com> #11
Branch: androidx-main
commit 4bb158a35205ce4c0480d89ac325bf8ac86d3526
Author: Chris Craik <ccraik@google.com>
Date: Wed Mar 15 11:20:54 2023
Bump lifecycle's profileinstaller dependency to 1.3
Test: ./gradlew room:integ-test:room-testapp:cC -P android.testInstrumentationRunnerArguments.class=androidx.room.integration.testapp.test.QueryExecutorTest # API 17 emulator
Bug: 243851384
QueryExecutorTest was failing on API 17 due to non-native multidex
issues. Wasn't able to workaround in multidex proguard rules because
issues also occurred in the androidTest, which is also multidex.
Change-Id: I792343d042365e2db5940367a1e9fad377aedc26
M lifecycle/lifecycle-runtime/build.gradle
M room/integration-tests/testapp/build.gradle
D room/integration-tests/testapp/multidex-config.txt
A room/integration-tests/testapp/
pr...@google.com <pr...@google.com> #12
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.activity:activity:1.7.0
androidx.benchmark:benchmark-macro:1.2.0-alpha12
androidx.compose.ui:ui:1.4.0
androidx.constraintlayout:constraintlayout:2.2.0-alpha09
androidx.fragment:fragment:1.6.0-alpha08
androidx.lifecycle:lifecycle-runtime:2.6.1
androidx.navigation:navigation-common:2.6.0-alpha08
androidx.tv:tv-foundation:1.0.0-alpha05
androidx.tv:tv-material:1.0.0-alpha05
androidx.wear.compose:compose-foundation:1.2.0-alpha07
androidx.wear.compose:compose-material:1.2.0-alpha07
androidx.wear.compose:compose-material-core:1.2.0-alpha07
androidx.wear.compose:compose-navigation:1.2.0-alpha07
na...@google.com <na...@google.com> #13
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.appcompat:appcompat:1.7.0-alpha03
androidx.lifecycle:lifecycle-runtime:2.7.0-alpha01
pr...@google.com <pr...@google.com> #14
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.recyclerview:recyclerview:1.4.0-alpha01
ro...@gmail.com <ro...@gmail.com> #15
Profile Installer
Description
OVERVIEW
Androidx ProfileInstaller library has an implementation bug that can trigger a NullPointerException. Specifically, sending an Intent action androidx.profileinstaller.action.SKIP_FILE without any extras triggers the issue.
STEPS TO REPRODUCE
adb shell am broadcast -a androidx.profileinstaller.action.SKIP_FILE -n ${PACKAGE_NAME}/androidx.profileinstaller.ProfileInstallReceiver
RESULTS
Actual: App crashes
Expected: App shouldn't crash
NOTES
The issue is caused by the Intent extras being null. A null check of the extras is needed.
Seehttps://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/ProfileInstallReceiver.java;l=74
Component used: ProfileInstaller Version used: 1.2 Devices/Android versions reproduced on: Nexus 5 Android 7, Pixel 6 Android 13