181afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin/* 281afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * Copyright (C) 2016 The Android Open Source Project 381afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * 481afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 581afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * you may not use this file except in compliance with the License. 681afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * You may obtain a copy of the License at 781afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * 881afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * http://www.apache.org/licenses/LICENSE-2.0 981afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * 1081afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * Unless required by applicable law or agreed to in writing, software 1181afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * distributed under the License is distributed on an "AS IS" BASIS, 1281afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1381afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * See the License for the specific language governing permissions and 1481afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin * limitations under the License. 1581afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin */ 1681afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 1717b761eb2f837d3ac079c07fc33877d6049c3cbaSteve McKaypackage com.android.documentsui; 1881afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 1981afd7f587176e7d63f00d533b1258dfec84bf5cBen Linimport android.test.AndroidTestCase; 2081afd7f587176e7d63f00d533b1258dfec84bf5cBen Linimport android.test.suitebuilder.annotation.SmallTest; 2181afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 2298f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKayimport com.android.documentsui.base.Features; 2317b761eb2f837d3ac079c07fc33877d6049c3cbaSteve McKayimport com.android.documentsui.dirlist.TestData; 24e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tanimport com.android.documentsui.testing.TestModel; 2575b7b9039cf0efcb188e916c6f510328bfe099a8Ben Linimport com.android.documentsui.selection.SelectionManager; 2675b7b9039cf0efcb188e916c6f510328bfe099a8Ben Linimport com.android.documentsui.testing.SelectionManagers; 2798f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKayimport com.android.documentsui.testing.TestFeatures; 2881afd7f587176e7d63f00d533b1258dfec84bf5cBen Linimport com.android.documentsui.testing.TestRecyclerView; 2981afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 3075b7b9039cf0efcb188e916c6f510328bfe099a8Ben Linimport java.util.ArrayList; 3181afd7f587176e7d63f00d533b1258dfec84bf5cBen Linimport java.util.List; 3281afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 3381afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin@SmallTest 3481afd7f587176e7d63f00d533b1258dfec84bf5cBen Linpublic class FocusManagerTest extends AndroidTestCase { 3581afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 3681afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin private static final String TEST_AUTHORITY = "test_authority"; 3781afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 3881afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin private static final List<String> ITEMS = TestData.create(10); 3981afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 4081afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin private FocusManager mManager; 4181afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin private TestRecyclerView mView; 4275b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin private SelectionManager mSelectionMgr; 4398f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay private TestFeatures mFeatures; 4481afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 4581afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin @Override 4681afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin public void setUp() throws Exception { 4781afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin mView = TestRecyclerView.create(ITEMS); 4875b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mSelectionMgr = SelectionManagers.createTestInstance(ITEMS); 4998f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay mFeatures = new TestFeatures(); 5098f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay mManager = new FocusManager(mFeatures, mSelectionMgr, null, null, 0) 5198f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay .reset(mView, new TestModel(TEST_AUTHORITY, mFeatures)); 5281afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin } 5381afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 5481afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin public void testFocus() { 5517b761eb2f837d3ac079c07fc33877d6049c3cbaSteve McKay mManager.focusDocument(Integer.toString(3)); 5681afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin mView.assertItemViewFocused(3); 5781afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin } 5881afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin 5981afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin public void testPendingFocus() { 6017b761eb2f837d3ac079c07fc33877d6049c3cbaSteve McKay mManager.focusDocument(Integer.toString(10)); 6181afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin List<String> mutableItems = TestData.create(11); 6281afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin mView.setItems(mutableItems); 6381afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin mManager.onLayoutCompleted(); 6481afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin // Should only be called once 6581afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin mView.assertItemViewFocused(10); 6681afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin } 6775b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin 68047182631669608af946480c2545a10acb2ef1bfSteve McKay public void testFocusDirectoryList_noItemsToFocus() { 6975b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mView = TestRecyclerView.create(new ArrayList<>()); 7098f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay mManager = new FocusManager( 7198f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay mFeatures, SelectionManagers.createTestInstance(), null, null, 0) 7298f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay .reset(mView, new TestModel(TEST_AUTHORITY, mFeatures)); 73047182631669608af946480c2545a10acb2ef1bfSteve McKay assertFalse(mManager.focusDirectoryList()); 7475b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin } 7575b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin 76047182631669608af946480c2545a10acb2ef1bfSteve McKay public void testFocusDirectoryList_hasSelection() { 7775b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mSelectionMgr.toggleSelection("0"); 78047182631669608af946480c2545a10acb2ef1bfSteve McKay assertFalse(mManager.focusDirectoryList()); 7975b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin } 8081afd7f587176e7d63f00d533b1258dfec84bf5cBen Lin} 81