mirror of
https://github.com/M66B/FairEmail.git
synced 2026-04-05 16:43:26 +02:00
Remove duplicate spans
This commit is contained in:
@@ -52,6 +52,8 @@ import android.text.style.QuoteSpan;
|
||||
import android.text.style.RelativeSizeSpan;
|
||||
import android.text.style.StrikethroughSpan;
|
||||
import android.text.style.StyleSpan;
|
||||
import android.text.style.SubscriptSpan;
|
||||
import android.text.style.SuperscriptSpan;
|
||||
import android.text.style.TypefaceSpan;
|
||||
import android.text.style.URLSpan;
|
||||
import android.text.style.UnderlineSpan;
|
||||
@@ -4075,11 +4077,60 @@ public class HtmlHelper {
|
||||
if (start == end)
|
||||
return;
|
||||
int len = ssb.length();
|
||||
if (start >= 0 && start < len && end <= len)
|
||||
if (start >= 0 && start < len && end <= len) {
|
||||
Object[] spans = ssb.getSpans(start, ssb.length(), Object.class);
|
||||
if (spans != null)
|
||||
for (Object s : spans)
|
||||
if (equal(s, span)) {
|
||||
int sstart = ssb.getSpanStart(s);
|
||||
int send = ssb.getSpanEnd(s);
|
||||
int sflags = ssb.getSpanFlags(s);
|
||||
if (sstart == start && send == ssb.length() && sflags == flags) {
|
||||
Log.i("Duplicate span " + s.getClass() + " " + sstart + "..." + send);
|
||||
ssb.removeSpan(s);
|
||||
}
|
||||
}
|
||||
|
||||
ssb.setSpan(span, start, end, flags);
|
||||
else
|
||||
} else
|
||||
Log.e("Invalid span " + start + "..." + end + " len=" + len + " type=" + span.getClass().getName());
|
||||
}
|
||||
|
||||
private boolean equal(Object span, Object existing) {
|
||||
if (!span.getClass().equals(existing.getClass()))
|
||||
return false;
|
||||
|
||||
if (span instanceof StyleSpan) {
|
||||
if (((StyleSpan) span).getStyle() == ((StyleSpan) existing).getStyle() &&
|
||||
((StyleSpan) span).getFontWeightAdjustment() == ((StyleSpan) existing).getFontWeightAdjustment())
|
||||
return true;
|
||||
} else if (span instanceof UnderlineSpan)
|
||||
return true;
|
||||
else if (span instanceof RelativeSizeSpan)
|
||||
return false;
|
||||
else if (span instanceof BackgroundColorSpan || span instanceof ForegroundColorSpan)
|
||||
return true;
|
||||
else if (span instanceof AlignmentSpan || span instanceof AlignmentSpan.Standard)
|
||||
return true;
|
||||
else if (span instanceof BulletSpan || span instanceof NumberSpan)
|
||||
return false;
|
||||
else if (span instanceof QuoteSpan || span instanceof IndentSpan)
|
||||
return false;
|
||||
else if (span instanceof SubscriptSpan || span instanceof SuperscriptSpan)
|
||||
return false;
|
||||
else if (span instanceof StrikethroughSpan)
|
||||
return true;
|
||||
else if (span instanceof URLSpan)
|
||||
return false;
|
||||
else if (span instanceof TypefaceSpan)
|
||||
return true;
|
||||
else if (span instanceof StyleHelper.MarkSpan)
|
||||
return true;
|
||||
else if (span instanceof StyleHelper.InsertedSpan)
|
||||
return false;
|
||||
|
||||
return false;
|
||||
}
|
||||
}, document.body());
|
||||
|
||||
for (LineSpan line : ssb.getSpans(0, ssb.length(), LineSpan.class)) {
|
||||
|
||||
Reference in New Issue
Block a user