Status Update
Comments
ma...@google.com <ma...@google.com> #2
Branch: androidx-master-dev
commit b90079595f33f58fece04026a97faa0d243acdb1
Author: Yuichi Araki <yaraki@google.com>
Date: Wed Sep 18 16:55:49 2019
Change the way to detect mismatch between POJO and query
This fixes cursor mismatch warnings with expandProjection.
Bug: 140759491
Test: QueryMethodProcessorTest
Change-Id: I7659002e5e0d1ef60fc1af2a625c0c36da0664d8
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
M room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt
mo...@google.com <mo...@google.com> #3
mo...@google.com <mo...@google.com> #4
Branch: androidx-master-dev
commit bdde5a1a970ddc9007b28de4aa29d60ffa588f08
Author: Yigit Boyar <yboyar@google.com>
Date: Thu Apr 16 16:47:05 2020
Re-factor how errors are dismissed when query is re-written
This CL changes how we handle errors/warnings if query is
re-written.
There was a bug in expandProjection where we would report warnings
for things that Room already fixes automatically (
The solution to that problem (I7659002e5e0d1ef60fc1af2a625c0c36da0664d8)
solved it by deferring validating of columns until after re-write
decision is made. Unfortunately, this required changing PojoRowAdapter
to have a dummy mapping until it is validating, make it hard to use
as it does have a non-null mapping which is not useful.
This CL partially reverts that change and instead rely on the log
deferring logic we have in Context. This way, we don't need to break
the stability of PojoRowAdapter while still having the ability to
drop warnings that room fixes. This will also play nicer when we
have different query re-writing options that can use more information
about the query results.
Bug: 153387066
Bug: 140759491
Test: existing tests pass
Change-Id: I2ec967c763d33d7a3ff02c1a13c6953b460d1e5f
M room/compiler/src/main/kotlin/androidx/room/log/RLog.kt
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
ma...@google.com <ma...@google.com> #5
Oh, I see, that makes sense. Basically on every PointerInputChange I have to "adjust the past" if needed by accounting for a previousPosition
change in the current change. That should work.
Over to Levi to look proper implementation fix.
st...@google.com <st...@google.com> #6
Hi! any updates regarding this issue? Thanks!
le...@google.com <le...@google.com> #7
Hi Alejandra, no updates yet sadly. This is a bit more complicated than expected, I believe it is related to other issues with the VelocityTracker
ap...@google.com <ap...@google.com> #8
Branch: androidx-main
commit 5b42a22514d0847dbce104a9f12216afa555b2bd
Author: Levi Albuquerque <levima@google.com>
Date: Fri May 13 13:06:45 2022
Improvements on how to calculate velocity based on pointer position
In this CL I updated the way we add data from an InputEventChange into
the velocity tracker. Now we add points deltas instead of event positions.
This will guarantee that points are consistent even if the target element
is moving, which was not considering when adding the input event position.
Test: Added tests to check the behaviour in scrolling.
Fixes: 216582726
Bug: 223440806
Bug: 227709803
Relnote: "When adding InputEventChange events to Velocity Tracker we will
consider now deltas instead of positions, this will guarantee the velocity
is correctly calculated for all cases even if the target element moves"
Change-Id: I51ec384a0424829b680b4666c7d3ce49227f45de
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/nestedscroll/NestedScrollModifierTest.kt
le...@google.com <le...@google.com>
ap...@google.com <ap...@google.com> #9
Branch: androidx-main
commit a66e75c2cb06d1d754055093e47cbdb6162d7aeb
Author: Levi Albuquerque <levima@google.com>
Date: Fri May 27 10:59:21 2022
Improvements on how to calculate velocity based on pointer position
In this CL I updated the way we add data from an InputEventChange into
the velocity tracker. Now we add points deltas instead of event positions.
This will guarantee that points are consistent even if the target element
is moving, which was not considering when adding the input event position.
Test: Added tests to check the behaviour in scrolling.
Fixes: 216582726
Bug: 223440806
Bug: 227709803
Relnote: "When adding InputEventChange events to Velocity Tracker we will
consider now deltas instead of positions, this will guarantee the velocity
is correctly calculated for all cases even if the target element moves"
Change-Id: If9ef3b9069e8f15b9b049bc3cd8b08bfd91edd49
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/nestedscroll/NestedScrollModifierTest.kt
le...@google.com <le...@google.com>
ap...@google.com <ap...@google.com> #11
Branch: androidx-main
commit 4e1e7aa76fe04d05362fa5cc319bd490401dfa61
Author: Levi Albuquerque <levima@google.com>
Date: Thu Jun 09 13:47:56 2022
Improvements on how to calculate velocity based on pointer position
In this CL I updated the way we add data from an InputEventChange into
the velocity tracker. Now we add points deltas instead of event positions.
This will guarantee that points are consistent even if the target element
is moving, which was not considering when adding the input event position.
Test: Added tests to check the behaviour in scrolling.
Fixes: 216582726
Bug: 223440806
Bug: 227709803
Relnote: "When adding InputEventChange events to Velocity Tracker we will
consider now deltas instead of positions, this will guarantee the velocity
is correctly calculated for all cases even if the target element moves"
Change-Id: Icea9d76a43643a6b17da11f3c539d27cb8fa6f6e
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyListTest.kt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/util/VelocityTracker.kt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/BaseLazyListTestWithOrientation.kt
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/nestedscroll/NestedScrollModifierTest.kt
to...@undo.app <to...@undo.app> #12
They were reverted 5 weeks ago.
The fling behaviour is still not working properly in this scenario:
ViewParent (MotionLayout) holding ComposeView (LazyColumn)
The release-notes details in 1.3.0-alpha01 (
"When adding InputEventChange events to Velocity Tracker we will consider now deltas instead of positions,
this will guarantee the velocity is correctly calculated for all cases even if the target element moves (If9ef3,
Can you provide an example of how this achieved in the scenario previously described?
Regards,
Toby.
le...@google.com <le...@google.com> #13
Hi Toby, thanks for reaching out about this. It seems there has been an issue with the release notes and they were not removed for the previous version. Since this change was merged on June 26th, it didn't make the cut for 1.3.0-alpha01. I'd expect it to come in the next release though, so stay tuned :)
to...@undo.app <to...@undo.app> #14
Do you have an ETA for the next release?
le...@google.com <le...@google.com> #15
Hi Toby, the changes are available on 1.3.0-alpha03, let me know if this fixes your issue.
to...@undo.app <to...@undo.app> #16
I am still not getting the expected behaviour.
When I do a fling on the list (LazyColumn), the parent view (MotionLayout) does not respond properly to this.
The Motionlayout only responds correctly when I am dragging the list.
When I try to fling the list it does not respond correctly. It either stops transitioning between the MotionLayout states or the transition between the two states is not done fluently.
I've been able to set up the same scenario, that has worked perfectly, with a RecyclerView instead of a ComposeView holding LazyColumn.
I've set up the LazyColumn with rememberNestedScrollInteropConnection().
It is set up like this.
binding.list.setContent {
LazyColumn(
state = listState,
modifier = Modifier
.fillMaxWidth()
.nestedScroll(rememberNestedScrollInteropConnection())
) {
items(listItems) {
......
}
}
}
The list is being set up in a MotionLayout (XML) via a ComposeView
<androidx.compose.ui.platform.ComposeView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/listTopGuideline"/>
The scene for MotionLayout has two constraint sets: "Start" and "End" where it should transition the listTopGuideline
app:layout_constraintGuide_percent from 0.59 to 0.1
<OnSwipe
app:dragDirection="dragUp"
app:touchAnchorId="@id/list" />
......
// Start ConstraintSet
<Constraint
android:id="@+id/listTopGuideline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.59" />
.....
// End ConstraintSet
<Constraint
android:id="@+id/listTopGuideline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.1" />
le...@google.com <le...@google.com> #17
Hi Tobias, thanks for reporting this. This seems like an interop issue between Compose and MotionLayout, could you open a different ticket for this? This ticket was related to velocity tracker in Modifier.draggable and I'm not sure the two are connected. Thanks!
Description
Issue
TLDR; watch the attached video.
Was trying to make a free flowing bottom sheet like view, that allows for the sheet content to also be scrollable.
Was able to create this using Code
.draggable()
and a nested scroll connection.Drags are working fine. But flings aren't, when the sheet is still moving. Because the fling velocity being reported in
NestedScrollConnection.onPreFling()
is wrong. Sometimes even in the opposite direction, if not the wrong magnitude.Root Cause
I suspect this is because the velocity calculation is based on touch position relative to the component handling the pointer input.
Documentation of
PointerInputChange
statesModifier.draggable
which is also used inModifier.scrollable
effectively usesVelocityTracker.addPointerInputChange()
Potential Fix
If
PointerInputChange
also hadabsolutePosition
which is relative to the window/screen, and the above function is modified to useabsolutePosition
instead ofposition
(relative), then we will see the right velocity being calculated when drag has stoppedI am not sure if we will need relative velocity of the user's fling to the component anywhere. It should be safe to move the implementation
VelocityTracker.addPointerInputChange()
to useabsolutePosition
always.Other components that are affected (currently working around it)
Because of this issue, even Swipeable.kt
Swipeable.kt
doesn't use fling velocity to infer the direction of swipe, instead uses the diff of current offset and last offset -Attachments