Status Update
Comments
ha...@reddit.com <ha...@reddit.com> #2
+1, but Deferred does not solve the Observer problem that Rx and LiveData do, so I guess Google should implement Channels instead of LiveData which is actually a Kotlin Coroutine counterpart. Looking forward to this as I've decided not to use RxJava in most of future projects due to Kotlin Coroutines..
ma...@google.com <ma...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit e78cceffeac28f0028342990c1391c640edf453c
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Wed Nov 28 12:40:24 2018
Room Support for Coroutines
This change allows users to define suspend functions in DAOs with
@Query, @Insert, @Update and @Delete. The new artifact room-coroutine
defines a helper classes for supporting the feature.
Bug: 69474692
Test: ./gradlew room:integration-tests:kotlintestapp:cC
Change-Id: Id73a6b845df3f21f99d14cb6980130dcf3885c81
M buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
A room/compiler/src/main/kotlin/androidx/room/ext/KotlinMetadataElement.kt
D room/compiler/src/main/kotlin/androidx/room/ext/KotlinMetadataProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/ext/element_ext.kt
M room/compiler/src/main/kotlin/androidx/room/ext/javapoet_ext.kt
M room/compiler/src/main/kotlin/androidx/room/processor/DeletionMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/InsertionMethodProcessor.kt
A room/compiler/src/main/kotlin/androidx/room/processor/MethodProcessorDelegate.kt
M room/compiler/src/main/kotlin/androidx/room/processor/PojoProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/RawQueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ShortcutMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/UpdateMethodProcessor.kt
A room/compiler/src/main/kotlin/androidx/room/solver/query/result/CoroutineResultBinder.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
A room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binder/CoroutineDeleteOrUpdateMethodBinder.kt
A room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binder/CoroutineInsertMethodBinder.kt
M room/compiler/src/main/kotlin/androidx/room/solver/shortcut/result/DeleteOrUpdateMethodAdapter.kt
M room/compiler/src/main/kotlin/androidx/room/solver/shortcut/result/InsertMethodAdapter.kt
M room/compiler/src/main/kotlin/androidx/room/vo/RelationCollector.kt
M room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
A room/coroutines/build.gradle
A room/coroutines/src/main/AndroidManifest.xml
A room/coroutines/src/main/java/androidx/room/CoroutinesRoom.kt
M room/integration-tests/kotlintestapp/build.gradle
M room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/dao/BooksDao.kt
M room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/BooksDaoTest.kt
A room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendRoomDispatcherTest.kt
M settings.gradle
https://android-review.googlesource.com/833705
https://goto.google.com/android-sha1/e78cceffeac28f0028342990c1391c640edf453c
Branch: androidx-master-dev
commit e78cceffeac28f0028342990c1391c640edf453c
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Wed Nov 28 12:40:24 2018
Room Support for Coroutines
This change allows users to define suspend functions in DAOs with
@Query, @Insert, @Update and @Delete. The new artifact room-coroutine
defines a helper classes for supporting the feature.
Bug: 69474692
Test: ./gradlew room:integration-tests:kotlintestapp:cC
Change-Id: Id73a6b845df3f21f99d14cb6980130dcf3885c81
M buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
A room/compiler/src/main/kotlin/androidx/room/ext/KotlinMetadataElement.kt
D room/compiler/src/main/kotlin/androidx/room/ext/KotlinMetadataProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/ext/element_ext.kt
M room/compiler/src/main/kotlin/androidx/room/ext/javapoet_ext.kt
M room/compiler/src/main/kotlin/androidx/room/processor/DeletionMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/InsertionMethodProcessor.kt
A room/compiler/src/main/kotlin/androidx/room/processor/MethodProcessorDelegate.kt
M room/compiler/src/main/kotlin/androidx/room/processor/PojoProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/RawQueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ShortcutMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/UpdateMethodProcessor.kt
A room/compiler/src/main/kotlin/androidx/room/solver/query/result/CoroutineResultBinder.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
A room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binder/CoroutineDeleteOrUpdateMethodBinder.kt
A room/compiler/src/main/kotlin/androidx/room/solver/shortcut/binder/CoroutineInsertMethodBinder.kt
M room/compiler/src/main/kotlin/androidx/room/solver/shortcut/result/DeleteOrUpdateMethodAdapter.kt
M room/compiler/src/main/kotlin/androidx/room/solver/shortcut/result/InsertMethodAdapter.kt
M room/compiler/src/main/kotlin/androidx/room/vo/RelationCollector.kt
M room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
A room/coroutines/build.gradle
A room/coroutines/src/main/AndroidManifest.xml
A room/coroutines/src/main/java/androidx/room/CoroutinesRoom.kt
M room/integration-tests/kotlintestapp/build.gradle
M room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/dao/BooksDao.kt
M room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/BooksDaoTest.kt
A room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/SuspendRoomDispatcherTest.kt
M settings.gradle
ry...@google.com <ry...@google.com> #5
For now we'll be just supporting one-off suspend functions in Room 2.1.0-alpha03. Coroutines stream functionality with channels is still a work in progress.
ha...@reddit.com <ha...@reddit.com> #6
Relating to the original request, how about allowing a return type of Deferred<LiveData<T>> which suspends until LiveData<T>'s value has been set the first time?
Description
Steps to Reproduce or Code Sample to Reproduce:
See MainActivity in attached sample project, or:
Note: RV refers to
RecyclerView
RecyclerView
RecyclerView
are emptyFrameLayout
sonBindViewHolder
of the RV adapter, createComposeView
and add it as a child to theFrameLayout
. CallsetContent
on theComposeView
with arbitrary layout (e.g. coloredBox
)notifyItemChanged(0, Any())
Behavior:
What I would expect to happen: No crash happens
What actually happens:
onBindViewHolder
call, theparent
field of theRecyclerView
item view will benull
, but itsmAttachInfo
will not benull
ComposeView
is added to the item view, itsisAttachedToWindow
will be true, and it will try to create a composition.ViewTreeLifecycleOwner
usingView.findViewTreeLifecycleOwner()
which tries walking up the view hierarchy to obtain the owner from the root view.parent
,View.findViewTreeLifecycleOwner()
returns null, andView.createLifecycleAwareWindowRecomposer()
throws and crashes the app.Stack trace (if applicable):