Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package com.swmansion.enriched.markdown

import android.content.Context
import android.graphics.Canvas
import android.os.Build
import android.text.Layout
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.appcompat.widget.AppCompatTextView
import com.swmansion.enriched.markdown.accessibility.MarkdownAccessibilityHelper
import com.swmansion.enriched.markdown.accessibility.AccessibleMarkdownTextView
import com.swmansion.enriched.markdown.spoiler.SpoilerCapable
import com.swmansion.enriched.markdown.spoiler.SpoilerOverlay
import com.swmansion.enriched.markdown.spoiler.SpoilerOverlayDrawer
Expand All @@ -25,11 +25,9 @@ class EnrichedMarkdownInternalText
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
) : AppCompatTextView(context, attrs, defStyleAttr),
) : AccessibleMarkdownTextView(context, attrs, defStyleAttr),
BlockSegmentView,
SpoilerCapable {
private val accessibilityHelper = MarkdownAccessibilityHelper(this)

var lastElementMarginBottom: Float = 0f

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

init {
setupAsMarkdownTextView(accessibilityHelper)
setupAsMarkdownTextView()
customSelectionActionModeCallback =
createSelectionActionModeCallback(
this,
Expand Down Expand Up @@ -109,7 +107,7 @@ class EnrichedMarkdownInternalText
}

fun setJustificationMode(needsJustify: Boolean) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
justificationMode =
if (needsJustify) {
Layout.JUSTIFICATION_MODE_INTER_WORD
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@ import android.text.Layout
import android.util.AttributeSet
import android.util.Log
import android.view.MotionEvent
import androidx.appcompat.widget.AppCompatTextView
import com.facebook.react.bridge.ReadableMap
import com.swmansion.enriched.markdown.accessibility.MarkdownAccessibilityHelper
import com.swmansion.enriched.markdown.accessibility.AccessibleMarkdownTextView
import com.swmansion.enriched.markdown.parser.Md4cFlags
import com.swmansion.enriched.markdown.parser.Parser
import com.swmansion.enriched.markdown.renderer.Renderer
Expand Down Expand Up @@ -42,7 +41,7 @@ class EnrichedMarkdownText
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
) : AppCompatTextView(context, attrs, defStyleAttr),
) : AccessibleMarkdownTextView(context, attrs, defStyleAttr),
SpoilerCapable {
private val parser = Parser.shared
private val renderer = Renderer()
Expand All @@ -56,9 +55,6 @@ class EnrichedMarkdownText

val layoutManager = EnrichedMarkdownTextLayoutManager(this)

// Accessibility helper for TalkBack support
private val accessibilityHelper = MarkdownAccessibilityHelper(this)

private var contextMenuItemTexts: List<String> = emptyList()
var onContextMenuItemPressCallback: ((itemText: String, selectedText: String, selectionStart: Int, selectionEnd: Int) -> Unit)? = null

Expand Down Expand Up @@ -86,7 +82,7 @@ class EnrichedMarkdownText
var spoilerOverlay: SpoilerOverlay = SpoilerOverlay.PARTICLES

init {
setupAsMarkdownTextView(accessibilityHelper)
setupAsMarkdownTextView()
customSelectionActionModeCallback =
createSelectionActionModeCallback(
this,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.swmansion.enriched.markdown.accessibility

import android.content.Context
import android.graphics.Rect
import android.util.AttributeSet
import android.view.KeyEvent
import android.view.MotionEvent
import androidx.appcompat.widget.AppCompatTextView

/** AppCompatTextView with built-in TalkBack support via MarkdownAccessibilityHelper. */
abstract class AccessibleMarkdownTextView
@JvmOverloads
constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
) : AppCompatTextView(context, attrs, defStyleAttr) {
val accessibilityHelper = MarkdownAccessibilityHelper(this)

override fun dispatchHoverEvent(event: MotionEvent): Boolean =
accessibilityHelper.dispatchHoverEvent(event) || super.dispatchHoverEvent(event)

override fun dispatchKeyEvent(event: KeyEvent): Boolean = accessibilityHelper.dispatchKeyEvent(event) || super.dispatchKeyEvent(event)

override fun onFocusChanged(
gainFocus: Boolean,
direction: Int,
previouslyFocusedRect: Rect?,
) {
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect)
accessibilityHelper.onFocusChanged(gainFocus, direction, previouslyFocusedRect)
}
}
Loading
Loading