1203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardpackage com.xtremelabs.robolectric.shadows;
2203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard
3c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkelimport android.R;
489e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vrankenimport android.app.Activity;
5203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardimport android.view.View;
6203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardimport android.widget.TabHost;
7071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vrankenimport android.widget.TabHost.TabSpec;
8c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkelimport android.widget.TabWidget;
9203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardimport com.xtremelabs.robolectric.Robolectric;
10203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardimport com.xtremelabs.robolectric.internal.Implementation;
11203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardimport com.xtremelabs.robolectric.internal.Implements;
12c4b51987f005f6c9df8df09abb23b83b7a4ca7daTyler Schultzimport com.xtremelabs.robolectric.internal.RealObject;
13b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz
141de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultzimport java.util.ArrayList;
151de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultzimport java.util.List;
16b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz
17b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
18203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard
19203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard@SuppressWarnings({"UnusedDeclaration"})
20203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard@Implements(TabHost.class)
21b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzpublic class ShadowTabHost extends ShadowFrameLayout {
221de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    private List<TabHost.TabSpec> tabSpecs = new ArrayList<TabHost.TabSpec>();
231de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    private TabHost.OnTabChangeListener listener;
24071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken    private int currentTab = -1;
25b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz
26d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz    @RealObject
27d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz    TabHost realObject;
28c4b51987f005f6c9df8df09abb23b83b7a4ca7daTyler Schultz
29b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz    @Implementation
30b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz    public android.widget.TabHost.TabSpec newTabSpec(java.lang.String tag) {
31071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken        TabSpec realTabSpec = Robolectric.newInstanceOf(TabHost.TabSpec.class);
32b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz        shadowOf(realTabSpec).setTag(tag);
33b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz        return realTabSpec;
34b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz    }
351de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz
361de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    @Implementation
371de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    public void addTab(android.widget.TabHost.TabSpec tabSpec) {
381de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        tabSpecs.add(tabSpec);
39586702db339b8f95505c3a365bf70e6891375bc7Tyler Schultz        View indicatorAsView = shadowOf(tabSpec).getIndicatorAsView();
40586702db339b8f95505c3a365bf70e6891375bc7Tyler Schultz        if (indicatorAsView != null) {
41c4b51987f005f6c9df8df09abb23b83b7a4ca7daTyler Schultz            realObject.addView(indicatorAsView);
42586702db339b8f95505c3a365bf70e6891375bc7Tyler Schultz        }
431de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    }
441de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz
451de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    @Implementation
461de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    public void setCurrentTab(int index) {
4758a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz        currentTab = index;
481de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        if (listener != null) {
49071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken            listener.onTabChanged(getCurrentTabTag());
501de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        }
511de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    }
52203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard
53203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard    @Implementation
541de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    public void setCurrentTabByTag(String tag) {
5558a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz        for (int x = 0; x < tabSpecs.size(); x++) {
5658a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz            TabSpec tabSpec = tabSpecs.get(x);
575a6a2d260647a53c321577959b6ea9d01e15e913Jan Berkel            if (tabSpec.getTag().equals(tag)) {
58071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken                currentTab = x;
591de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz            }
601de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        }
611de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        if (listener != null) {
62071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken            listener.onTabChanged(getCurrentTabTag());
631de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        }
64203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard    }
6558a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz
66071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken    @Implementation
67071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken    public int getCurrentTab() {
6858a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz        if (currentTab == -1 && tabSpecs.size() > 0) currentTab = 0;
69071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken        return currentTab;
70071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken    }
7158a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz
72071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken    public TabSpec getCurrentTabSpec() {
7358a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz        return tabSpecs.get(getCurrentTab());
74071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken    }
75203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard
761de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    @Implementation
77340f1791e74276a7280d61893e050849cbcc323eChris Van Vranken    public String getCurrentTabTag() {
7858a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz        int i = getCurrentTab();
79ac6dae52996af804256f5d6b1ab7a89b87ab2879Chris Van Vranken        if (i >= 0 && i < tabSpecs.size()) {
80ac6dae52996af804256f5d6b1ab7a89b87ab2879Chris Van Vranken            return tabSpecs.get(i).getTag();
81071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken        }
82071401caa7aba78946889c3fceccd73f37e8d259Chris Van Vranken        return null;
83340f1791e74276a7280d61893e050849cbcc323eChris Van Vranken    }
8458a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz
85340f1791e74276a7280d61893e050849cbcc323eChris Van Vranken    @Implementation
861de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    public void setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener listener) {
871de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        this.listener = listener;
881de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    }
8958a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz
9089e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    @Implementation
9189e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    public View getCurrentView() {
9258a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz        ShadowTabSpec ts = Robolectric.shadowOf(getCurrentTabSpec());
9358a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz        View v = ts.getContentView();
9458a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz        if (v == null) {
9558a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz            int viewId = ts.getContentViewId();
9658a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz            if (getContext() instanceof Activity) {
9758a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz                v = ((Activity) getContext()).findViewById(viewId);
9858a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz            } else {
9958a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz                return null;
10058a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz            }
10158a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz        }
10258a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz        return v;
10389e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    }
10458a4bd2e73e8806be1138a03d027f9b42158a453Joe Moore & Tyler Schultz
105c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkel    @Implementation
106c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkel    public TabWidget getTabWidget() {
107c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkel        if (context instanceof Activity) {
108c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkel            return (TabWidget) ((Activity)context).findViewById(R.id.tabs);
109c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkel        } else {
110c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkel            return null;
111c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkel        }
112c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkel    }
113c1b8caab0dd09b14cb1f7a9ad87adb37fb69b0b0Jan Berkel
114d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz    public TabHost.TabSpec getSpecByTag(String tag) {
115d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz        for (TabHost.TabSpec tabSpec : tabSpecs) {
116d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz            if (tag.equals(tabSpec.getTag())) {
117d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz                return tabSpec;
118d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz            }
119d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz        }
120d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz        return null;
121d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz    }
122203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard}
123