com.android.talkback.eventprocessor.ProcessorScrollPositionTest.java Source code

Java tutorial

Introduction

Here is the source code for com.android.talkback.eventprocessor.ProcessorScrollPositionTest.java

Source

/*
 * 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();
    }

}