1 package com.xtremelabs.robolectric.shadows; 2 3 import android.R; 4 import android.app.Activity; 5 import android.view.View; 6 import android.widget.TabHost; 7 import android.widget.TabHost.TabSpec; 8 import android.widget.TabWidget; 9 import com.xtremelabs.robolectric.Robolectric; 10 import com.xtremelabs.robolectric.internal.Implementation; 11 import com.xtremelabs.robolectric.internal.Implements; 12 import com.xtremelabs.robolectric.internal.RealObject; 13 14 import java.util.ArrayList; 15 import java.util.List; 16 17 import static com.xtremelabs.robolectric.Robolectric.shadowOf; 18 19 @SuppressWarnings({"UnusedDeclaration"}) 20 @Implements(TabHost.class) 21 public class ShadowTabHost extends ShadowFrameLayout { 22 private List<TabHost.TabSpec> tabSpecs = new ArrayList<TabHost.TabSpec>(); 23 private TabHost.OnTabChangeListener listener; 24 private int currentTab = -1; 25 26 @RealObject 27 TabHost realObject; 28 29 @Implementation newTabSpec(java.lang.String tag)30 public android.widget.TabHost.TabSpec newTabSpec(java.lang.String tag) { 31 TabSpec realTabSpec = Robolectric.newInstanceOf(TabHost.TabSpec.class); 32 shadowOf(realTabSpec).setTag(tag); 33 return realTabSpec; 34 } 35 36 @Implementation addTab(android.widget.TabHost.TabSpec tabSpec)37 public void addTab(android.widget.TabHost.TabSpec tabSpec) { 38 tabSpecs.add(tabSpec); 39 View indicatorAsView = shadowOf(tabSpec).getIndicatorAsView(); 40 if (indicatorAsView != null) { 41 realObject.addView(indicatorAsView); 42 } 43 } 44 45 @Implementation setCurrentTab(int index)46 public void setCurrentTab(int index) { 47 currentTab = index; 48 if (listener != null) { 49 listener.onTabChanged(getCurrentTabTag()); 50 } 51 } 52 53 @Implementation setCurrentTabByTag(String tag)54 public void setCurrentTabByTag(String tag) { 55 for (int x = 0; x < tabSpecs.size(); x++) { 56 TabSpec tabSpec = tabSpecs.get(x); 57 if (tabSpec.getTag().equals(tag)) { 58 currentTab = x; 59 } 60 } 61 if (listener != null) { 62 listener.onTabChanged(getCurrentTabTag()); 63 } 64 } 65 66 @Implementation getCurrentTab()67 public int getCurrentTab() { 68 if (currentTab == -1 && tabSpecs.size() > 0) currentTab = 0; 69 return currentTab; 70 } 71 getCurrentTabSpec()72 public TabSpec getCurrentTabSpec() { 73 return tabSpecs.get(getCurrentTab()); 74 } 75 76 @Implementation getCurrentTabTag()77 public String getCurrentTabTag() { 78 int i = getCurrentTab(); 79 if (i >= 0 && i < tabSpecs.size()) { 80 return tabSpecs.get(i).getTag(); 81 } 82 return null; 83 } 84 85 @Implementation setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener listener)86 public void setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener listener) { 87 this.listener = listener; 88 } 89 90 @Implementation getCurrentView()91 public View getCurrentView() { 92 ShadowTabSpec ts = Robolectric.shadowOf(getCurrentTabSpec()); 93 View v = ts.getContentView(); 94 if (v == null) { 95 int viewId = ts.getContentViewId(); 96 if (getContext() instanceof Activity) { 97 v = ((Activity) getContext()).findViewById(viewId); 98 } else { 99 return null; 100 } 101 } 102 return v; 103 } 104 105 @Implementation getTabWidget()106 public TabWidget getTabWidget() { 107 if (context instanceof Activity) { 108 return (TabWidget) ((Activity)context).findViewById(R.id.tabs); 109 } else { 110 return null; 111 } 112 } 113 getSpecByTag(String tag)114 public TabHost.TabSpec getSpecByTag(String tag) { 115 for (TabHost.TabSpec tabSpec : tabSpecs) { 116 if (tag.equals(tabSpec.getTag())) { 117 return tabSpec; 118 } 119 } 120 return null; 121 } 122 } 123