1 package com.actionbarsherlock.internal.app;
3 import java.util.HashSet;
6 import android.app.Activity;
7 import android.content.Context;
8 import android.graphics.drawable.Drawable;
9 import android.support.v4.app.FragmentTransaction;
10 import android.view.View;
11 import android.widget.SpinnerAdapter;
13 import com.actionbarsherlock.app.ActionBar;
14 import com.actionbarsherlock.app.SherlockFragmentActivity;
16 public class ActionBarWrapper extends ActionBar implements android.app.ActionBar.OnNavigationListener, android.app.ActionBar.OnMenuVisibilityListener {
17 private final Activity mActivity;
18 private final android.app.ActionBar mActionBar;
19 private ActionBar.OnNavigationListener mNavigationListener;
20 private Set<OnMenuVisibilityListener> mMenuVisibilityListeners = new HashSet<OnMenuVisibilityListener>(1);
21 private FragmentTransaction mFragmentTransaction;
24 public ActionBarWrapper(Activity activity) {
26 mActionBar = activity.getActionBar();
27 if (mActionBar != null) {
28 mActionBar.addOnMenuVisibilityListener(this);
34 public void setHomeButtonEnabled(boolean enabled) {
35 mActionBar.setHomeButtonEnabled(enabled);
39 public Context getThemedContext() {
40 return mActionBar.getThemedContext();
44 public void setCustomView(View view) {
45 mActionBar.setCustomView(view);
49 public void setCustomView(View view, LayoutParams layoutParams) {
50 android.app.ActionBar.LayoutParams lp = new android.app.ActionBar.LayoutParams(layoutParams);
51 lp.gravity = layoutParams.gravity;
52 lp.bottomMargin = layoutParams.bottomMargin;
53 lp.topMargin = layoutParams.topMargin;
54 lp.leftMargin = layoutParams.leftMargin;
55 lp.rightMargin = layoutParams.rightMargin;
56 mActionBar.setCustomView(view, lp);
60 public void setCustomView(int resId) {
61 mActionBar.setCustomView(resId);
65 public void setIcon(int resId) {
66 mActionBar.setIcon(resId);
70 public void setIcon(Drawable icon) {
71 mActionBar.setIcon(icon);
75 public void setLogo(int resId) {
76 mActionBar.setLogo(resId);
80 public void setLogo(Drawable logo) {
81 mActionBar.setLogo(logo);
85 public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {
86 mNavigationListener = callback;
87 mActionBar.setListNavigationCallbacks(adapter, (callback != null) ? this : null);
91 public boolean onNavigationItemSelected(int itemPosition, long itemId) {
92 //This should never be a NullPointerException since we only set
93 //ourselves as the listener when the callback is not null.
94 return mNavigationListener.onNavigationItemSelected(itemPosition, itemId);
98 public void setSelectedNavigationItem(int position) {
99 mActionBar.setSelectedNavigationItem(position);
103 public int getSelectedNavigationIndex() {
104 return mActionBar.getSelectedNavigationIndex();
108 public int getNavigationItemCount() {
109 return mActionBar.getNavigationItemCount();
113 public void setTitle(CharSequence title) {
114 mActionBar.setTitle(title);
118 public void setTitle(int resId) {
119 mActionBar.setTitle(resId);
123 public void setSubtitle(CharSequence subtitle) {
124 mActionBar.setSubtitle(subtitle);
128 public void setSubtitle(int resId) {
129 mActionBar.setSubtitle(resId);
133 public void setDisplayOptions(int options) {
134 mActionBar.setDisplayOptions(options);
138 public void setDisplayOptions(int options, int mask) {
139 mActionBar.setDisplayOptions(options, mask);
143 public void setDisplayUseLogoEnabled(boolean useLogo) {
144 mActionBar.setDisplayUseLogoEnabled(useLogo);
148 public void setDisplayShowHomeEnabled(boolean showHome) {
149 mActionBar.setDisplayShowHomeEnabled(showHome);
153 public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) {
154 mActionBar.setDisplayHomeAsUpEnabled(showHomeAsUp);
158 public void setDisplayShowTitleEnabled(boolean showTitle) {
159 mActionBar.setDisplayShowTitleEnabled(showTitle);
163 public void setDisplayShowCustomEnabled(boolean showCustom) {
164 mActionBar.setDisplayShowCustomEnabled(showCustom);
168 public void setBackgroundDrawable(Drawable d) {
169 mActionBar.setBackgroundDrawable(d);
173 public void setStackedBackgroundDrawable(Drawable d) {
174 mActionBar.setStackedBackgroundDrawable(d);
178 public void setSplitBackgroundDrawable(Drawable d) {
179 mActionBar.setSplitBackgroundDrawable(d);
183 public View getCustomView() {
184 return mActionBar.getCustomView();
188 public CharSequence getTitle() {
189 return mActionBar.getTitle();
193 public CharSequence getSubtitle() {
194 return mActionBar.getSubtitle();
198 public int getNavigationMode() {
199 return mActionBar.getNavigationMode();
203 public void setNavigationMode(int mode) {
204 mActionBar.setNavigationMode(mode);
208 public int getDisplayOptions() {
209 return mActionBar.getDisplayOptions();
212 public class TabWrapper extends ActionBar.Tab implements android.app.ActionBar.TabListener {
213 final android.app.ActionBar.Tab mNativeTab;
215 private TabListener mListener;
217 public TabWrapper(android.app.ActionBar.Tab nativeTab) {
218 mNativeTab = nativeTab;
219 mNativeTab.setTag(this);
223 public int getPosition() {
224 return mNativeTab.getPosition();
228 public Drawable getIcon() {
229 return mNativeTab.getIcon();
233 public CharSequence getText() {
234 return mNativeTab.getText();
238 public Tab setIcon(Drawable icon) {
239 mNativeTab.setIcon(icon);
244 public Tab setIcon(int resId) {
245 mNativeTab.setIcon(resId);
250 public Tab setText(CharSequence text) {
251 mNativeTab.setText(text);
256 public Tab setText(int resId) {
257 mNativeTab.setText(resId);
262 public Tab setCustomView(View view) {
263 mNativeTab.setCustomView(view);
268 public Tab setCustomView(int layoutResId) {
269 mNativeTab.setCustomView(layoutResId);
274 public View getCustomView() {
275 return mNativeTab.getCustomView();
279 public Tab setTag(Object obj) {
285 public Object getTag() {
290 public Tab setTabListener(TabListener listener) {
291 mNativeTab.setTabListener(listener != null ? this : null);
292 mListener = listener;
297 public void select() {
302 public Tab setContentDescription(int resId) {
303 mNativeTab.setContentDescription(resId);
308 public Tab setContentDescription(CharSequence contentDesc) {
309 mNativeTab.setContentDescription(contentDesc);
314 public CharSequence getContentDescription() {
315 return mNativeTab.getContentDescription();
319 public void onTabReselected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) {
320 if (mListener != null) {
321 FragmentTransaction trans = null;
322 if (mActivity instanceof SherlockFragmentActivity) {
323 trans = ((SherlockFragmentActivity)mActivity).getSupportFragmentManager().beginTransaction()
324 .disallowAddToBackStack();
327 mListener.onTabReselected(this, trans);
329 if (trans != null && !trans.isEmpty()) {
336 public void onTabSelected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) {
337 if (mListener != null) {
339 if (mFragmentTransaction == null && mActivity instanceof SherlockFragmentActivity) {
340 mFragmentTransaction = ((SherlockFragmentActivity)mActivity).getSupportFragmentManager().beginTransaction()
341 .disallowAddToBackStack();
344 mListener.onTabSelected(this, mFragmentTransaction);
346 if (mFragmentTransaction != null) {
347 if (!mFragmentTransaction.isEmpty()) {
348 mFragmentTransaction.commit();
350 mFragmentTransaction = null;
356 public void onTabUnselected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) {
357 if (mListener != null) {
358 FragmentTransaction trans = null;
359 if (mActivity instanceof SherlockFragmentActivity) {
360 trans = ((SherlockFragmentActivity)mActivity).getSupportFragmentManager().beginTransaction()
361 .disallowAddToBackStack();
362 mFragmentTransaction = trans;
365 mListener.onTabUnselected(this, trans);
371 public Tab newTab() {
372 return new TabWrapper(mActionBar.newTab());
376 public void addTab(Tab tab) {
377 mActionBar.addTab(((TabWrapper)tab).mNativeTab);
381 public void addTab(Tab tab, boolean setSelected) {
382 mActionBar.addTab(((TabWrapper)tab).mNativeTab, setSelected);
386 public void addTab(Tab tab, int position) {
387 mActionBar.addTab(((TabWrapper)tab).mNativeTab, position);
391 public void addTab(Tab tab, int position, boolean setSelected) {
392 mActionBar.addTab(((TabWrapper)tab).mNativeTab, position, setSelected);
396 public void removeTab(Tab tab) {
397 mActionBar.removeTab(((TabWrapper)tab).mNativeTab);
401 public void removeTabAt(int position) {
402 mActionBar.removeTabAt(position);
406 public void removeAllTabs() {
407 mActionBar.removeAllTabs();
411 public void selectTab(Tab tab) {
412 mActionBar.selectTab(((TabWrapper)tab).mNativeTab);
416 public Tab getSelectedTab() {
417 android.app.ActionBar.Tab selected = mActionBar.getSelectedTab();
418 return (selected != null) ? (Tab)selected.getTag() : null;
422 public Tab getTabAt(int index) {
423 android.app.ActionBar.Tab selected = mActionBar.getTabAt(index);
424 return (selected != null) ? (Tab)selected.getTag() : null;
428 public int getTabCount() {
429 return mActionBar.getTabCount();
433 public int getHeight() {
434 return mActionBar.getHeight();
448 public boolean isShowing() {
449 return mActionBar.isShowing();
453 public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
454 mMenuVisibilityListeners.add(listener);
458 public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
459 mMenuVisibilityListeners.remove(listener);
463 public void onMenuVisibilityChanged(boolean isVisible) {
464 for (OnMenuVisibilityListener listener : mMenuVisibilityListeners) {
465 listener.onMenuVisibilityChanged(isVisible);