Skip to content

Commit 7fc45e8

Browse files
authored
chore: cleanup android hardcoded characters (#372)
# Summary Replaces hardcoded characters with `EnrichedConstants`
1 parent 9d32975 commit 7fc45e8

9 files changed

Lines changed: 34 additions & 18 deletions

File tree

android/src/main/java/com/swmansion/enriched/EnrichedTextInputView.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import com.swmansion.enriched.styles.InlineStyles
4545
import com.swmansion.enriched.styles.ListStyles
4646
import com.swmansion.enriched.styles.ParagraphStyles
4747
import com.swmansion.enriched.styles.ParametrizedStyles
48+
import com.swmansion.enriched.utils.EnrichedConstants
4849
import com.swmansion.enriched.utils.EnrichedEditableFactory
4950
import com.swmansion.enriched.utils.EnrichedParser
5051
import com.swmansion.enriched.utils.EnrichedSelection
@@ -335,7 +336,7 @@ class EnrichedTextInputView : AppCompatEditText {
335336
}
336337

337338
// If the current char is not a hidden space, it counts towards our visible index
338-
if (currentText[actualIndex] != '\u200B') {
339+
if (currentText[actualIndex] != EnrichedConstants.ZWS) {
339340
currentVisibleCount++
340341
}
341342
actualIndex++

android/src/main/java/com/swmansion/enriched/events/OnChangeTextEvent.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.text.Editable
44
import com.facebook.react.bridge.Arguments
55
import com.facebook.react.bridge.WritableMap
66
import com.facebook.react.uimanager.events.Event
7+
import com.swmansion.enriched.utils.EnrichedConstants
78

89
class OnChangeTextEvent(
910
surfaceId: Int,
@@ -16,7 +17,7 @@ class OnChangeTextEvent(
1617
override fun getEventData(): WritableMap {
1718
val eventData: WritableMap = Arguments.createMap()
1819
val text = editable.toString()
19-
val normalizedText = text.replace(Regex("\\u200B"), "")
20+
val normalizedText = text.replace(Regex(EnrichedConstants.ZWS_STRING), "")
2021
eventData.putString("value", normalizedText)
2122
return eventData
2223
}

android/src/main/java/com/swmansion/enriched/styles/ListStyles.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.swmansion.enriched.EnrichedTextInputView
88
import com.swmansion.enriched.spans.EnrichedOrderedListSpan
99
import com.swmansion.enriched.spans.EnrichedSpans
1010
import com.swmansion.enriched.spans.EnrichedUnorderedListSpan
11+
import com.swmansion.enriched.utils.EnrichedConstants
1112
import com.swmansion.enriched.utils.getParagraphBounds
1213
import com.swmansion.enriched.utils.getSafeSpanBoundaries
1314
import com.swmansion.enriched.utils.removeZWS
@@ -119,7 +120,7 @@ class ListStyles(
119120
}
120121

121122
if (start == end) {
122-
spannable.insert(start, "\u200B")
123+
spannable.insert(start, EnrichedConstants.ZWS_STRING)
123124
view.spanState?.setStart(name, start + 1)
124125
removeSpansForRange(spannable, start, end, config.clazz)
125126
setSpan(spannable, name, start, end + 1)
@@ -132,7 +133,7 @@ class ListStyles(
132133
removeSpansForRange(spannable, start, end, config.clazz)
133134

134135
for (paragraph in paragraphs) {
135-
spannable.insert(currentStart, "\u200B")
136+
spannable.insert(currentStart, EnrichedConstants.ZWS_STRING)
136137
val currentEnd = currentStart + paragraph.length + 1
137138
setSpan(spannable, name, currentStart, currentEnd)
138139

@@ -164,15 +165,15 @@ class ListStyles(
164165
}
165166

166167
if (!isBackspace && isShortcut) {
167-
s.replace(start, cursorPosition, "\u200B")
168+
s.replace(start, cursorPosition, EnrichedConstants.ZWS_STRING)
168169
setSpan(s, name, start, start + 1)
169170
// Inform that new span has been added
170171
view.selection?.validateStyles()
171172
return
172173
}
173174

174175
if (!isBackspace && isNewLine && isPreviousParagraphList(s, start, config.clazz)) {
175-
s.insert(cursorPosition, "\u200B")
176+
s.insert(cursorPosition, EnrichedConstants.ZWS_STRING)
176177
setSpan(s, name, start, end + 1)
177178
// Inform that new span has been added
178179
view.selection?.validateStyles()

android/src/main/java/com/swmansion/enriched/styles/ParagraphStyles.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.util.Log
77
import com.swmansion.enriched.EnrichedTextInputView
88
import com.swmansion.enriched.spans.EnrichedSpans
99
import com.swmansion.enriched.spans.interfaces.EnrichedSpan
10+
import com.swmansion.enriched.utils.EnrichedConstants
1011
import com.swmansion.enriched.utils.getParagraphBounds
1112
import com.swmansion.enriched.utils.getSafeSpanBoundaries
1213
import com.swmansion.enriched.utils.removeZWS
@@ -344,7 +345,7 @@ class ParagraphStyles(
344345
endCursorPosition -= 1
345346
spanState.setStart(style, null)
346347
} else {
347-
s.insert(endCursorPosition, "\u200B")
348+
s.insert(endCursorPosition, EnrichedConstants.ZWS_STRING)
348349
endCursorPosition += 1
349350
}
350351
}
@@ -393,7 +394,7 @@ class ParagraphStyles(
393394
}
394395

395396
if (start == end) {
396-
spannable.insert(start, "\u200B")
397+
spannable.insert(start, EnrichedConstants.ZWS_STRING)
397398
setAndMergeSpans(spannable, type, start, end + 1)
398399
view.selection.validateStyles()
399400

@@ -405,7 +406,7 @@ class ParagraphStyles(
405406
val paragraphs = spannable.substring(start, end).split("\n")
406407

407408
for (paragraph in paragraphs) {
408-
spannable.insert(currentStart, "\u200B")
409+
spannable.insert(currentStart, EnrichedConstants.ZWS_STRING)
409410
currentEnd = currentStart + paragraph.length + 1
410411
currentStart = currentEnd + 1
411412
}

android/src/main/java/com/swmansion/enriched/styles/ParametrizedStyles.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.swmansion.enriched.spans.EnrichedImageSpan
99
import com.swmansion.enriched.spans.EnrichedLinkSpan
1010
import com.swmansion.enriched.spans.EnrichedMentionSpan
1111
import com.swmansion.enriched.spans.EnrichedSpans
12+
import com.swmansion.enriched.utils.EnrichedConstants
1213
import com.swmansion.enriched.utils.getSafeSpanBoundaries
1314
import com.swmansion.enriched.utils.removeZWS
1415

@@ -263,14 +264,14 @@ class ParametrizedStyles(
263264
val (start, originalEnd) = view.selection.getInlineSelection()
264265

265266
if (start == originalEnd) {
266-
spannable.insert(start, "\uFFFC")
267+
spannable.insert(start, EnrichedConstants.ORC_STRING)
267268
} else {
268269
val spans = spannable.getSpans(start, originalEnd, EnrichedImageSpan::class.java)
269270
for (s in spans) {
270271
spannable.removeSpan(s)
271272
}
272273

273-
spannable.replace(start, originalEnd, "\uFFFC")
274+
spannable.replace(start, originalEnd, EnrichedConstants.ORC_STRING)
274275
}
275276

276277
val (imageStart, imageEnd) = spannable.getSafeSpanBoundaries(start, start + 1)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.swmansion.enriched.utils
2+
3+
object EnrichedConstants {
4+
// Zero Width Space
5+
const val ZWS = '\u200B'
6+
const val ZWS_STRING = "\u200B"
7+
8+
// Object Replacement Character
9+
const val ORC = '\uFFFC'
10+
const val ORC_STRING = "\uFFFC"
11+
}

android/src/main/java/com/swmansion/enriched/utils/EnrichedParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ private static void withinParagraph(StringBuilder out, Spanned text, int start,
337337
private static void withinStyle(StringBuilder out, CharSequence text, int start, int end) {
338338
for (int i = start; i < end; i++) {
339339
char c = text.charAt(i);
340-
if (c == '\u200B') {
340+
if (c == EnrichedConstants.ZWS) {
341341
// Do not output zero-width space characters.
342342
continue;
343343
} else if (c == '<') {
@@ -431,9 +431,9 @@ public Spanned convert() {
431431
int start = mSpannableStringBuilder.getSpanStart(zeroWidthSpaceSpan);
432432
int end = mSpannableStringBuilder.getSpanEnd(zeroWidthSpaceSpan);
433433

434-
if (mSpannableStringBuilder.charAt(start) != '\u200B') {
434+
if (mSpannableStringBuilder.charAt(start) != EnrichedConstants.ZWS) {
435435
// Insert zero-width space character at the start if it's not already present.
436-
mSpannableStringBuilder.insert(start, "\u200B");
436+
mSpannableStringBuilder.insert(start, EnrichedConstants.ZWS_STRING);
437437
end++; // Adjust end position due to insertion.
438438
}
439439

@@ -717,7 +717,7 @@ private static void setParagraphSpanFromMark(Editable text, Object mark, Object.
717717

718718
// Block spans require at least one character to be applied.
719719
if (isEmptyTag) {
720-
text.append("\u200B");
720+
text.append(EnrichedConstants.ZWS);
721721
len++;
722722
}
723723

android/src/main/java/com/swmansion/enriched/utils/EnrichedSelection.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ class EnrichedSelection(
6464
val text = view.text ?: return false
6565

6666
if (start != end) {
67-
return text.substring(start, end) == "\u200B"
67+
return text.substring(start, end) == EnrichedConstants.ZWS_STRING
6868
}
6969

7070
val isNewLine = if (start > 0) text.substring(start - 1, start) == "\n" else true
7171
val isNextCharacterZeroWidth =
7272
if (start < text.length) {
73-
text.substring(start, start + 1) == "\u200B"
73+
text.substring(start, start + 1) == EnrichedConstants.ZWS_STRING
7474
} else {
7575
false
7676
}

android/src/main/java/com/swmansion/enriched/utils/Utils.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ fun SpannableStringBuilder.removeZWS(
106106
end: Int,
107107
) {
108108
for (i in (end - 1) downTo start) {
109-
if (this[i] == '\u200B') {
109+
if (this[i] == EnrichedConstants.ZWS) {
110110
delete(i, i + 1)
111111
}
112112
}

0 commit comments

Comments
 (0)