ShadowTabHost.java revision d7f42994405e043b092a0ccd200b107a84d38186
1b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 2b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz 3586702db339b8f95505c3a365bf70e6891375bc7Tyler Schultzimport android.view.View; 4b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzimport android.widget.TabHost; 5b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzimport com.xtremelabs.robolectric.internal.Implementation; 6b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzimport com.xtremelabs.robolectric.internal.Implements; 7c4b51987f005f6c9df8df09abb23b83b7a4ca7daTyler Schultzimport com.xtremelabs.robolectric.internal.RealObject; 8b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz 9b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzimport java.lang.reflect.Constructor; 101de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultzimport java.util.ArrayList; 111de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultzimport java.util.List; 12b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz 13b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 14b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz 15b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz@Implements(TabHost.class) 16b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzpublic class ShadowTabHost extends ShadowFrameLayout { 171de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz private List<TabHost.TabSpec> tabSpecs = new ArrayList<TabHost.TabSpec>(); 181de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz private TabHost.OnTabChangeListener listener; 191de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz private TabHost.TabSpec currentTab; 20b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz 21d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz @RealObject 22d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz TabHost realObject; 23c4b51987f005f6c9df8df09abb23b83b7a4ca7daTyler Schultz 24b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz @Implementation 25b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz public android.widget.TabHost.TabSpec newTabSpec(java.lang.String tag) { 26b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz TabHost.TabSpec realTabSpec = null; 27b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz try { 28b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz Constructor<TabHost.TabSpec> c = TabHost.TabSpec.class.getDeclaredConstructor(); 29b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz c.setAccessible(true); 30b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz realTabSpec = c.newInstance(); 31b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz } catch (Exception e) { 32b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz throw new RuntimeException(e); 33b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz } 34b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz shadowOf(realTabSpec).setTag(tag); 35b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz return realTabSpec; 36b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz } 371de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz 381de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz @Implementation 391de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz public void addTab(android.widget.TabHost.TabSpec tabSpec) { 401de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz tabSpecs.add(tabSpec); 41586702db339b8f95505c3a365bf70e6891375bc7Tyler Schultz View indicatorAsView = shadowOf(tabSpec).getIndicatorAsView(); 42586702db339b8f95505c3a365bf70e6891375bc7Tyler Schultz if (indicatorAsView != null) { 43c4b51987f005f6c9df8df09abb23b83b7a4ca7daTyler Schultz realObject.addView(indicatorAsView); 44586702db339b8f95505c3a365bf70e6891375bc7Tyler Schultz } 451de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz } 461de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz 471de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz @Implementation 481de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz public void setCurrentTab(int index) { 491de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz currentTab = tabSpecs.get(index); 501de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz if (listener != null) { 511de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz listener.onTabChanged(currentTab.getTag()); 521de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz } 531de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz } 541de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz 551de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz @Implementation 561de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz public void setCurrentTabByTag(String tag) { 571de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz for (TabHost.TabSpec tabSpec : tabSpecs) { 581de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz if (tag.equals(tabSpec.getTag())) { 591de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz currentTab = tabSpec; 601de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz } 611de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz } 621de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz if (listener != null) { 631de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz listener.onTabChanged(currentTab.getTag()); 641de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz } 651de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz } 661de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz 671de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz @Implementation 681de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz public void setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener listener) { 691de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz this.listener = listener; 701de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz } 71d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz 72d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz public TabHost.TabSpec getSpecByTag(String tag) { 73d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz for (TabHost.TabSpec tabSpec : tabSpecs) { 74d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz if (tag.equals(tabSpec.getTag())) { 75d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz return tabSpec; 76d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz } 77d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz } 78d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz return null; 79d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz } 80b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz} 81