Merge "Adding CTS test for setting accessibiltiy cursor in non-text views."
diff --git a/tests/tests/accessibility/src/android/view/accessibility/cts/AccessibilityNodeInfoTest.java b/tests/tests/accessibility/src/android/view/accessibility/cts/AccessibilityNodeInfoTest.java
index 2e7c2e4..70a25b2 100644
--- a/tests/tests/accessibility/src/android/view/accessibility/cts/AccessibilityNodeInfoTest.java
+++ b/tests/tests/accessibility/src/android/view/accessibility/cts/AccessibilityNodeInfoTest.java
@@ -30,7 +30,7 @@
 public class AccessibilityNodeInfoTest extends AndroidTestCase {
 
     /** The number of properties of the {@link AccessibilityNodeInfo} class. */
-    private static final int NON_STATIC_FIELD_COUNT = 18;
+    private static final int NON_STATIC_FIELD_COUNT = 20;
 
     @SmallTest
     public void testMarshaling() throws Exception {
diff --git a/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityTextTraversalTest.java b/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityTextTraversalTest.java
index 3ceac1f..17c7ebd 100644
--- a/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityTextTraversalTest.java
+++ b/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityTextTraversalTest.java
@@ -3195,4 +3195,66 @@
         assertFalse(getInteractionBridge().performAction(text,
                 AccessibilityNodeInfo.ACTION_SET_SELECTION, arguments));
     }
+
+    public void testSelectionPositionForNonEditableView() throws Exception {
+        final View view = getActivity().findViewById(R.id.view);
+
+        getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                view.setContentDescription(getString(R.string.foo_bar_baz));
+            }
+        });
+
+        final AccessibilityNodeInfo text = getInteractionBridge()
+               .findAccessibilityNodeInfoByTextFromRoot(getString(R.string.foo_bar_baz));
+
+        // Check the initial node properties.
+        assertFalse(text.isEditable());
+        assertSame(text.getTextSelectionStart(), -1);
+        assertSame(text.getTextSelectionEnd(), -1);
+
+        // Set the cursor position.
+        getInteractionBridge().executeCommandAndWaitForAccessibilityEvent(new Runnable() {
+            @Override
+            public void run() {
+                Bundle arguments = new Bundle();
+                arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_START_INT, 4);
+                arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_END_INT, 4);
+                assertTrue(getInteractionBridge().performAction(text,
+                        AccessibilityNodeInfo.ACTION_SET_SELECTION, arguments));
+            }
+        }, new AccessibilityEventFilter() {
+            @Override
+            public boolean accept(AccessibilityEvent event) {
+                return (event.getEventType()
+                        == AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED);
+            }
+        }, TIMEOUT_ASYNC_PROCESSING);
+
+        // Refresh the node.
+        AccessibilityNodeInfo refreshedText = getInteractionBridge()
+                .findAccessibilityNodeInfoByTextFromRoot(getString(R.string.foo_bar_baz));
+
+        // Check the related node properties.
+        assertFalse(refreshedText.isEditable());
+        assertSame(refreshedText.getTextSelectionStart(), 4);
+        assertSame(refreshedText.getTextSelectionEnd(), 4);
+
+        // Try to set to an invalid cursor position.
+        Bundle arguments = new Bundle();
+        arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_START_INT, 4);
+        arguments.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_END_INT, 5);
+        assertFalse(getInteractionBridge().performAction(text,
+                AccessibilityNodeInfo.ACTION_SET_SELECTION, arguments));
+
+        // Refresh the node.
+        refreshedText = getInteractionBridge()
+                .findAccessibilityNodeInfoByTextFromRoot(getString(R.string.foo_bar_baz));
+
+        // Check the related node properties.
+        assertFalse(refreshedText.isEditable());
+        assertSame(refreshedText.getTextSelectionStart(), 4);
+        assertSame(refreshedText.getTextSelectionEnd(), 4);
+    }
 }
diff --git a/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java b/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java
index 2b6dab4..f83c35c 100644
--- a/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java
+++ b/tests/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java
@@ -304,7 +304,7 @@
         // char sequence attributes
         assertEquals(button.getPackageName(), source.getPackageName());
         assertEquals(button.getClassName(), source.getClassName());
-        assertEquals(button.getText(), source.getText());
+        assertEquals(button.getText().toString(), source.getText().toString());
         assertSame(button.getContentDescription(), source.getContentDescription());
 
         // boolean attributes