19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.app; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TabHost; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TabWidget; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TextView; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 262f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * <p>For apps developing against {@link android.os.Build.VERSION_CODES#HONEYCOMB} 272f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * or later, tabs are typically presented in the UI using the new 282f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * {@link ActionBar#newTab() ActionBar.newTab()} and 292f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * related APIs for placing tabs within their action bar area.</p> 302f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * 312f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * <p>A replacement for TabActivity can also be implemented by directly using 322f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * TabHost. You will need to define a layout that correctly uses a TabHost 332f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * with a TabWidget as well as an area in which to display your tab content. 342f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * A typical example would be:</p> 352f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * 362f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * {@sample development/samples/Support4Demos/res/layout/fragment_tabs.xml complete} 372f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * 382f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * <p>The implementation needs to take over responsibility for switching 392f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * the shown content when the user switches between tabs. 402f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * 412f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * {@sample development/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.java 422f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * complete} 432f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * 442f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * <p>Also see the <a href="{@docRoot}resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.html"> 452f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * Fragment Tabs Pager</a> sample for an example of using the support library's ViewPager to 462f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn * allow the user to swipe the content to switch between tabs.</p> 47271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 48271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated New applications should use Fragments instead of this class; 49271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * to continue to run on older devices, you can use the v4 support library 50271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * which provides a version of the Fragment API that is compatible down to 51271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link android.os.Build.VERSION_CODES#DONUT}. 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 532f04883ff880966d63d1aa4a1c7b05e497cfcc58Dianne Hackborn@Deprecated 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TabActivity extends ActivityGroup { 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private TabHost mTabHost; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mDefaultTab = null; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mDefaultTabIndex = -1; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TabActivity() { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the default tab that is the first tab highlighted. 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tag the name of the default tab 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDefaultTab(String tag) { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultTab = tag; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultTabIndex = -1; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the default tab that is the first tab highlighted. 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index the index of the default tab 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDefaultTab(int index) { 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultTab = null; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultTabIndex = index; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestoreInstanceState(Bundle state) { 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onRestoreInstanceState(state); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ensureTabHost(); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String cur = state.getString("currentTab"); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cur != null) { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTabHost.setCurrentTabByTag(cur); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTabHost.getCurrentTab() < 0) { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDefaultTab != null) { 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTabHost.setCurrentTabByTag(mDefaultTab); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mDefaultTabIndex >= 0) { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTabHost.setCurrentTab(mDefaultTabIndex); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPostCreate(Bundle icicle) { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onPostCreate(icicle); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ensureTabHost(); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTabHost.getCurrentTab() == -1) { 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTabHost.setCurrentTab(0); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onSaveInstanceState(Bundle outState) { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onSaveInstanceState(outState); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String currentTabTag = mTabHost.getCurrentTabTag(); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currentTabTag != null) { 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outState.putString("currentTab", currentTabTag); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Updates the screen state (current list and other views) when the 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * content changes. 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *@see Activity#onContentChanged() 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onContentChanged() { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onContentChanged(); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTabHost = (TabHost) findViewById(com.android.internal.R.id.tabhost); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTabHost == null) { 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException( 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Your content must have a TabHost whose id attribute is " + 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "'android.R.id.tabhost'"); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTabHost.setup(getLocalActivityManager()); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void ensureTabHost() { 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTabHost == null) { 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.setContentView(com.android.internal.R.layout.tab_content); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onChildTitleChanged(Activity childActivity, CharSequence title) { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dorky implementation until we can have multiple activities running. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (getLocalActivityManager().getCurrentActivity() == childActivity) { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View tabView = mTabHost.getCurrentTabView(); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (tabView != null && tabView instanceof TextView) { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ((TextView) tabView).setText(title); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the {@link TabHost} the activity is using to host its tabs. 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the {@link TabHost} the activity is using to host its tabs. 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TabHost getTabHost() { 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ensureTabHost(); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTabHost; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the {@link TabWidget} the activity is using to draw the actual tabs. 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the {@link TabWidget} the activity is using to draw the actual tabs. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TabWidget getTabWidget() { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTabHost.getTabWidget(); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 175