PageRenderTime 40ms CodeModel.GetById 19ms app.highlight 16ms RepoModel.GetById 1ms app.codeStats 0ms

/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
  1package com.actionbarsherlock.internal.app;
  2
  3import java.util.HashSet;
  4import java.util.Set;
  5
  6import android.app.Activity;
  7import android.content.Context;
  8import android.graphics.drawable.Drawable;
  9import android.support.v4.app.FragmentTransaction;
 10import android.view.View;
 11import android.widget.SpinnerAdapter;
 12
 13import com.actionbarsherlock.app.ActionBar;
 14import com.actionbarsherlock.app.SherlockFragmentActivity;
 15
 16public 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            mNativeTab.setTabListener(this);
221        }
222
223        @Override
224        public int getPosition() {
225            return mNativeTab.getPosition();
226        }
227
228        @Override
229        public Drawable getIcon() {
230            return mNativeTab.getIcon();
231        }
232
233        @Override
234        public CharSequence getText() {
235            return mNativeTab.getText();
236        }
237
238        @Override
239        public Tab setIcon(Drawable icon) {
240            mNativeTab.setIcon(icon);
241            return this;
242        }
243
244        @Override
245        public Tab setIcon(int resId) {
246            mNativeTab.setIcon(resId);
247            return this;
248        }
249
250        @Override
251        public Tab setText(CharSequence text) {
252            mNativeTab.setText(text);
253            return this;
254        }
255
256        @Override
257        public Tab setText(int resId) {
258            mNativeTab.setText(resId);
259            return this;
260        }
261
262        @Override
263        public Tab setCustomView(View view) {
264            mNativeTab.setCustomView(view);
265            return this;
266        }
267
268        @Override
269        public Tab setCustomView(int layoutResId) {
270            mNativeTab.setCustomView(layoutResId);
271            return this;
272        }
273
274        @Override
275        public View getCustomView() {
276            return mNativeTab.getCustomView();
277        }
278
279        @Override
280        public Tab setTag(Object obj) {
281            mTag = obj;
282            return this;
283        }
284
285        @Override
286        public Object getTag() {
287            return mTag;
288        }
289
290        @Override
291        public Tab setTabListener(TabListener listener) {
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}