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