diff options
-rw-r--r-- | java/res/values-ms/strings.xml | 15 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/LatinIME.java | 19 | ||||
-rw-r--r-- | native/jni/src/bigram_dictionary.cpp | 17 | ||||
-rw-r--r-- | native/jni/src/bigram_dictionary.h | 3 | ||||
-rw-r--r-- | native/jni/src/debug.h | 6 | ||||
-rw-r--r-- | native/jni/src/dictionary.h | 5 |
6 files changed, 50 insertions, 15 deletions
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml index 4ba315994..2d6872e30 100644 --- a/java/res/values-ms/strings.xml +++ b/java/res/values-ms/strings.xml @@ -120,16 +120,11 @@ <string name="subtype_en_US" msgid="6160452336634534239">"Bahasa Inggeris (AS)"</string> <string name="subtype_no_language" msgid="141420857808801746">"Tiada bahasa"</string> <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Tiada bahasa (QWERTY)"</string> - <!-- no translation found for subtype_no_language_qwertz (1177848172397202890) --> - <skip /> - <!-- no translation found for subtype_no_language_azerty (8721460968141187394) --> - <skip /> - <!-- no translation found for subtype_no_language_dvorak (3122976737669823935) --> - <skip /> - <!-- no translation found for subtype_no_language_colemak (4205992994906097244) --> - <skip /> - <!-- no translation found for subtype_no_language_pcqwerty (8840928374394180189) --> - <skip /> + <string name="subtype_no_language_qwertz" msgid="1177848172397202890">"Tiada bahasa (QWERTZ)"</string> + <string name="subtype_no_language_azerty" msgid="8721460968141187394">"Tiada bahasa (AZERTY)"</string> + <string name="subtype_no_language_dvorak" msgid="3122976737669823935">"Tiada bahasa (Dvorak)"</string> + <string name="subtype_no_language_colemak" msgid="4205992994906097244">"Tiada bahasa (Colemak)"</string> + <string name="subtype_no_language_pcqwerty" msgid="8840928374394180189">"Tiada bahasa (PC)"</string> <string name="custom_input_styles_title" msgid="8429952441821251512">"Gaya input peribadi"</string> <string name="add_style" msgid="6163126614514489951">"Tambah gaya"</string> <string name="add" msgid="8299699805688017798">"Tambah"</string> diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 7efdef987..7232a4883 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -93,6 +93,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private static final int QUICK_PRESS = 200; private static final int PENDING_IMS_CALLBACK_DURATION = 800; + // TODO: remove this + private static final boolean WORKAROUND_USE_LAST_BACKING_HEIGHT_WHEN_NOT_READY = true; + private static int sLastBackingHeight = 0; /** * The name of the scheme used by the Package Manager to warn of a new package installation, @@ -933,8 +936,15 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // be considered. // See {@link android.inputmethodservice.InputMethodService#onComputeInsets}. final int extractHeight = isFullscreenMode() ? mExtractArea.getHeight() : 0; - final int backingHeight = (mKeyPreviewBackingView.getVisibility() == View.GONE) ? 0 - : mKeyPreviewBackingView.getHeight(); + final boolean backingGone = mKeyPreviewBackingView.getVisibility() == View.GONE; + int backingHeight = backingGone ? 0 : mKeyPreviewBackingView.getHeight(); + if (WORKAROUND_USE_LAST_BACKING_HEIGHT_WHEN_NOT_READY && !backingGone) { + if (backingHeight <= 0) { + backingHeight = sLastBackingHeight; + } else { + sLastBackingHeight = backingHeight; + } + } final int suggestionsHeight = (mSuggestionsContainer.getVisibility() == View.GONE) ? 0 : mSuggestionsContainer.getHeight(); final int extraHeight = extractHeight + backingHeight + suggestionsHeight; @@ -954,6 +964,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } outInsets.contentTopInsets = touchY; outInsets.visibleTopInsets = touchY; + if (WORKAROUND_USE_LAST_BACKING_HEIGHT_WHEN_NOT_READY) { + if (LatinImeLogger.sDBG) { + Log.i(TAG, "--- insets: " + touchY + "," + backingHeight + "," + suggestionsHeight); + } + } } @Override diff --git a/native/jni/src/bigram_dictionary.cpp b/native/jni/src/bigram_dictionary.cpp index e05e9d688..67f96281d 100644 --- a/native/jni/src/bigram_dictionary.cpp +++ b/native/jni/src/bigram_dictionary.cpp @@ -135,6 +135,7 @@ int BigramDictionary::getBigrams(const int32_t *prevWord, int prevWordLength, in // If the word is not found or has no bigrams, this function returns 0. int BigramDictionary::getBigramListPositionForWord(const int32_t *prevWord, const int prevWordLength) { + if (0 >= prevWordLength) return 0; const uint8_t* const root = DICT; int pos = BinaryFormat::getTerminalPosition(root, prevWord, prevWordLength); @@ -152,6 +153,22 @@ int BigramDictionary::getBigramListPositionForWord(const int32_t *prevWord, return pos; } +void BigramDictionary::fillBigramAddressToFrequencyMap(const int32_t *prevWord, + const int prevWordLength, std::map<int, int> *map) { + const uint8_t* const root = DICT; + int pos = getBigramListPositionForWord(prevWord, prevWordLength); + if (0 == pos) return; + + int bigramFlags; + do { + bigramFlags = BinaryFormat::getFlagsAndForwardPointer(root, &pos); + const int frequency = UnigramDictionary::MASK_ATTRIBUTE_FREQUENCY & bigramFlags; + const int bigramPos = BinaryFormat::getAttributeAddressAndForwardPointer(root, bigramFlags, + &pos); + (*map)[bigramPos] = frequency; + } while (0 != (UnigramDictionary::FLAG_ATTRIBUTE_HAS_NEXT & bigramFlags)); +} + bool BigramDictionary::checkFirstCharacter(unsigned short *word) { // Checks whether this word starts with same character or neighboring characters of // what user typed. diff --git a/native/jni/src/bigram_dictionary.h b/native/jni/src/bigram_dictionary.h index 76f903958..b1233215b 100644 --- a/native/jni/src/bigram_dictionary.h +++ b/native/jni/src/bigram_dictionary.h @@ -17,6 +17,7 @@ #ifndef LATINIME_BIGRAM_DICTIONARY_H #define LATINIME_BIGRAM_DICTIONARY_H +#include <map> #include <stdint.h> namespace latinime { @@ -28,6 +29,8 @@ class BigramDictionary { int getBigrams(const int32_t *word, int length, int *codes, int codesSize, unsigned short *outWords, int *frequencies, int maxWordLength, int maxBigrams); int getBigramListPositionForWord(const int32_t *prevWord, const int prevWordLength); + void fillBigramAddressToFrequencyMap(const int32_t *prevWord, const int prevWordLength, + std::map<int, int> *map); ~BigramDictionary(); private: bool addWordBigram(unsigned short *word, int length, int frequency); diff --git a/native/jni/src/debug.h b/native/jni/src/debug.h index b13052c95..376ba59d9 100644 --- a/native/jni/src/debug.h +++ b/native/jni/src/debug.h @@ -22,7 +22,7 @@ static inline unsigned char* convertToUnibyteString(unsigned short* input, unsigned char* output, const unsigned int length) { - int i = 0; + unsigned int i = 0; for (; i <= length && input[i] != 0; ++i) output[i] = input[i] & 0xFF; output[i] = 0; @@ -31,10 +31,10 @@ static inline unsigned char* convertToUnibyteString(unsigned short* input, unsig static inline unsigned char* convertToUnibyteStringAndReplaceLastChar(unsigned short* input, unsigned char* output, const unsigned int length, unsigned char c) { - int i = 0; + unsigned int i = 0; for (; i <= length && input[i] != 0; ++i) output[i] = input[i] & 0xFF; - output[i-1] = c; + if (i > 0) output[i-1] = c; output[i] = 0; return output; } diff --git a/native/jni/src/dictionary.h b/native/jni/src/dictionary.h index e0feeafda..a2b0491c5 100644 --- a/native/jni/src/dictionary.h +++ b/native/jni/src/dictionary.h @@ -17,6 +17,8 @@ #ifndef LATINIME_DICTIONARY_H #define LATINIME_DICTIONARY_H +#include <map> + #include "bigram_dictionary.h" #include "char_utils.h" #include "correction.h" @@ -39,6 +41,9 @@ class Dictionary { // If none, it's zero. const int bigramListPosition = !prevWordChars ? 0 : mBigramDictionary->getBigramListPositionForWord(prevWordChars, prevWordLength); + std::map<int, int> bigramMap; + mBigramDictionary->fillBigramAddressToFrequencyMap(prevWordChars, prevWordLength, + &bigramMap); return mUnigramDictionary->getSuggestions(proximityInfo, mWordsPriorityQueuePool, mCorrection, xcoordinates, ycoordinates, codes, codesSize, bigramListPosition, useFullEditDistance, outWords, frequencies); |