diff options
15 files changed, 70 insertions, 62 deletions
diff --git a/java/res/layout/key_preview_ics.xml b/java/res/layout/key_preview.xml index 33b6947ef..16d4c72c3 100644 --- a/java/res/layout/key_preview_ics.xml +++ b/java/res/layout/key_preview.xml @@ -21,7 +21,7 @@ <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@drawable/keyboard_key_feedback_ics" android:minWidth="32dp" android:gravity="center" + style="?attr/keyPreviewTextViewStyle" /> diff --git a/java/res/layout/key_preview_gb.xml b/java/res/layout/key_preview_gb.xml deleted file mode 100644 index 2f2a321a3..000000000 --- a/java/res/layout/key_preview_gb.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** -** Copyright 2010, 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. -*/ ---> - -<TextView xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:background="@drawable/keyboard_key_feedback_gb" - android:minWidth="32dp" - android:gravity="center" -/> diff --git a/java/res/layout/key_preview_klp.xml b/java/res/layout/key_preview_klp.xml deleted file mode 100644 index 160aeb9a9..000000000 --- a/java/res/layout/key_preview_klp.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** -** Copyright 2013, 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. -*/ ---> - -<TextView xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:background="@drawable/keyboard_key_feedback_klp" - android:minWidth="32dp" - android:gravity="center" -/> diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 02e36fe97..e8e139da3 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -26,6 +26,8 @@ <attr name="keyboardViewStyle" format="reference" /> <!-- MainKeyboardView style --> <attr name="mainKeyboardViewStyle" format="reference" /> + <!-- Key preview text view style --> + <attr name="keyPreviewTextViewStyle" format="reference"/> <!-- EmojiPalettesView style --> <attr name="emojiPalettesViewStyle" format="reference" /> <!-- MoreKeysKeyboard style --> diff --git a/java/res/values/themes-common.xml b/java/res/values/themes-common.xml index 774c01ca5..64e8c87b4 100644 --- a/java/res/values/themes-common.xml +++ b/java/res/values/themes-common.xml @@ -75,6 +75,7 @@ <item name="keyRepeatInterval">@integer/config_key_repeat_interval</item> <item name="longPressShiftLockTimeout">@integer/config_longpress_shift_lock_timeout</item> <item name="ignoreAltCodeKeyTimeout">@integer/config_ignore_alt_code_key_timeout</item> + <item name="keyPreviewLayout">@layout/key_preview</item> <item name="keyPreviewHeight">@dimen/key_preview_height</item> <item name="keyPreviewLingerTimeout">@integer/config_key_preview_linger_timeout</item> <item name="moreKeysKeyboardLayout">@layout/more_keys_keyboard</item> @@ -104,6 +105,7 @@ <style name="MainKeyboardView" parent="KeyboardView" /> + <style name="KeyPreviewTextView" /> <!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it, for instance delete button, need themed {@link KeyboardView} attributes. --> <style @@ -128,4 +130,4 @@ <item name="android:windowEnterAnimation">@anim/more_keys_keyboard_fadein</item> <item name="android:windowExitAnimation">@anim/more_keys_keyboard_fadeout</item> </style> -</resources>
\ No newline at end of file +</resources> diff --git a/java/res/values/themes-gb.xml b/java/res/values/themes-gb.xml index 2932143cd..34075e70a 100644 --- a/java/res/values/themes-gb.xml +++ b/java/res/values/themes-gb.xml @@ -23,6 +23,7 @@ <item name="keyboardStyle">@style/Keyboard.GB</item> <item name="keyboardViewStyle">@style/KeyboardView.GB</item> <item name="mainKeyboardViewStyle">@style/MainKeyboardView.GB</item> + <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.GB</item> <item name="emojiPalettesViewStyle">@style/EmojiPalettesView.GB</item> <item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.GB</item> <item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.GB</item> @@ -84,7 +85,6 @@ name="MainKeyboardView.GB" parent="KeyboardView.GB" > - <item name="keyPreviewLayout">@layout/key_preview_gb</item> <item name="keyPreviewOffset">@dimen/key_preview_offset_gb</item> <item name="gestureFloatingPreviewTextColor">@color/highlight_color_gb</item> <item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_gb</item> @@ -95,6 +95,12 @@ <item name="spacebarTextColor">@color/spacebar_text_color_gb</item> <item name="spacebarTextShadowColor">@color/spacebar_text_shadow_color_gb</item> </style> + <style + name="KeyPreviewTextView.GB" + parent="KeyPreviewTextView" + > + <item name="android:background">@drawable/keyboard_key_feedback_gb</item> + </style> <!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it, for instance delete button, need themed {@link KeyboardView} attributes. --> <style diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml index e854cd124..b4f5af4f1 100644 --- a/java/res/values/themes-ics.xml +++ b/java/res/values/themes-ics.xml @@ -23,6 +23,7 @@ <item name="keyboardStyle">@style/Keyboard.ICS</item> <item name="keyboardViewStyle">@style/KeyboardView.ICS</item> <item name="mainKeyboardViewStyle">@style/MainKeyboardView.ICS</item> + <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.ICS</item> <item name="emojiPalettesViewStyle">@style/EmojiPalettesView.ICS</item> <item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.ICS</item> <item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.ICS</item> @@ -62,7 +63,6 @@ name="MainKeyboardView.ICS" parent="KeyboardView.ICS" > - <item name="keyPreviewLayout">@layout/key_preview_ics</item> <item name="keyPreviewOffset">@dimen/key_preview_offset_holo</item> <item name="gestureFloatingPreviewTextColor">@color/highlight_color_ics</item> <item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_holo</item> @@ -73,6 +73,12 @@ <item name="spacebarTextColor">@color/spacebar_text_color_holo</item> <item name="spacebarTextShadowColor">@color/spacebar_text_shadow_color_holo</item> </style> + <style + name="KeyPreviewTextView.ICS" + parent="KeyPreviewTextView" + > + <item name="android:background">@drawable/keyboard_key_feedback_ics</item> + </style> <!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it, for instance delete button, need themed {@link KeyboardView} attributes. --> <style diff --git a/java/res/values/themes-klp.xml b/java/res/values/themes-klp.xml index c404b6a32..ef88d8850 100644 --- a/java/res/values/themes-klp.xml +++ b/java/res/values/themes-klp.xml @@ -23,6 +23,7 @@ <item name="keyboardStyle">@style/Keyboard.KLP</item> <item name="keyboardViewStyle">@style/KeyboardView.KLP</item> <item name="mainKeyboardViewStyle">@style/MainKeyboardView.KLP</item> + <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.KLP</item> <item name="emojiPalettesViewStyle">@style/EmojiPalettesView.KLP</item> <item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.KLP</item> <item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.KLP</item> @@ -62,7 +63,6 @@ name="MainKeyboardView.KLP" parent="KeyboardView.KLP" > - <item name="keyPreviewLayout">@layout/key_preview_klp</item> <item name="keyPreviewOffset">@dimen/key_preview_offset_holo</item> <item name="gestureFloatingPreviewTextColor">@color/highlight_color_klp</item> <item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_holo</item> @@ -73,6 +73,12 @@ <item name="spacebarTextColor">@color/spacebar_text_color_holo</item> <item name="spacebarTextShadowColor">@color/spacebar_text_shadow_color_holo</item> </style> + <style + name="KeyPreviewTextView.KLP" + parent="KeyPreviewTextView" + > + <item name="android:background">@drawable/keyboard_key_feedback_klp</item> + </style> <!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it, for instance delete button, need themed {@link KeyboardView} attributes. --> <style diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/single_dict_content.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/single_dict_content.h index 08780998e..bf833239b 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/single_dict_content.h +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/single_dict_content.h @@ -46,6 +46,10 @@ class SingleDictContent : public DictContent { return mIsValid; } + bool isNearSizeLimit() const { + return mExpandableContentBuffer.isNearSizeLimit(); + } + protected: BufferWithExtendableBuffer *getWritableBuffer() { return &mExpandableContentBuffer; diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/sparse_table_dict_content.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/sparse_table_dict_content.h index bcfecdbfb..9a4f1e1c0 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/sparse_table_dict_content.h +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/sparse_table_dict_content.h @@ -69,6 +69,12 @@ class SparseTableDictContent : public DictContent { return mIsValid; } + bool isNearSizeLimit() const { + return mExpandableLookupTableBuffer.isNearSizeLimit() + || mExpandableAddressTableBuffer.isNearSizeLimit() + || mExpandableContentBuffer.isNearSizeLimit(); + } + protected: SparseTable *getUpdatableAddressLookupTable() { return &mAddressLookupTable; diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.h index bfd0bbdfe..d3de3c86d 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.h +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_buffers.h @@ -49,6 +49,14 @@ class Ver4DictBuffers { && mShortcutDictContent.isValid(); } + AK_FORCE_INLINE bool isNearSizeLimit() const { + return mExpandableTrieBuffer.isNearSizeLimit() + || mTerminalPositionLookupTable.isNearSizeLimit() + || mProbabilityDictContent.isNearSizeLimit() + || mBigramDictContent.isNearSizeLimit() + || mShortcutDictContent.isNearSizeLimit(); + } + AK_FORCE_INLINE BufferWithExtendableBuffer *getWritableHeaderBuffer() { return &mExpandableHeaderBuffer; } diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_constants.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_constants.cpp index af13a374a..b4f9553ee 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_constants.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_constants.cpp @@ -33,6 +33,9 @@ const char *const Ver4DictConstants::SHORTCUT_CONTENT_TABLE_FILE_EXTENSION = // Version 4 dictionary size is implicitly limited to 8MB due to 3-byte offsets. // TODO: Make MAX_DICTIONARY_SIZE 8MB. const int Ver4DictConstants::MAX_DICTIONARY_SIZE = 2 * 1024 * 1024; +// Extended region size, which is not GCed region size in dict file + additional buffer size, is +// limited to 1MB to prevent from inefficient traversing. +const int Ver4DictConstants::MAX_DICT_EXTENDED_REGION_SIZE = 1 * 1024 * 1024; const int Ver4DictConstants::NOT_A_TERMINAL_ID = -1; const int Ver4DictConstants::PROBABILITY_SIZE = 1; diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_constants.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_constants.h index cfb7740be..64c388791 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_constants.h +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_dict_constants.h @@ -35,6 +35,7 @@ class Ver4DictConstants { static const char *const SHORTCUT_CONTENT_TABLE_FILE_EXTENSION; static const int MAX_DICTIONARY_SIZE; + static const int MAX_DICT_EXTENDED_REGION_SIZE; static const int NOT_A_TERMINAL_ID; static const int PROBABILITY_SIZE; diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp index 8ee15e0ef..bcad6fe05 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.cpp @@ -19,7 +19,6 @@ #include "suggest/core/dicnode/dic_node.h" #include "suggest/core/dicnode/dic_node_vector.h" #include "suggest/policyimpl/dictionary/structure/v3/dynamic_patricia_trie_reading_helper.h" -#include "suggest/policyimpl/dictionary/structure/v3/dynamic_patricia_trie_writing_helper.h" #include "suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_node_reader.h" #include "suggest/policyimpl/dictionary/utils/forgetting_curve_utils.h" #include "suggest/policyimpl/dictionary/utils/probability_utils.h" @@ -228,7 +227,25 @@ void Ver4PatriciaTriePolicy::flushWithGC(const char *const filePath) { } bool Ver4PatriciaTriePolicy::needsToRunGC(const bool mindsBlockByGC) const { - // TODO: Implement. + if (!mBuffers.get()->isUpdatable()) { + AKLOGI("Warning: needsToRunGC() is called for non-updatable dictionary."); + return false; + } + if (mBuffers.get()->isNearSizeLimit()) { + // Additional buffer size is near the limit. + return true; + } else if (mHeaderPolicy.getExtendedRegionSize() + mDictBuffer->getUsedAdditionalBufferSize() + > Ver4DictConstants::MAX_DICT_EXTENDED_REGION_SIZE) { + // Total extended region size of the trie exceeds the limit. + return true; + } else if (mDictBuffer->getTailPosition() >= MIN_DICT_SIZE_TO_REFUSE_DYNAMIC_OPERATIONS + && mDictBuffer->getUsedAdditionalBufferSize() > 0) { + // Needs to reduce dictionary size. + return true; + } else if (mHeaderPolicy.isDecayingDict()) { + return mNeedsToDecayForTesting || ForgettingCurveUtils::needsToDecay( + mindsBlockByGC, mUnigramCount, mBigramCount, &mHeaderPolicy); + } return false; } diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h index 605de96a7..4d35caf43 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_policy.h @@ -53,7 +53,7 @@ class Ver4PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy { mHeaderPolicy.isDecayingDict()), mWritingHelper(mBuffers.get()), mUnigramCount(mHeaderPolicy.getUnigramCount()), - mBigramCount(mHeaderPolicy.getBigramCount()) {}; + mBigramCount(mHeaderPolicy.getBigramCount()), mNeedsToDecayForTesting(false) {}; AK_FORCE_INLINE int getRootPosition() const { return 0; @@ -125,6 +125,7 @@ class Ver4PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy { Ver4PatriciaTrieWritingHelper mWritingHelper; int mUnigramCount; int mBigramCount; + bool mNeedsToDecayForTesting; }; } // namespace latinime #endif // LATINIME_VER4_PATRICIA_TRIE_POLICY_H |