create changelog entry
[debian/openrocket] / android-libraries / 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.FragmentTransaction;
10 import android.view.View;
11 import android.widget.SpinnerAdapter;
12
13 import com.actionbarsherlock.app.ActionBar;
14 import com.actionbarsherlock.app.SherlockFragmentActivity;
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 SherlockFragmentActivity) {
323                     trans = ((SherlockFragmentActivity)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 SherlockFragmentActivity) {
340                     mFragmentTransaction = ((SherlockFragmentActivity)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 SherlockFragmentActivity) {
360                     trans = ((SherlockFragmentActivity)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 }