mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-04-22 07:09:10 +00:00
allow loading external gesture typing library
This commit is contained in:
parent
ac7ac4f907
commit
8123c79523
38 changed files with 187 additions and 61 deletions
|
@ -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))
|
||||
|
||||
-----
|
||||
|
||||
|
|
|
@ -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<Key>[] 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<Key> 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;
|
||||
}
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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"
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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 := \
|
||||
|
|
|
@ -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
|
|
@ -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 <cstring> // for memset()
|
||||
#include <vector>
|
||||
|
@ -717,7 +717,7 @@ static const JNINativeMethod sMethods[] = {
|
|||
{
|
||||
const_cast<char *>("updateEntriesForInputEventsNative"),
|
||||
const_cast<char *>(
|
||||
"(J[Lorg/dslul/openboard/inputmethod/latin/utils/WordInputEventForPersonalization;I)I"),
|
||||
"(J[Lcom/android/inputmethod/latin/utils/WordInputEventForPersonalization;I)I"),
|
||||
reinterpret_cast<void *>(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
|
|
@ -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
|
|
@ -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
|
|
@ -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"
|
||||
|
||||
/*
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
name="touch_position_correction_data_default"
|
||||
translatable="false"
|
||||
>
|
||||
<!-- The default touch position data (See org.dslul.openboard.inputmethod.keyboard.ProximityInfo)
|
||||
<!-- The default touch position data (See com.android.inputmethod.keyboard.ProximityInfo)
|
||||
correctionX = 0.0f
|
||||
correctionY = 0.0f
|
||||
correctionR = DEFAULT_TOUCH_POSITION_CORRECTION_RADIUS
|
||||
|
@ -40,7 +40,7 @@
|
|||
name="touch_position_correction_data_holo"
|
||||
translatable="false"
|
||||
>
|
||||
<!-- The default touch position data (See org.dslul.openboard.inputmethod.keyboard.ProximityInfo)
|
||||
<!-- The default touch position data (See com.android.inputmethod.keyboard.ProximityInfo)
|
||||
correctionX = 0.0f
|
||||
correctionY = 0.0f
|
||||
correctionR = DEFAULT_TOUCH_POSITION_CORRECTION_RADIUS
|
||||
|
|
|
@ -194,6 +194,17 @@
|
|||
<string name="secondary_locale_none">None</string>
|
||||
<!-- Message shown when no secondary locales available -->
|
||||
<string name="no_secondary_locales">No secondary dictionaries available</string>
|
||||
<!-- Preferences item for loading an external gesture typing library -->
|
||||
<string name="load_gesture_library">Load gesture typing library</string>
|
||||
<!-- Description for "load_gesture_library" option -->
|
||||
<string name="load_gesture_library_summary">Provide a native library to enable gesture typing</string>
|
||||
<!-- Message in load gesture library dialog -->
|
||||
<string name="load_gesture_library_message">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.</string>
|
||||
<!-- Button text for loading gesture library -->
|
||||
<string name="load_gesture_library_button_load">Load library</string>
|
||||
<!-- Button text for deleting gesture library -->
|
||||
<string name="load_gesture_library_button_delete">Delete library</string>
|
||||
<!-- Description for "space_trackpad" option. -->
|
||||
<string name="space_trackpad_summary">Swipe on the spacebar to move the cursor</string>
|
||||
<!-- Preferences item for enabling inserting more spaces key -->
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
name="touch_position_correction_data_default"
|
||||
translatable="false"
|
||||
>
|
||||
<!-- The default touch position data (See org.dslul.openboard.inputmethod.keyboard.ProximityInfo)
|
||||
<!-- The default touch position data (See com.android.inputmethod.keyboard.ProximityInfo)
|
||||
correctionX = 0.0f
|
||||
correctionY = 0.0f
|
||||
correctionR = DEFAULT_TOUCH_POSITION_CORRECTION_RADIUS
|
||||
|
|
|
@ -88,6 +88,11 @@
|
|||
android:title="@string/secondary_locale"
|
||||
android:summary="@string/secondary_locale_summary" />
|
||||
|
||||
<Preference
|
||||
android:key="load_gesture_library"
|
||||
android:title="@string/load_gesture_library"
|
||||
android:summary="@string/load_gesture_library_summary" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
Loading…
Add table
Reference in a new issue