Java tutorial
/* * Copyright (C) 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.android.talkback.eventprocessor; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; import android.test.suitebuilder.annotation.MediumTest; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ListView; import com.android.talkback.FeedbackItem; import com.android.talkback.InputModeManager; import com.android.talkback.R; import com.android.talkback.controller.CursorController; import com.googlecode.eyesfree.testing.CharSequenceFilter; import com.googlecode.eyesfree.testing.FeedbackItemFilter; import com.googlecode.eyesfree.testing.TalkBackInstrumentationTestCase; import java.util.ArrayList; public class ProcessorScrollPositionTest extends TalkBackInstrumentationTestCase { CursorController mCursorController; private static final String[] ITEMS = { "Breakfast", "Second Breakfast", "Lunch", "Dinner", "Dessert" }; public class TestFragment extends Fragment { private String mText = ""; public TestFragment(String text) { mText = text; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) { View view = inflater.inflate(R.layout.view_pager_fragment, container, false); FrameLayout page = (FrameLayout) view.findViewById(R.id.page); page.setContentDescription(mText); return view; } } @Override public void setUp() throws Exception { super.setUp(); setContentView(R.layout.cursor_test); mCursorController = getService().getCursorController(); } @Override public void tearDown() throws Exception { super.tearDown(); } @MediumTest public void testAutoScroll_doesNotGiveFeedback() { ListView listView = (ListView) getViewForId(R.id.teams_list); AccessibilityNodeInfoCompat listNode = getNodeForView(listView); getService().interruptAllFeedback(true); startRecordingRawSpeech(); int numItems = listView.getCount(); // Need total items, including invisible items! for (int i = 0; i < numItems; ++i) { if (i == 0) { AccessibilityNodeInfoCompat child = listNode.getChild(i); mCursorController.setCursor(child); child.recycle(); } else { mCursorController.next(false, true, false, InputModeManager.INPUT_MODE_TOUCH); } waitForAccessibilityIdleSync(); } final CharSequenceFilter textFilter = new CharSequenceFilter().addContainsIgnoreCase("Showing items"); FeedbackItemFilter filter = new FeedbackItemFilter().addTextFilter(textFilter); FeedbackItem feedbackItem = stopRecordingRawSpeechAfterMatch(filter); assertNull(feedbackItem); } @MediumTest public void testManualScroll_doesGiveFeedback() { AccessibilityNodeInfoCompat list = getNodeForId(R.id.teams_list); int numItems = list.getChildCount(); assertTrue(numItems > 0); startRecordingRawSpeech(); AccessibilityNodeInfoCompat child = list.getChild(0); mCursorController.setCursor(child); child.recycle(); waitForAccessibilityIdleSync(); mCursorController.more(); waitForAccessibilityIdleSync(); mCursorController.more(); waitForAccessibilityIdleSync(); final CharSequenceFilter textFilter = new CharSequenceFilter().addContainsIgnoreCase("Showing items"); FeedbackItemFilter filter = new FeedbackItemFilter().addTextFilter(textFilter); FeedbackItem feedbackItem = stopRecordingRawSpeechAfterMatch(filter); assertNotNull(feedbackItem); } @MediumTest public void testViewPager_scrollNext() { setUpViewPager(); startRecordingRawSpeech(); final ViewPager pager = (ViewPager) getViewForId(R.id.test_pager); getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { pager.setCurrentItem(1, false); } }); getInstrumentation().waitForIdleSync(); waitForAccessibilityIdleSync(); stopRecordingAndAssertRawSpeech("Second Breakfast, 2 of 5"); } @MediumTest public void testViewPager_scrollBack() { setUpViewPager(); startRecordingRawSpeech(); final ViewPager pager = (ViewPager) getViewForId(R.id.test_pager); getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { pager.setCurrentItem(3, false); } }); getInstrumentation().waitForIdleSync(); waitForAccessibilityIdleSync(); getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { pager.setCurrentItem(2, false); } }); getInstrumentation().waitForIdleSync(); waitForAccessibilityIdleSync(); stopRecordingAndAssertRawSpeech("Lunch, 3 of 5"); } @MediumTest public void testViewPager_scrollSamePage() { setUpViewPager(); getService().interruptAllFeedback(true); startRecordingRawSpeech(); final ViewPager pager = (ViewPager) getViewForId(R.id.test_pager); getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { pager.setCurrentItem(0, false); } }); getInstrumentation().waitForIdleSync(); waitForAccessibilityIdleSync(); // No feedback when page doesn't change. FeedbackItemFilter anyItemFilter = new FeedbackItemFilter(); FeedbackItem feedbackItem = stopRecordingRawSpeechAfterMatch(anyItemFilter); assertNull(feedbackItem); } private void setUpViewPager() { setContentView(R.layout.view_pager); final ViewPager pager = (ViewPager) getViewForId(R.id.test_pager); final FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { pager.setAdapter(new FragmentPagerAdapter(fragmentManager) { @Override public Fragment getItem(int position) { return new TestFragment(ITEMS[position]); } @Override public int getCount() { return ITEMS.length; } }); } }); getInstrumentation().waitForIdleSync(); } }