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