ShadowTabHost.java revision 340f1791e74276a7280d61893e050849cbcc323e
1203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardpackage com.xtremelabs.robolectric.shadows;
2203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard
389e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vrankenimport android.app.Activity;
4203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardimport android.view.View;
5203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardimport android.widget.TabHost;
6203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardimport com.xtremelabs.robolectric.Robolectric;
7203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardimport com.xtremelabs.robolectric.internal.Implementation;
8203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richardimport com.xtremelabs.robolectric.internal.Implements;
9c4b51987f005f6c9df8df09abb23b83b7a4ca7daTyler Schultzimport com.xtremelabs.robolectric.internal.RealObject;
10b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz
111de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultzimport java.util.ArrayList;
121de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultzimport java.util.List;
13b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz
14b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
15203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard
16203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard@SuppressWarnings({"UnusedDeclaration"})
17203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard@Implements(TabHost.class)
18b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultzpublic class ShadowTabHost extends ShadowFrameLayout {
191de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    private List<TabHost.TabSpec> tabSpecs = new ArrayList<TabHost.TabSpec>();
201de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    private TabHost.OnTabChangeListener listener;
211de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    private TabHost.TabSpec currentTab;
22b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz
23d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz    @RealObject
24d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz    TabHost realObject;
25c4b51987f005f6c9df8df09abb23b83b7a4ca7daTyler Schultz
26b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz    @Implementation
27b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz    public android.widget.TabHost.TabSpec newTabSpec(java.lang.String tag) {
285f52066979dd3a3eb6a0df2cd360611c50fb31ecRyan Richard        TabHost.TabSpec realTabSpec = Robolectric.newInstanceOf(TabHost.TabSpec.class);
29b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz        shadowOf(realTabSpec).setTag(tag);
30b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz        return realTabSpec;
31b8898598e493d4df40038a501ff77f2aa437e9efMike Grafton & Tyler Schultz    }
321de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz
331de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    @Implementation
341de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    public void addTab(android.widget.TabHost.TabSpec tabSpec) {
351de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        tabSpecs.add(tabSpec);
36586702db339b8f95505c3a365bf70e6891375bc7Tyler Schultz        View indicatorAsView = shadowOf(tabSpec).getIndicatorAsView();
37586702db339b8f95505c3a365bf70e6891375bc7Tyler Schultz        if (indicatorAsView != null) {
38c4b51987f005f6c9df8df09abb23b83b7a4ca7daTyler Schultz            realObject.addView(indicatorAsView);
39586702db339b8f95505c3a365bf70e6891375bc7Tyler Schultz        }
401de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    }
411de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz
421de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    @Implementation
431de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    public void setCurrentTab(int index) {
441de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        currentTab = tabSpecs.get(index);
451de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        if (listener != null) {
461de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz            listener.onTabChanged(currentTab.getTag());
471de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        }
481de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    }
49203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard
50203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard    @Implementation
511de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    public void setCurrentTabByTag(String tag) {
521de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        for (TabHost.TabSpec tabSpec : tabSpecs) {
531de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz            if (tag.equals(tabSpec.getTag())) {
541de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz                currentTab = tabSpec;
551de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz            }
561de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        }
571de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        if (listener != null) {
581de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz            listener.onTabChanged(currentTab.getTag());
591de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        }
60203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard    }
61203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard
621de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    @Implementation
63340f1791e74276a7280d61893e050849cbcc323eChris Van Vranken    public String getCurrentTabTag() {
64340f1791e74276a7280d61893e050849cbcc323eChris Van Vranken    	return currentTab.getTag();
65340f1791e74276a7280d61893e050849cbcc323eChris Van Vranken    }
66340f1791e74276a7280d61893e050849cbcc323eChris Van Vranken
67340f1791e74276a7280d61893e050849cbcc323eChris Van Vranken    @Implementation
681de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    public void setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener listener) {
691de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz        this.listener = listener;
701de7f9e13720debd2b8591decba18f92415d6eb6Tyler Schultz    }
7189e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    @Implementation
7289e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    public View getCurrentView() {
7389e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    	ShadowTabSpec ts = Robolectric.shadowOf(currentTab);
7489e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    	View v = ts.getContentView(); //just get the view if it was built by a TabContentFactory
7589e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    	if (v==null) {
7689e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    		//otherwise findViewById
7789e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken	    	int viewId = ts.getContentViewId();
7889e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken	    	if (getContext() instanceof Activity) {
7989e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken	    		/** wasn't quite sure how to find the view here, simply using
8089e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken	    		findViewById() wasn't enough, I had to get it though the
8189e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken	    		Activity context.**/
8289e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken	    		v = ((Activity) getContext()).findViewById(viewId);
8389e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken	    	} else {
8489e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken	    	//	throw new RuntimeException("getContext is not an Activity, unable to findViewById without an Activity context");
8589e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken	    		return null;
8689e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken	    	}
8789e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    	}
8889e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    	return v;
8989e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken    }
9089e9d844e025ab9de8ec19eaf4cb4c6022012254Chris Van Vranken
91d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz    public TabHost.TabSpec getSpecByTag(String tag) {
92d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz        for (TabHost.TabSpec tabSpec : tabSpecs) {
93d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz            if (tag.equals(tabSpec.getTag())) {
94d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz                return tabSpec;
95d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz            }
96d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz        }
97d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz        return null;
98d7f42994405e043b092a0ccd200b107a84d38186Greg Choi & Tyler Schultz    }
99203e06c477634129655bee1db352d7e574513f9cJoe Moore, Lowell Kirsh & Ryan Richard}
100