Some work on issue #2286804: sometimes text field doesn't accept input
This doesn't really fix the problem being brought up here, but fixes a
related issue I found while investigating it -- if you tap a text view
enough to cause it to try to scroll, this will cause the touch to become
a scroll instead of a click, even if there is nothing to scroll. So
often quick taps to bring up the IME would be canceled because they
became a non-scroll.
Unfortuntately after syncing the latest build, I was having a lot of
trouble reproducing the original problem. I think I need to punt it to
MR2 at this point.
Change-Id: If1f0bf33de1b4d71c9f677cdad07639b7a3fb772
diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java
index 6995107..aa8d979 100644
--- a/core/java/android/text/method/Touch.java
+++ b/core/java/android/text/method/Touch.java
@@ -20,6 +20,7 @@
import android.text.NoCopySpan;
import android.text.Layout.Alignment;
import android.text.Spannable;
+import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.widget.TextView;
@@ -156,8 +157,17 @@
padding));
ny = Math.max(ny, 0);
+ int oldX = widget.getScrollX();
+ int oldY = widget.getScrollY();
+
scrollTo(widget, layout, nx, ny);
- widget.cancelLongPress();
+
+ // If we actually scrolled, then cancel the up action.
+ if (oldX != widget.getScrollX()
+ || oldY != widget.getScrollY()) {
+ widget.cancelLongPress();
+ }
+
return true;
}
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 596fd98..bcdefb3 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -6529,6 +6529,7 @@
// Reset this state; it will be re-set if super.onTouchEvent
// causes focus to move to the view.
mTouchFocusSelected = false;
+ mScrolled = false;
}
final boolean superResult = super.onTouchEvent(event);
@@ -6545,10 +6546,6 @@
if ((mMovement != null || onCheckIsTextEditor()) && mText instanceof Spannable && mLayout != null) {
- if (action == MotionEvent.ACTION_DOWN) {
- mScrolled = false;
- }
-
boolean handled = false;
int oldSelStart = Selection.getSelectionStart(mText);