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