197d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung/*
297d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung * Copyright (C) 2011 The Android Open Source Project
397d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung *
497d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung * Licensed under the Apache License, Version 2.0 (the "License");
597d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung * you may not use this file except in compliance with the License.
697d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung * You may obtain a copy of the License at
797d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung *
897d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung *      http://www.apache.org/licenses/LICENSE-2.0
997d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung *
1097d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung * Unless required by applicable law or agreed to in writing, software
1197d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung * distributed under the License is distributed on an "AS IS" BASIS,
1297d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1397d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung * See the License for the specific language governing permissions and
1497d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung * limitations under the License.
1597d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung */
1697d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung
1797d85d23b013347bead4e2f5fa430a79ce69431eWinson Chungpackage com.android.launcher2;
1897d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung
1997d85d23b013347bead4e2f5fa430a79ce69431eWinson Chungimport android.content.Context;
2097d85d23b013347bead4e2f5fa430a79ce69431eWinson Chungimport android.util.AttributeSet;
2197d85d23b013347bead4e2f5fa430a79ce69431eWinson Chungimport android.view.View;
2297d85d23b013347bead4e2f5fa430a79ce69431eWinson Chungimport android.widget.TabWidget;
2397d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung
2497d85d23b013347bead4e2f5fa430a79ce69431eWinson Chungpublic class FocusOnlyTabWidget extends TabWidget {
2597d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    public FocusOnlyTabWidget(Context context) {
2697d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        super(context);
2797d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    }
2897d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung
2997d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    public FocusOnlyTabWidget(Context context, AttributeSet attrs) {
3097d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        super(context, attrs);
3197d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    }
3297d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung
3397d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    public FocusOnlyTabWidget(Context context, AttributeSet attrs, int defStyle) {
3497d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        super(context, attrs, defStyle);
3597d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    }
3697d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung
3797d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    public View getSelectedTab() {
3897d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        final int count = getTabCount();
3997d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        for (int i = 0; i < count; ++i) {
4097d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            View v = getChildTabViewAt(i);
4197d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            if (v.isSelected()) {
4297d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung                return v;
4397d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            }
4497d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        }
4597d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        return null;
4697d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    }
4797d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung
4897d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    public int getChildTabIndex(View v) {
4997d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        final int tabCount = getTabCount();
5097d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        for (int i = 0; i < tabCount; ++i) {
5197d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            if (getChildTabViewAt(i) == v) {
5297d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung                return i;
5397d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            }
5497d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        }
5597d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        return -1;
5697d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    }
5797d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung
5897d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    public void setCurrentTabToFocusedTab() {
5997d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        View tab = null;
6097d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        int index = -1;
6197d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        final int count = getTabCount();
6297d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        for (int i = 0; i < count; ++i) {
6397d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            View v = getChildTabViewAt(i);
6497d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            if (v.hasFocus()) {
6597d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung                tab = v;
6697d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung                index = i;
6797d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung                break;
6897d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            }
6997d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        }
7097d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        if (index > -1) {
7197d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            super.setCurrentTab(index);
7297d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            super.onFocusChange(tab, true);
7397d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        }
7497d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    }
7597d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    public void superOnFocusChange(View v, boolean hasFocus) {
7697d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        super.onFocusChange(v, hasFocus);
7797d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    }
7897d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung
7997d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    @Override
8097d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    public void onFocusChange(android.view.View v, boolean hasFocus) {
8197d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        if (v == this && hasFocus && getTabCount() > 0) {
8297d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            getSelectedTab().requestFocus();
8397d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung            return;
8497d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung        }
8597d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung    }
8697d85d23b013347bead4e2f5fa430a79ce69431eWinson Chung}
87