From 8123c795239baf96acd6ab1fe8435aa01b89715e Mon Sep 17 00:00:00 2001 From: Helium314 Date: Wed, 28 Jun 2023 09:27:07 +0200 Subject: [PATCH] allow loading external gesture typing library --- README.md | 9 ++- .../inputmethod/keyboard/ProximityInfo.java | 7 +- .../inputmethod/latin/BinaryDictionary.java | 8 +- .../inputmethod/latin/DicTraverseSession.java | 2 +- .../latin/utils/BinaryDictionaryUtils.java | 5 +- .../WordInputEventForPersonalization.java | 3 +- .../inputmethod/keyboard/Keyboard.java | 2 + .../inputmethod/keyboard/KeyboardLayout.java | 2 + .../latin/BinaryDictionaryGetter.java | 2 +- .../latin/ContactsBinaryDictionary.java | 2 + .../latin/ExpandableBinaryDictionary.java | 4 +- .../latin/ReadOnlyBinaryDictionary.java | 2 + .../openboard/inputmethod/latin/Suggest.java | 3 +- .../latin/UserBinaryDictionary.java | 2 + .../inputmethod/latin/define/JniLibName.kt | 2 + .../latin/makedict/ProbabilityInfo.java | 2 +- .../latin/makedict/WordProperty.java | 2 +- .../UserHistoryDictionary.java | 2 +- .../settings/AdvancedSettingsFragment.java | 73 +++++++++++++++++++ .../SecondaryLocaleSettingsFragment.java | 16 ---- .../AndroidWordLevelSpellCheckerSession.java | 2 +- .../latin/utils/AutoCorrectionUtils.java | 2 + .../latin/utils/DictionaryInfoUtils.java | 2 + .../inputmethod/latin/utils/JniUtils.java | 36 ++++++++- app/src/main/jni/NativeFileList.mk | 8 +- ...id_inputmethod_keyboard_ProximityInfo.cpp} | 4 +- ...roid_inputmethod_keyboard_ProximityInfo.h} | 0 ...id_inputmethod_latin_BinaryDictionary.cpp} | 6 +- ...roid_inputmethod_latin_BinaryDictionary.h} | 0 ...putmethod_latin_BinaryDictionaryUtils.cpp} | 4 +- ...inputmethod_latin_BinaryDictionaryUtils.h} | 0 ..._inputmethod_latin_DicTraverseSession.cpp} | 4 +- ...id_inputmethod_latin_DicTraverseSession.h} | 0 app/src/main/jni/jni_common.cpp | 8 +- .../touch-position-correction.xml | 4 +- app/src/main/res/values/strings.xml | 11 +++ .../res/values/touch-position-correction.xml | 2 +- .../main/res/xml/prefs_screen_advanced.xml | 5 ++ 38 files changed, 187 insertions(+), 61 deletions(-) rename app/src/main/java/{org/dslul/openboard => com/android}/inputmethod/keyboard/ProximityInfo.java (98%) rename app/src/main/java/{org/dslul/openboard => com/android}/inputmethod/latin/BinaryDictionary.java (99%) rename app/src/main/java/{org/dslul/openboard => com/android}/inputmethod/latin/DicTraverseSession.java (98%) rename app/src/main/java/{org/dslul/openboard => com/android}/inputmethod/latin/utils/BinaryDictionaryUtils.java (97%) rename app/src/main/java/{org/dslul/openboard => com/android}/inputmethod/latin/utils/WordInputEventForPersonalization.java (97%) rename app/src/main/jni/{org_dslul_openboard_inputmethod_keyboard_ProximityInfo.cpp => com_android_inputmethod_keyboard_ProximityInfo.cpp} (93%) rename app/src/main/jni/{org_dslul_openboard_inputmethod_keyboard_ProximityInfo.h => com_android_inputmethod_keyboard_ProximityInfo.h} (100%) rename app/src/main/jni/{org_dslul_openboard_inputmethod_latin_BinaryDictionary.cpp => com_android_inputmethod_latin_BinaryDictionary.cpp} (99%) rename app/src/main/jni/{org_dslul_openboard_inputmethod_latin_BinaryDictionary.h => com_android_inputmethod_latin_BinaryDictionary.h} (100%) rename app/src/main/jni/{org_dslul_openboard_inputmethod_latin_BinaryDictionaryUtils.cpp => com_android_inputmethod_latin_BinaryDictionaryUtils.cpp} (95%) rename app/src/main/jni/{org_dslul_openboard_inputmethod_latin_BinaryDictionaryUtils.h => com_android_inputmethod_latin_BinaryDictionaryUtils.h} (100%) rename app/src/main/jni/{org_dslul_openboard_inputmethod_latin_DicTraverseSession.cpp => com_android_inputmethod_latin_DicTraverseSession.cpp} (94%) rename app/src/main/jni/{org_dslul_openboard_inputmethod_latin_DicTraverseSession.h => com_android_inputmethod_latin_DicTraverseSession.h} (100%) diff --git a/README.md b/README.md index 60206cf29..d491de3ea 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,11 @@ Plan / to do: * test whether it works reasonably well in non-latin scripts * ~suggestion fixes, https://github.com/openboard-team/openboard/pull/694, https://github.com/openboard-team/openboard/issues/795, https://github.com/openboard-team/openboard/issues/660~ * ~improve auto-space insertion, https://github.com/openboard-team/openboard/pull/576~ -* emoji prediction/search, either https://github.com/openboard-team/openboard/pull/749 or use dictionaries +* emoji prediction/search, either https://github.com/openboard-team/openboard/pull/749 (using emoji dictionaries already possible) * theming, https://github.com/openboard-team/openboard/issues/124 * delete suggestions, https://github.com/openboard-team/openboard/issues/106 -* glide typing, https://github.com/openboard-team/openboard/issues/3 - * license issues, maybe allow using an external library +* ~gesture typing, https://github.com/openboard-team/openboard/issues/3~ + * ~license issues, require using an external library~ * re-consider preferring lowercase word for typed history in some cases (DictionaryFacilitatorImpl.addWordToUserHistory) Changes: @@ -38,6 +38,9 @@ Changes: * Reduce amount of unwanted automatic space insertions, https://github.com/openboard-team/openboard/pull/576 * Exit shift-symbol view on space (same as normal symbol view) * Add multi-lingual typing, slightly modified from https://github.com/openboard-team/openboard/pull/586, https://github.com/openboard-team/openboard/pull/593 +* Allow loading an external library to enable gesture typing, https://github.com/openboard-team/openboard/issues/3 + * based on wordmage's work https://github.com/openboard-team/openboard/tree/57d33791d7674e3fe0600eddb72f6b4317b5df00 + * tested with Google libraries and [others](https://github.com/openboard-team/openboard/issues/3#issuecomment-1200456262) (when building with the [rename](https://github.com/openboard-team/openboard/tree/57d33791d7674e3fe0600eddb72f6b4317b5df00)) ----- diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/ProximityInfo.java b/app/src/main/java/com/android/inputmethod/keyboard/ProximityInfo.java similarity index 98% rename from app/src/main/java/org/dslul/openboard/inputmethod/keyboard/ProximityInfo.java rename to app/src/main/java/com/android/inputmethod/keyboard/ProximityInfo.java index 7952da875..4a3f9acfa 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/ProximityInfo.java +++ b/app/src/main/java/com/android/inputmethod/keyboard/ProximityInfo.java @@ -14,11 +14,12 @@ * limitations under the License. */ -package org.dslul.openboard.inputmethod.keyboard; +package com.android.inputmethod.keyboard; import android.graphics.Rect; import android.util.Log; +import org.dslul.openboard.inputmethod.keyboard.Key; import org.dslul.openboard.inputmethod.keyboard.internal.TouchPositionCorrection; import org.dslul.openboard.inputmethod.latin.common.Constants; import org.dslul.openboard.inputmethod.latin.utils.JniUtils; @@ -58,7 +59,7 @@ public class ProximityInfo { private final List[] mGridNeighbors; @SuppressWarnings("unchecked") - ProximityInfo(final int gridWidth, final int gridHeight, final int minWidth, final int height, + public ProximityInfo(final int gridWidth, final int gridHeight, final int minWidth, final int height, final int mostCommonKeyWidth, final int mostCommonKeyHeight, @Nonnull final List sortedKeys, @Nonnull final TouchPositionCorrection touchPositionCorrection) { @@ -95,7 +96,7 @@ public class ProximityInfo { private static native void releaseProximityInfoNative(long nativeProximityInfo); - static boolean needsProximityInfo(final Key key) { + public static boolean needsProximityInfo(final Key key) { // Don't include special keys into ProximityInfo. return key.getCode() >= Constants.CODE_SPACE; } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionary.java b/app/src/main/java/com/android/inputmethod/latin/BinaryDictionary.java similarity index 99% rename from app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionary.java rename to app/src/main/java/com/android/inputmethod/latin/BinaryDictionary.java index b3328a2f3..c387cd45f 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionary.java +++ b/app/src/main/java/com/android/inputmethod/latin/BinaryDictionary.java @@ -14,13 +14,15 @@ * limitations under the License. */ -package org.dslul.openboard.inputmethod.latin; +package com.android.inputmethod.latin; import android.text.TextUtils; import android.util.Log; import android.util.SparseArray; import org.dslul.openboard.inputmethod.annotations.UsedForTesting; +import org.dslul.openboard.inputmethod.latin.Dictionary; +import org.dslul.openboard.inputmethod.latin.NgramContext; import org.dslul.openboard.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import org.dslul.openboard.inputmethod.latin.common.ComposedData; import org.dslul.openboard.inputmethod.latin.common.Constants; @@ -33,9 +35,9 @@ import org.dslul.openboard.inputmethod.latin.makedict.FormatSpec.DictionaryOptio import org.dslul.openboard.inputmethod.latin.makedict.UnsupportedFormatException; import org.dslul.openboard.inputmethod.latin.makedict.WordProperty; import org.dslul.openboard.inputmethod.latin.settings.SettingsValuesForSuggestion; -import org.dslul.openboard.inputmethod.latin.utils.BinaryDictionaryUtils; +import com.android.inputmethod.latin.utils.BinaryDictionaryUtils; import org.dslul.openboard.inputmethod.latin.utils.JniUtils; -import org.dslul.openboard.inputmethod.latin.utils.WordInputEventForPersonalization; +import com.android.inputmethod.latin.utils.WordInputEventForPersonalization; import java.io.File; import java.util.ArrayList; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DicTraverseSession.java b/app/src/main/java/com/android/inputmethod/latin/DicTraverseSession.java similarity index 98% rename from app/src/main/java/org/dslul/openboard/inputmethod/latin/DicTraverseSession.java rename to app/src/main/java/com/android/inputmethod/latin/DicTraverseSession.java index 8a011bfb4..b3daaa79c 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/DicTraverseSession.java +++ b/app/src/main/java/com/android/inputmethod/latin/DicTraverseSession.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.dslul.openboard.inputmethod.latin; +package com.android.inputmethod.latin; import org.dslul.openboard.inputmethod.latin.common.NativeSuggestOptions; import org.dslul.openboard.inputmethod.latin.define.DecoderSpecificConstants; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/BinaryDictionaryUtils.java b/app/src/main/java/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java similarity index 97% rename from app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/BinaryDictionaryUtils.java rename to app/src/main/java/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java index 4b5b67645..c02193607 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/BinaryDictionaryUtils.java +++ b/app/src/main/java/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java @@ -14,13 +14,14 @@ * limitations under the License. */ -package org.dslul.openboard.inputmethod.latin.utils; +package com.android.inputmethod.latin.utils; import org.dslul.openboard.inputmethod.annotations.UsedForTesting; -import org.dslul.openboard.inputmethod.latin.BinaryDictionary; +import com.android.inputmethod.latin.BinaryDictionary; import org.dslul.openboard.inputmethod.latin.common.StringUtils; import org.dslul.openboard.inputmethod.latin.makedict.DictionaryHeader; import org.dslul.openboard.inputmethod.latin.makedict.UnsupportedFormatException; +import org.dslul.openboard.inputmethod.latin.utils.JniUtils; import java.io.File; import java.io.IOException; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/WordInputEventForPersonalization.java b/app/src/main/java/com/android/inputmethod/latin/utils/WordInputEventForPersonalization.java similarity index 97% rename from app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/WordInputEventForPersonalization.java rename to app/src/main/java/com/android/inputmethod/latin/utils/WordInputEventForPersonalization.java index 5bd86d17b..610bfd8cb 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/WordInputEventForPersonalization.java +++ b/app/src/main/java/com/android/inputmethod/latin/utils/WordInputEventForPersonalization.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.dslul.openboard.inputmethod.latin.utils; +package com.android.inputmethod.latin.utils; import android.util.Log; @@ -23,6 +23,7 @@ import org.dslul.openboard.inputmethod.latin.NgramContext; import org.dslul.openboard.inputmethod.latin.common.StringUtils; import org.dslul.openboard.inputmethod.latin.define.DecoderSpecificConstants; import org.dslul.openboard.inputmethod.latin.settings.SpacingAndPunctuations; +import org.dslul.openboard.inputmethod.latin.utils.DictionaryInfoUtils; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/Keyboard.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/Keyboard.java index e64794cfe..0de7c2fca 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/Keyboard.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/Keyboard.java @@ -18,6 +18,8 @@ package org.dslul.openboard.inputmethod.keyboard; import android.util.SparseArray; +import com.android.inputmethod.keyboard.ProximityInfo; + import org.dslul.openboard.inputmethod.keyboard.internal.KeyVisualAttributes; import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardIconsSet; import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardParams; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayout.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayout.java index abc54ec92..73e13c773 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayout.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayout.java @@ -16,6 +16,8 @@ package org.dslul.openboard.inputmethod.keyboard; +import com.android.inputmethod.keyboard.ProximityInfo; + import org.dslul.openboard.inputmethod.annotations.UsedForTesting; import java.util.ArrayList; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionaryGetter.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionaryGetter.java index 9ea838108..b8e9516b1 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionaryGetter.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/BinaryDictionaryGetter.java @@ -26,7 +26,7 @@ import org.dslul.openboard.inputmethod.latin.common.LocaleUtils; import org.dslul.openboard.inputmethod.latin.define.DecoderSpecificConstants; import org.dslul.openboard.inputmethod.latin.makedict.DictionaryHeader; import org.dslul.openboard.inputmethod.latin.makedict.UnsupportedFormatException; -import org.dslul.openboard.inputmethod.latin.utils.BinaryDictionaryUtils; +import com.android.inputmethod.latin.utils.BinaryDictionaryUtils; import org.dslul.openboard.inputmethod.latin.utils.DictionaryInfoUtils; import java.io.File; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java index aa0854240..d1acc8edb 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ContactsBinaryDictionary.java @@ -23,6 +23,8 @@ import android.provider.ContactsContract; import android.provider.ContactsContract.Contacts; import android.util.Log; +import com.android.inputmethod.latin.BinaryDictionary; + import org.dslul.openboard.inputmethod.annotations.ExternallyReferenced; import org.dslul.openboard.inputmethod.latin.ContactsManager.ContactsChangedListener; import org.dslul.openboard.inputmethod.latin.common.StringUtils; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ExpandableBinaryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ExpandableBinaryDictionary.java index 5da8a0b1a..c8d236ad4 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ExpandableBinaryDictionary.java @@ -19,6 +19,8 @@ package org.dslul.openboard.inputmethod.latin; import android.content.Context; import android.util.Log; +import com.android.inputmethod.latin.BinaryDictionary; + import org.dslul.openboard.inputmethod.annotations.UsedForTesting; import org.dslul.openboard.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import org.dslul.openboard.inputmethod.latin.common.ComposedData; @@ -32,7 +34,7 @@ import org.dslul.openboard.inputmethod.latin.settings.SettingsValuesForSuggestio import org.dslul.openboard.inputmethod.latin.utils.AsyncResultHolder; import org.dslul.openboard.inputmethod.latin.utils.CombinedFormatUtils; import org.dslul.openboard.inputmethod.latin.utils.ExecutorUtils; -import org.dslul.openboard.inputmethod.latin.utils.WordInputEventForPersonalization; +import com.android.inputmethod.latin.utils.WordInputEventForPersonalization; import java.io.File; import java.util.ArrayList; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ReadOnlyBinaryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ReadOnlyBinaryDictionary.java index 34ae6ae62..2d76b833b 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/ReadOnlyBinaryDictionary.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/ReadOnlyBinaryDictionary.java @@ -16,6 +16,8 @@ package org.dslul.openboard.inputmethod.latin; +import com.android.inputmethod.latin.BinaryDictionary; + import org.dslul.openboard.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import org.dslul.openboard.inputmethod.latin.common.ComposedData; import org.dslul.openboard.inputmethod.latin.settings.SettingsValuesForSuggestion; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/Suggest.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/Suggest.java index 2c449e370..0c7c1ff9e 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/Suggest.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/Suggest.java @@ -17,7 +17,6 @@ package org.dslul.openboard.inputmethod.latin; import android.text.TextUtils; -import android.util.Log; import org.dslul.openboard.inputmethod.keyboard.Keyboard; import org.dslul.openboard.inputmethod.keyboard.KeyboardId; @@ -27,7 +26,7 @@ import org.dslul.openboard.inputmethod.latin.common.StringUtils; import org.dslul.openboard.inputmethod.latin.define.DebugFlags; import org.dslul.openboard.inputmethod.latin.settings.SettingsValuesForSuggestion; import org.dslul.openboard.inputmethod.latin.utils.AutoCorrectionUtils; -import org.dslul.openboard.inputmethod.latin.utils.BinaryDictionaryUtils; +import com.android.inputmethod.latin.utils.BinaryDictionaryUtils; import org.dslul.openboard.inputmethod.latin.utils.SuggestionResults; import java.util.ArrayList; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java index 4d7fe9e7b..530ef4cf8 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/UserBinaryDictionary.java @@ -26,6 +26,8 @@ import android.provider.UserDictionary.Words; import android.text.TextUtils; import android.util.Log; +import com.android.inputmethod.latin.BinaryDictionary; + import org.dslul.openboard.inputmethod.annotations.ExternallyReferenced; import org.dslul.openboard.inputmethod.latin.utils.SubtypeLocaleUtils; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/define/JniLibName.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/define/JniLibName.kt index 8e5f4769c..a99df3d45 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/define/JniLibName.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/define/JniLibName.kt @@ -2,4 +2,6 @@ package org.dslul.openboard.inputmethod.latin.define object JniLibName { const val JNI_LIB_NAME = "jni_latinime" + const val JNI_LIB_NAME_GOOGLE = "jni_latinimegoogle" + const val JNI_LIB_IMPORT_FILE_NAME = "libjni_latinime.so" } \ No newline at end of file diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/makedict/ProbabilityInfo.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/makedict/ProbabilityInfo.java index 9ea74dcfb..3ecb663ab 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/makedict/ProbabilityInfo.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/makedict/ProbabilityInfo.java @@ -17,7 +17,7 @@ package org.dslul.openboard.inputmethod.latin.makedict; import org.dslul.openboard.inputmethod.annotations.UsedForTesting; -import org.dslul.openboard.inputmethod.latin.BinaryDictionary; +import com.android.inputmethod.latin.BinaryDictionary; import org.dslul.openboard.inputmethod.latin.utils.CombinedFormatUtils; import java.util.Arrays; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/makedict/WordProperty.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/makedict/WordProperty.java index b863c22a0..db2c7b2d6 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/makedict/WordProperty.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/makedict/WordProperty.java @@ -17,7 +17,7 @@ package org.dslul.openboard.inputmethod.latin.makedict; import org.dslul.openboard.inputmethod.annotations.UsedForTesting; -import org.dslul.openboard.inputmethod.latin.BinaryDictionary; +import com.android.inputmethod.latin.BinaryDictionary; import org.dslul.openboard.inputmethod.latin.Dictionary; import org.dslul.openboard.inputmethod.latin.NgramContext; import org.dslul.openboard.inputmethod.latin.NgramContext.WordInfo; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/UserHistoryDictionary.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/UserHistoryDictionary.java index 19947ba3c..06a964f42 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/UserHistoryDictionary.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/personalization/UserHistoryDictionary.java @@ -20,7 +20,7 @@ import android.content.Context; import org.dslul.openboard.inputmethod.annotations.ExternallyReferenced; import org.dslul.openboard.inputmethod.annotations.UsedForTesting; -import org.dslul.openboard.inputmethod.latin.BinaryDictionary; +import com.android.inputmethod.latin.BinaryDictionary; import org.dslul.openboard.inputmethod.latin.Dictionary; import org.dslul.openboard.inputmethod.latin.ExpandableBinaryDictionary; import org.dslul.openboard.inputmethod.latin.NgramContext; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.java index 7338b3e0e..4fd10c057 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.java @@ -16,14 +16,25 @@ package org.dslul.openboard.inputmethod.latin.settings; +import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; +import android.os.Build; import android.os.Bundle; +import android.preference.Preference; import org.dslul.openboard.inputmethod.latin.AudioAndHapticFeedbackManager; import org.dslul.openboard.inputmethod.latin.R; import org.dslul.openboard.inputmethod.latin.SystemBroadcastReceiver; +import org.dslul.openboard.inputmethod.latin.define.JniLibName; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; /** * "Advanced" settings sub screen. @@ -37,6 +48,8 @@ import org.dslul.openboard.inputmethod.latin.SystemBroadcastReceiver; * - Debug settings */ public final class AdvancedSettingsFragment extends SubScreenFragment { + private final int REQUEST_CODE_GESTURE_LIBRARY = 570289; + File libfile = null; @Override public void onCreate(final Bundle icicle) { super.onCreate(icicle); @@ -57,6 +70,66 @@ public final class AdvancedSettingsFragment extends SubScreenFragment { } setupKeyLongpressTimeoutSettings(); + final Preference bla = findPreference("load_gesture_library"); + if (bla != null) { + bla.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + // get architecture for telling user which file to use + String abi; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { + abi = Build.SUPPORTED_ABIS[0]; + } else { + abi = Build.CPU_ABI; + } + // show delete / add dialog + final AlertDialog.Builder builder = new AlertDialog.Builder(context) + .setTitle(R.string.load_gesture_library) + .setMessage(context.getString(R.string.load_gesture_library_message, abi)) + .setPositiveButton(R.string.load_gesture_library_button_load, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT) + .addCategory(Intent.CATEGORY_OPENABLE) + .setType("application/octet-stream"); + startActivityForResult(intent, REQUEST_CODE_GESTURE_LIBRARY); + } + }) + .setNegativeButton(android.R.string.cancel, null); + libfile = new File(context.getFilesDir().getAbsolutePath() + File.separator + JniLibName.JNI_LIB_IMPORT_FILE_NAME); + if (libfile.exists()) + builder.setNeutralButton(R.string.load_gesture_library_button_delete, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + libfile.delete(); + Runtime.getRuntime().exit(0); + } + }); + builder.show(); + return true; + } + }); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent resultData) { + if (requestCode != REQUEST_CODE_GESTURE_LIBRARY || resultCode != Activity.RESULT_OK || resultData == null) return; + if (resultData.getData() != null && libfile != null) { + try { + FileOutputStream out = new FileOutputStream(libfile); + final InputStream in = getActivity().getContentResolver().openInputStream(resultData.getData()); + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + out.flush(); + Runtime.getRuntime().exit(0); + } catch (IOException e) { + // should inform user + } + } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SecondaryLocaleSettingsFragment.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SecondaryLocaleSettingsFragment.java index ee2371148..9e90920e4 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SecondaryLocaleSettingsFragment.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SecondaryLocaleSettingsFragment.java @@ -1,19 +1,3 @@ -/* - * 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. - */ - package org.dslul.openboard.inputmethod.latin.settings; import android.app.AlertDialog; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java index 3de9e1338..f61e56640 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java @@ -37,7 +37,7 @@ import org.dslul.openboard.inputmethod.latin.common.Constants; import org.dslul.openboard.inputmethod.latin.common.LocaleUtils; import org.dslul.openboard.inputmethod.latin.common.StringUtils; import org.dslul.openboard.inputmethod.latin.define.DebugFlags; -import org.dslul.openboard.inputmethod.latin.utils.BinaryDictionaryUtils; +import com.android.inputmethod.latin.utils.BinaryDictionaryUtils; import org.dslul.openboard.inputmethod.latin.utils.ScriptUtils; import org.dslul.openboard.inputmethod.latin.utils.StatsUtils; import org.dslul.openboard.inputmethod.latin.utils.SuggestionResults; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AutoCorrectionUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AutoCorrectionUtils.java index 3dee1baa8..46941874f 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AutoCorrectionUtils.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/AutoCorrectionUtils.java @@ -18,6 +18,8 @@ package org.dslul.openboard.inputmethod.latin.utils; import android.util.Log; +import com.android.inputmethod.latin.utils.BinaryDictionaryUtils; + import org.dslul.openboard.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import org.dslul.openboard.inputmethod.latin.define.DebugFlags; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DictionaryInfoUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DictionaryInfoUtils.java index 44b368318..95b991bb4 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DictionaryInfoUtils.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/DictionaryInfoUtils.java @@ -24,6 +24,8 @@ import android.text.TextUtils; import android.util.Log; import android.view.inputmethod.InputMethodSubtype; +import com.android.inputmethod.latin.utils.BinaryDictionaryUtils; + import org.dslul.openboard.inputmethod.annotations.UsedForTesting; import org.dslul.openboard.inputmethod.latin.AssetFileAddress; import org.dslul.openboard.inputmethod.latin.BinaryDictionaryGetter; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JniUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JniUtils.java index 07b917779..af9cca9d7 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JniUtils.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/JniUtils.java @@ -16,21 +16,49 @@ package org.dslul.openboard.inputmethod.latin.utils; +import android.app.Application; import android.util.Log; import org.dslul.openboard.inputmethod.latin.define.JniLibName; +import java.io.File; public final class JniUtils { private static final String TAG = JniUtils.class.getSimpleName(); + // try loading keyboard libraries + // first try user-provided library + // then try google library for gesture typing (needs library in system, and app as system app) + // finally fall back to internal library public static boolean sHaveGestureLib = false; static { try { - System.loadLibrary(JniLibName.JNI_LIB_NAME); - } catch (UnsatisfiedLinkError ule) { - Log.e(TAG, "Could not load native library " + JniLibName.JNI_LIB_NAME, ule); + // first try loading imported library, and fall back to default + String filesDir; + try { + // try using reflection to get (app)context: https://stackoverflow.com/a/38967293 + final Application app = (Application) Class.forName("android.app.ActivityThread") + .getMethod("currentApplication").invoke(null, (Object[]) null); + filesDir = app.getFilesDir().getAbsolutePath(); + } catch (Exception e) { + // fall back to hardcoded default path, may not work on all phones + filesDir = "/data/data/org.dslul.openboard.inputmethod.latin/files"; + } + System.load(filesDir + File.separator + JniLibName.JNI_LIB_IMPORT_FILE_NAME); + sHaveGestureLib = true; // this is an assumption, any way to actually check? + } catch (Throwable t) { // catch everything, maybe provided library simply doesn't work + Log.e(TAG, "Could not load native library " + JniLibName.JNI_LIB_IMPORT_FILE_NAME, t); + try { + System.loadLibrary(JniLibName.JNI_LIB_NAME_GOOGLE); + sHaveGestureLib = true; + } catch (UnsatisfiedLinkError ul) { + Log.e(TAG, "Could not load native library " + JniLibName.JNI_LIB_NAME_GOOGLE, ul); + try { + System.loadLibrary(JniLibName.JNI_LIB_NAME); + } catch (UnsatisfiedLinkError ule) { + Log.e(TAG, "Could not load native library " + JniLibName.JNI_LIB_NAME, ule); + } + } } - } private JniUtils() { diff --git a/app/src/main/jni/NativeFileList.mk b/app/src/main/jni/NativeFileList.mk index eff0fe6c2..d8b69bfd7 100755 --- a/app/src/main/jni/NativeFileList.mk +++ b/app/src/main/jni/NativeFileList.mk @@ -13,10 +13,10 @@ # limitations under the License. LATIN_IME_JNI_SRC_FILES := \ - org_dslul_openboard_inputmethod_keyboard_ProximityInfo.cpp \ - org_dslul_openboard_inputmethod_latin_BinaryDictionary.cpp \ - org_dslul_openboard_inputmethod_latin_BinaryDictionaryUtils.cpp \ - org_dslul_openboard_inputmethod_latin_DicTraverseSession.cpp \ + com_android_inputmethod_keyboard_ProximityInfo.cpp \ + com_android_inputmethod_latin_BinaryDictionary.cpp \ + com_android_inputmethod_latin_BinaryDictionaryUtils.cpp \ + com_android_inputmethod_latin_DicTraverseSession.cpp \ jni_common.cpp LATIN_IME_CORE_SRC_FILES := \ diff --git a/app/src/main/jni/org_dslul_openboard_inputmethod_keyboard_ProximityInfo.cpp b/app/src/main/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp similarity index 93% rename from app/src/main/jni/org_dslul_openboard_inputmethod_keyboard_ProximityInfo.cpp rename to app/src/main/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp index d128b972c..80419b335 100644 --- a/app/src/main/jni/org_dslul_openboard_inputmethod_keyboard_ProximityInfo.cpp +++ b/app/src/main/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp @@ -16,7 +16,7 @@ #define LOG_TAG "LatinIME: jni: ProximityInfo" -#include "org_dslul_openboard_inputmethod_keyboard_ProximityInfo.h" +#include "com_android_inputmethod_keyboard_ProximityInfo.h" #include "defines.h" #include "jni.h" @@ -57,7 +57,7 @@ static const JNINativeMethod sMethods[] = { }; int register_ProximityInfo(JNIEnv *env) { - const char *const kClassPathName = "org/dslul/openboard/inputmethod/keyboard/ProximityInfo"; + const char *const kClassPathName = "com/android/inputmethod/keyboard/ProximityInfo"; return registerNativeMethods(env, kClassPathName, sMethods, NELEMS(sMethods)); } } // namespace latinime diff --git a/app/src/main/jni/org_dslul_openboard_inputmethod_keyboard_ProximityInfo.h b/app/src/main/jni/com_android_inputmethod_keyboard_ProximityInfo.h similarity index 100% rename from app/src/main/jni/org_dslul_openboard_inputmethod_keyboard_ProximityInfo.h rename to app/src/main/jni/com_android_inputmethod_keyboard_ProximityInfo.h diff --git a/app/src/main/jni/org_dslul_openboard_inputmethod_latin_BinaryDictionary.cpp b/app/src/main/jni/com_android_inputmethod_latin_BinaryDictionary.cpp similarity index 99% rename from app/src/main/jni/org_dslul_openboard_inputmethod_latin_BinaryDictionary.cpp rename to app/src/main/jni/com_android_inputmethod_latin_BinaryDictionary.cpp index 14e0d91e0..3341e1163 100644 --- a/app/src/main/jni/org_dslul_openboard_inputmethod_latin_BinaryDictionary.cpp +++ b/app/src/main/jni/com_android_inputmethod_latin_BinaryDictionary.cpp @@ -16,7 +16,7 @@ #define LOG_TAG "LatinIME: jni: BinaryDictionary" -#include "org_dslul_openboard_inputmethod_latin_BinaryDictionary.h" +#include "com_android_inputmethod_latin_BinaryDictionary.h" #include // for memset() #include @@ -717,7 +717,7 @@ static const JNINativeMethod sMethods[] = { { const_cast("updateEntriesForInputEventsNative"), const_cast( - "(J[Lorg/dslul/openboard/inputmethod/latin/utils/WordInputEventForPersonalization;I)I"), + "(J[Lcom/android/inputmethod/latin/utils/WordInputEventForPersonalization;I)I"), reinterpret_cast(latinime_BinaryDictionary_updateEntriesForInputEvents) }, { @@ -738,7 +738,7 @@ static const JNINativeMethod sMethods[] = { }; int register_BinaryDictionary(JNIEnv *env) { - const char *const kClassPathName = "org/dslul/openboard/inputmethod/latin/BinaryDictionary"; + const char *const kClassPathName = "com/android/inputmethod/latin/BinaryDictionary"; return registerNativeMethods(env, kClassPathName, sMethods, NELEMS(sMethods)); } } // namespace latinime diff --git a/app/src/main/jni/org_dslul_openboard_inputmethod_latin_BinaryDictionary.h b/app/src/main/jni/com_android_inputmethod_latin_BinaryDictionary.h similarity index 100% rename from app/src/main/jni/org_dslul_openboard_inputmethod_latin_BinaryDictionary.h rename to app/src/main/jni/com_android_inputmethod_latin_BinaryDictionary.h diff --git a/app/src/main/jni/org_dslul_openboard_inputmethod_latin_BinaryDictionaryUtils.cpp b/app/src/main/jni/com_android_inputmethod_latin_BinaryDictionaryUtils.cpp similarity index 95% rename from app/src/main/jni/org_dslul_openboard_inputmethod_latin_BinaryDictionaryUtils.cpp rename to app/src/main/jni/com_android_inputmethod_latin_BinaryDictionaryUtils.cpp index 0027a21ca..0885f2de9 100644 --- a/app/src/main/jni/org_dslul_openboard_inputmethod_latin_BinaryDictionaryUtils.cpp +++ b/app/src/main/jni/com_android_inputmethod_latin_BinaryDictionaryUtils.cpp @@ -16,7 +16,7 @@ #define LOG_TAG "LatinIME: jni: BinaryDictionaryUtils" -#include "org_dslul_openboard_inputmethod_latin_BinaryDictionaryUtils.h" +#include "com_android_inputmethod_latin_BinaryDictionaryUtils.h" #include "defines.h" #include "dictionary/utils/dict_file_writing_utils.h" @@ -99,7 +99,7 @@ static const JNINativeMethod sMethods[] = { }; int register_BinaryDictionaryUtils(JNIEnv *env) { - const char *const kClassPathName = "org/dslul/openboard/inputmethod/latin/utils/BinaryDictionaryUtils"; + const char *const kClassPathName = "com/android/inputmethod/latin/utils/BinaryDictionaryUtils"; return registerNativeMethods(env, kClassPathName, sMethods, NELEMS(sMethods)); } } // namespace latinime diff --git a/app/src/main/jni/org_dslul_openboard_inputmethod_latin_BinaryDictionaryUtils.h b/app/src/main/jni/com_android_inputmethod_latin_BinaryDictionaryUtils.h similarity index 100% rename from app/src/main/jni/org_dslul_openboard_inputmethod_latin_BinaryDictionaryUtils.h rename to app/src/main/jni/com_android_inputmethod_latin_BinaryDictionaryUtils.h diff --git a/app/src/main/jni/org_dslul_openboard_inputmethod_latin_DicTraverseSession.cpp b/app/src/main/jni/com_android_inputmethod_latin_DicTraverseSession.cpp similarity index 94% rename from app/src/main/jni/org_dslul_openboard_inputmethod_latin_DicTraverseSession.cpp rename to app/src/main/jni/com_android_inputmethod_latin_DicTraverseSession.cpp index b3f256b8a..45f5492b1 100644 --- a/app/src/main/jni/org_dslul_openboard_inputmethod_latin_DicTraverseSession.cpp +++ b/app/src/main/jni/com_android_inputmethod_latin_DicTraverseSession.cpp @@ -16,7 +16,7 @@ #define LOG_TAG "LatinIME: jni: Session" -#include "org_dslul_openboard_inputmethod_latin_DicTraverseSession.h" +#include "com_android_inputmethod_latin_DicTraverseSession.h" #include "defines.h" #include "dictionary/property/ngram_context.h" @@ -74,7 +74,7 @@ static const JNINativeMethod sMethods[] = { }; int register_DicTraverseSession(JNIEnv *env) { - const char *const kClassPathName = "org/dslul/openboard/inputmethod/latin/DicTraverseSession"; + const char *const kClassPathName = "com/android/inputmethod/latin/DicTraverseSession"; return registerNativeMethods(env, kClassPathName, sMethods, NELEMS(sMethods)); } } // namespace latinime diff --git a/app/src/main/jni/org_dslul_openboard_inputmethod_latin_DicTraverseSession.h b/app/src/main/jni/com_android_inputmethod_latin_DicTraverseSession.h similarity index 100% rename from app/src/main/jni/org_dslul_openboard_inputmethod_latin_DicTraverseSession.h rename to app/src/main/jni/com_android_inputmethod_latin_DicTraverseSession.h diff --git a/app/src/main/jni/jni_common.cpp b/app/src/main/jni/jni_common.cpp index 4973ca8bf..ce5e30c5d 100644 --- a/app/src/main/jni/jni_common.cpp +++ b/app/src/main/jni/jni_common.cpp @@ -18,10 +18,10 @@ #include "jni_common.h" -#include "org_dslul_openboard_inputmethod_keyboard_ProximityInfo.h" -#include "org_dslul_openboard_inputmethod_latin_BinaryDictionary.h" -#include "org_dslul_openboard_inputmethod_latin_BinaryDictionaryUtils.h" -#include "org_dslul_openboard_inputmethod_latin_DicTraverseSession.h" +#include "com_android_inputmethod_keyboard_ProximityInfo.h" +#include "com_android_inputmethod_latin_BinaryDictionary.h" +#include "com_android_inputmethod_latin_BinaryDictionaryUtils.h" +#include "com_android_inputmethod_latin_DicTraverseSession.h" #include "defines.h" /* diff --git a/app/src/main/res/values-sw600dp/touch-position-correction.xml b/app/src/main/res/values-sw600dp/touch-position-correction.xml index 21c034052..f2de8faf5 100644 --- a/app/src/main/res/values-sw600dp/touch-position-correction.xml +++ b/app/src/main/res/values-sw600dp/touch-position-correction.xml @@ -29,7 +29,7 @@ name="touch_position_correction_data_default" translatable="false" > - No secondary dictionaries available + + Load gesture typing library + + Provide a native library to enable gesture typing + + You will need the library for \'%s\'. Incompatible libraries may crash when using gesture typing. + \n\nWarning: loading external code can be a security risk. Only use a library from a source you trust. + + Load library + + Delete library Swipe on the spacebar to move the cursor diff --git a/app/src/main/res/values/touch-position-correction.xml b/app/src/main/res/values/touch-position-correction.xml index 1731cdd3d..be6aff6c4 100644 --- a/app/src/main/res/values/touch-position-correction.xml +++ b/app/src/main/res/values/touch-position-correction.xml @@ -29,7 +29,7 @@ name="touch_position_correction_data_default" translatable="false" > -