Status Update
Comments
gr...@google.com <gr...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
Author: Louis Pullen-Freilich <
Link:
Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling
Expand for full commit details
Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling
These APIs allow overscroll to have events dispatched to it by one component, and rendered in a separate component.
Fixes: b/266550551
Fixes: b/204650733
Fixes: b/255554340
Fixes: b/229537244
Test: OverscrollTest
Relnote: "Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling APIs - these APIs create a wrapped instance of the provided overscroll effect that doesn't draw / handle events respectively, which allows for rendering overscroll in a separate component from the component that is dispatching events. For example, disabling drawing the overscroll inside a lazy list, and then drawing the overscroll separately on top / elsewhere."
Change-Id: Idbb3d91546b49c1987a041f959bce4b2b09a9f61
Files:
- M
compose/foundation/foundation/api/current.txt
- M
compose/foundation/foundation/api/restricted_current.txt
- M
compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/OverscrollDemo.kt
- M
compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/OverscrollSample.kt
- M
compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/OverscrollTest.kt
- M
compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Overscroll.kt
Hash: f64e25b7a473c757d080521e7dd97b3f6670f60d
Date: Fri Nov 01 18:43:56 2024
gr...@google.com <gr...@google.com> #3
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.8.0-alpha06
androidx.compose.foundation:foundation-android:1.8.0-alpha06
androidx.compose.foundation:foundation-jvmstubs:1.8.0-alpha06
androidx.compose.foundation:foundation-linuxx64stubs:1.8.0-alpha06
gr...@google.com <gr...@google.com> #4
Column
on its own passes down a finite (less than screen sized) constraint for maxHeight
. LazyColumn
passes infinity for the same. If you use a Column
with Modifier.verticalScroll
, then it also will have the same exception due to large constraints.
gr...@google.com <gr...@google.com> #5
While 256k is the max constraint size, Infinity is also allowed as an exception. Perhaps we could propagate the infinity to the measure in cases like this.
ja...@gmail.com <ja...@gmail.com> #6
It makes sense that there's a limit, but it's remarkable that it's (apparently) much lower than in the old XML system. I'm working on splitting the user's content into multiple items (not easy, trying to split it nicely on paragraphs et cetera). Maybe the error can be improved here? Cannot represent a size of 330071 in Constraints
doesn't say much. Are those pixels? Is that an internal issue or a user error? I thought it was the first.
Perhaps something like Composable is too large: 330071 pixels. Limit is 256k pixels.
would be a lot clearer.
gr...@google.com <gr...@google.com> #7
Reproducible in Compose Foundation
1.5.4
, but not in 1.4.3
. This case started crashing in 1.5.0-alpha02
(verified not crashing in 1.5.0-alpha01
), which is when TextWithModifier
became the default BasicText
.
Specific code used to reproduce:
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.BasicText
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.sp
@Composable
fun Content() {
var showText by remember { mutableStateOf(false) }
var numberOfLines by remember { mutableStateOf(5_000) }
val string = buildString { repeat(numberOfLines) { appendLine("Line $it") } }
val scrollState = rememberScrollState()
Column(modifier = Modifier.verticalScroll(scrollState)) {
BasicText("Number of lines")
BasicTextField(
value = numberOfLines.toString(),
onValueChange = { numberOfLines = it.toIntOrNull() ?: 0 },
readOnly = showText,
)
BasicText("(= ${string.length} characters)")
BasicText(
text = "Toggle Text (Click text)",
modifier = Modifier.clickable { showText = !showText },
)
if (showText) {
BasicText(
text = string,
style = TextStyle(fontSize = 23.sp),
)
}
}
}
gr...@google.com <gr...@google.com> #8
Also note, this is not Lazy Layout specific, we just need text to be measured with a constraint of infinity, which is why the above repro uses Column
with verticalScroll
.
se...@google.com <se...@google.com> #9
Thanks for the bug report this is excellent!
se...@google.com <se...@google.com> #10
This is visible now because previously it would only trigger when inlineContent was present. Now we measure 1 child in all passes
ap...@google.com <ap...@google.com> #11
Branch: androidx-main
commit 76a2a7b35ef1398119cc0a5d7d0f553ce37eeef4
Author: Sean McQuillan <seanmcq@google.com>
Date: Mon Dec 04 13:40:44 2023
Text doesn't crash when text is very very tall
Previously: Constraints would run out of bits of text was too large
Now: Inner measures are constrained first by width, then by height
Fixes:
Test: ./gradlew :com:found:found:cAT
Relnote: Fix crash that impacted very large text measured with infinite constraints.
Change-Id: I1a7df0f35e5506b4ca05c4e2091142012a07908f
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/modifiers/LayoutUtilsKtTest.kt
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNodeTest.kt
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNodeTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/LayoutUtils.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextAnnotatedStringNode.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/TextStringSimpleNode.kt
ap...@google.com <ap...@google.com> #12
Branch: androidx-main
commit 3a0cbbb01cb74bcbfc72797c5eb5bac5ad9e4cce
Author: Sean McQuillan <seanmcq@google.com>
Date: Tue Dec 05 10:39:42 2023
Add docs and more tests for fixCoercedHeightAndWidthForBits
Bug:
Test: ./gradlew :com:found:found:cAT
Change-Id: I7faf92e19d24550e4ceaf11c64afe6f67bd274cf
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/modifiers/LayoutUtilsKtTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/modifiers/LayoutUtils.kt
na...@google.com <na...@google.com> #13
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.6.0-beta03
androidx.compose.foundation:foundation-android:1.6.0-beta03
androidx.compose.foundation:foundation-desktop:1.6.0-beta03
Description
Reproduction
Text
LazyColumn
(same length text inColumn
does not crash)See attached sample project. I use a larger font size there to speed up the reproduction (rendering 5k times 24sp is a lot faster than 50k times 14sp).
Stack trace