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