diff options
17 files changed, 126 insertions, 119 deletions
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml index 3f27ef9db..bdde36ae8 100644 --- a/java/res/values-nb/strings.xml +++ b/java/res/values-nb/strings.xml @@ -60,7 +60,7 @@ <string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"Moderat"</string> <string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Omfattende"</string> <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Veldig aggressiv"</string> - <string name="bigram_prediction" msgid="5809665643352206540">"Forslag til rettelser av neste ord"</string> + <string name="bigram_prediction" msgid="5809665643352206540">"Forslag til neste ord"</string> <string name="bigram_prediction_summary" msgid="3253961591626441019">"Basert på det forrige ordet"</string> <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: Lagret"</string> <string name="label_go_key" msgid="1635148082137219148">"Utfør"</string> diff --git a/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java b/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java index 8cef6fa20..60e6fa127 100644 --- a/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java @@ -34,7 +34,10 @@ import java.util.Arrays; */ public class UserBinaryDictionary extends ExpandableBinaryDictionary { - // TODO: use Words.SHORTCUT when it's public in the SDK + // The user dictionary provider uses an empty string to mean "all languages". + private static final String USER_DICTIONARY_ALL_LANGUAGES = ""; + + // TODO: use Words.SHORTCUT when we target JellyBean or above final static String SHORTCUT = "shortcut"; private static final String[] PROJECTION_QUERY; static { @@ -71,7 +74,12 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary { final boolean alsoUseMoreRestrictiveLocales) { super(context, getFilenameWithLocale(NAME, locale), Dictionary.TYPE_USER); if (null == locale) throw new NullPointerException(); // Catch the error earlier - mLocale = locale; + if (SubtypeLocale.NO_LANGUAGE.equals(locale)) { + // If we don't have a locale, insert into the "all locales" user dictionary. + mLocale = USER_DICTIONARY_ALL_LANGUAGES; + } else { + mLocale = locale; + } mAlsoUseMoreRestrictiveLocales = alsoUseMoreRestrictiveLocales; // Perform a managed query. The Activity will handle closing and re-querying the cursor // when needed. diff --git a/native/jni/Android.mk b/native/jni/Android.mk index df98680ca..31feb9510 100644 --- a/native/jni/Android.mk +++ b/native/jni/Android.mk @@ -26,8 +26,7 @@ include $(CLEAR_VARS) LATIN_IME_SRC_DIR := src LATIN_IME_SRC_FULLPATH_DIR := $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR) -LOCAL_C_INCLUDES += $(LATIN_IME_SRC_FULLPATH_DIR) \ - $(addprefix $(LATIN_IME_SRC_FULLPATH_DIR)/, gesture gesture/impl) +LOCAL_C_INCLUDES += $(LATIN_IME_SRC_FULLPATH_DIR) $(LATIN_IME_SRC_FULLPATH_DIR)/gesture LOCAL_CFLAGS += -Werror -Wall @@ -50,11 +49,11 @@ LATIN_IME_CORE_SRC_FILES := \ proximity_info.cpp \ proximity_info_state.cpp \ unigram_dictionary.cpp \ - gesture/build_check.cpp + gesture/incremental_decoder_interface.cpp LOCAL_SRC_FILES := \ $(LATIN_IME_JNI_SRC_FILES) \ - $(addprefix $(LATIN_IME_SRC_DIR)/,$(LATIN_IME_CORE_SRC_FILES)) + $(addprefix $(LATIN_IME_SRC_DIR)/, $(LATIN_IME_CORE_SRC_FILES)) ifeq ($(FLAG_DO_PROFILE), true) $(warning Making profiling version of native library) @@ -66,7 +65,7 @@ ifeq ($(FLAG_DBG), true) endif # FLAG_DBG endif # FLAG_DO_PROFILE -LOCAL_MODULE := libjni_latinime_static +LOCAL_MODULE := libjni_latinime_common_static LOCAL_MODULE_TAGS := optional ifdef HISTORICAL_NDK_VERSIONS_ROOT # In the platform build system @@ -80,7 +79,7 @@ include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_C_INCLUDES += $(LATIN_IME_SRC_FULLPATH_DIR) \ - $(addprefix $(LATIN_IME_SRC_FULLPATH_DIR)/, gesture gesture/impl gesture/impl/header) + $(addprefix $(LATIN_IME_SRC_FULLPATH_DIR)/, gesture gesture/impl) LOCAL_CFLAGS += -Werror -Wall @@ -93,7 +92,7 @@ LATIN_IME_GESTURE_IMPL_SRC_FILES := \ gesture/impl/token_beam_impl.cpp \ gesture/impl/token_impl.cpp -LOCAL_SRC_FILES := $(addprefix $(LATIN_IME_SRC_DIR)/,$(LATIN_IME_GESTURE_IMPL_SRC_FILES)) +LOCAL_SRC_FILES := $(addprefix $(LATIN_IME_SRC_DIR)/, $(LATIN_IME_GESTURE_IMPL_SRC_FILES)) ifeq ($(FLAG_DO_PROFILE), true) $(warning Making profiling version of native library) @@ -105,7 +104,8 @@ ifeq ($(FLAG_DBG), true) endif # FLAG_DBG endif # FLAG_DO_PROFILE -LOCAL_MODULE := libjni_latinime_gesture_impl_static +# TODO: Can remove this static library from AOSP completely? +LOCAL_MODULE := libjni_latinime_gesture_impl_aosp_static LOCAL_MODULE_TAGS := optional ifdef HISTORICAL_NDK_VERSIONS_ROOT # In the platform build system @@ -119,7 +119,8 @@ include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) # All code in LOCAL_WHOLE_STATIC_LIBRARIES will be built into this shared library. -LOCAL_WHOLE_STATIC_LIBRARIES := libjni_latinime_static libjni_latinime_gesture_impl_static +LOCAL_WHOLE_STATIC_LIBRARIES := \ + libjni_latinime_common_static libjni_latinime_gesture_impl_aosp_static ifdef HISTORICAL_NDK_VERSIONS_ROOT # In the platform build system LOCAL_SHARED_LIBRARIES := libstlport diff --git a/native/jni/src/dictionary.cpp b/native/jni/src/dictionary.cpp index 10ea9fe06..60f3c949b 100644 --- a/native/jni/src/dictionary.cpp +++ b/native/jni/src/dictionary.cpp @@ -22,6 +22,7 @@ #include "binary_format.h" #include "defines.h" #include "dictionary.h" +#include "incremental_decoder_interface.h" namespace latinime { @@ -43,7 +44,8 @@ Dictionary::Dictionary(void *dict, int dictSize, int mmapFd, int dictBufAdjust, mUnigramDictionary = new UnigramDictionary(mDict + headerSize, typedLetterMultiplier, fullWordMultiplier, maxWordLength, maxWords, options); mBigramDictionary = new BigramDictionary(mDict + headerSize, maxWordLength); - mGestureDecoder = new GestureDecoder(maxWordLength, maxWords); + mGestureDecoder = IncrementalDecoderInterface::getGestureDecoderInstance(maxWordLength, + maxWords); mGestureDecoder->setDict(mUnigramDictionary, mBigramDictionary, mDict + headerSize /* dict root */, 0 /* root pos */); } @@ -51,6 +53,7 @@ Dictionary::Dictionary(void *dict, int dictSize, int mmapFd, int dictBufAdjust, Dictionary::~Dictionary() { delete mUnigramDictionary; delete mBigramDictionary; + delete mGestureDecoder; } int Dictionary::getFrequency(const int32_t *word, int length) const { diff --git a/native/jni/src/dictionary.h b/native/jni/src/dictionary.h index 8b4769431..2b0619c46 100644 --- a/native/jni/src/dictionary.h +++ b/native/jni/src/dictionary.h @@ -22,7 +22,7 @@ #include "bigram_dictionary.h" #include "char_utils.h" #include "defines.h" -#include "gesture/gesture_decoder.h" +#include "incremental_decoder_interface.h" #include "proximity_info.h" #include "unigram_dictionary.h" #include "words_priority_queue_pool.h" @@ -87,7 +87,7 @@ class Dictionary { const UnigramDictionary *mUnigramDictionary; const BigramDictionary *mBigramDictionary; - GestureDecoder *mGestureDecoder; + IncrementalDecoderInterface *mGestureDecoder; }; // public static utility methods diff --git a/native/jni/src/gesture/gesture_decoder.h b/native/jni/src/gesture/gesture_decoder.h deleted file mode 100644 index 8e79555bd..000000000 --- a/native/jni/src/gesture/gesture_decoder.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef LATINIME_GESTURE_DECODER_H -#define LATINIME_GESTURE_DECODER_H - -#include "defines.h" -#include "gesture_decoder_impl.h" - -namespace latinime { - -class GestureDecoder : public GestureDecoderImpl { - - public: - GestureDecoder(int maxWordLength, int maxWords) : - GestureDecoderImpl(maxWordLength, maxWords) { - } - - private: - DISALLOW_IMPLICIT_CONSTRUCTORS(GestureDecoder); -}; -} // namespace latinime - -#endif // LATINIME_INCREMENTAL_DECODER_H diff --git a/native/jni/src/gesture/impl/gesture_decoder_impl.cpp b/native/jni/src/gesture/impl/gesture_decoder_impl.cpp index 59937a4d8..035850ead 100644 --- a/native/jni/src/gesture/impl/gesture_decoder_impl.cpp +++ b/native/jni/src/gesture/impl/gesture_decoder_impl.cpp @@ -15,7 +15,26 @@ */ #include "gesture_decoder_impl.h" +#include "incremental_decoder_interface.h" namespace latinime { + +// A factory method for GestureDecoderImpl +static IncrementalDecoderInterface *getDecoderInstance(int maxWordLength, int maxWords) { + return new GestureDecoderImpl(maxWordLength, maxWords); +} + +// An ad-hoc internal class to register the factory method defined above +class GestureDecoderFactoryRegisterer { + public: + GestureDecoderFactoryRegisterer() { + IncrementalDecoderInterface::setGestureDecoderFactoryMethod(getDecoderInstance); + } + private: + DISALLOW_COPY_AND_ASSIGN(GestureDecoderFactoryRegisterer); }; -// namespace latinime + +// To invoke the GestureDecoderFactoryRegisterer constructor in the global constructor +// Not sure, but can be static? +GestureDecoderFactoryRegisterer gestureDecoderFactoryRegisterer; +} // namespace latinime diff --git a/native/jni/src/gesture/impl/gesture_decoder_impl.h b/native/jni/src/gesture/impl/gesture_decoder_impl.h index 0ca89941c..6de807b39 100644 --- a/native/jni/src/gesture/impl/gesture_decoder_impl.h +++ b/native/jni/src/gesture/impl/gesture_decoder_impl.h @@ -18,15 +18,14 @@ #define LATINIME_GESTURE_DECODER_IMPL_H #include "defines.h" -#include "incremental_decoder.h" +#include "incremental_decoder_impl.h" namespace latinime { -class GestureDecoderImpl : public IncrementalDecoder { - +class GestureDecoderImpl : public IncrementalDecoderImpl { public: GestureDecoderImpl(int maxWordLength, int maxWords) : - IncrementalDecoder(maxWordLength, maxWords) { + IncrementalDecoderImpl(maxWordLength, maxWords) { } int getSuggestions(ProximityInfo *pInfo, int *inputXs, int *inputYs, int *times, @@ -39,5 +38,4 @@ class GestureDecoderImpl : public IncrementalDecoder { DISALLOW_IMPLICIT_CONSTRUCTORS(GestureDecoderImpl); }; } // namespace latinime - #endif // LATINIME_GESTURE_DECODER_IMPL_H diff --git a/native/jni/src/gesture/impl/incremental_decoder_impl.cpp b/native/jni/src/gesture/impl/incremental_decoder_impl.cpp index b7e8b3bd1..f2b76ed26 100644 --- a/native/jni/src/gesture/impl/incremental_decoder_impl.cpp +++ b/native/jni/src/gesture/impl/incremental_decoder_impl.cpp @@ -15,7 +15,26 @@ */ #include "incremental_decoder_impl.h" +#include "incremental_decoder_interface.h" namespace latinime { + +// A factory method for IncrementalDecoderImpl +static IncrementalDecoderInterface *getDecoderInstance(int maxWordLength, int maxWords) { + return new IncrementalDecoderImpl(maxWordLength, maxWords); +} + +// An ad-hoc internal class to register the factory method defined above +class IncrementalDecoderFactoryRegisterer { + public: + IncrementalDecoderFactoryRegisterer() { + IncrementalDecoderInterface::setIncrementalDecoderFactoryMethod(getDecoderInstance); + } + private: + DISALLOW_COPY_AND_ASSIGN(IncrementalDecoderFactoryRegisterer); }; -// namespace latinime + +// To invoke the IncrementalDecoderFactoryRegisterer constructor in the global constructor +// Not sure, but can be static? +IncrementalDecoderFactoryRegisterer incrementalDecoderFactoryRegisterer; +} // namespace latinime diff --git a/native/jni/src/gesture/impl/incremental_decoder_impl.h b/native/jni/src/gesture/impl/incremental_decoder_impl.h index 84121e8e2..50ed14303 100644 --- a/native/jni/src/gesture/impl/incremental_decoder_impl.h +++ b/native/jni/src/gesture/impl/incremental_decoder_impl.h @@ -17,25 +17,30 @@ #ifndef LATINIME_INCREMENTAL_DECODER_IMPL_H #define LATINIME_INCREMENTAL_DECODER_IMPL_H -#include "bigram_dictionary.h" #include "defines.h" #include "incremental_decoder_interface.h" -#include "unigram_dictionary.h" namespace latinime { -class IncrementalDecoderImpl : IncrementalDecoderInterface { +class UnigramDictionary; +class BigramDictionary; +class IncrementalDecoderImpl : public IncrementalDecoderInterface { public: - IncrementalDecoderImpl(int maxWordLength, int maxWords) { }; - void setDict(const UnigramDictionary *dict, const BigramDictionary *bigram, - const uint8_t *dictRoot, int rootPos) { }; - void setPrevWord(const int32_t *prevWord, int prevWordLength) { }; - void reset() { }; + IncrementalDecoderImpl(int maxWordLength, int maxWords) { }; + void setDict(const UnigramDictionary *dict, const BigramDictionary *bigram, + const uint8_t *dictRoot, int rootPos) { }; + void setPrevWord(const int32_t *prevWord, int prevWordLength) { }; + void reset() { }; + + int getSuggestions(ProximityInfo *pInfo, int *inputXs, int *inputYs, int *times, + int *pointerIds, int *codes, int inputSize, int commitPoint, + unsigned short *outWords, int *frequencies, int *outputIndices) { + return 0; + } private: DISALLOW_IMPLICIT_CONSTRUCTORS(IncrementalDecoderImpl); }; } // namespace latinime - #endif // LATINIME_INCREMENTAL_DECODER_IMPL_H diff --git a/native/jni/src/gesture/impl/token_beam_impl.cpp b/native/jni/src/gesture/impl/token_beam_impl.cpp index b2b73c25c..ffac4dd39 100644 --- a/native/jni/src/gesture/impl/token_beam_impl.cpp +++ b/native/jni/src/gesture/impl/token_beam_impl.cpp @@ -17,5 +17,4 @@ #include "token_beam_impl.h" namespace latinime { -}; -// namespace latinime +} // namespace latinime diff --git a/native/jni/src/gesture/impl/token_beam_impl.h b/native/jni/src/gesture/impl/token_beam_impl.h index 332505697..50de9258b 100644 --- a/native/jni/src/gesture/impl/token_beam_impl.h +++ b/native/jni/src/gesture/impl/token_beam_impl.h @@ -26,5 +26,4 @@ class TokenBeamImpl { DISALLOW_IMPLICIT_CONSTRUCTORS(TokenBeamImpl); }; } // namespace latinime - #endif // LATINIME_TOKEN_BEAM_IMPL_H diff --git a/native/jni/src/gesture/impl/token_impl.cpp b/native/jni/src/gesture/impl/token_impl.cpp index c7efeb188..fa667f03a 100644 --- a/native/jni/src/gesture/impl/token_impl.cpp +++ b/native/jni/src/gesture/impl/token_impl.cpp @@ -17,5 +17,4 @@ #include "token_impl.h" namespace latinime { -}; -// namespace latinime +} // namespace latinime diff --git a/native/jni/src/gesture/impl/token_impl.h b/native/jni/src/gesture/impl/token_impl.h index 0ed7d0020..5f2368a93 100644 --- a/native/jni/src/gesture/impl/token_impl.h +++ b/native/jni/src/gesture/impl/token_impl.h @@ -26,5 +26,4 @@ struct TokenImpl { DISALLOW_IMPLICIT_CONSTRUCTORS(TokenImpl); }; } // namespace latinime - #endif // LATINIME_TOKEN_IMPL_H diff --git a/native/jni/src/gesture/incremental_decoder.h b/native/jni/src/gesture/incremental_decoder.h deleted file mode 100644 index fe935529f..000000000 --- a/native/jni/src/gesture/incremental_decoder.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef LATINIME_INCREMENTAL_DECODER_H -#define LATINIME_INCREMENTAL_DECODER_H - -#include "defines.h" -#include "incremental_decoder_impl.h" - -namespace latinime { - -class IncrementalDecoder : public IncrementalDecoderImpl { - - public: - IncrementalDecoder(int maxWordLength, int maxWords) : - IncrementalDecoderImpl(maxWordLength, maxWords) { - } - - private: - DISALLOW_IMPLICIT_CONSTRUCTORS(IncrementalDecoder); -}; -} // namespace latinime - -#endif // LATINIME_INCREMENTAL_DECODER_H diff --git a/native/jni/src/gesture/build_check.cpp b/native/jni/src/gesture/incremental_decoder_interface.cpp index 8ec94f593..9fb2a17aa 100644 --- a/native/jni/src/gesture/build_check.cpp +++ b/native/jni/src/gesture/incremental_decoder_interface.cpp @@ -14,8 +14,11 @@ * limitations under the License. */ -#include "gesture_decoder.h" +#include "incremental_decoder_interface.h" namespace latinime { -}; -// namespace latinime + IncrementalDecoderInterface * + (*IncrementalDecoderInterface::sGestureDecoderFactoryMethod)(int, int) = 0; + IncrementalDecoderInterface * + (*IncrementalDecoderInterface::sIncrementalDecoderFactoryMethod)(int, int) = 0; +} // namespace latinime diff --git a/native/jni/src/gesture/incremental_decoder_interface.h b/native/jni/src/gesture/incremental_decoder_interface.h index 565f89c90..1f92affb6 100644 --- a/native/jni/src/gesture/incremental_decoder_interface.h +++ b/native/jni/src/gesture/incremental_decoder_interface.h @@ -17,15 +17,16 @@ #ifndef LATINIME_INCREMENTAL_DECODER_INTERFACE_H #define LATINIME_INCREMENTAL_DECODER_INTERFACE_H -#include "bigram_dictionary.h" +#include <stdint.h> #include "defines.h" -#include "proximity_info.h" -#include "unigram_dictionary.h" namespace latinime { -class IncrementalDecoderInterface { +class UnigramDictionary; +class BigramDictionary; +class ProximityInfo; +class IncrementalDecoderInterface { public: virtual int getSuggestions(ProximityInfo *pInfo, int *inputXs, int *inputYs, int *times, int *pointerIds, int *codes, int inputSize, int commitPoint, @@ -35,7 +36,35 @@ class IncrementalDecoderInterface { const uint8_t *dictRoot, int rootPos) = 0; virtual void setPrevWord(const int32_t *prevWord, int prevWordLength) = 0; virtual ~IncrementalDecoderInterface() { }; + + static IncrementalDecoderInterface *getGestureDecoderInstance(int maxWordLength, int maxWords) { + if (sGestureDecoderFactoryMethod) { + return sGestureDecoderFactoryMethod(maxWordLength, maxWords); + } + return 0; + } + + static IncrementalDecoderInterface *getIncrementalDecoderInstance(int maxWordLength, + int maxWords) { + if (sIncrementalDecoderFactoryMethod) { + return sIncrementalDecoderFactoryMethod(maxWordLength, maxWords); + } + return 0; + } + + static void setGestureDecoderFactoryMethod( + IncrementalDecoderInterface *(*factoryMethod)(int, int)) { + sGestureDecoderFactoryMethod = factoryMethod; + } + + static void setIncrementalDecoderFactoryMethod( + IncrementalDecoderInterface *(*factoryMethod)(int, int)) { + sIncrementalDecoderFactoryMethod = factoryMethod; + } + + private: + static IncrementalDecoderInterface *(*sGestureDecoderFactoryMethod)(int, int); + static IncrementalDecoderInterface *(*sIncrementalDecoderFactoryMethod)(int, int); }; } // namespace latinime - #endif // LATINIME_INCREMENTAL_DECODER_INTERFACE_H |