174e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa/* 274e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * Copyright (C) 2016 The Android Open Source Project 374e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * 474e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * Licensed under the Apache License, Version 2.0 (the "License"); 574e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * you may not use this file except in compliance with the License. 674e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * You may obtain a copy of the License at 774e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * 874e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * http://www.apache.org/licenses/LICENSE-2.0 974e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * 1074e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * Unless required by applicable law or agreed to in writing, software 1174e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * distributed under the License is distributed on an "AS IS" BASIS, 1274e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1374e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * See the License for the specific language governing permissions and 1474e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * limitations under the License. 1574e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa */ 16d080506e3aa8547605cd4783eb660775d7d2b8eeSteve McKaypackage com.android.documentsui.sidebar; 1774e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa 1874e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwaimport android.content.Context; 1974e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwaimport android.util.AttributeSet; 2074e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwaimport android.view.KeyEvent; 2174e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwaimport android.widget.ListView; 2274e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa 2398f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKayimport com.android.documentsui.base.Features; 24340ab17f468789bb507daeae116cf7940ba84b03Ben Lin 2574e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa/** 2674e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * The list in the navigation drawer. This class exists for the purpose of overriding the key 2774e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * handler on ListView. Ignoring keystrokes (e.g. the tab key) cannot be properly done using 2874e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa * View.OnKeyListener. 2974e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa */ 3074e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwapublic class RootsList extends ListView { 3174e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa 3298f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay private final Features mFeatures; 3398f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay 3474e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa // Multiple constructors are needed to handle all the different ways this View could be 3574e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa // constructed by the framework. Don't remove them! 3674e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa public RootsList(Context context) { 3774e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa super(context); 385bd5cb44eacc10fe7cec7c159d6f47d127a3195bSteve McKay mFeatures = Features.create(getContext()); 3974e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa } 4074e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa 4174e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa public RootsList(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 4274e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa super(context, attrs, defStyleAttr, defStyleRes); 435bd5cb44eacc10fe7cec7c159d6f47d127a3195bSteve McKay mFeatures = Features.create(getContext()); 4474e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa } 4574e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa 4674e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa public RootsList(Context context, AttributeSet attrs, int defStyleAttr) { 4774e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa super(context, attrs, defStyleAttr); 485bd5cb44eacc10fe7cec7c159d6f47d127a3195bSteve McKay mFeatures = Features.create(getContext()); 4974e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa } 5074e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa 5174e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa public RootsList(Context context, AttributeSet attrs) { 5274e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa super(context, attrs); 535bd5cb44eacc10fe7cec7c159d6f47d127a3195bSteve McKay mFeatures = Features.create(getContext()); 5474e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa } 5574e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa 5674e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa @Override 5774e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa public boolean onKeyDown(int keyCode, KeyEvent event) { 5874e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa switch (keyCode) { 5974e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa // Ignore tab key events - this causes them to bubble up to the global key handler where 6074e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa // they are appropriately handled. See BaseActivity.onKeyDown. 6174e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa case KeyEvent.KEYCODE_TAB: 6298f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay return mFeatures.isSystemKeyboardNavigationEnabled() 6398f8c5f502e049a6b85439d773949cdbaa0f78aeSteve McKay && super.onKeyDown(keyCode, event); 6474e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa // Prevent left/right arrow keystrokes from shifting focus away from the roots list. 6574e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa case KeyEvent.KEYCODE_DPAD_LEFT: 6674e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa case KeyEvent.KEYCODE_DPAD_RIGHT: 6774e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa return true; 6874e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa default: 6974e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa return super.onKeyDown(keyCode, event); 7074e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa } 7174e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa } 7274e5d4173a1cd060b16c663108a1eeabeae25540Ben Kwa} 73