// HashMap< , > private HashMap<String, GestureLibrary> mGestureLibMap; // private String mCurrentGestureLib = null;
private void loadLanguages() { // "" File[] files = getFilesDir().listFiles(); mGestureLibMap = new HashMap<String, GestureLibrary>(); // "" for(int i = 0; i < files.length; i++) { GestureLibrary gestureLib = GestureLibraries.fromFile(files[i]); if (!gestureLib.load()) { Toast.makeText(this, "Can't load gestures " + files[i].getName(), Toast.LENGTH_LONG).show(); continue; } // mGestureLibMap.put(files[i].getName(), gestureLib); } if(mCurrentGestureLib == null || !mGestureLibMap.containsKey(mCurrentGestureLib)) { // mCurrentGestureLib = mGestureLibMap.keySet().toArray(new String[0])[0]; if(mGestureLibMap.containsKey(mCurrentGestureLib.toLowerCase())) mCurrentGestureLib = mCurrentGestureLib.toLowerCase(); } }
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { // ArrayList<Prediction> predictions = mGestureLibMap.get(mCurrentGestureLib).recognize(gesture); if (predictions.size() > 0) { // Prediction prediction = predictions.get(0); if(prediction.name.startsWith("@@")) { // @@, try { keyDownUp(Integer.valueOf(prediction.name.substring(2))); } catch(NumberFormatException e) { Log.w("GestureKeyboard", "NumberFormatException: " + e.getLocalizedMessage()); } } else { // getCurrentInputConnection().commitText(editString(prediction.name), prediction.name.length()); } } }
private String editString(String in) { // lower, LowerCase if(mLowerLock.isChecked()) return in.toLowerCase(); // upper, UpperCase if(mUpperLock.isChecked()) return in.toUpperCase(); // return in; }
private void keyDownUp(int keyEventCode) { // keyDown keyUp getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyEventCode)); getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyEventCode)); }
public void onLangClick(View v) { // // String gestureNames[] = mGestureLibMap.keySet().toArray(new String[0]); boolean next = false; for(int i = 0; i < gestureNames.length; i++) { if(next) { // if(!mCurrentGestureLib.toLowerCase().equals(gestureNames[i].toLowerCase())) { // setCurrentLanguage(gestureNames, i); next = false; break; } continue; } if(mCurrentGestureLib.toLowerCase().equals(gestureNames[i].toLowerCase())) { // next = true; } } if(next) setCurrentLanguage(gestureNames, 0); // mLangSwither.setText(mCurrentGestureLib); } private void setCurrentLanguage(String gestureNames[], int index) { mCurrentGestureLib = gestureNames[index]; // LowerCase, if(mGestureLibMap.containsKey(gestureNames[index].toLowerCase())) { mCurrentGestureLib = gestureNames[index].toLowerCase(); } // , UpperCase if(mCapsLock.isChecked() && mGestureLibMap.containsKey(gestureNames[index].toUpperCase())) { mCurrentGestureLib = gestureNames[index].toUpperCase(); } }
if(isChecked) { mLowerLock.setChecked(false); if(mGestureLibMap.containsKey(mCurrentGestureLib.toUpperCase())) { // UpperCase mUpperLock.setChecked(false); mCurrentGestureLib = mCurrentGestureLib.toUpperCase(); } else { // UpperCase, UpperLock mUpperLock.setChecked(true); } } else { mUpperLock.setChecked(false); if(mGestureLibMap.containsKey(mCurrentGestureLib.toLowerCase())) { // LowerCase mLowerLock.setChecked(false); mCurrentGestureLib = mCurrentGestureLib.toLowerCase(); } else { // LowerLock mLowerLock.setChecked(true); } } // mLangSwither.setText(mCurrentGestureLib);
<service android:name="GestureKeyboard" android:permission="android.permission.BIND_INPUT_METHOD"> <intent-filter> <action android:name="android.view.InputMethod"/> </intent-filter> <meta-data android:name="android.view.im" android:resource="@xml/method"/> </service>
Source: https://habr.com/ru/post/121153/
All Articles