(Editable edit, int start, int end, int s, int e, int f, boolean extend, Object span1, Object span2)
| 1486 | } |
| 1487 | |
| 1488 | static boolean splitSpan(Editable edit, int start, int end, int s, int e, int f, boolean extend, Object span1, Object span2) { |
| 1489 | if (start < 0 || end < 0) { |
| 1490 | Log.e(span1 + " invalid selection=" + start + "..." + end); |
| 1491 | return false; |
| 1492 | } |
| 1493 | |
| 1494 | if (s < 0 || e < 0) { |
| 1495 | Log.e(span1 + " not attached=" + s + "..." + e); |
| 1496 | return false; |
| 1497 | } |
| 1498 | |
| 1499 | if (s > e) { |
| 1500 | int tmp = s; |
| 1501 | s = e; |
| 1502 | e = tmp; |
| 1503 | } |
| 1504 | |
| 1505 | if (start < s && end > s && end < e) { |
| 1506 | // overlap before |
| 1507 | if (extend) |
| 1508 | edit.setSpan(span1, start, e, f); |
| 1509 | else |
| 1510 | edit.setSpan(span1, end, e, f); |
| 1511 | return true; |
| 1512 | } else if (start < e && end > e && start > s) { |
| 1513 | // overlap after |
| 1514 | if (extend) |
| 1515 | edit.setSpan(span1, s, end, f); |
| 1516 | else |
| 1517 | edit.setSpan(span1, s, start, f); |
| 1518 | return true; |
| 1519 | } else if (start < s && end > e) { |
| 1520 | // overlap all |
| 1521 | if (extend) { |
| 1522 | edit.setSpan(span1, start, end, f); |
| 1523 | return true; |
| 1524 | } |
| 1525 | } else if (start >= s && end <= e) { |
| 1526 | if (start == s && end == e) |
| 1527 | return true; |
| 1528 | |
| 1529 | // overlap inner |
| 1530 | if (s < start) |
| 1531 | edit.setSpan(span1, s, start, f); |
| 1532 | if (end < e) |
| 1533 | edit.setSpan(span2, end, e, f); |
| 1534 | if (s < start || end < e) |
| 1535 | return true; |
| 1536 | } |
| 1537 | |
| 1538 | return false; |
| 1539 | } |
| 1540 | |
| 1541 | static void setSpan(Editable edit, Object span, int start, int end, int flags, Context context) { |
| 1542 | if (span instanceof CharacterStyle) |
no test coverage detected