Status Update
Comments
os...@google.com <os...@google.com>
ap...@google.com <ap...@google.com> #2
Are you saying that loadState being null is more correct initial state compared to the current
```
CombinedLoadStates(
refresh = InitialLoadStates.refresh,
prepend = InitialLoadStates.prepend,
append = InitialLoadStates.append,
source = InitialLoadStates
)
private val IncompleteLoadState = LoadState.NotLoading(false)
private val InitialLoadStates = LoadStates(
IncompleteLoadState,
IncompleteLoadState,
IncompleteLoadState
)
```
os...@google.com <os...@google.com> #3
Ideally we would not pass any initial state because it will always have some case where it is wrong - we should ideally wait for a real event from Paging before sending it downstream to user.
For example the initial state:
CombinedLoadStates(
refresh = InitialLoadStates.refresh,
prepend = InitialLoadStates.prepend,
append = InitialLoadStates.append,
source = InitialLoadStates
)
...will always have null
mediator states, even if they are using RemoteMediator. This can mess up loadstate logic that is waiting for some combination of source + mediator loads to happen. It's easy to filter the initial case, but it gets complicated if they want to switchMap between multiple streams and they all start with this initial state. Or also consider the case when coming from cached state and needing to filter this out... it's bad developer UX.
So we could either set this to nullable to denote "no state" or we could have some constant we use that can be easily filtered out like "BogusLoadState" and then people can do .filter { it !== BogusLoadState }
os...@google.com <os...@google.com> #4
Alternatively, if we can read whether we have RemoteMediator
or not, we could try this for initial state which would be a lot more accurate:
private val InitialLoadStates = LoadStates(
LoadState.Loading,
IncompleteLoadState,
IncompleteLoadState
)
CombinedLoadStates(
refresh = InitialLoadStates.refresh,
prepend = InitialLoadStates.prepend,
append = InitialLoadStates.append,
source = InitialLoadStates,
mediatr = ??
)
Description
Jetpack Compose version: 1.7.3
Jetpack Compose component used:
Modifer.animateContentSize()
Android Studio Build: #AI-242.21829.142.2421.12409432 (Ladybug | 2024.2.1)
Kotlin version: 2.0.20
I have been using the
ModalNavigationDrawer
component in a Compose TV app since last year (Compose v1.6.*). However, after upgrading the Compose dependencies to version 1.7.3, I noticed a strange behavior in the open/close animation of the drawer. Upon further investigation, I discovered that the issue only occurs in RTL layout direction, while everything works fine in LTR direction.After comparing the differences with the previous version and modifying the this issue and believe it has been present since then.
ModalNavigationDrawer
component code, I found that the problem lies in theanimateContentSize()
modifier within theModalNavigationDrawer
source code. It seems to be related to thealignment
argument added to theSizeAnimationModifierNode
since the last Compose version I was using. I foundSteps to Reproduce or Code Sample to Reproduce:
Use
ModalNavigationDrawer
in RTL layout direction in a Compose TV application with Compose Animation version 1.7.3. Open and close the drawer to observe the awkward animation behavior.