Loading java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +54 −26 Original line number Diff line number Diff line Loading @@ -39,11 +39,11 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup.LayoutParams; import android.widget.PopupWindow; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; Loading Loading @@ -199,7 +199,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, /** Listener for {@link OnKeyboardActionListener}. */ private OnKeyboardActionListener mKeyboardActionListener; private final PointerTracker mPointerTracker; private final ArrayList<PointerTracker> mPointerTrackers = new ArrayList<PointerTracker>(); private final float mDebounceHysteresis; private final ProximityKeyDetector mProximityKeyDetector = new ProximityKeyDetector(); Loading Loading @@ -473,13 +473,14 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, final boolean ignoreMultitouch = true; mGestureDetector = new GestureDetector(getContext(), listener, null, ignoreMultitouch); mGestureDetector.setIsLongpressEnabled(false); mPointerTracker = new PointerTracker(mHandler, mProximityKeyDetector, this); } public void setOnKeyboardActionListener(OnKeyboardActionListener listener) { mKeyboardActionListener = listener; mPointerTracker.setOnKeyboardActionListener(listener); for (PointerTracker tracker : mPointerTrackers) { if (tracker != null) tracker.setOnKeyboardActionListener(listener); } } /** Loading Loading @@ -509,7 +510,10 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, List<Key> keys = mKeyboard.getKeys(); mKeys = keys.toArray(new Key[keys.size()]); mProximityKeyDetector.setKeyboard(keyboard, mKeys); mPointerTracker.setKeyboard(mKeys, mDebounceHysteresis); for (PointerTracker tracker : mPointerTrackers) { if (tracker != null) tracker.setKeyboard(mKeys, mDebounceHysteresis); } requestLayout(); // Hint to reallocate the buffer if the size changed mKeyboardChanged = true; Loading Loading @@ -779,7 +783,8 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, if (DEBUG) { if (mShowTouchPoints) { PointerTracker tracker = mPointerTracker; for (PointerTracker tracker : mPointerTrackers) { if (tracker == null) continue; int startX = tracker.getStartX(); int startY = tracker.getStartY(); int lastX = tracker.getLastX(); Loading @@ -794,6 +799,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, canvas.drawCircle((startX + lastX) / 2, (startY + lastY) / 2, 2, paint); } } } mDrawPending = false; mDirtyRect.setEmpty(); Loading @@ -801,8 +807,9 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, // TODO: clean up this method. private void dismissKeyPreview() { mPointerTracker.updateKey(NOT_A_KEY); showPreview(NOT_A_KEY, mPointerTracker); for (PointerTracker tracker : mPointerTrackers) tracker.updateKey(NOT_A_KEY); showPreview(NOT_A_KEY, null); } public void showPreview(int keyIndex, PointerTracker tracker) { Loading @@ -813,7 +820,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, if (keyIndex == NOT_A_KEY) { mHandler.cancelPopupPreview(); mHandler.dismissPreview(DELAY_AFTER_PREVIEW); } else { } else if (tracker != null) { mHandler.popupPreview(DELAY_BEFORE_PREVIEW, keyIndex, tracker); } } Loading Loading @@ -1042,6 +1049,25 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, return (int)y + mVerticalCorrection - getPaddingTop(); } private PointerTracker getPointerTracker(final int id) { final ArrayList<PointerTracker> pointers = mPointerTrackers; final Key[] keys = mKeys; final OnKeyboardActionListener listener = mKeyboardActionListener; // Create pointer trackers until we can get 'id+1'-th tracker, if needed. for (int i = pointers.size(); i <= id; i++) { final PointerTracker tracker = new PointerTracker(mHandler, mProximityKeyDetector, this); if (keys != null) tracker.setKeyboard(keys, mDebounceHysteresis); if (listener != null) tracker.setOnKeyboardActionListener(listener); pointers.add(tracker); } return pointers.get(id); } @Override public boolean onTouchEvent(MotionEvent me) { // Convert multi-pointer up/down events to single up/down events to Loading Loading @@ -1082,25 +1108,27 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, // Up event will pass through. } // TODO: Should remove this implicit reference to id=0 pointer tracker in the future. PointerTracker tracker = getPointerTracker(0); int touchX = getTouchX(me.getX()); int touchY = getTouchY(me.getY()); if (pointerCount != mOldPointerCount) { if (pointerCount == 1) { // Send a down event for the latest pointer mPointerTracker.onDownEvent(touchX, touchY, eventTime); tracker.onDownEvent(touchX, touchY, eventTime); // If it's an up action, then deliver the up as well. if (action == MotionEvent.ACTION_UP) { mPointerTracker.onUpEvent(touchX, touchY, eventTime); tracker.onUpEvent(touchX, touchY, eventTime); } } else { // Send an up event for the last pointer mPointerTracker.onUpEvent(mOldPointerX, mOldPointerY, eventTime); tracker.onUpEvent(mOldPointerX, mOldPointerY, eventTime); } mOldPointerCount = pointerCount; return true; } else { if (pointerCount == 1) { mPointerTracker.onModifiedTouchEvent(action, touchX, touchY, eventTime); tracker.onModifiedTouchEvent(action, touchX, touchY, eventTime); mOldPointerX = touchX; mOldPointerY = touchY; return true; Loading java/src/com/android/inputmethod/latin/PointerTracker.java +1 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ public class PointerTracker { private final StringBuilder mPreviewLabel = new StringBuilder(1); // pressed key private int mPreviousKey; private int mPreviousKey = NOT_A_KEY; public PointerTracker(UIHandler handler, ProximityKeyDetector keyDetector, UIProxy proxy) { if (proxy == null || handler == null || keyDetector == null) Loading Loading
java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +54 −26 Original line number Diff line number Diff line Loading @@ -39,11 +39,11 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup.LayoutParams; import android.widget.PopupWindow; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; Loading Loading @@ -199,7 +199,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, /** Listener for {@link OnKeyboardActionListener}. */ private OnKeyboardActionListener mKeyboardActionListener; private final PointerTracker mPointerTracker; private final ArrayList<PointerTracker> mPointerTrackers = new ArrayList<PointerTracker>(); private final float mDebounceHysteresis; private final ProximityKeyDetector mProximityKeyDetector = new ProximityKeyDetector(); Loading Loading @@ -473,13 +473,14 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, final boolean ignoreMultitouch = true; mGestureDetector = new GestureDetector(getContext(), listener, null, ignoreMultitouch); mGestureDetector.setIsLongpressEnabled(false); mPointerTracker = new PointerTracker(mHandler, mProximityKeyDetector, this); } public void setOnKeyboardActionListener(OnKeyboardActionListener listener) { mKeyboardActionListener = listener; mPointerTracker.setOnKeyboardActionListener(listener); for (PointerTracker tracker : mPointerTrackers) { if (tracker != null) tracker.setOnKeyboardActionListener(listener); } } /** Loading Loading @@ -509,7 +510,10 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, List<Key> keys = mKeyboard.getKeys(); mKeys = keys.toArray(new Key[keys.size()]); mProximityKeyDetector.setKeyboard(keyboard, mKeys); mPointerTracker.setKeyboard(mKeys, mDebounceHysteresis); for (PointerTracker tracker : mPointerTrackers) { if (tracker != null) tracker.setKeyboard(mKeys, mDebounceHysteresis); } requestLayout(); // Hint to reallocate the buffer if the size changed mKeyboardChanged = true; Loading Loading @@ -779,7 +783,8 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, if (DEBUG) { if (mShowTouchPoints) { PointerTracker tracker = mPointerTracker; for (PointerTracker tracker : mPointerTrackers) { if (tracker == null) continue; int startX = tracker.getStartX(); int startY = tracker.getStartY(); int lastX = tracker.getLastX(); Loading @@ -794,6 +799,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, canvas.drawCircle((startX + lastX) / 2, (startY + lastY) / 2, 2, paint); } } } mDrawPending = false; mDirtyRect.setEmpty(); Loading @@ -801,8 +807,9 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, // TODO: clean up this method. private void dismissKeyPreview() { mPointerTracker.updateKey(NOT_A_KEY); showPreview(NOT_A_KEY, mPointerTracker); for (PointerTracker tracker : mPointerTrackers) tracker.updateKey(NOT_A_KEY); showPreview(NOT_A_KEY, null); } public void showPreview(int keyIndex, PointerTracker tracker) { Loading @@ -813,7 +820,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, if (keyIndex == NOT_A_KEY) { mHandler.cancelPopupPreview(); mHandler.dismissPreview(DELAY_AFTER_PREVIEW); } else { } else if (tracker != null) { mHandler.popupPreview(DELAY_BEFORE_PREVIEW, keyIndex, tracker); } } Loading Loading @@ -1042,6 +1049,25 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, return (int)y + mVerticalCorrection - getPaddingTop(); } private PointerTracker getPointerTracker(final int id) { final ArrayList<PointerTracker> pointers = mPointerTrackers; final Key[] keys = mKeys; final OnKeyboardActionListener listener = mKeyboardActionListener; // Create pointer trackers until we can get 'id+1'-th tracker, if needed. for (int i = pointers.size(); i <= id; i++) { final PointerTracker tracker = new PointerTracker(mHandler, mProximityKeyDetector, this); if (keys != null) tracker.setKeyboard(keys, mDebounceHysteresis); if (listener != null) tracker.setOnKeyboardActionListener(listener); pointers.add(tracker); } return pointers.get(id); } @Override public boolean onTouchEvent(MotionEvent me) { // Convert multi-pointer up/down events to single up/down events to Loading Loading @@ -1082,25 +1108,27 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener, // Up event will pass through. } // TODO: Should remove this implicit reference to id=0 pointer tracker in the future. PointerTracker tracker = getPointerTracker(0); int touchX = getTouchX(me.getX()); int touchY = getTouchY(me.getY()); if (pointerCount != mOldPointerCount) { if (pointerCount == 1) { // Send a down event for the latest pointer mPointerTracker.onDownEvent(touchX, touchY, eventTime); tracker.onDownEvent(touchX, touchY, eventTime); // If it's an up action, then deliver the up as well. if (action == MotionEvent.ACTION_UP) { mPointerTracker.onUpEvent(touchX, touchY, eventTime); tracker.onUpEvent(touchX, touchY, eventTime); } } else { // Send an up event for the last pointer mPointerTracker.onUpEvent(mOldPointerX, mOldPointerY, eventTime); tracker.onUpEvent(mOldPointerX, mOldPointerY, eventTime); } mOldPointerCount = pointerCount; return true; } else { if (pointerCount == 1) { mPointerTracker.onModifiedTouchEvent(action, touchX, touchY, eventTime); tracker.onModifiedTouchEvent(action, touchX, touchY, eventTime); mOldPointerX = touchX; mOldPointerY = touchY; return true; Loading
java/src/com/android/inputmethod/latin/PointerTracker.java +1 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ public class PointerTracker { private final StringBuilder mPreviewLabel = new StringBuilder(1); // pressed key private int mPreviousKey; private int mPreviousKey = NOT_A_KEY; public PointerTracker(UIHandler handler, ProximityKeyDetector keyDetector, UIProxy proxy) { if (proxy == null || handler == null || keyDetector == null) Loading