840cb3d27c79815efaaca1ad3abbbe58b9231fd0
[pub/Android/ownCloud.git] / actionbarsherlock / src / com / actionbarsherlock / internal / app / ActionBarWrapper.java
1 package com.actionbarsherlock.internal.app;
2
3 import java.util.HashSet;
4 import java.util.Set;
5
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;
13
14 import com.actionbarsherlock.app.ActionBar;
15
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;
22
23
24 public ActionBarWrapper(Activity activity) {
25 mActivity = activity;
26 mActionBar = activity.getActionBar();
27 if (mActionBar != null) {
28 mActionBar.addOnMenuVisibilityListener(this);
29 }
30 }
31
32
33 @Override
34 public void setHomeButtonEnabled(boolean enabled) {
35 mActionBar.setHomeButtonEnabled(enabled);
36 }
37
38 @Override
39 public Context getThemedContext() {
40 return mActionBar.getThemedContext();
41 }
42
43 @Override
44 public void setCustomView(View view) {
45 mActionBar.setCustomView(view);
46 }
47
48 @Override
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);
57 }
58
59 @Override
60 public void setCustomView(int resId) {
61 mActionBar.setCustomView(resId);
62 }
63
64 @Override
65 public void setIcon(int resId) {
66 mActionBar.setIcon(resId);
67 }
68
69 @Override
70 public void setIcon(Drawable icon) {
71 mActionBar.setIcon(icon);
72 }
73
74 @Override
75 public void setLogo(int resId) {
76 mActionBar.setLogo(resId);
77 }
78
79 @Override
80 public void setLogo(Drawable logo) {
81 mActionBar.setLogo(logo);
82 }
83
84 @Override
85 public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {
86 mNavigationListener = callback;
87 mActionBar.setListNavigationCallbacks(adapter, (callback != null) ? this : null);
88 }
89
90 @Override
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);
95 }
96
97 @Override
98 public void setSelectedNavigationItem(int position) {
99 mActionBar.setSelectedNavigationItem(position);
100 }
101
102 @Override
103 public int getSelectedNavigationIndex() {
104 return mActionBar.getSelectedNavigationIndex();
105 }
106
107 @Override
108 public int getNavigationItemCount() {
109 return mActionBar.getNavigationItemCount();
110 }
111
112 @Override
113 public void setTitle(CharSequence title) {
114 mActionBar.setTitle(title);
115 }
116
117 @Override
118 public void setTitle(int resId) {
119 mActionBar.setTitle(resId);
120 }
121
122 @Override
123 public void setSubtitle(CharSequence subtitle) {
124 mActionBar.setSubtitle(subtitle);
125 }
126
127 @Override
128 public void setSubtitle(int resId) {
129 mActionBar.setSubtitle(resId);
130 }
131
132 @Override
133 public void setDisplayOptions(int options) {
134 mActionBar.setDisplayOptions(options);
135 }
136
137 @Override
138 public void setDisplayOptions(int options, int mask) {
139 mActionBar.setDisplayOptions(options, mask);
140 }
141
142 @Override
143 public void setDisplayUseLogoEnabled(boolean useLogo) {
144 mActionBar.setDisplayUseLogoEnabled(useLogo);
145 }
146
147 @Override
148 public void setDisplayShowHomeEnabled(boolean showHome) {
149 mActionBar.setDisplayShowHomeEnabled(showHome);
150 }
151
152 @Override
153 public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) {
154 mActionBar.setDisplayHomeAsUpEnabled(showHomeAsUp);
155 }
156
157 @Override
158 public void setDisplayShowTitleEnabled(boolean showTitle) {
159 mActionBar.setDisplayShowTitleEnabled(showTitle);
160 }
161
162 @Override
163 public void setDisplayShowCustomEnabled(boolean showCustom) {
164 mActionBar.setDisplayShowCustomEnabled(showCustom);
165 }
166
167 @Override
168 public void setBackgroundDrawable(Drawable d) {
169 mActionBar.setBackgroundDrawable(d);
170 }
171
172 @Override
173 public void setStackedBackgroundDrawable(Drawable d) {
174 mActionBar.setStackedBackgroundDrawable(d);
175 }
176
177 @Override
178 public void setSplitBackgroundDrawable(Drawable d) {
179 mActionBar.setSplitBackgroundDrawable(d);
180 }
181
182 @Override
183 public View getCustomView() {
184 return mActionBar.getCustomView();
185 }
186
187 @Override
188 public CharSequence getTitle() {
189 return mActionBar.getTitle();
190 }
191
192 @Override
193 public CharSequence getSubtitle() {
194 return mActionBar.getSubtitle();
195 }
196
197 @Override
198 public int getNavigationMode() {
199 return mActionBar.getNavigationMode();
200 }
201
202 @Override
203 public void setNavigationMode(int mode) {
204 mActionBar.setNavigationMode(mode);
205 }
206
207 @Override
208 public int getDisplayOptions() {
209 return mActionBar.getDisplayOptions();
210 }
211
212 public class TabWrapper extends ActionBar.Tab implements android.app.ActionBar.TabListener {
213 final android.app.ActionBar.Tab mNativeTab;
214 private Object mTag;
215 private TabListener mListener;
216
217 public TabWrapper(android.app.ActionBar.Tab nativeTab) {
218 mNativeTab = nativeTab;
219 mNativeTab.setTag(this);
220 }
221
222 @Override
223 public int getPosition() {
224 return mNativeTab.getPosition();
225 }
226
227 @Override
228 public Drawable getIcon() {
229 return mNativeTab.getIcon();
230 }
231
232 @Override
233 public CharSequence getText() {
234 return mNativeTab.getText();
235 }
236
237 @Override
238 public Tab setIcon(Drawable icon) {
239 mNativeTab.setIcon(icon);
240 return this;
241 }
242
243 @Override
244 public Tab setIcon(int resId) {
245 mNativeTab.setIcon(resId);
246 return this;
247 }
248
249 @Override
250 public Tab setText(CharSequence text) {
251 mNativeTab.setText(text);
252 return this;
253 }
254
255 @Override
256 public Tab setText(int resId) {
257 mNativeTab.setText(resId);
258 return this;
259 }
260
261 @Override
262 public Tab setCustomView(View view) {
263 mNativeTab.setCustomView(view);
264 return this;
265 }
266
267 @Override
268 public Tab setCustomView(int layoutResId) {
269 mNativeTab.setCustomView(layoutResId);
270 return this;
271 }
272
273 @Override
274 public View getCustomView() {
275 return mNativeTab.getCustomView();
276 }
277
278 @Override
279 public Tab setTag(Object obj) {
280 mTag = obj;
281 return this;
282 }
283
284 @Override
285 public Object getTag() {
286 return mTag;
287 }
288
289 @Override
290 public Tab setTabListener(TabListener listener) {
291 mNativeTab.setTabListener(listener != null ? this : null);
292 mListener = listener;
293 return this;
294 }
295
296 @Override
297 public void select() {
298 mNativeTab.select();
299 }
300
301 @Override
302 public Tab setContentDescription(int resId) {
303 mNativeTab.setContentDescription(resId);
304 return this;
305 }
306
307 @Override
308 public Tab setContentDescription(CharSequence contentDesc) {
309 mNativeTab.setContentDescription(contentDesc);
310 return this;
311 }
312
313 @Override
314 public CharSequence getContentDescription() {
315 return mNativeTab.getContentDescription();
316 }
317
318 @Override
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();
325 }
326
327 mListener.onTabReselected(this, trans);
328
329 if (trans != null && !trans.isEmpty()) {
330 trans.commit();
331 }
332 }
333 }
334
335 @Override
336 public void onTabSelected(android.app.ActionBar.Tab tab, android.app.FragmentTransaction ft) {
337 if (mListener != null) {
338
339 if (mFragmentTransaction == null && mActivity instanceof FragmentActivity) {
340 mFragmentTransaction = ((FragmentActivity)mActivity).getSupportFragmentManager().beginTransaction()
341 .disallowAddToBackStack();
342 }
343
344 mListener.onTabSelected(this, mFragmentTransaction);
345
346 if (mFragmentTransaction != null) {
347 if (!mFragmentTransaction.isEmpty()) {
348 mFragmentTransaction.commit();
349 }
350 mFragmentTransaction = null;
351 }
352 }
353 }
354
355 @Override
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;
363 }
364
365 mListener.onTabUnselected(this, trans);
366 }
367 }
368 }
369
370 @Override
371 public Tab newTab() {
372 return new TabWrapper(mActionBar.newTab());
373 }
374
375 @Override
376 public void addTab(Tab tab) {
377 mActionBar.addTab(((TabWrapper)tab).mNativeTab);
378 }
379
380 @Override
381 public void addTab(Tab tab, boolean setSelected) {
382 mActionBar.addTab(((TabWrapper)tab).mNativeTab, setSelected);
383 }
384
385 @Override
386 public void addTab(Tab tab, int position) {
387 mActionBar.addTab(((TabWrapper)tab).mNativeTab, position);
388 }
389
390 @Override
391 public void addTab(Tab tab, int position, boolean setSelected) {
392 mActionBar.addTab(((TabWrapper)tab).mNativeTab, position, setSelected);
393 }
394
395 @Override
396 public void removeTab(Tab tab) {
397 mActionBar.removeTab(((TabWrapper)tab).mNativeTab);
398 }
399
400 @Override
401 public void removeTabAt(int position) {
402 mActionBar.removeTabAt(position);
403 }
404
405 @Override
406 public void removeAllTabs() {
407 mActionBar.removeAllTabs();
408 }
409
410 @Override
411 public void selectTab(Tab tab) {
412 mActionBar.selectTab(((TabWrapper)tab).mNativeTab);
413 }
414
415 @Override
416 public Tab getSelectedTab() {
417 android.app.ActionBar.Tab selected = mActionBar.getSelectedTab();
418 return (selected != null) ? (Tab)selected.getTag() : null;
419 }
420
421 @Override
422 public Tab getTabAt(int index) {
423 android.app.ActionBar.Tab selected = mActionBar.getTabAt(index);
424 return (selected != null) ? (Tab)selected.getTag() : null;
425 }
426
427 @Override
428 public int getTabCount() {
429 return mActionBar.getTabCount();
430 }
431
432 @Override
433 public int getHeight() {
434 return mActionBar.getHeight();
435 }
436
437 @Override
438 public void show() {
439 mActionBar.show();
440 }
441
442 @Override
443 public void hide() {
444 mActionBar.hide();
445 }
446
447 @Override
448 public boolean isShowing() {
449 return mActionBar.isShowing();
450 }
451
452 @Override
453 public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
454 mMenuVisibilityListeners.add(listener);
455 }
456
457 @Override
458 public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
459 mMenuVisibilityListeners.remove(listener);
460 }
461
462 @Override
463 public void onMenuVisibilityChanged(boolean isVisible) {
464 for (OnMenuVisibilityListener listener : mMenuVisibilityListeners) {
465 listener.onMenuVisibilityChanged(isVisible);
466 }
467 }
468 }