Home | History | Annotate | Download | only in shadows
      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
     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
     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
     46     public void setCurrentTab(int index) {
     47         currentTab = index;
     48         if (listener != null) {
     49             listener.onTabChanged(getCurrentTabTag());
     50         }
     51     }
     52 
     53     @Implementation
     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
     67     public int getCurrentTab() {
     68         if (currentTab == -1 && tabSpecs.size() > 0) currentTab = 0;
     69         return currentTab;
     70     }
     71 
     72     public TabSpec getCurrentTabSpec() {
     73         return tabSpecs.get(getCurrentTab());
     74     }
     75 
     76     @Implementation
     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
     86     public void setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener listener) {
     87         this.listener = listener;
     88     }
     89 
     90     @Implementation
     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
    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 
    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