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
6 changes: 3 additions & 3 deletions android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
buildscript {
ext.getExtOrDefault = {name ->
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['EnrichedTextInput_' + name]
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['ReactNativeEnriched_' + name]
}

repositories {
Expand All @@ -27,7 +27,7 @@ apply plugin: "com.facebook.react"
apply from: "lint.gradle"

def getExtOrIntegerDefault(name) {
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["EnrichedTextInput_" + name]).toInteger()
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["ReactNativeEnriched_" + name]).toInteger()
}

def supportsNamespace() {
Expand Down Expand Up @@ -101,6 +101,6 @@ dependencies {

react {
jsRootDir = file("../src/")
libraryName = "EnrichedTextInputView"
libraryName = "ReactNativeEnriched"
codegenJavaPackageName = "com.swmansion.enriched"
}
10 changes: 5 additions & 5 deletions android/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
EnrichedTextInput_kotlinVersion=2.0.21
EnrichedTextInput_minSdkVersion=24
EnrichedTextInput_targetSdkVersion=34
EnrichedTextInput_compileSdkVersion=35
EnrichedTextInput__ndkVersion=27.1.12297006
ReactNativeEnriched_kotlinVersion=2.0.21
ReactNativeEnriched_minSdkVersion=24
ReactNativeEnriched_targetSdkVersion=34
ReactNativeEnriched_compileSdkVersion=35
ReactNativeEnriched_ndkVersion=27.1.12297006
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ import com.facebook.react.ReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.uimanager.ViewManager
import com.swmansion.enriched.utils.ResourceManager
import com.swmansion.enriched.common.ResourceManager
import com.swmansion.enriched.textinput.EnrichedTextInputViewManager
import java.util.ArrayList

class EnrichedTextInputViewPackage : ReactPackage {
class ReactNativeEnrichedPackage : ReactPackage {
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
ResourceManager.init(reactContext.applicationContext)
val viewManagers: MutableList<ViewManager<*, *>> = ArrayList()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.utils
package com.swmansion.enriched.common

import android.annotation.SuppressLint
import android.content.Context
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.swmansion.enriched
package com.swmansion.enriched.textinput

import android.view.KeyEvent
import android.view.inputmethod.InputConnection
import android.view.inputmethod.InputConnectionWrapper
import com.facebook.react.bridge.ReactContext
import com.facebook.react.uimanager.UIManagerHelper
import com.swmansion.enriched.events.OnInputKeyPressEvent
import com.swmansion.enriched.textinput.events.OnInputKeyPressEvent

// This class is based on the implementation from Facebook React Native to provide 'onKeyPress' API on android.
// Original source:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched
package com.swmansion.enriched.textinput

import android.content.ClipData
import android.content.ClipboardManager
Expand Down Expand Up @@ -30,29 +30,32 @@ import com.facebook.react.uimanager.UIManagerHelper
import com.facebook.react.views.text.ReactTypefaceUtils.applyStyles
import com.facebook.react.views.text.ReactTypefaceUtils.parseFontStyle
import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight
import com.swmansion.enriched.events.MentionHandler
import com.swmansion.enriched.events.OnInputBlurEvent
import com.swmansion.enriched.events.OnInputFocusEvent
import com.swmansion.enriched.events.OnRequestHtmlResultEvent
import com.swmansion.enriched.spans.EnrichedH1Span
import com.swmansion.enriched.spans.EnrichedH2Span
import com.swmansion.enriched.spans.EnrichedH3Span
import com.swmansion.enriched.spans.EnrichedImageSpan
import com.swmansion.enriched.spans.EnrichedSpans
import com.swmansion.enriched.spans.interfaces.EnrichedSpan
import com.swmansion.enriched.styles.HtmlStyle
import com.swmansion.enriched.styles.InlineStyles
import com.swmansion.enriched.styles.ListStyles
import com.swmansion.enriched.styles.ParagraphStyles
import com.swmansion.enriched.styles.ParametrizedStyles
import com.swmansion.enriched.utils.EnrichedConstants
import com.swmansion.enriched.utils.EnrichedEditableFactory
import com.swmansion.enriched.utils.EnrichedParser
import com.swmansion.enriched.utils.EnrichedSelection
import com.swmansion.enriched.utils.EnrichedSpanState
import com.swmansion.enriched.utils.mergeSpannables
import com.swmansion.enriched.watchers.EnrichedSpanWatcher
import com.swmansion.enriched.watchers.EnrichedTextWatcher
import com.swmansion.enriched.textinput.events.MentionHandler
import com.swmansion.enriched.textinput.events.OnInputBlurEvent
import com.swmansion.enriched.textinput.events.OnInputFocusEvent
import com.swmansion.enriched.textinput.events.OnRequestHtmlResultEvent
import com.swmansion.enriched.textinput.spans.EnrichedH1Span
import com.swmansion.enriched.textinput.spans.EnrichedH2Span
import com.swmansion.enriched.textinput.spans.EnrichedH3Span
import com.swmansion.enriched.textinput.spans.EnrichedH4Span
import com.swmansion.enriched.textinput.spans.EnrichedH5Span
import com.swmansion.enriched.textinput.spans.EnrichedH6Span
import com.swmansion.enriched.textinput.spans.EnrichedImageSpan
import com.swmansion.enriched.textinput.spans.EnrichedSpans
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedSpan
import com.swmansion.enriched.textinput.styles.HtmlStyle
import com.swmansion.enriched.textinput.styles.InlineStyles
import com.swmansion.enriched.textinput.styles.ListStyles
import com.swmansion.enriched.textinput.styles.ParagraphStyles
import com.swmansion.enriched.textinput.styles.ParametrizedStyles
import com.swmansion.enriched.textinput.utils.EnrichedConstants
import com.swmansion.enriched.textinput.utils.EnrichedEditableFactory
import com.swmansion.enriched.textinput.utils.EnrichedParser
import com.swmansion.enriched.textinput.utils.EnrichedSelection
import com.swmansion.enriched.textinput.utils.EnrichedSpanState
import com.swmansion.enriched.textinput.utils.mergeSpannables
import com.swmansion.enriched.textinput.watchers.EnrichedSpanWatcher
import com.swmansion.enriched.textinput.watchers.EnrichedTextWatcher
import java.util.regex.Pattern
import java.util.regex.PatternSyntaxException
import kotlin.math.ceil
Expand Down Expand Up @@ -752,14 +755,35 @@ class EnrichedTextInputView : AppCompatEditText {
scrollTo(scrollX, targetScrollY)
}

private fun isHeadingBold(
style: HtmlStyle,
span: EnrichedSpan,
): Boolean =
when (span) {
is EnrichedH1Span -> style.h1Bold
is EnrichedH2Span -> style.h2Bold
is EnrichedH3Span -> style.h3Bold
is EnrichedH4Span -> style.h4Bold
is EnrichedH5Span -> style.h5Bold
is EnrichedH6Span -> style.h6Bold
else -> false
}

private fun shouldRemoveBoldFromHeading(
span: EnrichedSpan,
prevStyle: HtmlStyle,
nextStyle: HtmlStyle,
): Boolean {
val wasBold = isHeadingBold(prevStyle, span)
val isNowBold = isHeadingBold(nextStyle, span)

return !wasBold && isNowBold
}

private fun reApplyHtmlStyleForSpans(
previousHtmlStyle: HtmlStyle,
nextHtmlStyle: HtmlStyle,
) {
val shouldRemoveBoldSpanFromH1Span = !previousHtmlStyle.h1Bold && nextHtmlStyle.h1Bold
val shouldRemoveBoldSpanFromH2Span = !previousHtmlStyle.h2Bold && nextHtmlStyle.h2Bold
val shouldRemoveBoldSpanFromH3Span = !previousHtmlStyle.h3Bold && nextHtmlStyle.h3Bold

val spannable = text as? Spannable ?: return
if (spannable.isEmpty()) return

Expand All @@ -776,9 +800,8 @@ class EnrichedTextInputView : AppCompatEditText {

if (start == -1 || end == -1) continue

if ((span is EnrichedH1Span && shouldRemoveBoldSpanFromH1Span) || (span is EnrichedH2Span && shouldRemoveBoldSpanFromH2Span) ||
(span is EnrichedH3Span && shouldRemoveBoldSpanFromH3Span)
) {
// Check if we need to remove explicit bold spans
if (shouldRemoveBoldFromHeading(span, previousHtmlStyle, nextHtmlStyle)) {
val isRemoved = removeStyle(EnrichedSpans.BOLD, start, end)
if (isRemoved) shouldEmitStateChange = true
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched
package com.swmansion.enriched.textinput

import com.facebook.react.bridge.Arguments

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched
package com.swmansion.enriched.textinput

import android.content.Context
import com.facebook.react.bridge.ReadableArray
Expand All @@ -15,21 +15,21 @@ import com.facebook.react.uimanager.annotations.ReactProp
import com.facebook.react.viewmanagers.EnrichedTextInputViewManagerDelegate
import com.facebook.react.viewmanagers.EnrichedTextInputViewManagerInterface
import com.facebook.yoga.YogaMeasureMode
import com.swmansion.enriched.events.OnChangeHtmlEvent
import com.swmansion.enriched.events.OnChangeSelectionEvent
import com.swmansion.enriched.events.OnChangeStateDeprecatedEvent
import com.swmansion.enriched.events.OnChangeStateEvent
import com.swmansion.enriched.events.OnChangeTextEvent
import com.swmansion.enriched.events.OnInputBlurEvent
import com.swmansion.enriched.events.OnInputFocusEvent
import com.swmansion.enriched.events.OnInputKeyPressEvent
import com.swmansion.enriched.events.OnLinkDetectedEvent
import com.swmansion.enriched.events.OnMentionDetectedEvent
import com.swmansion.enriched.events.OnMentionEvent
import com.swmansion.enriched.events.OnRequestHtmlResultEvent
import com.swmansion.enriched.spans.EnrichedSpans
import com.swmansion.enriched.styles.HtmlStyle
import com.swmansion.enriched.utils.jsonStringToStringMap
import com.swmansion.enriched.textinput.events.OnChangeHtmlEvent
import com.swmansion.enriched.textinput.events.OnChangeSelectionEvent
import com.swmansion.enriched.textinput.events.OnChangeStateDeprecatedEvent
import com.swmansion.enriched.textinput.events.OnChangeStateEvent
import com.swmansion.enriched.textinput.events.OnChangeTextEvent
import com.swmansion.enriched.textinput.events.OnInputBlurEvent
import com.swmansion.enriched.textinput.events.OnInputFocusEvent
import com.swmansion.enriched.textinput.events.OnInputKeyPressEvent
import com.swmansion.enriched.textinput.events.OnLinkDetectedEvent
import com.swmansion.enriched.textinput.events.OnMentionDetectedEvent
import com.swmansion.enriched.textinput.events.OnMentionEvent
import com.swmansion.enriched.textinput.events.OnRequestHtmlResultEvent
import com.swmansion.enriched.textinput.spans.EnrichedSpans
import com.swmansion.enriched.textinput.styles.HtmlStyle
import com.swmansion.enriched.textinput.utils.jsonStringToStringMap

@ReactModule(name = EnrichedTextInputViewManager.NAME)
class EnrichedTextInputViewManager :
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched
package com.swmansion.enriched.textinput

import android.content.Context
import android.graphics.Typeface
Expand All @@ -15,8 +15,8 @@ import com.facebook.react.views.text.ReactTypefaceUtils.parseFontStyle
import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight
import com.facebook.yoga.YogaMeasureMode
import com.facebook.yoga.YogaMeasureOutput
import com.swmansion.enriched.styles.HtmlStyle
import com.swmansion.enriched.utils.EnrichedParser
import com.swmansion.enriched.textinput.styles.HtmlStyle
import com.swmansion.enriched.textinput.utils.EnrichedParser
import java.util.concurrent.ConcurrentHashMap
import kotlin.math.ceil

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.ReactContext
import com.facebook.react.uimanager.UIManagerHelper
import com.swmansion.enriched.EnrichedTextInputView
import com.swmansion.enriched.textinput.EnrichedTextInputView

class MentionHandler(
private val view: EnrichedTextInputView,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.WritableMap
import com.facebook.react.uimanager.events.Event
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.WritableMap
import com.facebook.react.uimanager.events.Event
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import android.text.Editable
import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
import com.facebook.react.uimanager.events.Event
import com.swmansion.enriched.utils.EnrichedConstants
import com.swmansion.enriched.textinput.utils.EnrichedConstants

class OnChangeTextEvent(
surfaceId: Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.events
package com.swmansion.enriched.textinput.events

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.swmansion.enriched.spans
package com.swmansion.enriched.textinput.spans

import android.graphics.Canvas
import android.graphics.Paint
import android.text.Layout
import android.text.TextPaint
import android.text.style.LeadingMarginSpan
import android.text.style.MetricAffectingSpan
import com.swmansion.enriched.spans.interfaces.EnrichedBlockSpan
import com.swmansion.enriched.styles.HtmlStyle
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedBlockSpan
import com.swmansion.enriched.textinput.styles.HtmlStyle

// https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/core/java/android/text/style/QuoteSpan.java
class EnrichedBlockQuoteSpan(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.swmansion.enriched.spans
package com.swmansion.enriched.textinput.spans

import android.graphics.Typeface
import android.text.style.StyleSpan
import com.swmansion.enriched.spans.interfaces.EnrichedBlockSpan
import com.swmansion.enriched.spans.interfaces.EnrichedInlineSpan
import com.swmansion.enriched.styles.HtmlStyle
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInlineSpan
import com.swmansion.enriched.textinput.styles.HtmlStyle

@Suppress("UNUSED_PARAMETER")
class EnrichedBoldSpan(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.swmansion.enriched.spans
package com.swmansion.enriched.textinput.spans

import android.graphics.Canvas
import android.graphics.Paint
Expand All @@ -9,8 +9,8 @@ import android.text.Spanned
import android.text.TextPaint
import android.text.style.LineBackgroundSpan
import android.text.style.MetricAffectingSpan
import com.swmansion.enriched.spans.interfaces.EnrichedBlockSpan
import com.swmansion.enriched.styles.HtmlStyle
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedBlockSpan
import com.swmansion.enriched.textinput.styles.HtmlStyle

class EnrichedCodeBlockSpan(
private val htmlStyle: HtmlStyle,
Expand Down
Loading
Loading