Fixed
Status Update
Comments
da...@google.com <da...@google.com> #2
Information redacted by Android Beta Feedback.
sa...@smartpatient.eu <sa...@smartpatient.eu> #3
Thank you for reporting this issue. We have shared this with our product and engineering team and will update this issue with more information as it becomes available.
ap...@google.com <ap...@google.com> #4
The issue has been fixed and it will become available in a future Android release. Please keep an eye on the release notes(
da...@google.com <da...@google.com> #5
How long till this hit stable?
The issue is really annoying. Pixel 8 Pro + Pixel Buds A-Series + Pixel Watch. This should work without any issue and instead we have to manually disable Bluetooth on the watch whenever we use the buds. Don't you have quality controls on your products interactions?
Description
Version used: 2.1.0
Devices/Android versions reproduced on: not related
Recently I have updated all Room calls to suspend functions and I discovered that there is an issue with suspend function annotated with @RawQuery which returns generic type.
How to reproduce it?
I'm using base dao for all my entities:
abstract class BaseDao<ENTITY> {
@RawQuery
abstract fun rawQuery(query: SupportSQLiteQuery): List<ENTITY>
}
Example entity:
@Dao
abstract class SampleDao : BaseDao<SampleEntity>()
For this setup Room generates the following implementation:
@Override
public List<SampleEntity> rawQuery(final SupportSQLiteQuery query) {
final SupportSQLiteQuery _internalQuery = query;
__db.assertNotSuspendingTransaction();
final Cursor _cursor = DBUtil.query(__db, _internalQuery, false);
try {
final List<SampleEntity> _result = new ArrayList<SampleEntity>(_cursor.getCount());
while(_cursor.moveToNext()) {
final SampleEntity _item;
_item = __entityCursorConverter_examplePackageSampleEntity(_cursor);
_result.add(_item);
}
return _result;
} finally {
_cursor.close();
}
}
Problems start when I add suspend modifier to rawQuery function:
abstract class BaseDao<ENTITY> {
@RawQuery
abstract suspend fun rawQuery(query: SupportSQLiteQuery): List<ENTITY>
}
Then Room is not able to generate correct implementation and something like that comes out:
@Override
public Object rawQuery(final SupportSQLiteQuery query,
final Continuation<? super List<? extends SampleEntity>> p1) {
final SupportSQLiteQuery _internalQuery = query;
return CoroutinesRoom.execute(__db, false, new Callable<List<? extends ENTITY>>() {
@Override
public List<? extends ENTITY> call() throws Exception {
final Cursor _cursor = DBUtil.query(__db, _internalQuery, false);
try {
return _result;
} finally {
_cursor.close();
}
}
}, p1);
}
I also saw this in 2.2.0-alpha01 and I think issue lies in the code generation.