Added span range checks and breadcrumbs

pull/198/head
M66B 4 years ago
parent 0eb5501137
commit f32b19fc9e

@ -274,6 +274,12 @@ public class Log {
} }
} }
static void breadcrumb(String name, String key, String value) {
Map<String, String> crumb = new HashMap<>();
crumb.put(key, value);
breadcrumb(name, crumb);
}
static void breadcrumb(String name, Map<String, String> crumb) { static void breadcrumb(String name, Map<String, String> crumb) {
try { try {
Map<String, Object> ocrumb = new HashMap<>(); Map<String, Object> ocrumb = new HashMap<>();

@ -84,8 +84,11 @@ public class StyleHelper {
final int end = _end; final int end = _end;
if (action == R.id.menu_bold || action == R.id.menu_italic) { if (action == R.id.menu_bold || action == R.id.menu_italic) {
int style = (action == R.id.menu_bold ? Typeface.BOLD : Typeface.ITALIC); String name = (action == R.id.menu_bold ? "bold" : "italic");
Log.breadcrumb("style", "action", name);
boolean has = false; boolean has = false;
int style = (action == R.id.menu_bold ? Typeface.BOLD : Typeface.ITALIC);
StyleSpan[] spans = edit.getSpans(start, end, StyleSpan.class); StyleSpan[] spans = edit.getSpans(start, end, StyleSpan.class);
for (StyleSpan span : spans) for (StyleSpan span : spans)
if (span.getStyle() == style) { if (span.getStyle() == style) {
@ -106,6 +109,8 @@ public class StyleHelper {
return true; return true;
} else if (action == R.id.menu_underline) { } else if (action == R.id.menu_underline) {
Log.breadcrumb("style", "action", "underline");
boolean has = false; boolean has = false;
UnderlineSpan[] spans = edit.getSpans(start, end, UnderlineSpan.class); UnderlineSpan[] spans = edit.getSpans(start, end, UnderlineSpan.class);
for (UnderlineSpan span : spans) { for (UnderlineSpan span : spans) {
@ -199,6 +204,8 @@ public class StyleHelper {
} }
private boolean setSize(MenuItem item) { private boolean setSize(MenuItem item) {
Log.breadcrumb("style", "action", "size");
Float size; Float size;
if (item.getItemId() == R.id.menu_style_size_small) if (item.getItemId() == R.id.menu_style_size_small)
size = 0.8f; size = 0.8f;
@ -260,6 +267,8 @@ public class StyleHelper {
} }
private void _setColor(Integer color) { private void _setColor(Integer color) {
Log.breadcrumb("style", "action", "color");
ForegroundColorSpan spans[] = edit.getSpans(start, end, ForegroundColorSpan.class); ForegroundColorSpan spans[] = edit.getSpans(start, end, ForegroundColorSpan.class);
for (ForegroundColorSpan span : spans) { for (ForegroundColorSpan span : spans) {
int s = edit.getSpanStart(span); int s = edit.getSpanStart(span);
@ -279,6 +288,8 @@ public class StyleHelper {
} }
private boolean setAlignment(MenuItem item) { private boolean setAlignment(MenuItem item) {
Log.breadcrumb("style", "action", "alignment");
Pair<Integer, Integer> paragraph = ensureParagraph(edit, start, end); Pair<Integer, Integer> paragraph = ensureParagraph(edit, start, end);
int s = paragraph.first; int s = paragraph.first;
int e = paragraph.second; int e = paragraph.second;
@ -309,6 +320,8 @@ public class StyleHelper {
} }
private boolean setListLevel(MenuItem item) { private boolean setListLevel(MenuItem item) {
Log.breadcrumb("style", "action", "level");
Context context = etBody.getContext(); Context context = etBody.getContext();
int add = (item.getItemId() == R.id.menu_style_list_increase ? 1 : -1); int add = (item.getItemId() == R.id.menu_style_list_increase ? 1 : -1);
@ -334,6 +347,8 @@ public class StyleHelper {
} }
private boolean setList(MenuItem item) { private boolean setList(MenuItem item) {
Log.breadcrumb("style", "action", "list");
Context context = etBody.getContext(); Context context = etBody.getContext();
int colorAccent = Helper.resolveColor(context, R.attr.colorAccent); int colorAccent = Helper.resolveColor(context, R.attr.colorAccent);
@ -382,6 +397,8 @@ public class StyleHelper {
} }
private boolean setFont(MenuItem item) { private boolean setFont(MenuItem item) {
Log.breadcrumb("style", "action", "font");
int id = item.getItemId(); int id = item.getItemId();
String[] names = anchor.getResources().getStringArray(R.array.fontNameValues); String[] names = anchor.getResources().getStringArray(R.array.fontNameValues);
String face = (id < names.length ? names[id] : null); String face = (id < names.length ? names[id] : null);
@ -406,6 +423,8 @@ public class StyleHelper {
} }
private boolean setBlockQuote(MenuItem item) { private boolean setBlockQuote(MenuItem item) {
Log.breadcrumb("style", "action", "quote");
Context context = etBody.getContext(); Context context = etBody.getContext();
int colorPrimary = Helper.resolveColor(context, R.attr.colorPrimary); int colorPrimary = Helper.resolveColor(context, R.attr.colorPrimary);
@ -454,6 +473,8 @@ public class StyleHelper {
} }
private boolean setStrikeThrough(MenuItem item) { private boolean setStrikeThrough(MenuItem item) {
Log.breadcrumb("style", "action", "strike");
boolean has = false; boolean has = false;
StrikethroughSpan[] spans = edit.getSpans(start, end, StrikethroughSpan.class); StrikethroughSpan[] spans = edit.getSpans(start, end, StrikethroughSpan.class);
for (StrikethroughSpan span : spans) { for (StrikethroughSpan span : spans) {
@ -476,6 +497,8 @@ public class StyleHelper {
} }
private boolean clear(MenuItem item) { private boolean clear(MenuItem item) {
Log.breadcrumb("style", "action", "clear");
int e = end; int e = end;
// Expand to paragraph (block quotes) // Expand to paragraph (block quotes)
@ -506,6 +529,8 @@ public class StyleHelper {
return true; return true;
} else if (action == R.id.menu_link) { } else if (action == R.id.menu_link) {
Log.breadcrumb("style", "action", "link");
String url = (String) args[0]; String url = (String) args[0];
List<Object> spans = new ArrayList<>(); List<Object> spans = new ArrayList<>();
@ -534,6 +559,8 @@ public class StyleHelper {
return true; return true;
} else if (action == R.id.menu_clear) { } else if (action == R.id.menu_clear) {
Log.breadcrumb("style", "action", "clear/all");
for (Object span : edit.getSpans(0, etBody.length(), Object.class)) for (Object span : edit.getSpans(0, etBody.length(), Object.class))
if (!(span instanceof ImageSpan)) if (!(span instanceof ImageSpan))
edit.removeSpan(span); edit.removeSpan(span);
@ -551,6 +578,22 @@ public class StyleHelper {
} }
static void splitSpan(Editable edit, int start, int end, int s, int e, int f, boolean extend, Object span1, Object span2) { static void splitSpan(Editable edit, int start, int end, int s, int e, int f, boolean extend, Object span1, Object span2) {
if (start < 0 || end < 0) {
Log.e(span1 + " invalid selection=" + start + "..." + end);
return;
}
if (s < 0 || e < 0) {
Log.e(span1 + " not attached=" + s + "..." + e);
return;
}
if (s > e) {
int tmp = s;
s = e;
e = tmp;
}
if (start < s && end > s && end < e) { if (start < s && end > s && end < e) {
// overlap before // overlap before
if (extend) if (extend)

Loading…
Cancel
Save