Reworking the ActionBar tab API
Change-Id: Ifbcdc61b4a24633cc1a329c73923b95b03e9ecf0
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index 1048352..cf029d2 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -122,17 +122,6 @@
}
@Override
- public void setStandardNavigationMode(int titleResId, int subtitleResId) {
- setStandardNavigationMode(mContext.getString(titleResId),
- mContext.getString(subtitleResId));
- }
-
- @Override
- public void setStandardNavigationMode(int titleResId) {
- setStandardNavigationMode(mContext.getString(titleResId));
- }
-
- @Override
public void setTitle(int resId) {
setTitle(mContext.getString(resId));
}
@@ -169,19 +158,6 @@
mActionView.setCallback(null);
}
- public void setStandardNavigationMode(CharSequence title) {
- cleanupTabs();
- setStandardNavigationMode(title, null);
- }
-
- public void setStandardNavigationMode(CharSequence title, CharSequence subtitle) {
- cleanupTabs();
- mActionView.setNavigationMode(NAVIGATION_MODE_STANDARD);
- mActionView.setTitle(title);
- mActionView.setSubtitle(subtitle);
- mActionView.setCallback(null);
- }
-
public void setSelectedNavigationItem(int position) {
switch (mActionView.getNavigationMode()) {
case NAVIGATION_MODE_TABS:
@@ -211,17 +187,7 @@
if (mSelectedTab != null) {
selectTab(null);
}
- if (!mTabs.isEmpty()) {
- if (mTabSwitchMode == TAB_SWITCH_SHOW_HIDE) {
- final FragmentTransaction trans = mActivity.openFragmentTransaction();
- final int tabCount = mTabs.size();
- for (int i = 0; i < tabCount; i++) {
- trans.remove(mTabs.get(i).getFragment());
- }
- trans.commit();
- }
- mTabs.clear();
- }
+ mTabs.clear();
}
public void setTitle(CharSequence title) {
@@ -295,31 +261,23 @@
private void configureTab(Tab tab, int position) {
final TabImpl tabi = (TabImpl) tab;
final boolean isFirstTab = mTabs.isEmpty();
- final FragmentTransaction trans = mActivity.openFragmentTransaction();
- final Fragment frag = tabi.getFragment();
+ final ActionBar.TabListener callback = tabi.getCallback();
+
+ if (callback == null) {
+ throw new IllegalStateException("Action Bar Tab must have a Callback");
+ }
tabi.setPosition(position);
mTabs.add(position, tabi);
- if (mTabSwitchMode == TAB_SWITCH_SHOW_HIDE) {
- if (!frag.isAdded()) {
- trans.add(mTabContainerViewId, frag);
- }
- }
-
if (isFirstTab) {
- if (mTabSwitchMode == TAB_SWITCH_SHOW_HIDE) {
- trans.show(frag);
- } else if (mTabSwitchMode == TAB_SWITCH_ADD_REMOVE) {
- trans.add(mTabContainerViewId, frag);
- }
+ final FragmentTransaction trans = mActivity.getFragmentManager().openTransaction();
mSelectedTab = tabi;
- } else {
- if (mTabSwitchMode == TAB_SWITCH_SHOW_HIDE) {
- trans.hide(frag);
+ callback.onTabSelected(tab, trans);
+ if (!trans.isEmpty()) {
+ trans.commit();
}
}
- trans.commit();
}
@Override
@@ -329,8 +287,8 @@
}
@Override
- public void insertTab(Tab tab, int position) {
- mActionView.insertTab(tab, position);
+ public void addTab(Tab tab, int position) {
+ mActionView.addTab(tab, position);
configureTab(tab, position);
}
@@ -367,35 +325,29 @@
}
@Override
- public void setTabNavigationMode(int containerViewId) {
- mTabContainerViewId = containerViewId;
- setTabNavigationMode();
- }
-
- @Override
public void selectTab(Tab tab) {
if (mSelectedTab == tab) {
return;
}
mActionView.setTabSelected(tab != null ? tab.getPosition() : Tab.INVALID_POSITION);
- final FragmentTransaction trans = mActivity.openFragmentTransaction();
+ final FragmentTransaction trans = mActivity.getFragmentManager().openTransaction();
if (mSelectedTab != null) {
- if (mTabSwitchMode == TAB_SWITCH_SHOW_HIDE) {
- trans.hide(mSelectedTab.getFragment());
- } else if (mTabSwitchMode == TAB_SWITCH_ADD_REMOVE) {
- trans.remove(mSelectedTab.getFragment());
- }
- }
- if (tab != null) {
- if (mTabSwitchMode == TAB_SWITCH_SHOW_HIDE) {
- trans.show(tab.getFragment());
- } else if (mTabSwitchMode == TAB_SWITCH_ADD_REMOVE) {
- trans.add(mTabContainerViewId, tab.getFragment());
- }
+ mSelectedTab.getCallback().onTabUnselected(mSelectedTab, trans);
}
mSelectedTab = (TabImpl) tab;
- trans.commit();
+ if (mSelectedTab != null) {
+ mSelectedTab.getCallback().onTabSelected(mSelectedTab, trans);
+ }
+
+ if (!trans.isEmpty()) {
+ trans.commit();
+ }
+ }
+
+ @Override
+ public Tab getSelectedTab() {
+ return mSelectedTab;
}
@Override
@@ -542,14 +494,40 @@
* @hide
*/
public class TabImpl extends ActionBar.Tab {
- private Fragment mFragment;
+ private ActionBar.TabListener mCallback;
+ private Object mTag;
private Drawable mIcon;
private CharSequence mText;
private int mPosition;
+ private View mCustomView;
@Override
- public Fragment getFragment() {
- return mFragment;
+ public Object getTag() {
+ return mTag;
+ }
+
+ @Override
+ public void setTag(Object tag) {
+ mTag = tag;
+ }
+
+ public ActionBar.TabListener getCallback() {
+ return mCallback;
+ }
+
+ @Override
+ public void setTabListener(ActionBar.TabListener callback) {
+ mCallback = callback;
+ }
+
+ @Override
+ public View getCustomView() {
+ return mCustomView;
+ }
+
+ @Override
+ public void setCustomView(View view) {
+ mCustomView = view;
}
@Override
@@ -572,11 +550,6 @@
}
@Override
- public void setFragment(Fragment fragment) {
- mFragment = fragment;
- }
-
- @Override
public void setIcon(Drawable icon) {
mIcon = icon;
}