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
.FragmentActivity
;
10 import android
.support
.v4
.app
.FragmentTransaction
;
11 import android
.view
.View
;
12 import android
.widget
.SpinnerAdapter
;
14 import com
.actionbarsherlock
.app
.ActionBar
;
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 FragmentActivity
) {
323 trans
= ((FragmentActivity
)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 FragmentActivity
) {
340 mFragmentTransaction
= ((FragmentActivity
)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 FragmentActivity
) {
360 trans
= ((FragmentActivity
)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
);