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&hellip;en</code>) of text in this
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Editable with a copy of the slice <code>start&hellip;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