Simplified removing bullets

pull/184/head
M66B 5 years ago
parent bddf5760b3
commit 03b5bb7dc8

@ -65,7 +65,7 @@ import android.text.method.LinkMovementMethod;
import android.text.style.BulletSpan; import android.text.style.BulletSpan;
import android.text.style.CharacterStyle; import android.text.style.CharacterStyle;
import android.text.style.ImageSpan; import android.text.style.ImageSpan;
import android.text.style.LeadingMarginSpan; import android.text.style.ParagraphStyle;
import android.text.style.QuoteSpan; import android.text.style.QuoteSpan;
import android.text.style.URLSpan; import android.text.style.URLSpan;
import android.util.TypedValue; import android.util.TypedValue;
@ -480,9 +480,11 @@ public class FragmentCompose extends FragmentBase {
@Override @Override
public void beforeTextChanged(CharSequence text, int start, int count, int after) { public void beforeTextChanged(CharSequence text, int start, int count, int after) {
if (count == 1 && text.charAt(start) == '\n' && after == 0 && start > 0) if (count == 1 && after == 0 && text.charAt(start) == '\n') {
Log.i("Removed=" + start);
removed = start; removed = start;
} }
}
@Override @Override
public void onTextChanged(CharSequence text, int start, int before, int count) { public void onTextChanged(CharSequence text, int start, int before, int count) {
@ -490,9 +492,11 @@ public class FragmentCompose extends FragmentBase {
if (activity != null) if (activity != null)
activity.onUserInteraction(); activity.onUserInteraction();
if (before == 0 && count == 1 && start > 0 && text.charAt(start) == '\n') if (before == 0 && count == 1 && start > 0 && text.charAt(start) == '\n') {
Log.i("Added=" + start);
added = start; added = start;
} }
}
@Override @Override
public void afterTextChanged(Editable text) { public void afterTextChanged(Editable text) {
@ -576,40 +580,67 @@ public class FragmentCompose extends FragmentBase {
} }
if (renum) if (renum)
renumber(text); renumber(text, false);
} catch (Throwable ex) { } catch (Throwable ex) {
Log.e(ex); Log.e(ex);
} finally { } finally {
added = null; added = null;
} }
if (removed != null) if (removed != null) {
try { renumber(text, true);
boolean renum = false; removed = null;
BulletSpan[] spans = text.getSpans(removed - 1, removed - 1, BulletSpan.class);
if (spans.length == 1) {
int end = text.getSpanEnd(spans[0]);
BulletSpan[] bs = text.getSpans(end, end, BulletSpan.class);
for (BulletSpan b : bs) {
int s = text.getSpanStart(b);
int e = text.getSpanEnd(b);
if (s == e) {
renum = true;
text.removeSpan(b);
} }
//TextUtils.dumpSpans(text, new LogPrinter(android.util.Log.INFO, "FairEmail"), "afterTextChanged ");
} }
public void renumber(Editable text, boolean clean) {
Context context = etBody.getContext();
int dp6 = Helper.dp2pixels(context, 6);
int colorAccent = Helper.resolveColor(context, R.attr.colorAccent);
Log.i("Renumber clean=" + clean + " text=" + text);
int next;
int index = 1;
int pos = -1;
for (int i = 0; i < text.length(); i = next) {
next = text.nextSpanTransition(i, text.length(), NumberSpan.class);
Log.i("Bullet span next=" + next);
BulletSpan[] spans = text.getSpans(i, next, BulletSpan.class);
for (BulletSpan span : spans) {
int start = text.getSpanStart(span);
int end = text.getSpanEnd(span);
int flags = text.getSpanFlags(span);
Log.i("Bullet span " + start + "..." + end);
if (clean && start == end) {
text.removeSpan(span);
continue;
} }
if (renum) if (span instanceof NumberSpan) {
renumber(text); if (start == pos)
} catch (Throwable ex) { index++;
Log.e(ex); else
} finally { index = 1;
removed = null;
NumberSpan ns = (NumberSpan) span;
if (index != ns.getIndex()) {
NumberSpan clone = new NumberSpan(dp6, colorAccent, ns.getTextSize(), index);
text.removeSpan(span);
text.setSpan(clone, start, end, flags);
}
pos = end;
}
}
} }
} }
public <T extends LeadingMarginSpan> T clone(Object span, Class<T> type, Context context) { public <T extends ParagraphStyle> T clone(Object span, Class<T> type, Context context) {
if (QuoteSpan.class.isAssignableFrom(type)) { if (QuoteSpan.class.isAssignableFrom(type)) {
QuoteSpan q = (QuoteSpan) span; QuoteSpan q = (QuoteSpan) span;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P)
@ -633,39 +664,6 @@ public class FragmentCompose extends FragmentBase {
} else } else
throw new IllegalArgumentException(type.getName()); throw new IllegalArgumentException(type.getName());
} }
public void renumber(Editable text) {
Context context = etBody.getContext();
int dp6 = Helper.dp2pixels(context, 6);
int colorAccent = Helper.resolveColor(context, R.attr.colorAccent);
int next;
int index = 1;
int pos = -1;
for (int i = 0; i < text.length(); i = next) {
next = text.nextSpanTransition(i, text.length(), NumberSpan.class);
NumberSpan[] spans = text.getSpans(i, next, NumberSpan.class);
if (spans.length == 1) {
int start = text.getSpanStart(spans[0]);
int end = text.getSpanEnd(spans[0]);
int flags = text.getSpanFlags(spans[0]);
if (start == pos)
index++;
else
index = 1;
if (index != spans[0].getIndex()) {
NumberSpan clone = new NumberSpan(dp6, colorAccent, spans[0].getTextSize(), index);
text.removeSpan(spans[0]);
text.setSpan(clone, start, end, flags);
}
pos = end;
}
}
}
}); });
cbSignature.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { cbSignature.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

Loading…
Cancel
Save