Fixed
Status Update
Comments
su...@google.com <su...@google.com>
ap...@google.com <ap...@google.com> #2
Thanks for reporting this. We will investigate this and get back to you once we have an update.
su...@google.com <su...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-main
commit 5dd50789a7bbcba846f41e4265bd5411fb542b02
Author: Vighnesh Raut <vighnesh.raut13@gmail.com>
Date: Wed Dec 21 17:16:55 2022
Fixed "clickable" modifier doesn't work with ImmersiveList
* In the "focusableItem" modifier, we add a "focusable" modifier. Now, if the user adds the "clickable" modifier, the
"focusable" modifier added by us has no effect. So, we are now removing the "focusable" modifier
from it. Now, user will have to manually add "focusable()" or "clickable()" along with
"focusableItem". Since this is an immersive list item, ideally, the item will always be clickable.
* Renamed "focusableItem" modifier to "immersiveListItem" modifier which is a better name for the new API and also this
makes it clear, while reading, that this modifier is only part of "ImmersiveList" and also makes
doesn't hint that "focusable()" modifier would be auto-applied
* Moved the immersive list component out of the sub-package
* Added missing ktdocs for params
* Added sample immersive list usage
Bug: b/263061052
Test: Updated tests
Relnote: "Renamed `focusableItem` to `immersiveListItem` and removed `focusable()` modifier. Now
users will have to manually add `focusable()` or `clickable()` modifier along with
`immersiveListItem`"
Change-Id: I1fd6c8cca3d7f4e810ad838ec1aad0b3c3e41450
M tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/ImmersiveList.kt
A tv/samples/src/main/java/androidx/tv/samples/ImmersiveListSamples.kt
M tv/tv-material/api/current.txt
M tv/tv-material/api/public_plus_experimental_current.txt
M tv/tv-material/api/restricted_current.txt
M tv/tv-material/src/androidTest/java/androidx/tv/material/ImmersiveListTest.kt
M tv/tv-material/src/main/java/androidx/tv/material/ImmersiveList.kt
https://android-review.googlesource.com/2363328
Branch: androidx-main
commit 5dd50789a7bbcba846f41e4265bd5411fb542b02
Author: Vighnesh Raut <vighnesh.raut13@gmail.com>
Date: Wed Dec 21 17:16:55 2022
Fixed "clickable" modifier doesn't work with ImmersiveList
* In the "focusableItem" modifier, we add a "focusable" modifier. Now, if the user adds the "clickable" modifier, the
"focusable" modifier added by us has no effect. So, we are now removing the "focusable" modifier
from it. Now, user will have to manually add "focusable()" or "clickable()" along with
"focusableItem". Since this is an immersive list item, ideally, the item will always be clickable.
* Renamed "focusableItem" modifier to "immersiveListItem" modifier which is a better name for the new API and also this
makes it clear, while reading, that this modifier is only part of "ImmersiveList" and also makes
doesn't hint that "focusable()" modifier would be auto-applied
* Moved the immersive list component out of the sub-package
* Added missing ktdocs for params
* Added sample immersive list usage
Bug:
Test: Updated tests
Relnote: "Renamed `focusableItem` to `immersiveListItem` and removed `focusable()` modifier. Now
users will have to manually add `focusable()` or `clickable()` modifier along with
`immersiveListItem`"
Change-Id: I1fd6c8cca3d7f4e810ad838ec1aad0b3c3e41450
M tv/integration-tests/demos/src/main/java/androidx/tv/integration/demos/ImmersiveList.kt
A tv/samples/src/main/java/androidx/tv/samples/ImmersiveListSamples.kt
M tv/tv-material/api/current.txt
M tv/tv-material/api/public_plus_experimental_current.txt
M tv/tv-material/api/restricted_current.txt
M tv/tv-material/src/androidTest/java/androidx/tv/material/ImmersiveListTest.kt
M tv/tv-material/src/main/java/androidx/tv/material/ImmersiveList.kt
Description
Version used: 1.0.0-alpha06
Devices/Android versions reproduced on: Many
We can see a large number of ConcurrentModificationExceptions in WorkManager:
java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4000010 bqHint=4 (has extras) } in vu@2406837b
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:988)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:7007)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:346)
at java.util.LinkedHashMap$KeyIterator.next(LinkedHashMap.java:366)
at androidx.work.impl.constraints.trackers.ConstraintTracker.setState(OperaSrc:89)
at androidx.work.impl.constraints.trackers.NetworkStateTracker$NetworkStateBroadcastReceiver.onReceive(OperaSrc:157)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:978)
It looks like the mListeners set is being modified during the loop in ConstraintTracker.setState(). I see two potential issues with this method:
1. Maybe a listener is added or removed in onConstraintChanged(). I haven't seen this happen, but it might be good to make a copy of mListeners and iterate over the copy.
2. The NetworkStateTracker.mNetworkCallback is called on a different thread than the main thread. In consequence setState() is called on a different thread so there is a possibility that the main thread adds or removes a listener. This cannot be the (only) reason because the error happens in response to the CONNECTIVITY_CHANGE.
This may be fixed with synchronization or by registering mNetworkCallback to run on the main thread.