Status Update
Comments
gr...@google.com <gr...@google.com> #2
Branch: androidx-master-dev
commit c60f33e229e31ab328ef6b59dab63b264954831c
Author: Alexandre Elias <aelias@google.com>
Date: Fri Jul 10 16:23:09 2020
Semantics no-op cleanups
Partly in response to lmr's broad code review, I did a pass of
superficial API/implementation cleanup. The main changes are:
- I changed each Boolean SemanticsProperty where false is equivalent to
not being present to take "Unit" instead. This is conceptually
clearer: it avoids questions like "can I cancel out a semantics from a
merged child by setting it to false?" Because "property = Unit" looks
weird, I also changed the style of these to "property()".
- I moved the Semantics id generator closer to where it's used, in
SemanticsModifierCore. I made it internal and an AtomicInt.
(Note that integer ids are heavily used in the Android
AccessibilityNodeInfo APIs so I can't simply remove them entirely.)
- I deleted dead code. Some examples include SemanticsHintOverrides,
a public API not connected to anything, and SemanticsPropertyKey
merge() open method which is never called. (In both cases I have
a different plan in mind for accessibility.)
Fixes: 145951226
Fixes: 145955412
Test: existing tests
Relnote: "Single-value semantics properties now use a calling style.
For example, 'semantics { hidden = true }' is now written as:
'semantics { hidden() }'."
Change-Id: Ic1afd12ea22c926babc9662f1804d80b33aa0cfc
M ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/LayoutNodeModifierBenchmark.kt
M ui/ui-core/api/0.1.0-dev15.txt
M ui/ui-core/api/current.txt
M ui/ui-core/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-core/api/public_plus_experimental_current.txt
M ui/ui-core/api/restricted_0.1.0-dev15.txt
M ui/ui-core/api/restricted_current.txt
M ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/graphics/vector/VectorTest.kt
M ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/semantics/SemanticsTests.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidActuals.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Expect.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsConfiguration.kt
D ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsHintOverrides.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsModifier.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsOwner.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsWrapper.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt
M ui/ui-foundation/api/0.1.0-dev15.txt
M ui/ui-foundation/api/current.txt
M ui/ui-foundation/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-foundation/api/public_plus_experimental_current.txt
M ui/ui-foundation/api/restricted_0.1.0-dev15.txt
M ui/ui-foundation/api/restricted_current.txt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Clickable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Dialog.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Scroller.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Selectable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/semantics/FoundationSemanticsProperties.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ButtonTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/CardTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxScreenshotTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/RadioButtonScreenshotTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ScaffoldTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/SnackbarTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/SurfaceTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ripple/RippleIndicationTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
M ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
M ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/CallSemanticsActionTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/ScrollToTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
M ui/ui-test/src/main/java/androidx/ui/test/Actions.kt
M ui/ui-test/src/main/java/androidx/ui/test/Filters.kt
M ui/ui-text/api/0.1.0-dev15.txt
M ui/ui-text/api/current.txt
M ui/ui-text/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-text/api/public_plus_experimental_current.txt
M ui/ui-text/api/restricted_0.1.0-dev15.txt
M ui/ui-text/api/restricted_current.txt
M ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreTextField.kt
M ui/ui-text/src/commonMain/kotlin/androidx/ui/text/TextSemanticsProperties.kt
gr...@google.com <gr...@google.com> #3
Based on the documentation in Constraints
It is not clear to me why Column
would be unaffected, however.
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