diff --git a/README.md b/README.md index 60206cf2..d491de3e 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 7952da87..4a3f9acf 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 b3328a2f..c387cd45 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 8a011bfb..b3daaa79 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 4b5b6764..c0219360 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 5bd86d17..610bfd8c 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 e64794cf..0de7c2fc 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 abc54ec9..73e13c77 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 9ea83810..b8e9516b 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 aa085424..d1acc8ed 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 5da8a0b1..c8d236ad 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 34ae6ae6..2d76b833 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 2c449e37..0c7c1ff9 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 4d7fe9e7..530ef4cf 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 8e5f4769..a99df3d4 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 9ea74dcf..3ecb663a 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 b863c22a..db2c7b2d 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 19947ba3..06a964f4 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 7338b3e0..4fd10c05 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 ee237114..9e90920e 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 3de9e133..f61e5664 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 3dee1baa..46941874 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 44b36831..95b991bb 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 07b91777..af9cca9d 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 eff0fe6c..d8b69bfd 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 d128b972..80419b33 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 14e0d91e..3341e116 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 0027a21c..0885f2de 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 b3f256b8..45f5492b 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 4973ca8b..ce5e30c5 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 21c03405..f2de8faf 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 1731cdd3..be6aff6c 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" > -