141d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin/* 241d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * Copyright (C) 2016 The Android Open Source Project 341d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * 441d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * Licensed under the Apache License, Version 2.0 (the "License"); 541d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * you may not use this file except in compliance with the License. 641d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * You may obtain a copy of the License at 741d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * 841d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * http://www.apache.org/licenses/LICENSE-2.0 941d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * 1041d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * Unless required by applicable law or agreed to in writing, software 1141d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * distributed under the License is distributed on an "AS IS" BASIS, 1241d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1341d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * See the License for the specific language governing permissions and 1441d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin * limitations under the License. 1541d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin */ 1641d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 1741d7e22b9539e651a69e5f505eca1fff096155c6Ben Linpackage com.android.documentsui.dirlist; 1841d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 1941d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport android.support.test.filters.SmallTest; 2041d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport android.support.test.runner.AndroidJUnit4; 2141d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport android.view.KeyEvent; 2241d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport android.view.MotionEvent; 2341d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 2441d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport com.android.documentsui.base.Events.InputEvent; 254f78ba643270b9d84da1952d8e408220b25ec6fdSteve McKayimport com.android.documentsui.selection.SelectionManager; 26bd9f05aa36bf19d8b34d0d73a59e9bd65d3d26ebSteve McKayimport com.android.documentsui.selection.SelectionProbe; 275b0a2c187a9e446b683687817d22cbe443585223Steve McKayimport com.android.documentsui.testing.SelectionManagers; 2841d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport com.android.documentsui.testing.TestActionHandler; 2941d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport com.android.documentsui.testing.TestEvent; 30bd9f05aa36bf19d8b34d0d73a59e9bd65d3d26ebSteve McKayimport com.android.documentsui.testing.TestEvent.Builder; 3141d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport com.android.documentsui.testing.TestEventHandler; 3241d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport com.android.documentsui.testing.TestPredicate; 3341d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 3441d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport org.junit.Before; 3541d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport org.junit.Test; 3641d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport org.junit.runner.RunWith; 3741d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 3841d7e22b9539e651a69e5f505eca1fff096155c6Ben Linimport java.util.List; 3941d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 4041d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin@RunWith(AndroidJUnit4.class) 4141d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin@SmallTest 4241d7e22b9539e651a69e5f505eca1fff096155c6Ben Linpublic final class UserInputHandler_KeyboardTest { 4341d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 4441d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin private static final List<String> ITEMS = TestData.create(100); 4541d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 4641d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin private UserInputHandler<TestEvent> mInputHandler; 4741d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin private TestActionHandler mActionHandler; 4841d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin private TestFocusHandler mFocusHandler; 4941d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin private SelectionProbe mSelection; 5041d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 5141d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin private TestPredicate<DocumentDetails> mCanSelect; 5241d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin private TestEventHandler<InputEvent> mRightClickHandler; 5341d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin private TestEventHandler<InputEvent> mDragAndDropHandler; 5441d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin private TestEventHandler<InputEvent> mGestureSelectHandler; 5511a2c1338f07cc0afd60e7ac6ea6ba505b80dadbBen Lin private TestEventHandler<Void> mPerformHapticFeedback; 5641d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 5741d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin private Builder mEvent; 5841d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 5941d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin @Before 6041d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin public void setUp() { 615b0a2c187a9e446b683687817d22cbe443585223Steve McKay SelectionManager selectionMgr = SelectionManagers.createTestInstance(ITEMS); 6241d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 6341d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mActionHandler = new TestActionHandler(); 6441d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mSelection = new SelectionProbe(selectionMgr); 6541d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mFocusHandler = new TestFocusHandler(); 6641d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mCanSelect = new TestPredicate<>(); 6741d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mRightClickHandler = new TestEventHandler<>(); 6841d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mDragAndDropHandler = new TestEventHandler<>(); 6941d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mGestureSelectHandler = new TestEventHandler<>(); 7041d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 7141d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mInputHandler = new UserInputHandler<>( 7241d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mActionHandler, 7341d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mFocusHandler, 7441d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin selectionMgr, 7541d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin (MotionEvent event) -> { 7641d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin throw new UnsupportedOperationException("Not exercised in tests."); 7741d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin }, 7841d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mCanSelect, 7941d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mRightClickHandler::accept, 8041d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mDragAndDropHandler::accept, 8111a2c1338f07cc0afd60e7ac6ea6ba505b80dadbBen Lin mGestureSelectHandler::accept, 8211a2c1338f07cc0afd60e7ac6ea6ba505b80dadbBen Lin () -> mPerformHapticFeedback.accept(null)); 8341d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 84ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mEvent = TestEvent.builder().mouse().overDocIcon(); 8541d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin } 8641d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 8741d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin @Test 8841d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin public void testArrowKey_nonShiftClearsSelection() { 8941d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mInputHandler.onSingleTapConfirmed(mEvent.at(11).build()); 9041d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mSelection.assertSelection(11); 9141d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 9241d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mFocusHandler.handleKey = true; 9341d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP); 9441d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mInputHandler.onKey(null, event.getKeyCode(), event); 9541d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin 9641d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin mSelection.assertNoSelection(); 9741d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin } 9841d7e22b9539e651a69e5f505eca1fff096155c6Ben Lin}