Skip to content

Commit 6c824c9

Browse files
committed
Merge remote-tracking branch 'origin' into fix/macos-caret-rect-inset
2 parents fe6c824 + 501e8a9 commit 6c824c9

7 files changed

Lines changed: 515 additions & 214 deletions

File tree

android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownInternalText.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package com.swmansion.enriched.markdown
22

33
import android.content.Context
44
import android.graphics.Canvas
5+
import android.os.Build
56
import android.text.Layout
67
import android.util.AttributeSet
78
import android.view.MotionEvent
8-
import androidx.appcompat.widget.AppCompatTextView
9-
import com.swmansion.enriched.markdown.accessibility.MarkdownAccessibilityHelper
9+
import com.swmansion.enriched.markdown.accessibility.AccessibleMarkdownTextView
1010
import com.swmansion.enriched.markdown.spoiler.SpoilerCapable
1111
import com.swmansion.enriched.markdown.spoiler.SpoilerOverlay
1212
import com.swmansion.enriched.markdown.spoiler.SpoilerOverlayDrawer
@@ -25,11 +25,9 @@ class EnrichedMarkdownInternalText
2525
context: Context,
2626
attrs: AttributeSet? = null,
2727
defStyleAttr: Int = 0,
28-
) : AppCompatTextView(context, attrs, defStyleAttr),
28+
) : AccessibleMarkdownTextView(context, attrs, defStyleAttr),
2929
BlockSegmentView,
3030
SpoilerCapable {
31-
private val accessibilityHelper = MarkdownAccessibilityHelper(this)
32-
3331
var lastElementMarginBottom: Float = 0f
3432

3533
private val checkboxTouchHelper = CheckboxTouchHelper(this)
@@ -49,7 +47,7 @@ class EnrichedMarkdownInternalText
4947
private var onContextMenuItemPress: ((itemText: String, selectedText: String, selectionStart: Int, selectionEnd: Int) -> Unit)? = null
5048

5149
init {
52-
setupAsMarkdownTextView(accessibilityHelper)
50+
setupAsMarkdownTextView()
5351
customSelectionActionModeCallback =
5452
createSelectionActionModeCallback(
5553
this,
@@ -109,7 +107,7 @@ class EnrichedMarkdownInternalText
109107
}
110108

111109
fun setJustificationMode(needsJustify: Boolean) {
112-
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
110+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
113111
justificationMode =
114112
if (needsJustify) {
115113
Layout.JUSTIFICATION_MODE_INTER_WORD

android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ import android.text.Layout
1010
import android.util.AttributeSet
1111
import android.util.Log
1212
import android.view.MotionEvent
13-
import androidx.appcompat.widget.AppCompatTextView
1413
import com.facebook.react.bridge.ReadableMap
15-
import com.swmansion.enriched.markdown.accessibility.MarkdownAccessibilityHelper
14+
import com.swmansion.enriched.markdown.accessibility.AccessibleMarkdownTextView
1615
import com.swmansion.enriched.markdown.parser.Md4cFlags
1716
import com.swmansion.enriched.markdown.parser.Parser
1817
import com.swmansion.enriched.markdown.renderer.Renderer
@@ -42,7 +41,7 @@ class EnrichedMarkdownText
4241
context: Context,
4342
attrs: AttributeSet? = null,
4443
defStyleAttr: Int = 0,
45-
) : AppCompatTextView(context, attrs, defStyleAttr),
44+
) : AccessibleMarkdownTextView(context, attrs, defStyleAttr),
4645
SpoilerCapable {
4746
private val parser = Parser.shared
4847
private val renderer = Renderer()
@@ -56,9 +55,6 @@ class EnrichedMarkdownText
5655

5756
val layoutManager = EnrichedMarkdownTextLayoutManager(this)
5857

59-
// Accessibility helper for TalkBack support
60-
private val accessibilityHelper = MarkdownAccessibilityHelper(this)
61-
6258
private var contextMenuItemTexts: List<String> = emptyList()
6359
var onContextMenuItemPressCallback: ((itemText: String, selectedText: String, selectionStart: Int, selectionEnd: Int) -> Unit)? = null
6460

@@ -86,7 +82,7 @@ class EnrichedMarkdownText
8682
var spoilerOverlay: SpoilerOverlay = SpoilerOverlay.PARTICLES
8783

8884
init {
89-
setupAsMarkdownTextView(accessibilityHelper)
85+
setupAsMarkdownTextView()
9086
customSelectionActionModeCallback =
9187
createSelectionActionModeCallback(
9288
this,
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.swmansion.enriched.markdown.accessibility
2+
3+
import android.content.Context
4+
import android.graphics.Rect
5+
import android.util.AttributeSet
6+
import android.view.KeyEvent
7+
import android.view.MotionEvent
8+
import androidx.appcompat.widget.AppCompatTextView
9+
10+
/** AppCompatTextView with built-in TalkBack support via MarkdownAccessibilityHelper. */
11+
abstract class AccessibleMarkdownTextView
12+
@JvmOverloads
13+
constructor(
14+
context: Context,
15+
attrs: AttributeSet? = null,
16+
defStyleAttr: Int = 0,
17+
) : AppCompatTextView(context, attrs, defStyleAttr) {
18+
val accessibilityHelper = MarkdownAccessibilityHelper(this)
19+
20+
override fun dispatchHoverEvent(event: MotionEvent): Boolean =
21+
accessibilityHelper.dispatchHoverEvent(event) || super.dispatchHoverEvent(event)
22+
23+
override fun dispatchKeyEvent(event: KeyEvent): Boolean = accessibilityHelper.dispatchKeyEvent(event) || super.dispatchKeyEvent(event)
24+
25+
override fun onFocusChanged(
26+
gainFocus: Boolean,
27+
direction: Int,
28+
previouslyFocusedRect: Rect?,
29+
) {
30+
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect)
31+
accessibilityHelper.onFocusChanged(gainFocus, direction, previouslyFocusedRect)
32+
}
33+
}

0 commit comments

Comments
 (0)