19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.text; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is the interface for text whose content and markup 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can be changed (as opposed 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to immutable text like Strings). If you make a {@link DynamicLayout} 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of an Editable, the layout will be reflowed as the text is changed. 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic interface Editable 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextends CharSequence, GetChars, Spannable, Appendable 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Replaces the specified range (<code>st…en</code>) of text in this 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Editable with a copy of the slice <code>start…end</code> from 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>source</code>. The destination slice may be empty, in which case 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the operation is an insertion, or the source slice may be empty, 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in which case the operation is a deletion. 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Before the change is committed, each filter that was set with 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setFilters} is given the opportunity to modify the 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>source</code> text. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If <code>source</code> 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is Spanned, the spans from it are preserved into the Editable. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Existing spans within the Editable that entirely cover the replaced 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * range are retained, but any that were strictly within the range 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that was replaced are removed. As a special case, the cursor 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * position is preserved even when the entire range where it is 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * located is replaced. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a reference to this object. 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Editable replace(int st, int en, CharSequence source, int start, int end); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for replace(st, en, text, 0, text.length()) 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #replace(int, int, CharSequence, int, int) 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Editable replace(int st, int en, CharSequence text); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for replace(where, where, text, start, end) 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #replace(int, int, CharSequence, int, int) 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Editable insert(int where, CharSequence text, int start, int end); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for replace(where, where, text, 0, text.length()); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #replace(int, int, CharSequence, int, int) 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Editable insert(int where, CharSequence text); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for replace(st, en, "", 0, 0) 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #replace(int, int, CharSequence, int, int) 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Editable delete(int st, int en); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for replace(length(), length(), text, 0, text.length()) 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #replace(int, int, CharSequence, int, int) 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Editable append(CharSequence text); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for replace(length(), length(), text, start, end) 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #replace(int, int, CharSequence, int, int) 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Editable append(CharSequence text, int start, int end); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for append(String.valueOf(text)). 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #replace(int, int, CharSequence, int, int) 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Editable append(char text); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for replace(0, length(), "", 0, 0) 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #replace(int, int, CharSequence, int, int) 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that this clears the text, not the spans; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use {@link #clearSpans} if you need that. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void clear(); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Removes all spans from the Editable, as if by calling 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #removeSpan} on each of them. 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void clearSpans(); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the series of filters that will be called in succession 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * whenever the text of this Editable is changed, each of which has 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the opportunity to limit or transform the text that is being inserted. 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFilters(InputFilter[] filters); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the array of input filters that are currently applied 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to changes to this Editable. 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public InputFilter[] getFilters(); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Factory used by TextView to create new Editables. You can subclass 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it to provide something other than SpannableStringBuilder. 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Factory { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static Editable.Factory sInstance = new Editable.Factory(); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the standard Editable Factory. 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Editable.Factory getInstance() { 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sInstance; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a new SpannedStringBuilder from the specified 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CharSequence. You can override this to provide 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a different kind of Spanned. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Editable newEditable(CharSequence source) { 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SpannableStringBuilder(source); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 143