WordComposer.java revision 9fbfd5877305ed19a20663630b498b6b3fdae942
1923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project/*
2443c360d0afdbab091994244f045f4756feaf2b4Jean-Baptiste Queru * Copyright (C) 2008 The Android Open Source Project
3923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project *
4923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * use this file except in compliance with the License. You may obtain a copy of
6923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * the License at
7923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project *
8923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0
9923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project *
10923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * License for the specific language governing permissions and limitations under
14923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * the License.
15923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project */
16923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
17923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Projectpackage com.android.inputmethod.latin;
18923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
19887f11ee43ad621aa6ad93d535ab7f48dec73fc7Tadashi G. Takaokaimport com.android.inputmethod.keyboard.KeyDetector;
20887f11ee43ad621aa6ad93d535ab7f48dec73fc7Tadashi G. Takaoka
21923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Projectimport java.util.ArrayList;
22923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
23923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project/**
24923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * A place to store the currently composing word with information such as adjacent key codes as well
25923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project */
26923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Projectpublic class WordComposer {
278fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
28887f11ee43ad621aa6ad93d535ab7f48dec73fc7Tadashi G. Takaoka    public static final int NOT_A_CODE = KeyDetector.NOT_A_CODE;
298fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    public static final int NOT_A_COORDINATE = -1;
30887f11ee43ad621aa6ad93d535ab7f48dec73fc7Tadashi G. Takaoka
31923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
32923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * The list of unicode values for each keystroke (including surrounding keys)
33923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
349fbfd5877305ed19a20663630b498b6b3fdae942satok    private ArrayList<int[]> mCodes;
358fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
368fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    private int mTypedLength;
379fbfd5877305ed19a20663630b498b6b3fdae942satok    private int[] mXCoordinates;
389fbfd5877305ed19a20663630b498b6b3fdae942satok    private int[] mYCoordinates;
398fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
40923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
41923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * The word chosen from the candidate list, until it is committed.
42923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
43923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    private String mPreferredWord;
448fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
459fbfd5877305ed19a20663630b498b6b3fdae942satok    private StringBuilder mTypedWord;
464a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani
474a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani    private int mCapsCount;
481c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani
491c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani    private boolean mAutoCapitalized;
50923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
51923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
520b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa     * Whether the user chose to capitalize the first char of the word.
53923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
540b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa    private boolean mIsFirstCharCapitalized;
55923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
56979f8690967ff5409fe18f5085858ccdb8e0ccf1satok    public WordComposer() {
578fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        final int N = BinaryDictionary.MAX_WORD_LENGTH;
588fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mCodes = new ArrayList<int[]>(N);
598fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mTypedWord = new StringBuilder(N);
608fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mTypedLength = 0;
618fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mXCoordinates = new int[N];
628fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mYCoordinates = new int[N];
63923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
64923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
658fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    WordComposer(WordComposer source) {
669fbfd5877305ed19a20663630b498b6b3fdae942satok        init(source);
679fbfd5877305ed19a20663630b498b6b3fdae942satok    }
689fbfd5877305ed19a20663630b498b6b3fdae942satok
699fbfd5877305ed19a20663630b498b6b3fdae942satok    public void init(WordComposer source) {
708fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mCodes = new ArrayList<int[]>(source.mCodes);
718fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mPreferredWord = source.mPreferredWord;
728fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mTypedWord = new StringBuilder(source.mTypedWord);
738fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mCapsCount = source.mCapsCount;
748fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mAutoCapitalized = source.mAutoCapitalized;
758fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mIsFirstCharCapitalized = source.mIsFirstCharCapitalized;
768fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mTypedLength = source.mTypedLength;
778fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mXCoordinates = source.mXCoordinates;
788fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mYCoordinates = source.mYCoordinates;
79979f8690967ff5409fe18f5085858ccdb8e0ccf1satok    }
80979f8690967ff5409fe18f5085858ccdb8e0ccf1satok
81923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
82923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Clear out the keys registered so far.
83923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
84923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    public void reset() {
85923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        mCodes.clear();
868fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        mTypedLength = 0;
870b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa        mIsFirstCharCapitalized = false;
88923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        mPreferredWord = null;
89923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        mTypedWord.setLength(0);
904a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani        mCapsCount = 0;
91923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
92923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
93923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
94923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Number of keystrokes in the composing word.
95923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * @return the number of keystrokes
96923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
97923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    public int size() {
98923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        return mCodes.size();
99923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
100923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
101923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
102923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Returns the codes at a particular position in the word.
103923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * @param index the position in the word
104923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * @return the unicode for the pressed and surrounding keys
105923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
106923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    public int[] getCodesAt(int index) {
107923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        return mCodes.get(index);
108923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
109923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
1108fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    public int[] getXCoordinates() {
1118fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        return mXCoordinates;
1128fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    }
1138fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
1148fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    public int[] getYCoordinates() {
1158fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        return mYCoordinates;
1168fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    }
1178fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
118923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
119923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Add a new keystroke, with codes[0] containing the pressed key's unicode and the rest of
120923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * the array containing unicode for adjacent keys, sorted by reducing probability/proximity.
121923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * @param codes the array of unicode values
122923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
1238fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    public void add(int primaryCode, int[] codes, int x, int y) {
124923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        mTypedWord.append((char) primaryCode);
125231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani        correctPrimaryJuxtapos(primaryCode, codes);
126923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        mCodes.add(codes);
1278fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        if (mTypedLength < BinaryDictionary.MAX_WORD_LENGTH) {
1288fbd55229243cb66c03d5ea1f79dfb39f596590dsatok            mXCoordinates[mTypedLength] = x;
1298fbd55229243cb66c03d5ea1f79dfb39f596590dsatok            mYCoordinates[mTypedLength] = y;
1308fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        }
1318fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        ++mTypedLength;
1324a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani        if (Character.isUpperCase((char) primaryCode)) mCapsCount++;
133923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
134923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
135923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
136231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani     * Swaps the first and second values in the codes array if the primary code is not the first
137231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani     * value in the array but the second. This happens when the preferred key is not the key that
138231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani     * the user released the finger on.
139231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani     * @param primaryCode the preferred character
140231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani     * @param codes array of codes based on distance from touch point
141231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani     */
142231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani    private void correctPrimaryJuxtapos(int primaryCode, int[] codes) {
143231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani        if (codes.length < 2) return;
144231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani        if (codes[0] > 0 && codes[1] > 0 && codes[0] != primaryCode && codes[1] == primaryCode) {
145231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani            codes[1] = codes[0];
146231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani            codes[0] = primaryCode;
147231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani        }
148231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani    }
149231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani
150231cacd08075e88a2bcdf25f025206de524e880bAmith Yamasani    /**
151923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Delete the last keystroke as a result of hitting backspace.
152923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
153923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    public void deleteLast() {
154d1a8e3088bb6267a31e3351d304796d1507e3af6Tadashi G. Takaoka        final int codesSize = mCodes.size();
155d1a8e3088bb6267a31e3351d304796d1507e3af6Tadashi G. Takaoka        if (codesSize > 0) {
156d1a8e3088bb6267a31e3351d304796d1507e3af6Tadashi G. Takaoka            mCodes.remove(codesSize - 1);
157d1a8e3088bb6267a31e3351d304796d1507e3af6Tadashi G. Takaoka            final int lastPos = mTypedWord.length() - 1;
158d1a8e3088bb6267a31e3351d304796d1507e3af6Tadashi G. Takaoka            char last = mTypedWord.charAt(lastPos);
159d1a8e3088bb6267a31e3351d304796d1507e3af6Tadashi G. Takaoka            mTypedWord.deleteCharAt(lastPos);
160d1a8e3088bb6267a31e3351d304796d1507e3af6Tadashi G. Takaoka            if (Character.isUpperCase(last)) mCapsCount--;
161d1a8e3088bb6267a31e3351d304796d1507e3af6Tadashi G. Takaoka        }
1628fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        if (mTypedLength > 0) {
1638fbd55229243cb66c03d5ea1f79dfb39f596590dsatok            --mTypedLength;
1648fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        }
165923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
166923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
167923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
168923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Returns the word as it was typed, without any correction applied.
169923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * @return the word that was typed so far
170923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
171923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    public CharSequence getTypedWord() {
172923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        int wordSize = mCodes.size();
173923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        if (wordSize == 0) {
174923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project            return null;
175923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        }
176923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        return mTypedWord;
177923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
178923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
1790b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa    public void setFirstCharCapitalized(boolean capitalized) {
1800b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa        mIsFirstCharCapitalized = capitalized;
181923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
182923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
183923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
184923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Whether or not the user typed a capital letter as the first letter in the word
185923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * @return capitalization preference
186923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
1870b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa    public boolean isFirstCharCapitalized() {
1880b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa        return mIsFirstCharCapitalized;
189923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
1900b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa
1910b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa    /**
1920b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa     * Whether or not all of the user typed chars are upper case
1930b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa     * @return true if all user typed chars are upper case, false otherwise
1940b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa     */
1950b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa    public boolean isAllUpperCase() {
1960b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa        return (mCapsCount > 0) && (mCapsCount == size());
1970b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa    }
1980b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa
199923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
200923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Stores the user's selected word, before it is actually committed to the text field.
201923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * @param preferred
202923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
203923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    public void setPreferredWord(String preferred) {
204923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        mPreferredWord = preferred;
205923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
206923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
207923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
208923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Return the word chosen by the user, or the typed word if no other word was chosen.
209923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * @return the preferred word
210923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
211923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    public CharSequence getPreferredWord() {
212923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        return mPreferredWord != null ? mPreferredWord : getTypedWord();
213923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
2144a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani
2154a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani    /**
2164a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani     * Returns true if more than one character is upper case, otherwise returns false.
2174a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani     */
2184a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani    public boolean isMostlyCaps() {
2194a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani        return mCapsCount > 1;
2204a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani    }
2211c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani
2221c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani    /**
2231c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani     * Saves the reason why the word is capitalized - whether it was automatic or
2241c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani     * due to the user hitting shift in the middle of a sentence.
2251c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani     * @param auto whether it was an automatic capitalization due to start of sentence
2261c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani     */
2271c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani    public void setAutoCapitalized(boolean auto) {
2281c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani        mAutoCapitalized = auto;
2291c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani    }
2301c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani
2311c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani    /**
2321c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani     * Returns whether the word was automatically capitalized.
2331c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani     * @return whether the word was automatically capitalized
2341c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani     */
2351c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani    public boolean isAutoCapitalized() {
2361c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani        return mAutoCapitalized;
2371c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani    }
238923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project}
239