Status Update
Comments
so...@google.com <so...@google.com>
lp...@google.com <lp...@google.com> #2
Hi,
I also see my text cut off when I set maxLines = 2
. Is it the same issue?
Box(
modifier =
Modifier.size(
width = 108dp,
height = 34dp,
),
contentAlignment = Alignment.Center,
) {
BasicText(
text = "text text text",
maxLines = 2,
autoSize = AutoSize.StepBased(minFontSize = 1.sp, maxFontSize = 13.sp, stepSize = 0.2.sp),
)
}
[Deleted User] <[Deleted User]> #3
Project: platform/frameworks/support
Branch: androidx-main
Author: Jossi Wolf <
Link:
Fix TextAutoSize bug with maxLines = 1
Expand for full commit details
Fix TextAutoSize bug with maxLines = 1
We were overcaching the paragraphIntrinsics in MultiParagraphLayoutCache when mutating the style. For `AutoSizeStepBased` instances with biased windows (more values smaller/bigger than the optimal), this could result in performing layout with outdated intrinsics, and thus an outdated style and font size, without surfacing this in the TextLayoutResult.
Test: New MultiParagraphLayoutCacheTests and manual testing
Relnote: Fixed a bug in BasicText with TextAutoSize and maxLines set to 1.
Fixes: 376834366
Change-Id: Ic0450c763c5d764492995b44ee1fe570246a9689
Files:
- M
compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/modifiers/MultiParagraphLayoutCacheTest.kt
- M
compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache.kt
Hash: e1b712d78cc60384ed67a56c006148291ba146a6
Date: Tue Jan 07 18:52:26 2025
lp...@google.com <lp...@google.com>
lp...@google.com <lp...@google.com> #4
#2, yeah, that's the same issue.
ma...@google.com <ma...@google.com> #5
Thanks @jo...@google.com for fixing this! Do you know when the fix would be available for g3 apps?
am...@google.com <am...@google.com> #6
Moving the internal discussion offline. The bug is fixed and the fix available in snapshot builds. We will comment on this issue when the bug fix is included in a release.
lp...@google.com <lp...@google.com> #7
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.8.0-beta01
androidx.compose.foundation:foundation-android:1.8.0-beta01
androidx.compose.foundation:foundation-jvmstubs:1.8.0-beta01
androidx.compose.foundation:foundation-linuxx64stubs:1.8.0-beta01
mo...@google.com <mo...@google.com> #8
I'm sorry, I haven't been able to get to this bug with all the other things on my plate. If someone else wants to take it, please do.
lp...@google.com <lp...@google.com> #9
Ok, finally managed to find the root problem - we don't use rememberUpdatedState()
to remember the long click / double click lambdas, so if a long click triggers a recomposition, and those lambdas aren't explicitly memoized / have unstable types that cannot be memoized automatically, new lambda instances will be passed to combinedClickable
during recomposition. This means that the keys provided to Modifier.pointerInput
change, so we cancel the old coroutine, and we never finish waiting for the up event, and awaitPointerEvent
never returns because things are cancelled / no longer being dispatched here.
ap...@google.com <ap...@google.com> #10
Branch: androidx-main
commit 9653864b3c491ed7371ef841bdd292160cbf244e
Author: Louis Pullen-Freilich <lpf@google.com>
Date: Fri May 21 00:55:12 2021
Fixes ripples / indication sometimes getting stuck on a long click
If a long click causes a recomposition and causes the instance of the long click lambda to change, this would cause us to cancel and restart the pointer input scope in Modifier.pointerInput(). This means that we would miss the corresponding up event for that long click, causing no PressInteraction.Release to be emitted, and hence causing ripples / other indication to get 'stuck'.
Now we only cancel and restart this scope if we change from having a long click lambda to not having one (null), and in which case we will now correctly emit PressInteraction.Cancel to clean up any existing long clicks if needed.
Fixes:
Test: ClickableTest
Relnote: "Fixed an issue where ripples / other indication would sometimes get stuck on a long click when using Modifier.combinedClickable"
Change-Id: I2298ce564e3940875c3f3525255424da25dc9414
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt
Description
Jetpack Compose release version:
1.0.0-beta05
I'm using a modifier like this:
When the long click listener is called I show a popup dialog which causes the ripple to be stuck in the pressed state until I touch the item again.