diff --git a/.maestro/flows/empty_lists_parsing.yaml b/.maestro/flows/empty_lists_parsing.yaml new file mode 100644 index 00000000..600aeca9 --- /dev/null +++ b/.maestro/flows/empty_lists_parsing.yaml @@ -0,0 +1,38 @@ +appId: swmansion.enriched.example +--- +# PR #542 - fix(android): parsing empty lists +# Validates that lists with empty and whitespace-only items are parsed and displayed correctly +- launchApp + +- tapOn: + id: "toggle-screen-button" + +- runFlow: + file: "../subflows/set_editor_value.yaml" + env: + VALUE: > + +
    +
  1. First
  2. +
  3. +
  4. Third
  5. +
+ + + + +- tapOn: + id: "size-max-button" + +- runFlow: + file: "../subflows/capture_or_assert_screenshot.yaml" + env: + SCREENSHOT_NAME: "empty_lists_parsing" diff --git a/.maestro/screenshots/android/empty_lists_parsing.png b/.maestro/screenshots/android/empty_lists_parsing.png new file mode 100644 index 00000000..d777b0b2 Binary files /dev/null and b/.maestro/screenshots/android/empty_lists_parsing.png differ diff --git a/.maestro/screenshots/ios/empty_lists_parsing.png b/.maestro/screenshots/ios/empty_lists_parsing.png new file mode 100644 index 00000000..015e7d39 Binary files /dev/null and b/.maestro/screenshots/ios/empty_lists_parsing.png differ diff --git a/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java b/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java index 9a03613d..7038d21c 100644 --- a/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java +++ b/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java @@ -843,7 +843,6 @@ public void endElement(String uri, String localName, String qName) { public void characters(char[] ch, int start, int length) { StringBuilder sb = new StringBuilder(); - if (length > 0) isEmptyTag = false; /* * Ignore whitespace that immediately follows other whitespace; @@ -871,6 +870,11 @@ public void characters(char[] ch, int start, int length) { sb.append(c); } } + // Only mark the tag as non-empty if content was actually appended after + // whitespace collapsing. A space-only list item (e.g.
  • ) would + // have its space dropped when the preceding char is a newline, leaving + // nothing to anchor a span — the ZWS placeholder must still be inserted. + if (sb.length() > 0) isEmptyTag = false; mSpannableStringBuilder.append(sb); }