FileDocCategorySizeDatePackage
ButtonsWithTallTextViewInBetweenTest.javaAPI DocAndroid 1.5 API5292Wed May 06 22:42:02 BST 2009com.android.frameworktest.scroll.arrowscroll

ButtonsWithTallTextViewInBetweenTest

public class ButtonsWithTallTextViewInBetweenTest extends android.test.ActivityInstrumentationTestCase

Fields Summary
private android.widget.ScrollView
mScrollView
private android.widget.Button
mTopButton
private android.widget.TextView
mMiddleFiller
private android.widget.TextView
mBottomButton
private android.graphics.Rect
mTempRect
Constructors Summary
public ButtonsWithTallTextViewInBetweenTest()

        super("com.android.frameworktest", ButtonsWithTallTextViewInBetween.class);
    
Methods Summary
private intgetBottomWithinScrollView(android.view.View descendant)

        descendant.getDrawingRect(mTempRect);
        mScrollView.offsetDescendantRectToMyCoords(descendant, mTempRect);
        return mTempRect.bottom;
    
private intgetTopWithinScrollView(android.view.View descendant)


        
        descendant.getDrawingRect(mTempRect);
        mScrollView.offsetDescendantRectToMyCoords(descendant, mTempRect);
        return mTempRect.top;
    
protected voidsetUp()

        super.setUp();

        mScrollView = getActivity().getScrollView();
        mTopButton = getActivity().getTopButton();
        mMiddleFiller = getActivity().getMiddleFiller();
        mBottomButton = getActivity().getBottomButton();
    
public voidtestPanBottomButtonOffScreenLosesFocus()

        mBottomButton.post(new Runnable() {
            public void run() {
                mBottomButton.requestFocus();
            }
        });

        getInstrumentation().waitForIdleSync();

        assertTrue("bottombutton.isFocused", mBottomButton.isFocused());
        final int maxScroll = getActivity().getLinearLayout().getHeight()
                - mScrollView.getHeight();
        assertEquals("should be fully scrolled to bottom",
                maxScroll,
                mScrollView.getScrollY());

        sendKeys(KeyEvent.KEYCODE_DPAD_UP);

        assertEquals("scroll view should have scrolled by the max amount for one "
                + "arrow navigation",
                maxScroll - mScrollView.getMaxScrollAmount(),
                mScrollView.getScrollY());

        assertTrue("bottom button should be off screen",
                getTopWithinScrollView(mBottomButton) > mScrollView.getScrollY() + mScrollView.getHeight());

        assertFalse("bottom button should have lost focus",
                mBottomButton.isFocused());

        assertTrue("scroll view should be focused", mScrollView.isFocused());
    
public voidtestPanTopButtonOffScreenLosesFocus()

        sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);

        assertEquals("scroll view should be scrolled by the max amount for one "
                + "arrow navigation",
                mScrollView.getMaxScrollAmount(),
                mScrollView.getScrollY());

        assertTrue("top button should be off screen",
                getBottomWithinScrollView(mTopButton) < mScrollView.getScrollY());

        assertFalse("top button should have lost focus",
                mTopButton.isFocused());

        assertTrue("scroll view should be focused", mScrollView.isFocused());
    
public voidtestPreconditions()

        assertTrue("top button should be shorter than max scroll amount",
                mTopButton.getHeight() <
                mScrollView.getMaxScrollAmount());
        assertTrue("bottom button should be further than max scroll amount off screen",
                getTopWithinScrollView(mBottomButton)- mScrollView.getBottom() > mScrollView.getMaxScrollAmount());
    
public voidtestScrollDownToBottomButton()

        final int screenBottom = mScrollView.getScrollY() + mScrollView.getHeight();
        final int numDownsToButtonButton =
                ((getBottomWithinScrollView(mBottomButton) - screenBottom)) / mScrollView.getMaxScrollAmount() + 1;

        for (int i = 0; i < numDownsToButtonButton; i++) {
            sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
        }

        assertTrue("bottombutton.isFocused", mBottomButton.isFocused());

        assertEquals("should be fully scrolled to bottom",
                getActivity().getLinearLayout().getHeight() - mScrollView.getHeight(),
                mScrollView.getScrollY());