react-native-enriched 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -17
- package/android/build.gradle +77 -72
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerDelegate.java +21 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerInterface.java +7 -0
- package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/EventEmitters.cpp +156 -0
- package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/EventEmitters.h +147 -0
- package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/Props.cpp +10 -0
- package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/Props.h +194 -0
- package/android/lint.gradle +70 -0
- package/android/src/main/java/com/swmansion/enriched/EnrichedTextInputConnectionWrapper.kt +140 -0
- package/android/src/main/java/com/swmansion/enriched/EnrichedTextInputView.kt +304 -83
- package/android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewLayoutManager.kt +3 -1
- package/android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewManager.kt +166 -51
- package/android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewPackage.kt +1 -3
- package/android/src/main/java/com/swmansion/enriched/MeasurementStore.kt +70 -21
- package/android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt +21 -11
- package/android/src/main/java/com/swmansion/enriched/events/OnChangeHtmlEvent.kt +8 -9
- package/android/src/main/java/com/swmansion/enriched/events/OnChangeSelectionEvent.kt +10 -9
- package/android/src/main/java/com/swmansion/enriched/events/OnChangeStateDeprecatedEvent.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/events/OnChangeStateEvent.kt +9 -12
- package/android/src/main/java/com/swmansion/enriched/events/OnChangeTextEvent.kt +10 -10
- package/android/src/main/java/com/swmansion/enriched/events/OnInputBlurEvent.kt +7 -9
- package/android/src/main/java/com/swmansion/enriched/events/OnInputFocusEvent.kt +7 -9
- package/android/src/main/java/com/swmansion/enriched/events/OnInputKeyPressEvent.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/events/OnLinkDetectedEvent.kt +13 -11
- package/android/src/main/java/com/swmansion/enriched/events/OnMentionDetectedEvent.kt +10 -9
- package/android/src/main/java/com/swmansion/enriched/events/OnMentionEvent.kt +9 -8
- package/android/src/main/java/com/swmansion/enriched/events/OnRequestHtmlResultEvent.kt +32 -0
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedBlockQuoteSpan.kt +24 -5
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedBoldSpan.kt +8 -1
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedCodeBlockSpan.kt +10 -2
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH1Span.kt +8 -1
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH2Span.kt +8 -1
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH3Span.kt +8 -1
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH4Span.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH5Span.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH6Span.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedImageSpan.kt +34 -17
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedInlineCodeSpan.kt +8 -1
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedItalicSpan.kt +7 -1
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedLinkSpan.kt +10 -4
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedMentionSpan.kt +14 -11
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedOrderedListSpan.kt +18 -11
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedSpans.kt +174 -72
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedStrikeThroughSpan.kt +7 -1
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedUnderlineSpan.kt +7 -1
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedUnorderedListSpan.kt +11 -5
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedBlockSpan.kt +3 -2
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedHeadingSpan.kt +1 -2
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedInlineSpan.kt +1 -2
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedParagraphSpan.kt +3 -2
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedSpan.kt +5 -0
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedZeroWidthSpaceSpan.kt +1 -2
- package/android/src/main/java/com/swmansion/enriched/spans/utils/ForceRedrawSpan.kt +2 -1
- package/android/src/main/java/com/swmansion/enriched/styles/HtmlStyle.kt +155 -20
- package/android/src/main/java/com/swmansion/enriched/styles/InlineStyles.kt +25 -8
- package/android/src/main/java/com/swmansion/enriched/styles/ListStyles.kt +60 -20
- package/android/src/main/java/com/swmansion/enriched/styles/ParagraphStyles.kt +161 -25
- package/android/src/main/java/com/swmansion/enriched/styles/ParametrizedStyles.kt +128 -52
- package/android/src/main/java/com/swmansion/enriched/utils/AsyncDrawable.kt +10 -7
- package/android/src/main/java/com/swmansion/enriched/utils/EnrichedConstants.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/utils/EnrichedEditableFactory.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/utils/EnrichedParser.java +136 -87
- package/android/src/main/java/com/swmansion/enriched/utils/EnrichedSelection.kt +71 -42
- package/android/src/main/java/com/swmansion/enriched/utils/EnrichedSpanState.kt +183 -48
- package/android/src/main/java/com/swmansion/enriched/utils/EnrichedSpannable.kt +82 -0
- package/android/src/main/java/com/swmansion/enriched/utils/EnrichedSpannableStringBuilder.kt +15 -0
- package/android/src/main/java/com/swmansion/enriched/utils/Utils.kt +0 -70
- package/android/src/main/java/com/swmansion/enriched/watchers/EnrichedSpanWatcher.kt +46 -14
- package/android/src/main/java/com/swmansion/enriched/watchers/EnrichedTextWatcher.kt +34 -11
- package/android/src/main/new_arch/CMakeLists.txt +6 -0
- package/android/src/main/new_arch/RNEnrichedTextInputViewSpec.cpp +6 -6
- package/android/src/main/new_arch/RNEnrichedTextInputViewSpec.h +6 -6
- package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputComponentDescriptor.h +19 -19
- package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputMeasurementManager.cpp +40 -51
- package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputMeasurementManager.h +13 -15
- package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputShadowNode.cpp +23 -21
- package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputShadowNode.h +35 -36
- package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputState.cpp +4 -4
- package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputState.h +13 -14
- package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/conversions.h +33 -14
- package/ios/EnrichedTextInputView.h +26 -14
- package/ios/EnrichedTextInputView.mm +1209 -586
- package/ios/config/InputConfig.h +24 -6
- package/ios/config/InputConfig.mm +154 -38
- package/ios/{utils → extensions}/ColorExtension.mm +7 -5
- package/ios/extensions/FontExtension.mm +106 -0
- package/ios/{utils → extensions}/LayoutManagerExtension.h +1 -1
- package/ios/extensions/LayoutManagerExtension.mm +396 -0
- package/ios/{utils → extensions}/StringExtension.mm +19 -16
- package/ios/generated/RNEnrichedTextInputViewSpec/EventEmitters.cpp +156 -0
- package/ios/generated/RNEnrichedTextInputViewSpec/EventEmitters.h +147 -0
- package/ios/generated/RNEnrichedTextInputViewSpec/Props.cpp +10 -0
- package/ios/generated/RNEnrichedTextInputViewSpec/Props.h +194 -0
- package/ios/generated/RNEnrichedTextInputViewSpec/RCTComponentViewHelpers.h +95 -0
- package/ios/inputParser/InputParser.h +5 -5
- package/ios/inputParser/InputParser.mm +864 -380
- package/ios/inputTextView/InputTextView.h +1 -1
- package/ios/inputTextView/InputTextView.mm +100 -59
- package/ios/{utils → interfaces}/BaseStyleProtocol.h +2 -2
- package/ios/interfaces/ImageAttachment.h +10 -0
- package/ios/interfaces/ImageAttachment.mm +36 -0
- package/ios/interfaces/LinkRegexConfig.h +19 -0
- package/ios/interfaces/LinkRegexConfig.mm +37 -0
- package/ios/interfaces/MediaAttachment.h +23 -0
- package/ios/interfaces/MediaAttachment.mm +31 -0
- package/ios/{utils → interfaces}/MentionParams.h +0 -1
- package/ios/{utils → interfaces}/MentionStyleProps.mm +27 -20
- package/ios/{utils → interfaces}/StyleHeaders.h +37 -15
- package/ios/{utils → interfaces}/StyleTypeEnum.h +3 -0
- package/ios/internals/EnrichedTextInputViewComponentDescriptor.h +11 -9
- package/ios/internals/EnrichedTextInputViewShadowNode.h +28 -25
- package/ios/internals/EnrichedTextInputViewShadowNode.mm +45 -40
- package/ios/internals/EnrichedTextInputViewState.h +3 -1
- package/ios/styles/BlockQuoteStyle.mm +189 -118
- package/ios/styles/BoldStyle.mm +110 -63
- package/ios/styles/CodeBlockStyle.mm +204 -128
- package/ios/styles/H1Style.mm +10 -4
- package/ios/styles/H2Style.mm +10 -4
- package/ios/styles/H3Style.mm +10 -4
- package/ios/styles/H4Style.mm +17 -0
- package/ios/styles/H5Style.mm +17 -0
- package/ios/styles/H6Style.mm +17 -0
- package/ios/styles/HeadingStyleBase.mm +148 -86
- package/ios/styles/ImageStyle.mm +75 -73
- package/ios/styles/InlineCodeStyle.mm +162 -88
- package/ios/styles/ItalicStyle.mm +76 -52
- package/ios/styles/LinkStyle.mm +411 -232
- package/ios/styles/MentionStyle.mm +363 -246
- package/ios/styles/OrderedListStyle.mm +171 -106
- package/ios/styles/StrikethroughStyle.mm +52 -35
- package/ios/styles/UnderlineStyle.mm +68 -46
- package/ios/styles/UnorderedListStyle.mm +169 -106
- package/ios/utils/OccurenceUtils.h +42 -42
- package/ios/utils/OccurenceUtils.mm +142 -119
- package/ios/utils/ParagraphAttributesUtils.h +10 -2
- package/ios/utils/ParagraphAttributesUtils.mm +182 -71
- package/ios/utils/ParagraphsUtils.h +2 -1
- package/ios/utils/ParagraphsUtils.mm +41 -27
- package/ios/utils/TextInsertionUtils.h +13 -2
- package/ios/utils/TextInsertionUtils.mm +38 -20
- package/ios/utils/WordsUtils.h +2 -1
- package/ios/utils/WordsUtils.mm +32 -22
- package/ios/utils/ZeroWidthSpaceUtils.h +3 -1
- package/ios/utils/ZeroWidthSpaceUtils.mm +145 -79
- package/lib/module/EnrichedTextInput.js +61 -2
- package/lib/module/EnrichedTextInput.js.map +1 -1
- package/lib/module/EnrichedTextInputNativeComponent.ts +149 -12
- package/lib/module/{normalizeHtmlStyle.js → utils/normalizeHtmlStyle.js} +12 -0
- package/lib/module/utils/normalizeHtmlStyle.js.map +1 -0
- package/lib/module/utils/regexParser.js +46 -0
- package/lib/module/utils/regexParser.js.map +1 -0
- package/lib/typescript/src/EnrichedTextInput.d.ts +24 -14
- package/lib/typescript/src/EnrichedTextInput.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedTextInputNativeComponent.d.ts +129 -12
- package/lib/typescript/src/EnrichedTextInputNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts +4 -0
- package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts.map +1 -0
- package/lib/typescript/src/utils/regexParser.d.ts +3 -0
- package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
- package/package.json +17 -6
- package/src/EnrichedTextInput.tsx +96 -13
- package/src/EnrichedTextInputNativeComponent.ts +149 -12
- package/src/index.tsx +2 -0
- package/src/{normalizeHtmlStyle.ts → utils/normalizeHtmlStyle.ts} +14 -2
- package/src/utils/regexParser.ts +56 -0
- package/ios/utils/FontExtension.mm +0 -91
- package/ios/utils/LayoutManagerExtension.mm +0 -286
- package/lib/module/normalizeHtmlStyle.js.map +0 -1
- package/lib/typescript/src/normalizeHtmlStyle.d.ts +0 -4
- package/lib/typescript/src/normalizeHtmlStyle.d.ts.map +0 -1
- package/ios/{utils → extensions}/ColorExtension.h +0 -0
- package/ios/{utils → extensions}/FontExtension.h +0 -0
- package/ios/{utils → extensions}/StringExtension.h +1 -1
- package/ios/{utils → interfaces}/ImageData.h +0 -0
- package/ios/{utils → interfaces}/ImageData.mm +0 -0
- package/ios/{utils → interfaces}/LinkData.h +0 -0
- package/ios/{utils → interfaces}/LinkData.mm +0 -0
- package/ios/{utils → interfaces}/MentionParams.mm +0 -0
- package/ios/{utils → interfaces}/MentionStyleProps.h +1 -1
- /package/ios/{utils → interfaces}/StylePair.h +0 -0
- /package/ios/{utils → interfaces}/StylePair.mm +0 -0
- /package/ios/{utils → interfaces}/TextDecorationLineEnum.h +0 -0
- /package/ios/{utils → interfaces}/TextDecorationLineEnum.mm +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
package com.swmansion.enriched.events
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
|
+
import com.facebook.react.uimanager.events.Event
|
|
5
|
+
|
|
6
|
+
class OnChangeStateDeprecatedEvent(
|
|
7
|
+
surfaceId: Int,
|
|
8
|
+
viewId: Int,
|
|
9
|
+
private val state: WritableMap,
|
|
10
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
11
|
+
) : Event<OnChangeStateDeprecatedEvent>(surfaceId, viewId) {
|
|
12
|
+
override fun getEventName(): String = EVENT_NAME
|
|
13
|
+
|
|
14
|
+
override fun getEventData(): WritableMap = state
|
|
15
|
+
|
|
16
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
17
|
+
|
|
18
|
+
companion object {
|
|
19
|
+
const val EVENT_NAME: String = "onChangeStateDeprecated"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -3,20 +3,17 @@ package com.swmansion.enriched.events
|
|
|
3
3
|
import com.facebook.react.bridge.WritableMap
|
|
4
4
|
import com.facebook.react.uimanager.events.Event
|
|
5
5
|
|
|
6
|
-
class OnChangeStateEvent(
|
|
7
|
-
|
|
6
|
+
class OnChangeStateEvent(
|
|
7
|
+
surfaceId: Int,
|
|
8
|
+
viewId: Int,
|
|
9
|
+
private val state: WritableMap,
|
|
10
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
11
|
+
) : Event<OnChangeStateEvent>(surfaceId, viewId) {
|
|
12
|
+
override fun getEventName(): String = EVENT_NAME
|
|
8
13
|
|
|
9
|
-
override fun
|
|
10
|
-
return EVENT_NAME
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
override fun getEventData(): WritableMap {
|
|
14
|
-
return state
|
|
15
|
-
}
|
|
14
|
+
override fun getEventData(): WritableMap = state
|
|
16
15
|
|
|
17
|
-
override fun experimental_isSynchronous(): Boolean
|
|
18
|
-
return experimentalSynchronousEvents
|
|
19
|
-
}
|
|
16
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
20
17
|
|
|
21
18
|
companion object {
|
|
22
19
|
const val EVENT_NAME: String = "onChangeState"
|
|
@@ -4,25 +4,25 @@ import android.text.Editable
|
|
|
4
4
|
import com.facebook.react.bridge.Arguments
|
|
5
5
|
import com.facebook.react.bridge.WritableMap
|
|
6
6
|
import com.facebook.react.uimanager.events.Event
|
|
7
|
+
import com.swmansion.enriched.utils.EnrichedConstants
|
|
7
8
|
|
|
8
|
-
class OnChangeTextEvent(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
class OnChangeTextEvent(
|
|
10
|
+
surfaceId: Int,
|
|
11
|
+
viewId: Int,
|
|
12
|
+
private val editable: Editable,
|
|
13
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
14
|
+
) : Event<OnChangeTextEvent>(surfaceId, viewId) {
|
|
15
|
+
override fun getEventName(): String = EVENT_NAME
|
|
14
16
|
|
|
15
17
|
override fun getEventData(): WritableMap {
|
|
16
18
|
val eventData: WritableMap = Arguments.createMap()
|
|
17
19
|
val text = editable.toString()
|
|
18
|
-
val normalizedText = text.replace(Regex(
|
|
20
|
+
val normalizedText = text.replace(Regex(EnrichedConstants.ZWS_STRING), "")
|
|
19
21
|
eventData.putString("value", normalizedText)
|
|
20
22
|
return eventData
|
|
21
23
|
}
|
|
22
24
|
|
|
23
|
-
override fun experimental_isSynchronous(): Boolean
|
|
24
|
-
return experimentalSynchronousEvents
|
|
25
|
-
}
|
|
25
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
26
26
|
|
|
27
27
|
companion object {
|
|
28
28
|
const val EVENT_NAME: String = "onChangeText"
|
|
@@ -4,12 +4,12 @@ import com.facebook.react.bridge.Arguments
|
|
|
4
4
|
import com.facebook.react.bridge.WritableMap
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
|
-
class OnInputBlurEvent(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
class OnInputBlurEvent(
|
|
8
|
+
surfaceId: Int,
|
|
9
|
+
viewId: Int,
|
|
10
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
11
|
+
) : Event<OnInputBlurEvent>(surfaceId, viewId) {
|
|
12
|
+
override fun getEventName(): String = EVENT_NAME
|
|
13
13
|
|
|
14
14
|
override fun getEventData(): WritableMap {
|
|
15
15
|
val eventData: WritableMap = Arguments.createMap()
|
|
@@ -17,9 +17,7 @@ class OnInputBlurEvent(surfaceId: Int, viewId: Int, private val experimentalSync
|
|
|
17
17
|
return eventData
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
override fun experimental_isSynchronous(): Boolean
|
|
21
|
-
return experimentalSynchronousEvents
|
|
22
|
-
}
|
|
20
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
23
21
|
|
|
24
22
|
companion object {
|
|
25
23
|
const val EVENT_NAME: String = "onInputBlur"
|
|
@@ -4,12 +4,12 @@ import com.facebook.react.bridge.Arguments
|
|
|
4
4
|
import com.facebook.react.bridge.WritableMap
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
|
-
class OnInputFocusEvent(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
class OnInputFocusEvent(
|
|
8
|
+
surfaceId: Int,
|
|
9
|
+
viewId: Int,
|
|
10
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
11
|
+
) : Event<OnInputFocusEvent>(surfaceId, viewId) {
|
|
12
|
+
override fun getEventName(): String = EVENT_NAME
|
|
13
13
|
|
|
14
14
|
override fun getEventData(): WritableMap {
|
|
15
15
|
val eventData: WritableMap = Arguments.createMap()
|
|
@@ -17,9 +17,7 @@ class OnInputFocusEvent(surfaceId: Int, viewId: Int, private val experimentalSyn
|
|
|
17
17
|
return eventData
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
override fun experimental_isSynchronous(): Boolean
|
|
21
|
-
return experimentalSynchronousEvents
|
|
22
|
-
}
|
|
20
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
23
21
|
|
|
24
22
|
companion object {
|
|
25
23
|
const val EVENT_NAME: String = "onInputFocus"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
package com.swmansion.enriched.events
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
5
|
+
import com.facebook.react.uimanager.events.Event
|
|
6
|
+
|
|
7
|
+
class OnInputKeyPressEvent(
|
|
8
|
+
surfaceId: Int,
|
|
9
|
+
viewId: Int,
|
|
10
|
+
private val key: String,
|
|
11
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
12
|
+
) : Event<OnInputKeyPressEvent>(surfaceId, viewId) {
|
|
13
|
+
override fun getEventName(): String = EVENT_NAME
|
|
14
|
+
|
|
15
|
+
override fun getEventData(): WritableMap {
|
|
16
|
+
val eventData: WritableMap = Arguments.createMap()
|
|
17
|
+
eventData.putString("key", key)
|
|
18
|
+
|
|
19
|
+
return eventData
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
23
|
+
|
|
24
|
+
companion object {
|
|
25
|
+
const val EVENT_NAME: String = "onInputKeyPress"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -4,25 +4,27 @@ import com.facebook.react.bridge.Arguments
|
|
|
4
4
|
import com.facebook.react.bridge.WritableMap
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
|
-
class OnLinkDetectedEvent(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
class OnLinkDetectedEvent(
|
|
8
|
+
surfaceId: Int,
|
|
9
|
+
viewId: Int,
|
|
10
|
+
private val text: String,
|
|
11
|
+
private val url: String,
|
|
12
|
+
private val start: Int,
|
|
13
|
+
private val end: Int,
|
|
14
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
15
|
+
) : Event<OnLinkDetectedEvent>(surfaceId, viewId) {
|
|
16
|
+
override fun getEventName(): String = EVENT_NAME
|
|
13
17
|
|
|
14
18
|
override fun getEventData(): WritableMap {
|
|
15
19
|
val eventData: WritableMap = Arguments.createMap()
|
|
16
20
|
eventData.putString("text", text)
|
|
17
21
|
eventData.putString("url", url)
|
|
18
|
-
eventData.putInt("start", start)
|
|
19
|
-
eventData.putInt("end", end)
|
|
22
|
+
eventData.putInt("start", start)
|
|
23
|
+
eventData.putInt("end", end)
|
|
20
24
|
return eventData
|
|
21
25
|
}
|
|
22
26
|
|
|
23
|
-
override fun experimental_isSynchronous(): Boolean
|
|
24
|
-
return experimentalSynchronousEvents
|
|
25
|
-
}
|
|
27
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
26
28
|
|
|
27
29
|
companion object {
|
|
28
30
|
const val EVENT_NAME: String = "onLinkDetected"
|
|
@@ -4,12 +4,15 @@ import com.facebook.react.bridge.Arguments
|
|
|
4
4
|
import com.facebook.react.bridge.WritableMap
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
|
-
class OnMentionDetectedEvent(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
class OnMentionDetectedEvent(
|
|
8
|
+
surfaceId: Int,
|
|
9
|
+
viewId: Int,
|
|
10
|
+
private val text: String,
|
|
11
|
+
private val indicator: String,
|
|
12
|
+
private val payload: String,
|
|
13
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
14
|
+
) : Event<OnMentionDetectedEvent>(surfaceId, viewId) {
|
|
15
|
+
override fun getEventName(): String = EVENT_NAME
|
|
13
16
|
|
|
14
17
|
override fun getEventData(): WritableMap {
|
|
15
18
|
val eventData: WritableMap = Arguments.createMap()
|
|
@@ -19,9 +22,7 @@ class OnMentionDetectedEvent(surfaceId: Int, viewId: Int, private val text: Stri
|
|
|
19
22
|
return eventData
|
|
20
23
|
}
|
|
21
24
|
|
|
22
|
-
override fun experimental_isSynchronous(): Boolean
|
|
23
|
-
return experimentalSynchronousEvents
|
|
24
|
-
}
|
|
25
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
25
26
|
|
|
26
27
|
companion object {
|
|
27
28
|
const val EVENT_NAME: String = "onMentionDetected"
|
|
@@ -4,11 +4,14 @@ import com.facebook.react.bridge.Arguments
|
|
|
4
4
|
import com.facebook.react.bridge.WritableMap
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
|
-
class OnMentionEvent(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
class OnMentionEvent(
|
|
8
|
+
surfaceId: Int,
|
|
9
|
+
viewId: Int,
|
|
10
|
+
private val indicator: String,
|
|
11
|
+
private val text: String?,
|
|
12
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
13
|
+
) : Event<OnMentionEvent>(surfaceId, viewId) {
|
|
14
|
+
override fun getEventName(): String = EVENT_NAME
|
|
12
15
|
|
|
13
16
|
override fun getEventData(): WritableMap? {
|
|
14
17
|
val eventData: WritableMap = Arguments.createMap()
|
|
@@ -23,9 +26,7 @@ class OnMentionEvent(surfaceId: Int, viewId: Int, private val indicator: String,
|
|
|
23
26
|
return eventData
|
|
24
27
|
}
|
|
25
28
|
|
|
26
|
-
override fun experimental_isSynchronous(): Boolean
|
|
27
|
-
return experimentalSynchronousEvents
|
|
28
|
-
}
|
|
29
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
29
30
|
|
|
30
31
|
companion object {
|
|
31
32
|
const val EVENT_NAME: String = "onMention"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
package com.swmansion.enriched.events
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
5
|
+
import com.facebook.react.uimanager.events.Event
|
|
6
|
+
|
|
7
|
+
class OnRequestHtmlResultEvent(
|
|
8
|
+
surfaceId: Int,
|
|
9
|
+
viewId: Int,
|
|
10
|
+
private val requestId: Int,
|
|
11
|
+
private val html: String?,
|
|
12
|
+
private val experimentalSynchronousEvents: Boolean,
|
|
13
|
+
) : Event<OnRequestHtmlResultEvent>(surfaceId, viewId) {
|
|
14
|
+
override fun getEventName(): String = EVENT_NAME
|
|
15
|
+
|
|
16
|
+
override fun getEventData(): WritableMap {
|
|
17
|
+
val eventData: WritableMap = Arguments.createMap()
|
|
18
|
+
eventData.putInt("requestId", requestId)
|
|
19
|
+
if (html != null) {
|
|
20
|
+
eventData.putString("html", html)
|
|
21
|
+
} else {
|
|
22
|
+
eventData.putNull("html")
|
|
23
|
+
}
|
|
24
|
+
return eventData
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
|
|
28
|
+
|
|
29
|
+
companion object {
|
|
30
|
+
const val EVENT_NAME: String = "onRequestHtmlResult"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -10,16 +10,33 @@ import com.swmansion.enriched.spans.interfaces.EnrichedBlockSpan
|
|
|
10
10
|
import com.swmansion.enriched.styles.HtmlStyle
|
|
11
11
|
|
|
12
12
|
// https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/core/java/android/text/style/QuoteSpan.java
|
|
13
|
-
class EnrichedBlockQuoteSpan(
|
|
13
|
+
class EnrichedBlockQuoteSpan(
|
|
14
|
+
private val htmlStyle: HtmlStyle,
|
|
15
|
+
) : MetricAffectingSpan(),
|
|
16
|
+
LeadingMarginSpan,
|
|
17
|
+
EnrichedBlockSpan {
|
|
18
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
19
|
+
|
|
14
20
|
override fun updateMeasureState(p0: TextPaint) {
|
|
15
21
|
// Do nothing, but inform layout that this span affects text metrics
|
|
16
22
|
}
|
|
17
23
|
|
|
18
|
-
override fun getLeadingMargin(p0: Boolean): Int
|
|
19
|
-
return htmlStyle.blockquoteStripeWidth + htmlStyle.blockquoteGapWidth
|
|
20
|
-
}
|
|
24
|
+
override fun getLeadingMargin(p0: Boolean): Int = htmlStyle.blockquoteStripeWidth + htmlStyle.blockquoteGapWidth
|
|
21
25
|
|
|
22
|
-
override fun drawLeadingMargin(
|
|
26
|
+
override fun drawLeadingMargin(
|
|
27
|
+
c: Canvas,
|
|
28
|
+
p: Paint,
|
|
29
|
+
x: Int,
|
|
30
|
+
dir: Int,
|
|
31
|
+
top: Int,
|
|
32
|
+
baseline: Int,
|
|
33
|
+
bottom: Int,
|
|
34
|
+
text: CharSequence?,
|
|
35
|
+
start: Int,
|
|
36
|
+
end: Int,
|
|
37
|
+
first: Boolean,
|
|
38
|
+
layout: Layout?,
|
|
39
|
+
) {
|
|
23
40
|
val style = p.style
|
|
24
41
|
val color = p.color
|
|
25
42
|
p.style = Paint.Style.FILL
|
|
@@ -35,4 +52,6 @@ class EnrichedBlockQuoteSpan(private val htmlStyle: HtmlStyle) : MetricAffecting
|
|
|
35
52
|
textPaint?.color = color
|
|
36
53
|
}
|
|
37
54
|
}
|
|
55
|
+
|
|
56
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedBlockQuoteSpan = EnrichedBlockQuoteSpan(htmlStyle)
|
|
38
57
|
}
|
|
@@ -2,9 +2,16 @@ package com.swmansion.enriched.spans
|
|
|
2
2
|
|
|
3
3
|
import android.graphics.Typeface
|
|
4
4
|
import android.text.style.StyleSpan
|
|
5
|
+
import com.swmansion.enriched.spans.interfaces.EnrichedBlockSpan
|
|
5
6
|
import com.swmansion.enriched.spans.interfaces.EnrichedInlineSpan
|
|
6
7
|
import com.swmansion.enriched.styles.HtmlStyle
|
|
7
8
|
|
|
8
9
|
@Suppress("UNUSED_PARAMETER")
|
|
9
|
-
class EnrichedBoldSpan(
|
|
10
|
+
class EnrichedBoldSpan(
|
|
11
|
+
htmlStyle: HtmlStyle,
|
|
12
|
+
) : StyleSpan(Typeface.BOLD),
|
|
13
|
+
EnrichedInlineSpan {
|
|
14
|
+
override val dependsOnHtmlStyle: Boolean = false
|
|
15
|
+
|
|
16
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedBoldSpan = EnrichedBoldSpan(htmlStyle)
|
|
10
17
|
}
|
|
@@ -12,7 +12,13 @@ import android.text.style.MetricAffectingSpan
|
|
|
12
12
|
import com.swmansion.enriched.spans.interfaces.EnrichedBlockSpan
|
|
13
13
|
import com.swmansion.enriched.styles.HtmlStyle
|
|
14
14
|
|
|
15
|
-
class EnrichedCodeBlockSpan(
|
|
15
|
+
class EnrichedCodeBlockSpan(
|
|
16
|
+
private val htmlStyle: HtmlStyle,
|
|
17
|
+
) : MetricAffectingSpan(),
|
|
18
|
+
LineBackgroundSpan,
|
|
19
|
+
EnrichedBlockSpan {
|
|
20
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
21
|
+
|
|
16
22
|
override fun updateDrawState(paint: TextPaint) {
|
|
17
23
|
paint.typeface = Typeface.MONOSPACE
|
|
18
24
|
paint.color = htmlStyle.codeBlockColor
|
|
@@ -33,7 +39,7 @@ class EnrichedCodeBlockSpan(private val htmlStyle: HtmlStyle) : MetricAffectingS
|
|
|
33
39
|
text: CharSequence,
|
|
34
40
|
start: Int,
|
|
35
41
|
end: Int,
|
|
36
|
-
lineNum: Int
|
|
42
|
+
lineNum: Int,
|
|
37
43
|
) {
|
|
38
44
|
if (text !is Spanned) {
|
|
39
45
|
return
|
|
@@ -74,4 +80,6 @@ class EnrichedCodeBlockSpan(private val htmlStyle: HtmlStyle) : MetricAffectingS
|
|
|
74
80
|
canvas.drawPath(path, p)
|
|
75
81
|
p.color = previousColor
|
|
76
82
|
}
|
|
83
|
+
|
|
84
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedCodeBlockSpan = EnrichedCodeBlockSpan(htmlStyle)
|
|
77
85
|
}
|
|
@@ -6,7 +6,12 @@ import android.text.style.AbsoluteSizeSpan
|
|
|
6
6
|
import com.swmansion.enriched.spans.interfaces.EnrichedHeadingSpan
|
|
7
7
|
import com.swmansion.enriched.styles.HtmlStyle
|
|
8
8
|
|
|
9
|
-
class EnrichedH1Span(
|
|
9
|
+
class EnrichedH1Span(
|
|
10
|
+
private val style: HtmlStyle,
|
|
11
|
+
) : AbsoluteSizeSpan(style.h1FontSize),
|
|
12
|
+
EnrichedHeadingSpan {
|
|
13
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
14
|
+
|
|
10
15
|
override fun updateDrawState(tp: TextPaint) {
|
|
11
16
|
super.updateDrawState(tp)
|
|
12
17
|
val bold = style.h1Bold
|
|
@@ -14,4 +19,6 @@ class EnrichedH1Span(private val style: HtmlStyle) : AbsoluteSizeSpan(style.h1Fo
|
|
|
14
19
|
tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
|
|
15
20
|
}
|
|
16
21
|
}
|
|
22
|
+
|
|
23
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedH1Span = EnrichedH1Span(htmlStyle)
|
|
17
24
|
}
|
|
@@ -6,7 +6,12 @@ import android.text.style.AbsoluteSizeSpan
|
|
|
6
6
|
import com.swmansion.enriched.spans.interfaces.EnrichedHeadingSpan
|
|
7
7
|
import com.swmansion.enriched.styles.HtmlStyle
|
|
8
8
|
|
|
9
|
-
class EnrichedH2Span(
|
|
9
|
+
class EnrichedH2Span(
|
|
10
|
+
private val htmlStyle: HtmlStyle,
|
|
11
|
+
) : AbsoluteSizeSpan(htmlStyle.h2FontSize),
|
|
12
|
+
EnrichedHeadingSpan {
|
|
13
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
14
|
+
|
|
10
15
|
override fun updateDrawState(tp: TextPaint) {
|
|
11
16
|
super.updateDrawState(tp)
|
|
12
17
|
val bold = htmlStyle.h2Bold
|
|
@@ -14,4 +19,6 @@ class EnrichedH2Span(private val htmlStyle: HtmlStyle) : AbsoluteSizeSpan(htmlSt
|
|
|
14
19
|
tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
|
|
15
20
|
}
|
|
16
21
|
}
|
|
22
|
+
|
|
23
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedH2Span = EnrichedH2Span(htmlStyle)
|
|
17
24
|
}
|
|
@@ -6,7 +6,12 @@ import android.text.style.AbsoluteSizeSpan
|
|
|
6
6
|
import com.swmansion.enriched.spans.interfaces.EnrichedHeadingSpan
|
|
7
7
|
import com.swmansion.enriched.styles.HtmlStyle
|
|
8
8
|
|
|
9
|
-
class EnrichedH3Span(
|
|
9
|
+
class EnrichedH3Span(
|
|
10
|
+
private val htmlStyle: HtmlStyle,
|
|
11
|
+
) : AbsoluteSizeSpan(htmlStyle.h3FontSize),
|
|
12
|
+
EnrichedHeadingSpan {
|
|
13
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
14
|
+
|
|
10
15
|
override fun updateDrawState(tp: TextPaint) {
|
|
11
16
|
super.updateDrawState(tp)
|
|
12
17
|
val bold = htmlStyle.h3Bold
|
|
@@ -14,4 +19,6 @@ class EnrichedH3Span(private val htmlStyle: HtmlStyle) : AbsoluteSizeSpan(htmlSt
|
|
|
14
19
|
tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
|
|
15
20
|
}
|
|
16
21
|
}
|
|
22
|
+
|
|
23
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedH3Span = EnrichedH3Span(htmlStyle)
|
|
17
24
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
package com.swmansion.enriched.spans
|
|
2
|
+
|
|
3
|
+
import android.graphics.Typeface
|
|
4
|
+
import android.text.TextPaint
|
|
5
|
+
import android.text.style.AbsoluteSizeSpan
|
|
6
|
+
import com.swmansion.enriched.spans.interfaces.EnrichedHeadingSpan
|
|
7
|
+
import com.swmansion.enriched.styles.HtmlStyle
|
|
8
|
+
|
|
9
|
+
class EnrichedH4Span(
|
|
10
|
+
private val htmlStyle: HtmlStyle,
|
|
11
|
+
) : AbsoluteSizeSpan(htmlStyle.h4FontSize),
|
|
12
|
+
EnrichedHeadingSpan {
|
|
13
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
14
|
+
|
|
15
|
+
override fun updateDrawState(tp: TextPaint) {
|
|
16
|
+
super.updateDrawState(tp)
|
|
17
|
+
val bold = htmlStyle.h4Bold
|
|
18
|
+
if (bold) {
|
|
19
|
+
tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedH4Span = EnrichedH4Span(htmlStyle)
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
package com.swmansion.enriched.spans
|
|
2
|
+
|
|
3
|
+
import android.graphics.Typeface
|
|
4
|
+
import android.text.TextPaint
|
|
5
|
+
import android.text.style.AbsoluteSizeSpan
|
|
6
|
+
import com.swmansion.enriched.spans.interfaces.EnrichedHeadingSpan
|
|
7
|
+
import com.swmansion.enriched.styles.HtmlStyle
|
|
8
|
+
|
|
9
|
+
class EnrichedH5Span(
|
|
10
|
+
private val htmlStyle: HtmlStyle,
|
|
11
|
+
) : AbsoluteSizeSpan(htmlStyle.h5FontSize),
|
|
12
|
+
EnrichedHeadingSpan {
|
|
13
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
14
|
+
|
|
15
|
+
override fun updateDrawState(tp: TextPaint) {
|
|
16
|
+
super.updateDrawState(tp)
|
|
17
|
+
val bold = htmlStyle.h5Bold
|
|
18
|
+
if (bold) {
|
|
19
|
+
tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedH5Span = EnrichedH5Span(htmlStyle)
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
package com.swmansion.enriched.spans
|
|
2
|
+
|
|
3
|
+
import android.graphics.Typeface
|
|
4
|
+
import android.text.TextPaint
|
|
5
|
+
import android.text.style.AbsoluteSizeSpan
|
|
6
|
+
import com.swmansion.enriched.spans.interfaces.EnrichedHeadingSpan
|
|
7
|
+
import com.swmansion.enriched.styles.HtmlStyle
|
|
8
|
+
|
|
9
|
+
class EnrichedH6Span(
|
|
10
|
+
private val htmlStyle: HtmlStyle,
|
|
11
|
+
) : AbsoluteSizeSpan(htmlStyle.h6FontSize),
|
|
12
|
+
EnrichedHeadingSpan {
|
|
13
|
+
override val dependsOnHtmlStyle: Boolean = true
|
|
14
|
+
|
|
15
|
+
override fun updateDrawState(tp: TextPaint) {
|
|
16
|
+
super.updateDrawState(tp)
|
|
17
|
+
val bold = htmlStyle.h6Bold
|
|
18
|
+
if (bold) {
|
|
19
|
+
tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedH6Span = EnrichedH6Span(htmlStyle)
|
|
24
|
+
}
|
|
@@ -12,15 +12,20 @@ import android.text.Spannable
|
|
|
12
12
|
import android.text.style.ImageSpan
|
|
13
13
|
import android.util.Log
|
|
14
14
|
import androidx.core.graphics.drawable.DrawableCompat
|
|
15
|
-
import androidx.core.graphics.withSave
|
|
16
|
-
import com.swmansion.enriched.spans.interfaces.EnrichedInlineSpan
|
|
17
|
-
import com.swmansion.enriched.utils.AsyncDrawable
|
|
18
15
|
import androidx.core.graphics.drawable.toDrawable
|
|
16
|
+
import androidx.core.graphics.withSave
|
|
19
17
|
import com.swmansion.enriched.R
|
|
18
|
+
import com.swmansion.enriched.spans.interfaces.EnrichedInlineSpan
|
|
20
19
|
import com.swmansion.enriched.spans.utils.ForceRedrawSpan
|
|
20
|
+
import com.swmansion.enriched.styles.HtmlStyle
|
|
21
|
+
import com.swmansion.enriched.utils.AsyncDrawable
|
|
21
22
|
import com.swmansion.enriched.utils.ResourceManager
|
|
22
23
|
|
|
23
|
-
class EnrichedImageSpan :
|
|
24
|
+
class EnrichedImageSpan :
|
|
25
|
+
ImageSpan,
|
|
26
|
+
EnrichedInlineSpan {
|
|
27
|
+
override val dependsOnHtmlStyle: Boolean = false
|
|
28
|
+
|
|
24
29
|
private var width: Int = 0
|
|
25
30
|
private var height: Int = 0
|
|
26
31
|
|
|
@@ -30,11 +35,18 @@ class EnrichedImageSpan : ImageSpan, EnrichedInlineSpan {
|
|
|
30
35
|
}
|
|
31
36
|
|
|
32
37
|
override fun draw(
|
|
33
|
-
canvas: Canvas,
|
|
34
|
-
|
|
38
|
+
canvas: Canvas,
|
|
39
|
+
text: CharSequence?,
|
|
40
|
+
start: Int,
|
|
41
|
+
end: Int,
|
|
42
|
+
x: Float,
|
|
43
|
+
top: Int,
|
|
44
|
+
y: Int,
|
|
45
|
+
bottom: Int,
|
|
46
|
+
paint: Paint,
|
|
35
47
|
) {
|
|
36
48
|
val drawable = drawable
|
|
37
|
-
canvas.withSave
|
|
49
|
+
canvas.withSave {
|
|
38
50
|
val transY = bottom - drawable.bounds.bottom - paint.fontMetricsInt.descent
|
|
39
51
|
translate(x, transY.toFloat())
|
|
40
52
|
drawable.draw(this)
|
|
@@ -45,7 +57,7 @@ class EnrichedImageSpan : ImageSpan, EnrichedInlineSpan {
|
|
|
45
57
|
val drawable = super.getDrawable()
|
|
46
58
|
val scale = Resources.getSystem().displayMetrics.density
|
|
47
59
|
|
|
48
|
-
drawable.setBounds(0, 0, (width * scale).toInt()
|
|
60
|
+
drawable.setBounds(0, 0, (width * scale).toInt(), (height * scale).toInt())
|
|
49
61
|
return drawable
|
|
50
62
|
}
|
|
51
63
|
|
|
@@ -54,7 +66,7 @@ class EnrichedImageSpan : ImageSpan, EnrichedInlineSpan {
|
|
|
54
66
|
text: CharSequence?,
|
|
55
67
|
start: Int,
|
|
56
68
|
end: Int,
|
|
57
|
-
fm: Paint.FontMetricsInt
|
|
69
|
+
fm: Paint.FontMetricsInt?,
|
|
58
70
|
): Int {
|
|
59
71
|
val d = drawable
|
|
60
72
|
val rect = d.bounds
|
|
@@ -76,7 +88,10 @@ class EnrichedImageSpan : ImageSpan, EnrichedInlineSpan {
|
|
|
76
88
|
return rect.right
|
|
77
89
|
}
|
|
78
90
|
|
|
79
|
-
private fun registerDrawableLoadCallback
|
|
91
|
+
private fun registerDrawableLoadCallback(
|
|
92
|
+
d: AsyncDrawable,
|
|
93
|
+
text: Editable?,
|
|
94
|
+
) {
|
|
80
95
|
d.onLoaded = onLoaded@{
|
|
81
96
|
val spannable = text as? Spannable
|
|
82
97
|
|
|
@@ -111,16 +126,18 @@ class EnrichedImageSpan : ImageSpan, EnrichedInlineSpan {
|
|
|
111
126
|
}
|
|
112
127
|
}
|
|
113
128
|
|
|
114
|
-
fun getWidth(): Int
|
|
115
|
-
return width
|
|
116
|
-
}
|
|
129
|
+
fun getWidth(): Int = width
|
|
117
130
|
|
|
118
|
-
fun getHeight(): Int
|
|
119
|
-
|
|
120
|
-
|
|
131
|
+
fun getHeight(): Int = height
|
|
132
|
+
|
|
133
|
+
override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedImageSpan = this
|
|
121
134
|
|
|
122
135
|
companion object {
|
|
123
|
-
fun createEnrichedImageSpan(
|
|
136
|
+
fun createEnrichedImageSpan(
|
|
137
|
+
src: String,
|
|
138
|
+
width: Int,
|
|
139
|
+
height: Int,
|
|
140
|
+
): EnrichedImageSpan {
|
|
124
141
|
var imgDrawable = prepareDrawableForImage(src)
|
|
125
142
|
|
|
126
143
|
if (imgDrawable == null) {
|