/ABSherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java

https://bitbucket.org/ayastrebov/android-actionbarsherlock · Java · 468 lines · 378 code · 88 blank · 2 comment · 23 complexity · 1225b380ef62a21297073e4b89441c54 MD5 · raw file

  1. package com.actionbarsherlock.internal.app;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. import android.app.Activity;
  5. import android.content.Context;
  6. import android.graphics.drawable.Drawable;
  7. import android.support.v4.app.FragmentTransaction;
  8. import android.view.View;
  9. import android.widget.SpinnerAdapter;
  10. import com.actionbarsherlock.app.ActionBar;
  11. import com.actionbarsherlock.app.SherlockFragmentActivity;
  12. public class ActionBarWrapper extends ActionBar implements android.app.ActionBar.OnNavigationListener, android.app.ActionBar.OnMenuVisibilityListener {
  13. private final Activity mActivity;
  14. private final android.app.ActionBar mActionBar;
  15. private ActionBar.OnNavigationListener mNavigationListener;
  16. private Set<OnMenuVisibilityListener> mMenuVisibilityListeners = new HashSet<OnMenuVisibilityListener>(1);
  17. private FragmentTransaction mFragmentTransaction;
  18. public ActionBarWrapper(Activity activity) {
  19. mActivity = activity;
  20. mActionBar = activity.getActionBar();
  21. if (mActionBar != null) {
  22. mActionBar.addOnMenuVisibilityListener(this);
  23. }
  24. }
  25. @Override
  26. public void setHomeButtonEnabled(boolean enabled) {
  27. mActionBar.setHomeButtonEnabled(enabled);
  28. }
  29. @Override
  30. public Context getThemedContext() {
  31. return mActionBar.getThemedContext();
  32. }
  33. @Override
  34. public void setCustomView(View view) {
  35. mActionBar.setCustomView(view);
  36. }
  37. @Override
  38. public void setCustomView(View view, LayoutParams layoutParams) {
  39. android.app.ActionBar.LayoutParams lp = new android.app.ActionBar.LayoutParams(layoutParams);
  40. lp.gravity = layoutParams.gravity;
  41. lp.bottomMargin = layoutParams.bottomMargin;
  42. lp.topMargin = layoutParams.topMargin;
  43. lp.leftMargin = layoutParams.leftMargin;
  44. lp.rightMargin = layoutParams.rightMargin;
  45. mActionBar.setCustomView(view, lp);
  46. }
  47. @Override
  48. public void setCustomView(int resId) {
  49. mActionBar.setCustomView(resId);
  50. }
  51. @Override
  52. public void setIcon(int resId) {
  53. mActionBar.setIcon(resId);
  54. }
  55. @Override
  56. public void setIcon(Drawable icon) {
  57. mActionBar.setIcon(icon);
  58. }
  59. @Override
  60. public void setLogo(int resId) {
  61. mActionBar.setLogo(resId);
  62. }
  63. @Override
  64. public void setLogo(Drawable logo) {
  65. mActionBar.setLogo(logo);
  66. }
  67. @Override
  68. public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {
  69. mNavigationListener = callback;
  70. mActionBar.setListNavigationCallbacks(adapter, (callback != null) ? this : null);
  71. }
  72. @Override
  73. public boolean onNavigationItemSelected(int itemPosition, long itemId) {
  74. //This should never be a NullPointerException since we only set
  75. //ourselves as the listener when the callback is not null.
  76. return mNavigationListener.onNavigationItemSelected(itemPosition, itemId);
  77. }
  78. @Override
  79. public void setSelectedNavigationItem(int position) {
  80. mActionBar.setSelectedNavigationItem(position);
  81. }
  82. @Override
  83. public int getSelectedNavigationIndex() {
  84. return mActionBar.getSelectedNavigationIndex();
  85. }
  86. @Override
  87. public int getNavigationItemCount() {
  88. return mActionBar.getNavigationItemCount();
  89. }
  90. @Override
  91. public void setTitle(CharSequence title) {
  92. mActionBar.setTitle(title);
  93. }
  94. @Override
  95. public void setTitle(int resId) {
  96. mActionBar.setTitle(resId);
  97. }
  98. @Override
  99. public void setSubtitle(CharSequence subtitle) {
  100. mActionBar.setSubtitle(subtitle);
  101. }
  102. @Override
  103. public void setSubtitle(int resId) {
  104. mActionBar.setSubtitle(resId);
  105. }
  106. @Override
  107. public void setDisplayOptions(int options) {
  108. mActionBar.setDisplayOptions(options);
  109. }
  110. @Override
  111. public void setDisplayOptions(int options, int mask) {
  112. mActionBar.setDisplayOptions(options, mask);
  113. }
  114. @Override
  115. public void setDisplayUseLogoEnabled(boolean useLogo) {
  116. mActionBar.setDisplayUseLogoEnabled(useLogo);
  117. }
  118. @Override
  119. public void setDisplayShowHomeEnabled(boolean showHome) {
  120. mActionBar.setDisplayShowHomeEnabled(showHome);
  121. }
  122. @Override
  123. public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) {
  124. mActionBar.setDisplayHomeAsUpEnabled(showHomeAsUp);
  125. }
  126. @Override
  127. public void setDisplayShowTitleEnabled(boolean showTitle) {
  128. mActionBar.setDisplayShowTitleEnabled(showTitle);
  129. }
  130. @Override
  131. public void setDisplayShowCustomEnabled(boolean showCustom) {
  132. mActionBar.setDisplayShowCustomEnabled(showCustom);
  133. }
  134. @Override
  135. public void setBackgroundDrawable(Drawable d) {
  136. mActionBar.setBackgroundDrawable(d);
  137. }
  138. @Override
  139. public void setStackedBackgroundDrawable(Drawable d) {
  140. mActionBar.setStackedBackgroundDrawable(d);
  141. }
  142. @Override
  143. public void setSplitBackgroundDrawable(Drawable d) {
  144. mActionBar.setSplitBackgroundDrawable(d);
  145. }
  146. @Override
  147. public View getCustomView() {
  148. return mActionBar.getCustomView();
  149. }
  150. @Override
  151. public CharSequence getTitle() {
  152. return mActionBar.getTitle();
  153. }
  154. @Override
  155. public CharSequence getSubtitle() {
  156. return mActionBar.getSubtitle();
  157. }
  158. @Override
  159. public int getNavigationMode() {
  160. return mActionBar.getNavigationMode();
  161. }
  162. @Override
  163. public void setNavigationMode(int mode) {
  164. mActionBar.setNavigationMode(mode);
  165. }
  166. @Override
  167. public int getDisplayOptions() {
  168. return mActionBar.getDisplayOptions();
  169. }
  170. public class TabWrapper extends ActionBar.Tab implements android.app.ActionBar.TabListener {
  171. final android.app.ActionBar.Tab mNativeTab;
  172. private Object mTag;
  173. private TabListener mListener;
  174. public TabWrapper(android.app.ActionBar.Tab nativeTab) {
  175. mNativeTab = nativeTab;
  176. mNativeTab.setTag(this);
  177. mNativeTab.setTabListener(this);
  178. }
  179. @Override
  180. public int getPosition() {
  181. return mNativeTab.getPosition();
  182. }
  183. @Override
  184. public Drawable getIcon() {
  185. return mNativeTab.getIcon();
  186. }
  187. @Override
  188. public CharSequence getText() {
  189. return mNativeTab.getText();
  190. }
  191. @Override
  192. public Tab setIcon(Drawable icon) {
  193. mNativeTab.setIcon(icon);
  194. return this;
  195. }
  196. @Override
  197. public Tab setIcon(int resId) {
  198. mNativeTab.setIcon(resId);
  199. return this;
  200. }
  201. @Override
  202. public Tab setText(CharSequence text) {
  203. mNativeTab.setText(text);
  204. return this;
  205. }
  206. @Override
  207. public Tab setText(int resId) {
  208. mNativeTab.setText(resId);
  209. return this;
  210. }
  211. @Override
  212. public Tab setCustomView(View view) {
  213. mNativeTab.setCustomView(view);
  214. return this;
  215. }
  216. @Override
  217. public Tab setCustomView(int layoutResId) {
  218. mNativeTab.setCustomView(layoutResId);
  219. return this;
  220. }
  221. @Override
  222. public View getCustomView() {
  223. return mNativeTab.getCustomView();
  224. }
  225. @Override
  226. public Tab setTag(Object obj) {
  227. mTag = obj;
  228. return this;
  229. }
  230. @Override
  231. public Object getTag() {
  232. return mTag;
  233. }
  234. @Override
  235. public Tab setTabListener(TabListener listener) {
  236. mListener = listener;
  237. return this;
  238. }
  239. @Override
  240. public void select() {
  241. mNativeTab.select();
  242. }
  243. @Override
  244. public Tab setContentDescription(int resId) {
  245. mNativeTab.setContentDescription(resId);
  246. return this;
  247. }
  248. @Override
  249. public Tab setContentDescription(CharSequence contentDesc) {
  250. mNativeTab.setContentDescription(contentDesc);
  251. return this;
  252. }
  253. @Override
  254. public CharSequence getContentDescription() {
  255. return mNativeTab.getContentDescription();
  256. }
  257. @Override
  258. public void onTabReselected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) {
  259. if (mListener != null) {
  260. FragmentTransaction trans = null;
  261. if (mActivity instanceof SherlockFragmentActivity) {
  262. trans = ((SherlockFragmentActivity)mActivity).getSupportFragmentManager().beginTransaction()
  263. .disallowAddToBackStack();
  264. }
  265. mListener.onTabReselected(this, trans);
  266. if (trans != null && !trans.isEmpty()) {
  267. trans.commit();
  268. }
  269. }
  270. }
  271. @Override
  272. public void onTabSelected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) {
  273. if (mListener != null) {
  274. if (mFragmentTransaction == null && mActivity instanceof SherlockFragmentActivity) {
  275. mFragmentTransaction = ((SherlockFragmentActivity)mActivity).getSupportFragmentManager().beginTransaction()
  276. .disallowAddToBackStack();
  277. }
  278. mListener.onTabSelected(this, mFragmentTransaction);
  279. if (mFragmentTransaction != null) {
  280. if (!mFragmentTransaction.isEmpty()) {
  281. mFragmentTransaction.commit();
  282. }
  283. mFragmentTransaction = null;
  284. }
  285. }
  286. }
  287. @Override
  288. public void onTabUnselected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) {
  289. if (mListener != null) {
  290. FragmentTransaction trans = null;
  291. if (mActivity instanceof SherlockFragmentActivity) {
  292. trans = ((SherlockFragmentActivity)mActivity).getSupportFragmentManager().beginTransaction()
  293. .disallowAddToBackStack();
  294. mFragmentTransaction = trans;
  295. }
  296. mListener.onTabUnselected(this, trans);
  297. }
  298. }
  299. }
  300. @Override
  301. public Tab newTab() {
  302. return new TabWrapper(mActionBar.newTab());
  303. }
  304. @Override
  305. public void addTab(Tab tab) {
  306. mActionBar.addTab(((TabWrapper)tab).mNativeTab);
  307. }
  308. @Override
  309. public void addTab(Tab tab, boolean setSelected) {
  310. mActionBar.addTab(((TabWrapper)tab).mNativeTab, setSelected);
  311. }
  312. @Override
  313. public void addTab(Tab tab, int position) {
  314. mActionBar.addTab(((TabWrapper)tab).mNativeTab, position);
  315. }
  316. @Override
  317. public void addTab(Tab tab, int position, boolean setSelected) {
  318. mActionBar.addTab(((TabWrapper)tab).mNativeTab, position, setSelected);
  319. }
  320. @Override
  321. public void removeTab(Tab tab) {
  322. mActionBar.removeTab(((TabWrapper)tab).mNativeTab);
  323. }
  324. @Override
  325. public void removeTabAt(int position) {
  326. mActionBar.removeTabAt(position);
  327. }
  328. @Override
  329. public void removeAllTabs() {
  330. mActionBar.removeAllTabs();
  331. }
  332. @Override
  333. public void selectTab(Tab tab) {
  334. mActionBar.selectTab(((TabWrapper)tab).mNativeTab);
  335. }
  336. @Override
  337. public Tab getSelectedTab() {
  338. android.app.ActionBar.Tab selected = mActionBar.getSelectedTab();
  339. return (selected != null) ? (Tab)selected.getTag() : null;
  340. }
  341. @Override
  342. public Tab getTabAt(int index) {
  343. android.app.ActionBar.Tab selected = mActionBar.getTabAt(index);
  344. return (selected != null) ? (Tab)selected.getTag() : null;
  345. }
  346. @Override
  347. public int getTabCount() {
  348. return mActionBar.getTabCount();
  349. }
  350. @Override
  351. public int getHeight() {
  352. return mActionBar.getHeight();
  353. }
  354. @Override
  355. public void show() {
  356. mActionBar.show();
  357. }
  358. @Override
  359. public void hide() {
  360. mActionBar.hide();
  361. }
  362. @Override
  363. public boolean isShowing() {
  364. return mActionBar.isShowing();
  365. }
  366. @Override
  367. public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
  368. mMenuVisibilityListeners.add(listener);
  369. }
  370. @Override
  371. public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
  372. mMenuVisibilityListeners.remove(listener);
  373. }
  374. @Override
  375. public void onMenuVisibilityChanged(boolean isVisible) {
  376. for (OnMenuVisibilityListener listener : mMenuVisibilityListeners) {
  377. listener.onMenuVisibilityChanged(isVisible);
  378. }
  379. }
  380. }