blob: 1d7671f9023622d7e910c8019a91ff6435b42e57 [file] [log] [blame]
package com.xtremelabs.robolectric.shadows;
import android.R;
import android.app.Activity;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TabWidget;
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.internal.Implementation;
import com.xtremelabs.robolectric.internal.Implements;
import com.xtremelabs.robolectric.internal.RealObject;
import java.util.ArrayList;
import java.util.List;
import static com.xtremelabs.robolectric.Robolectric.shadowOf;
@SuppressWarnings({"UnusedDeclaration"})
@Implements(TabHost.class)
public class ShadowTabHost extends ShadowFrameLayout {
private List<TabHost.TabSpec> tabSpecs = new ArrayList<TabHost.TabSpec>();
private TabHost.OnTabChangeListener listener;
private int currentTab = -1;
@RealObject
TabHost realObject;
@Implementation
public android.widget.TabHost.TabSpec newTabSpec(java.lang.String tag) {
TabSpec realTabSpec = Robolectric.newInstanceOf(TabHost.TabSpec.class);
shadowOf(realTabSpec).setTag(tag);
return realTabSpec;
}
@Implementation
public void addTab(android.widget.TabHost.TabSpec tabSpec) {
tabSpecs.add(tabSpec);
View indicatorAsView = shadowOf(tabSpec).getIndicatorAsView();
if (indicatorAsView != null) {
realObject.addView(indicatorAsView);
}
}
@Implementation
public void setCurrentTab(int index) {
currentTab = index;
if (listener != null) {
listener.onTabChanged(getCurrentTabTag());
}
}
@Implementation
public void setCurrentTabByTag(String tag) {
for (int x = 0; x < tabSpecs.size(); x++) {
TabSpec tabSpec = tabSpecs.get(x);
if (tabSpec.getTag().equals(tag)) {
currentTab = x;
}
}
if (listener != null) {
listener.onTabChanged(getCurrentTabTag());
}
}
@Implementation
public int getCurrentTab() {
if (currentTab == -1 && tabSpecs.size() > 0) currentTab = 0;
return currentTab;
}
public TabSpec getCurrentTabSpec() {
return tabSpecs.get(getCurrentTab());
}
@Implementation
public String getCurrentTabTag() {
int i = getCurrentTab();
if (i >= 0 && i < tabSpecs.size()) {
return tabSpecs.get(i).getTag();
}
return null;
}
@Implementation
public void setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener listener) {
this.listener = listener;
}
@Implementation
public View getCurrentView() {
ShadowTabSpec ts = Robolectric.shadowOf(getCurrentTabSpec());
View v = ts.getContentView();
if (v == null) {
int viewId = ts.getContentViewId();
if (getContext() instanceof Activity) {
v = ((Activity) getContext()).findViewById(viewId);
} else {
return null;
}
}
return v;
}
@Implementation
public TabWidget getTabWidget() {
if (context instanceof Activity) {
return (TabWidget) ((Activity)context).findViewById(R.id.tabs);
} else {
return null;
}
}
public TabHost.TabSpec getSpecByTag(String tag) {
for (TabHost.TabSpec tabSpec : tabSpecs) {
if (tag.equals(tabSpec.getTag())) {
return tabSpec;
}
}
return null;
}
}