(Editable text, boolean clean, Context context)
| 1703 | } |
| 1704 | |
| 1705 | static void renumber(Editable text, boolean clean, Context context) { |
| 1706 | int bulletGap = context.getResources().getDimensionPixelSize(R.dimen.bullet_gap_size); |
| 1707 | int bulletIndent = context.getResources().getDimensionPixelSize(R.dimen.bullet_indent_size); |
| 1708 | int colorAccent = Helper.resolveColor(context, androidx.appcompat.R.attr.colorAccent); |
| 1709 | |
| 1710 | Log.i("Renumber clean=" + clean + " text=" + text); |
| 1711 | |
| 1712 | int next; |
| 1713 | int pos = -1; |
| 1714 | List<Integer> levels = new ArrayList<>(); |
| 1715 | for (int i = 0; i < text.length(); i = next) { |
| 1716 | next = text.nextSpanTransition(i, text.length(), NumberSpan.class); |
| 1717 | Log.i("Bullet span next=" + next); |
| 1718 | |
| 1719 | BulletSpan[] spans = text.getSpans(i, next, BulletSpan.class); |
| 1720 | for (BulletSpan span : spans) { |
| 1721 | int start = text.getSpanStart(span); |
| 1722 | int end = text.getSpanEnd(span); |
| 1723 | int flags = text.getSpanFlags(span); |
| 1724 | Log.i("Bullet span " + start + "..." + end); |
| 1725 | |
| 1726 | if (clean && start == end) { |
| 1727 | text.removeSpan(span); |
| 1728 | continue; |
| 1729 | } |
| 1730 | |
| 1731 | int level; |
| 1732 | if (span instanceof NumberSpan) |
| 1733 | level = ((NumberSpan) span).getLevel(); |
| 1734 | else if (span instanceof BulletSpanEx) |
| 1735 | level = ((BulletSpanEx) span).getLevel(); |
| 1736 | else |
| 1737 | level = 0; |
| 1738 | |
| 1739 | if (start != pos) |
| 1740 | levels.clear(); |
| 1741 | while (levels.size() > level + 1) |
| 1742 | levels.remove(levels.size() - 1); |
| 1743 | if (levels.size() == level + 1 && !(span instanceof NumberSpan)) |
| 1744 | levels.remove(level); |
| 1745 | while (levels.size() < level + 1) |
| 1746 | levels.add(0); |
| 1747 | |
| 1748 | int index = levels.get(level) + 1; |
| 1749 | levels.remove(level); |
| 1750 | levels.add(level, index); |
| 1751 | |
| 1752 | if (span instanceof NumberSpan) { |
| 1753 | NumberSpan ns = (NumberSpan) span; |
| 1754 | if (index != ns.getIndex()) { |
| 1755 | text.removeSpan(span); |
| 1756 | // Text size needs measuring |
| 1757 | NumberSpan clone = new NumberSpan(bulletIndent, bulletGap, colorAccent, ns.getTextSize(), level, index); |
| 1758 | text.setSpan(clone, start, end, flags); |
| 1759 | } |
| 1760 | |
| 1761 | pos = end; |
| 1762 | } |
no test coverage detected