Fixed
Status Update
Comments
il...@google.com <il...@google.com>
il...@google.com <il...@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
st...@gmail.com <st...@gmail.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.
na...@google.com <na...@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()
}
}
Description
Component used: Navigation Version used: 2.4 Devices/Android versions reproduced on: all
AppCompatActivity::setupActionBarWithNavController
can be called to automatically update app bar content when navigation destination changes. In particular,setupActionBarWithNavController
promises to automatically hide the Up arrow for "top-level" destinations and show the Up arrow for all other destinations. To achieve this,setupActionBarWithNavController
needs to infer or be told which destinations are "top-level".When using a
BottomNavigationView
, I wantedI tried calling
setupActionBarWithNavController
and passing a customAppBarConfiguration
constructed using theMenu
instance from theBottomNavigationView
:Unfortunately, when passed a
Menu
whose entries correspond to navigation graph IDs,AppBarConfiguration::Builder
sets the graph IDs as top-level destination IDs, rather than the setting the graph start destination IDs as top-level destination IDs. The result is that theAbstractAppBarOnDestinationChangedListener
applied bysetupActionBarWithNavController
mistakenly classifies every destination as top-level and no screens have an Up arrow.This can be worked around by explicitly passing the IDs of the start destinations of each tab's graph when constructing the
AppBarConfiguration
builder:However, the behavior of
AppBarConfiguration.Builder(Menu)
remains surprising and it would be good to investigate whether that constructor could be made to behave as I anticipated!Android Study Group Slack thread:https://androidstudygroup.slack.com/archives/CAZCL8AVB/p1656470310000929?thread_ts=1655997032.467509&cid=CAZCL8AVB