1cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne/*
2cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * Copyright (C) 2007-2010 The Android Open Source Project
3cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne *
4cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * use this file except in compliance with the License. You may obtain a copy of
6cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * the License at
7cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne *
8cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * http://www.apache.org/licenses/LICENSE-2.0
9cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne *
10cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * Unless required by applicable law or agreed to in writing, software
11cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * License for the specific language governing permissions and limitations under
14cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * the License.
15cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne */
16cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
17cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunnepackage android.view.inputmethod;
18cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
19cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunneimport android.os.Parcel;
20cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunneimport android.os.Parcelable;
21cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunneimport android.text.TextUtils;
22cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
23cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne/**
24cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * Information about a single text correction that an editor has reported to
25cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne * an input method.
26cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne */
27cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunnepublic final class CorrectionInfo implements Parcelable {
28cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    private final int mOffset;
29cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    private final CharSequence mOldText;
30cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    private final CharSequence mNewText;
31cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
32cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    /**
33cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * @param offset The offset in the edited text where the old and new text start.
34cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * @param oldText The old text that has been replaced.
35cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * @param newText The replacement text.
36cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     */
37cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    public CorrectionInfo(int offset, CharSequence oldText, CharSequence newText) {
38cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        mOffset = offset;
39cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        mOldText = oldText;
40cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        mNewText = newText;
41cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    }
42cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
43cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    private CorrectionInfo(Parcel source) {
44cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        mOffset = source.readInt();
45cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        mOldText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
46cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        mNewText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
47cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    }
48cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
49cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    /**
50cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * Return the offset position of this correction in the text. Both the {@link #getOldText()} and
51cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * {@link #getNewText()} start at this offset.
52cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     */
53cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    public int getOffset() {
54cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        return mOffset;
55cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    }
56cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
57cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    /**
58cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * Return the text that has actually been typed by the user, and which has been corrected.
59cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     */
60cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    public CharSequence getOldText() {
61cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        return mOldText;
62cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    }
63cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
64cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    /**
65cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * Return the new text that corrects what was typed by the user.
66cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     */
67cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    public CharSequence getNewText() {
68cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        return mNewText;
69cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    }
70cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
71cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    @Override
72cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    public String toString() {
73cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        return "CorrectionInfo{#" + mOffset + " \"" + mOldText + "\" -> \"" + mNewText + "\"}";
74cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    }
75cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
76cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    /**
77cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * Used to package this object into a {@link Parcel}.
78cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     *
79cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * @param dest The {@link Parcel} to be written.
80cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * @param flags The flags used for parceling.
81cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     */
82cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    public void writeToParcel(Parcel dest, int flags) {
83cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        dest.writeInt(mOffset);
84cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        TextUtils.writeToParcel(mOldText, dest, flags);
85cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        TextUtils.writeToParcel(mNewText, dest, flags);
86cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    }
87cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
88cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    /**
89cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     * Used to make this class parcelable.
90cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne     */
91c2ddd6023688db5ecf6c586e05f55e262b4a802eYohei Yukawa    public static final Parcelable.Creator<CorrectionInfo> CREATOR =
92c2ddd6023688db5ecf6c586e05f55e262b4a802eYohei Yukawa            new Parcelable.Creator<CorrectionInfo>() {
93c2ddd6023688db5ecf6c586e05f55e262b4a802eYohei Yukawa                public CorrectionInfo createFromParcel(Parcel source) {
94c2ddd6023688db5ecf6c586e05f55e262b4a802eYohei Yukawa                    return new CorrectionInfo(source);
95c2ddd6023688db5ecf6c586e05f55e262b4a802eYohei Yukawa                }
96c2ddd6023688db5ecf6c586e05f55e262b4a802eYohei Yukawa                public CorrectionInfo[] newArray(int size) {
97c2ddd6023688db5ecf6c586e05f55e262b4a802eYohei Yukawa                    return new CorrectionInfo[size];
98c2ddd6023688db5ecf6c586e05f55e262b4a802eYohei Yukawa                }
99c2ddd6023688db5ecf6c586e05f55e262b4a802eYohei Yukawa            };
100cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne
101cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    public int describeContents() {
102cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne        return 0;
103cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne    }
104cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne}
105