@@ -44,6 +44,7 @@ import android.text.TextWatcher
44
44
import android.text.style.SuggestionSpan
45
45
import android.util.AttributeSet
46
46
import android.util.DisplayMetrics
47
+ import android.util.Log
47
48
import android.util.TypedValue
48
49
import android.view.KeyEvent
49
50
import android.view.LayoutInflater
@@ -1497,37 +1498,75 @@ open class AztecText : AppCompatEditText, TextWatcher, UnknownHtmlSpan.OnUnknown
1497
1498
}
1498
1499
1499
1500
open fun fromHtml (source : String , isInit : Boolean = true) {
1500
- val builder = SpannableStringBuilder ()
1501
- val parser = AztecParser (alignmentRendering, plugins)
1501
+ val builder = getBuilderFromHtml(source)
1502
+ setupCursorPosition(builder)
1503
+ calculateSha(isInit)
1504
+ loadMedia()
1505
+ }
1502
1506
1503
- var cleanSource = CleaningUtils .cleanNestedBoldTags(source)
1504
- cleanSource = Format .removeSourceEditorFormatting(cleanSource, isInCalypsoMode, isInGutenbergMode)
1505
- builder.append(parser.fromHtml(cleanSource, context, shouldSkipTidying(), shouldIgnoreWhitespace()))
1507
+ open suspend fun fromHtmlAsync (source : String , isInit : Boolean = true) = withContext(Dispatchers .Default ) {
1508
+ val builder = getBuilderFromHtml(source)
1509
+ withContext(Dispatchers .Main ) {
1510
+ setupCursorPosition(builder)
1511
+ }
1506
1512
1507
- Format .preProcessSpannedText(builder, isInCalypsoMode)
1513
+ calculateSha(isInit)
1514
+ loadMedia()
1515
+ }
1508
1516
1509
- switchToAztecStyle(builder, 0 , builder.length)
1510
- disableTextChangedListener()
1517
+ private fun loadMedia () {
1518
+ loadImages()
1519
+ loadVideos()
1520
+ mediaCallback?.mediaLoadingStarted()
1521
+ }
1511
1522
1512
- builder.getSpans(0 , builder.length, AztecDynamicImageSpan ::class .java).forEach {
1513
- it.textView = WeakReference (this )
1523
+ private fun calculateSha (isInit : Boolean ) {
1524
+ if (isInit) {
1525
+ initialEditorContentParsedSHA256 = calculateInitialHTMLSHA(
1526
+ toPlainHtml(false ),
1527
+ initialEditorContentParsedSHA256
1528
+ )
1514
1529
}
1530
+ }
1515
1531
1532
+ private fun setupCursorPosition (builder : SpannableStringBuilder ) {
1516
1533
val cursorPosition = consumeCursorPosition(builder)
1517
1534
setSelection(0 )
1518
1535
1519
1536
setTextKeepState(builder)
1520
1537
enableTextChangedListener()
1521
1538
1522
1539
setSelection(cursorPosition)
1540
+ }
1523
1541
1524
- if (isInit) {
1525
- initialEditorContentParsedSHA256 = calculateInitialHTMLSHA(toPlainHtml( false ), initialEditorContentParsedSHA256 )
1526
- }
1542
+ private fun getBuilderFromHtml ( source : String ): SpannableStringBuilder {
1543
+ val builder = SpannableStringBuilder ( )
1544
+ val parser = AztecParser (alignmentRendering, plugins)
1527
1545
1528
- loadImages()
1529
- loadVideos()
1530
- mediaCallback?.mediaLoadingStarted()
1546
+ var cleanSource = CleaningUtils .cleanNestedBoldTags(source)
1547
+ cleanSource = Format .removeSourceEditorFormatting(
1548
+ cleanSource,
1549
+ isInCalypsoMode,
1550
+ isInGutenbergMode
1551
+ )
1552
+ builder.append(
1553
+ parser.fromHtml(
1554
+ cleanSource,
1555
+ context,
1556
+ shouldSkipTidying(),
1557
+ shouldIgnoreWhitespace()
1558
+ )
1559
+ )
1560
+
1561
+ Format .preProcessSpannedText(builder, isInCalypsoMode)
1562
+
1563
+ switchToAztecStyle(builder, 0 , builder.length)
1564
+ disableTextChangedListener()
1565
+
1566
+ builder.getSpans(0 , builder.length, AztecDynamicImageSpan ::class .java).forEach {
1567
+ it.textView = WeakReference (this )
1568
+ }
1569
+ return builder
1531
1570
}
1532
1571
1533
1572
private fun loadImages () {
0 commit comments