SpannableBuilder setSpans allow array of arrays
This commit is contained in:
		
							parent
							
								
									947f57d0eb
								
							
						
					
					
						commit
						ad284c756b
					
				| @ -38,13 +38,9 @@ public class SpannableBuilder implements Appendable, CharSequence { | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             if (spans.getClass().isArray()) { | ||||
|                 for (Object o : ((Object[]) spans)) { | ||||
|                     builder.setSpan(o, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); | ||||
|                 } | ||||
|             } else { | ||||
|                 builder.setSpan(spans, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); | ||||
|             } | ||||
|             // @since 3.0.1-SNAPSHOT we introduce another method that recursively applies spans | ||||
|             // allowing array of arrays (and more) | ||||
|             setSpansInternal(builder, spans, start, end); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -406,4 +402,24 @@ public class SpannableBuilder implements Appendable, CharSequence { | ||||
|             super(text); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @since 3.0.1-SNAPSHOT | ||||
|      */ | ||||
|     private static void setSpansInternal( | ||||
|             @NonNull SpannableBuilder builder, | ||||
|             @Nullable Object spans, | ||||
|             int start, | ||||
|             int end) { | ||||
|         if (spans != null) { | ||||
|             if (spans.getClass().isArray()) { | ||||
|                 for (Object o : ((Object[]) spans)) { | ||||
|                     // @since 3.0.1-SNAPSHOT recursively apply spans (allow array of arrays) | ||||
|                     setSpansInternal(builder, o, start, end); | ||||
|                 } | ||||
|             } else { | ||||
|                 builder.setSpan(spans, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -224,22 +224,30 @@ public class SpannableBuilderTest { | ||||
| 
 | ||||
|         assertTrue(builder.getSpans(0, builder.length()).isEmpty()); | ||||
| 
 | ||||
|         final Object[] flatSpans = { | ||||
|                 new Object(), | ||||
|                 new Object(), | ||||
|                 new Object(), | ||||
|                 new Object(), | ||||
|                 new Object() | ||||
|         }; | ||||
| 
 | ||||
|         final Object[] spans = { | ||||
|                 new Object[]{ | ||||
|                         new Object(), new Object() | ||||
|                         flatSpans[0], flatSpans[1] | ||||
|                 }, | ||||
|                 new Object[]{ | ||||
|                         new Object(), new Object(), new Object() | ||||
|                         flatSpans[2], flatSpans[3], flatSpans[4] | ||||
|                 } | ||||
|         }; | ||||
| 
 | ||||
|         setSpans(builder, spans, 0, 1); | ||||
| 
 | ||||
|         final List<SpannableBuilder.Span> actual = builder.getSpans(0, builder.length()); | ||||
|         assertEquals(2, actual.size()); | ||||
|         assertEquals(flatSpans.length, actual.size()); | ||||
| 
 | ||||
|         for (int i = 0, length = spans.length; i < length; i++) { | ||||
|             assertEquals(spans[i], actual.get(i).what); | ||||
|             assertEquals(flatSpans[i], actual.get(i).what); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dimitry Ivanov
						Dimitry Ivanov