Merge change 3179 into donut

* changes:
  Integrate unsubmitted cupcake change 149411: 	CTS: added missed test cases for package android.text.method
diff --git a/tests/tests/text/src/android/text/method/cts/MetaKeyKeyListenerTest.java b/tests/tests/text/src/android/text/method/cts/MetaKeyKeyListenerTest.java
index 5279d1e..32a98e9 100644
--- a/tests/tests/text/src/android/text/method/cts/MetaKeyKeyListenerTest.java
+++ b/tests/tests/text/src/android/text/method/cts/MetaKeyKeyListenerTest.java
@@ -16,6 +16,12 @@
 
 package android.text.method.cts;
 
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.ToBeFixed;
+
 import android.test.AndroidTestCase;
 import android.text.Editable;
 import android.text.Selection;
@@ -26,13 +32,6 @@
 import android.view.KeyEvent;
 import android.view.View;
 import android.widget.ImageView;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.ToBeFixed;
 
 /**
  * Test {@link MetaKeyKeyListener}.
@@ -41,9 +40,8 @@
 public class MetaKeyKeyListenerTest extends AndroidTestCase {
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test {@link MetaKeyKeyListener#onKeyDown(View, Editable, int, KeyEvent)}",
         method = "onKeyDown",
-        args = {android.view.View.class, android.text.Editable.class, int.class, 
+        args = {android.view.View.class, android.text.Editable.class, int.class,
                 android.view.KeyEvent.class}
     )
     public void testPressKey() {
@@ -54,34 +52,27 @@
 
         content.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
         content.setSpan(Selection.SELECTION_END, 0, 0, Spanned.SPAN_POINT_POINT);
-        numberKeyListener.onKeyDown( view,
-                                     content,
-                                     KeyEvent.KEYCODE_0,
-                                     new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0));
+        numberKeyListener.onKeyDown(view, content, KeyEvent.KEYCODE_0,
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0));
         assertEquals('0', content.charAt(0));
 
         content.setSpan(Selection.SELECTION_START, 1, 1, Spanned.SPAN_POINT_POINT);
         content.setSpan(Selection.SELECTION_END, 1, 1, Spanned.SPAN_POINT_POINT);
-        numberKeyListener.onKeyDown( view,
-                                     content,
-                                     KeyEvent.KEYCODE_2,
-                                     new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_2));
+        numberKeyListener.onKeyDown(view, content, KeyEvent.KEYCODE_2,
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_2));
         assertEquals('2', content.charAt(1));
 
         content.setSpan(Selection.SELECTION_START, 3, 3, Spanned.SPAN_POINT_POINT);
         content.setSpan(Selection.SELECTION_END, 3, 3, Spanned.SPAN_POINT_POINT);
-        numberKeyListener.onKeyDown( view,
-                                     content,
-                                     KeyEvent.KEYCODE_3,
-                                     new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_3));
+        numberKeyListener.onKeyDown(view, content, KeyEvent.KEYCODE_3,
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_3));
         assertEquals('3', content.charAt(3));
     }
 
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test {@link MetaKeyKeyListener#onKeyUp(View, Editable, int, KeyEvent)}",
         method = "onKeyUp",
-        args = {android.view.View.class, android.text.Editable.class, int.class, 
+        args = {android.view.View.class, android.text.Editable.class, int.class,
                 android.view.KeyEvent.class}
     )
     public void testReleaseKey() {
@@ -92,32 +83,25 @@
 
         content.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
         content.setSpan(Selection.SELECTION_END, 0, 0, Spanned.SPAN_POINT_POINT);
-        numberKeyListener.onKeyUp( view,
-                                   content,
-                                   KeyEvent.KEYCODE_0,
-                                   new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0));
+        numberKeyListener.onKeyUp(view, content, KeyEvent.KEYCODE_0,
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0));
         assertEquals(str.charAt(0), content.charAt(0));
 
         content.setSpan(Selection.SELECTION_START, 1, 1, Spanned.SPAN_POINT_POINT);
         content.setSpan(Selection.SELECTION_END, 1, 1, Spanned.SPAN_POINT_POINT);
-        numberKeyListener.onKeyUp( view,
-                                   content,
-                                   KeyEvent.KEYCODE_2,
-                                   new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_2));
+        numberKeyListener.onKeyUp(view, content, KeyEvent.KEYCODE_2,
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_2));
         assertEquals(str.charAt(1), content.charAt(1));
 
         content.setSpan(Selection.SELECTION_START, 3, 3, Spanned.SPAN_POINT_POINT);
         content.setSpan(Selection.SELECTION_END, 3, 3, Spanned.SPAN_POINT_POINT);
-        numberKeyListener.onKeyUp( view,
-                                   content,
-                                   KeyEvent.KEYCODE_3,
-                                   new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_3));
+        numberKeyListener.onKeyUp(view, content, KeyEvent.KEYCODE_3,
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_3));
         assertEquals(str.charAt(3), content.charAt(3));
     }
 
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test {@link MetaKeyKeyListener#adjustMetaAfterKeypress(Spannable)}",
         method = "adjustMetaAfterKeypress",
         args = {android.text.Spannable.class}
     )
@@ -152,7 +136,25 @@
 
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test {@link MetaKeyKeyListener#resetMetaState(Spannable)}",
+        method = "adjustMetaAfterKeypress",
+        args = {long.class}
+    )
+    public void testAdjustMetaAfterKeypress2() {
+        long state = MetaKeyKeyListener.adjustMetaAfterKeypress(MetaKeyKeyListener.META_SHIFT_ON);
+        assertEquals(MetaKeyKeyListener.META_SHIFT_ON, state);
+
+        state = MetaKeyKeyListener.adjustMetaAfterKeypress(MetaKeyKeyListener.META_ALT_ON);
+        assertEquals(MetaKeyKeyListener.META_ALT_ON, state);
+
+        state = MetaKeyKeyListener.adjustMetaAfterKeypress(MetaKeyKeyListener.META_SYM_ON);
+        assertEquals(MetaKeyKeyListener.META_SYM_ON, state);
+
+        state = MetaKeyKeyListener.adjustMetaAfterKeypress(0);
+        assertEquals(0, state);
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
         method = "resetMetaState",
         args = {android.text.Spannable.class}
     )
@@ -199,15 +201,15 @@
         assertEquals(0, MetaKeyKeyListener.getMetaState("abc"));
         assertEquals(0, MetaKeyKeyListener.getMetaState("@#$$#^$^"));
 
-        assertEquals( 0,
-                      MetaKeyKeyListener.getMetaState("123456"),
-                      MetaKeyKeyListener.META_SHIFT_ON);
-        assertEquals( 0,
-                      MetaKeyKeyListener.getMetaState("abc"),
-                      MetaKeyKeyListener.META_ALT_ON);
-        assertEquals( 0,
-                      MetaKeyKeyListener.getMetaState("@#$$#^$^"),
-                      MetaKeyKeyListener.META_SYM_ON);
+        assertEquals(0,
+                     MetaKeyKeyListener.getMetaState("123456"),
+                     MetaKeyKeyListener.META_SHIFT_ON);
+        assertEquals(0,
+                     MetaKeyKeyListener.getMetaState("abc"),
+                     MetaKeyKeyListener.META_ALT_ON);
+        assertEquals(0,
+                     MetaKeyKeyListener.getMetaState("@#$$#^$^"),
+                     MetaKeyKeyListener.META_SYM_ON);
 
         assertEquals(0, MetaKeyKeyListener.getMetaState("123456", 0));
         assertEquals(0, MetaKeyKeyListener.getMetaState("abc", -1));
@@ -220,9 +222,34 @@
                 MetaKeyKeyListener.getMetaState("@#$$#^$^", MetaKeyKeyListener.META_SYM_ON));
     }
 
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getMetaState",
+            args = {long.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getMetaState",
+            args = {long.class, int.class}
+        )
+    })
+    public void testGetMetaState2() {
+        assertEquals(0, MetaKeyKeyListener.getMetaState(0));
+        assertEquals(MetaKeyKeyListener.META_SHIFT_ON,
+                MetaKeyKeyListener.getMetaState(MetaKeyKeyListener.META_SHIFT_ON));
+        assertEquals(MetaKeyKeyListener.META_CAP_LOCKED,
+                MetaKeyKeyListener.getMetaState(MetaKeyKeyListener.META_CAP_LOCKED));
+
+        assertEquals(0, MetaKeyKeyListener.getMetaState(0, MetaKeyKeyListener.META_SYM_ON));
+        assertEquals(1, MetaKeyKeyListener.getMetaState(MetaKeyKeyListener.META_SYM_ON,
+                MetaKeyKeyListener.META_SYM_ON));
+        assertEquals(2, MetaKeyKeyListener.getMetaState(MetaKeyKeyListener.META_SYM_LOCKED,
+                MetaKeyKeyListener.META_SYM_ON));
+    }
+
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test {@link MetaKeyKeyListener#isMetaTracker(CharSequence, Object)}",
         method = "isMetaTracker",
         args = {java.lang.CharSequence.class, java.lang.Object.class}
     )
@@ -234,30 +261,37 @@
 
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test {@link MetaKeyKeyListener#resetLockedMeta(Spannable)}",
+        method = "isSelectingMetaTracker",
+        args = {java.lang.CharSequence.class, java.lang.Object.class}
+    )
+    public void testIsSelectingMetaTracker() {
+        assertFalse(MetaKeyKeyListener.isSelectingMetaTracker("123456", new Object()));
+        assertFalse(MetaKeyKeyListener.isSelectingMetaTracker("abc", new Object()));
+        assertFalse(MetaKeyKeyListener.isSelectingMetaTracker("@#$$#^$^", new Object()));
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
         method = "resetLockedMeta",
         args = {android.text.Spannable.class}
     )
-    @ToBeFixed(bug="1371108", explanation="NPE is not expected.")
+    @ToBeFixed(bug = "1695243", explanation = "Android API javadocs are incomplete. @throws clause "
+            + "should be added into javadoc")
     public void testResetLockedMeta() {
         MockMetaKeyKeyListener mockMetaKeyKeyListener = new MockMetaKeyKeyListener();
 
-        try {
-            MockSpannable str = new MockSpannable();
-            str.setSpan(new Object(), 0, 0,
-                    Spannable.SPAN_MARK_MARK | (4 << Spannable.SPAN_USER_SHIFT));
-            assertFalse(str.hasCalledRemoveSpan());
-            mockMetaKeyKeyListener.callResetLockedMeta(str);
-            assertTrue(str.hasCalledRemoveSpan());
+        MockSpannable str = new MockSpannable();
+        str.setSpan(new Object(), 0, 0, Spannable.SPAN_MARK_MARK
+                | (4 << Spannable.SPAN_USER_SHIFT));
+        assertFalse(str.hasCalledRemoveSpan());
+        mockMetaKeyKeyListener.callResetLockedMeta(str);
+        assertTrue(str.hasCalledRemoveSpan());
 
-            str = new MockSpannable();
-            str.setSpan(new Object(), 0, 0, Spannable.SPAN_MARK_POINT);
-            assertFalse(str.hasCalledRemoveSpan());
-            mockMetaKeyKeyListener.callResetLockedMeta(str);
-            assertFalse(str.hasCalledRemoveSpan());
-        } catch (Exception e) {
-            fail("should not throw exception.");
-        }
+        str = new MockSpannable();
+        str.setSpan(new Object(), 0, 0, Spannable.SPAN_MARK_POINT);
+        assertFalse(str.hasCalledRemoveSpan());
+        mockMetaKeyKeyListener.callResetLockedMeta(str);
+        assertFalse(str.hasCalledRemoveSpan());
 
         try {
             mockMetaKeyKeyListener.callResetLockedMeta(null);
@@ -268,6 +302,31 @@
 
     @TestTargetNew(
         level = TestLevel.COMPLETE,
+        method = "resetLockedMeta",
+        args = {long.class}
+    )
+    public void testResetLockedMeta2() {
+        long state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_CAP_LOCKED);
+        assertEquals(0, state);
+
+        state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_SHIFT_ON);
+        assertEquals(MetaKeyKeyListener.META_SHIFT_ON, state);
+
+        state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_ALT_LOCKED);
+        assertEquals(0, state);
+
+        state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_ALT_ON);
+        assertEquals(MetaKeyKeyListener.META_ALT_ON, state);
+
+        state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_SYM_LOCKED);
+        assertEquals(0, state);
+
+        state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_SYM_ON);
+        assertEquals(MetaKeyKeyListener.META_SYM_ON, state);
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
         method = "clearMetaKeyState",
         args = {android.view.View.class, android.text.Editable.class, int.class}
     )
@@ -298,6 +357,93 @@
         assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
     }
 
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        method = "clearMetaKeyState",
+        args = {android.text.Editable.class, int.class}
+    )
+    public void testClearMetaKeyState2() {
+        CharSequence str = "123456";
+        Editable text = Editable.Factory.getInstance().newEditable(str);
+        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
+        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
+        MetaKeyKeyListener.clearMetaKeyState(text, MetaKeyKeyListener.META_SHIFT_ON);
+        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
+        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
+
+        str = "abc";
+        text = Editable.Factory.getInstance().newEditable(str);
+        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
+        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
+        MetaKeyKeyListener.clearMetaKeyState(text, MetaKeyKeyListener.META_ALT_ON);
+        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
+        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
+
+        str = "#@%#$^%^";
+        text = Editable.Factory.getInstance().newEditable(str);
+        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
+        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
+        MetaKeyKeyListener.clearMetaKeyState(text, MetaKeyKeyListener.META_SYM_ON);
+        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
+        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        method = "clearMetaKeyState",
+        args = {long.class, int.class}
+    )
+    public void testClearMetaKeyState3() {
+        final MetaKeyKeyListener metaKeyKeyListener = new MetaKeyKeyListener() {};
+        long state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_CAP_LOCKED,
+                MetaKeyKeyListener.META_SHIFT_ON);
+        assertEquals(0, state);
+
+        state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_SHIFT_ON,
+                MetaKeyKeyListener.META_SHIFT_ON);
+        assertEquals(MetaKeyKeyListener.META_SHIFT_ON, state);
+
+        state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_ALT_LOCKED,
+                MetaKeyKeyListener.META_ALT_ON);
+        assertEquals(0, state);
+
+        state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_ALT_ON,
+                MetaKeyKeyListener.META_ALT_ON);
+        assertEquals(MetaKeyKeyListener.META_ALT_ON, state);
+
+        state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_SYM_LOCKED,
+                MetaKeyKeyListener.META_SYM_ON);
+        assertEquals(0, state);
+
+        state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_SYM_ON,
+                MetaKeyKeyListener.META_SYM_ON);
+        assertEquals(MetaKeyKeyListener.META_SYM_ON, state);
+    }
+
+    @TestTargetNew(
+        level = TestLevel.PARTIAL,
+        method = "handleKeyDown",
+        args = {long.class, int.class, KeyEvent.class}
+    )
+    public void testHandleKeyDown() {
+        long state = MetaKeyKeyListener.handleKeyDown(MetaKeyKeyListener.META_CAP_LOCKED,
+                KeyEvent.KEYCODE_SHIFT_LEFT,
+                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT));
+        assertEquals(0, state);
+    }
+
+    @TestTargetNew(
+        level = TestLevel.PARTIAL,
+        method = "handleKeyUp",
+        args = {long.class, int.class, KeyEvent.class}
+    )
+    public void testHandleKeyUp() {
+        long state = MetaKeyKeyListener.handleKeyUp(MetaKeyKeyListener.META_CAP_LOCKED,
+                KeyEvent.KEYCODE_SHIFT_LEFT,
+                new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT));
+        assertEquals(MetaKeyKeyListener.META_CAP_LOCKED, state);
+    }
+
     private class MockMetaKeyKeyListener extends MetaKeyKeyListener {
         public void callResetLockedMeta(Spannable content) {
             MetaKeyKeyListener.resetLockedMeta(content);
diff --git a/tests/tests/text/src/android/text/method/cts/ScrollingMovementMethodTest.java b/tests/tests/text/src/android/text/method/cts/ScrollingMovementMethodTest.java
index 8cfa39a..31c85a9 100644
--- a/tests/tests/text/src/android/text/method/cts/ScrollingMovementMethodTest.java
+++ b/tests/tests/text/src/android/text/method/cts/ScrollingMovementMethodTest.java
@@ -976,6 +976,42 @@
         });
     }
 
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        method = "onKeyOther",
+        args = {TextView.class, Spannable.class, KeyEvent.class}
+    )
+    @ToBeFixed(bug = "1695243", explanation = "Android API javadocs are incomplete. There is no "
+            + "document about the behaviour of this method.")
+    public void testOnKeyOther() throws Throwable {
+        runActionOnUiThread(new Runnable() {
+            public void run() {
+                getActivity().setContentView(mTextView);
+            }
+        });
+        assertNotNull(mTextView.getLayout());
+
+        assertVisibleLineInTextView(0);
+        final MyScrollingMovementMethod method = new MyScrollingMovementMethod();
+        runActionOnUiThread(new Runnable() {
+            public void run() {
+                method.onKeyOther(mTextView, null,
+                        new KeyEvent(0, 0, KeyEvent.ACTION_MULTIPLE,
+                                KeyEvent.KEYCODE_DPAD_DOWN, 2));
+            }
+        });
+        assertVisibleLineInTextView(1);
+
+        runActionOnUiThread(new Runnable() {
+            public void run() {
+                method.onKeyOther(mTextView, null,
+                        new KeyEvent(0, 0, KeyEvent.ACTION_MULTIPLE,
+                                KeyEvent.KEYCODE_DPAD_UP, 2));
+            }
+        });
+        assertVisibleLineInTextView(0);
+    }
+
     private void assertVisibleLineInTextView(int line) {
         Layout layout = mTextView.getLayout();
         int scrollY = mTextView.getScrollY();
diff --git a/tests/tests/text/src/android/text/method/cts/TouchTest.java b/tests/tests/text/src/android/text/method/cts/TouchTest.java
index 647971b..bc62bfe 100644
--- a/tests/tests/text/src/android/text/method/cts/TouchTest.java
+++ b/tests/tests/text/src/android/text/method/cts/TouchTest.java
@@ -19,6 +19,7 @@
 import dalvik.annotation.TestLevel;
 import dalvik.annotation.TestTargetClass;
 import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargets;
 import dalvik.annotation.ToBeFixed;
 
 import android.app.Activity;
@@ -52,13 +53,12 @@
 
     @TestTargetNew(
         level = TestLevel.COMPLETE,
-        notes = "Test scrollTo(TextView widget, Layout layout, int x, int y).",
         method = "scrollTo",
         args = {TextView.class, Layout.class, int.class, int.class}
     )
-    public void testScrollTo() {
+    public void testScrollTo() throws Throwable {
         final TextView tv = new TextView(mActivity);
-        mActivity.runOnUiThread(new Runnable() {
+        runTestOnUiThread(new Runnable() {
             public void run() {
                 mActivity.setContentView(tv);
                 tv.setSingleLine(true);
@@ -69,7 +69,7 @@
         TextPaint paint = tv.getPaint();
         final Layout layout = tv.getLayout();
 
-        mActivity.runOnUiThread(new Runnable() {
+        runTestOnUiThread(new Runnable() {
             public void run() {
                 tv.setText(LONG_TEXT);
             }
@@ -79,7 +79,7 @@
         // get the total length of string
         final int width = getTextWidth(LONG_TEXT, paint);
 
-        mActivity.runOnUiThread(new Runnable() {
+        runTestOnUiThread(new Runnable() {
             public void run() {
                 Touch.scrollTo(tv, layout, width - tv.getWidth() - 1, 0);
             }
@@ -89,7 +89,7 @@
         assertEquals(0, tv.getScrollY());
 
         // the X to which scroll is greater than the total length of string.
-        mActivity.runOnUiThread(new Runnable() {
+        runTestOnUiThread(new Runnable() {
             public void run() {
                 Touch.scrollTo(tv, layout, width + 100, 5);
             }
@@ -98,7 +98,7 @@
         assertEquals(width - tv.getWidth(), tv.getScrollX());
         assertEquals(5, tv.getScrollY());
 
-        mActivity.runOnUiThread(new Runnable() {
+        runTestOnUiThread(new Runnable() {
             public void run() {
                 Touch.scrollTo(tv, layout, width - 10, 5);
             }
@@ -108,18 +108,29 @@
         assertEquals(5, tv.getScrollY());
     }
 
-    @TestTargetNew(
-        level = TestLevel.COMPLETE,
-        notes = "Test onTouchEvent(TextView widget, Spannable buffer, MotionEvent event).",
-        method = "onTouchEvent",
-        args = {TextView.class, Spannable.class, MotionEvent.class}
-    )
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getInitialScrollX",
+            args = {TextView.class, Spannable.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getInitialScrollY",
+            args = {TextView.class, Spannable.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "onTouchEvent",
+            args = {TextView.class, Spannable.class, MotionEvent.class}
+        )
+    })
     @ToBeFixed(bug = "1695243", explanation = "Android API javadocs are incomplete, " +
             "should add @throws clause into javadoc.")
-    public void testOnTouchEvent() {
+    public void testOnTouchEvent() throws Throwable {
         final SpannableString spannable = new SpannableString(LONG_TEXT);
         final TextView tv = new TextView(mActivity);
-        mActivity.runOnUiThread(new Runnable() {
+        runTestOnUiThread(new Runnable() {
             public void run() {
                 mActivity.setContentView(tv);
                 tv.setSingleLine(true);
@@ -142,7 +153,7 @@
         assertEquals(0, tv.getScrollX());
         assertEquals(0, tv.getScrollY());
         mReturnFromTouchEvent = false;
-        mActivity.runOnUiThread(new Runnable() {
+        runTestOnUiThread(new Runnable() {
             public void run() {
                 mReturnFromTouchEvent = Touch.onTouchEvent(tv, spannable, event1);
             }
@@ -152,9 +163,11 @@
         // TextView has not been scrolled.
         assertEquals(0, tv.getScrollX());
         assertEquals(0, tv.getScrollY());
+        assertEquals(0, Touch.getInitialScrollX(tv, spannable));
+        assertEquals(0, Touch.getInitialScrollY(tv, spannable));
 
         mReturnFromTouchEvent = false;
-        mActivity.runOnUiThread(new Runnable() {
+        runTestOnUiThread(new Runnable() {
             public void run() {
                 mReturnFromTouchEvent = Touch.onTouchEvent(tv, spannable, event2);
             }
@@ -164,9 +177,11 @@
         // TextView has been scrolled.
         assertEquals(x, tv.getScrollX());
         assertEquals(0, tv.getScrollY());
+        assertEquals(0, Touch.getInitialScrollX(tv, spannable));
+        assertEquals(0, Touch.getInitialScrollY(tv, spannable));
 
         mReturnFromTouchEvent = false;
-        mActivity.runOnUiThread(new Runnable() {
+        runTestOnUiThread(new Runnable() {
             public void run() {
                 mReturnFromTouchEvent = Touch.onTouchEvent(tv, spannable, event3);
             }
@@ -176,6 +191,8 @@
         // TextView has not been scrolled.
         assertEquals(x, tv.getScrollX());
         assertEquals(0, tv.getScrollY());
+        assertEquals(-1, Touch.getInitialScrollX(tv, spannable));
+        assertEquals(-1, Touch.getInitialScrollY(tv, spannable));
     }
 
     private int getTextWidth(String str, TextPaint paint) {