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