/* * Copyright (C) 2011 Jake Wharton <jakewharton@gmail.com> * Copyright (C) 2010 Johan Nilsson <http://markupartist.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.actionbarsherlock.internal.app; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.drawable.Drawable; import android.support.v4.app.ActionBar; import android.support.v4.view.ActionMode; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.SpinnerAdapter; import com.actionbarsherlock.internal.view.menu.MenuBuilder; import com.actionbarsherlock.internal.view.menu.MenuPresenter; import com.actionbarsherlock.internal.widget.ActionBarContainer; import com.actionbarsherlock.internal.widget.ActionBarView; import mobisocial.musubi.R; public final class ActionBarImpl extends ActionBar { private Context mContext; /** Action bar container. */ private ActionBarContainer mContainerView; /** Action bar view. */ private ActionBarView mActionView; /** List of listeners to the menu visibility. */ private final List<OnMenuVisibilityListener> mMenuListeners = new ArrayList<OnMenuVisibilityListener>(); private Animation mFadeInAnimation; private Animation mFadeOutAnimation; public ActionBarImpl(Activity activity) { Window window = activity.getWindow(); View decor = window.getDecorView(); init(decor); } // ------------------------------------------------------------------------ // ACTION BAR SHERLOCK SUPPORT // ------------------------------------------------------------------------ private void init(View decor) { mContext = decor.getContext(); mActionView = (ActionBarView)decor.findViewById(R.id.abs__action_bar); mContainerView = (ActionBarContainer)decor.findViewById(R.id.abs__action_bar_container); if (mActionView == null || mContainerView == null) { throw new IllegalStateException(getClass().getSimpleName() + " can only be used with a screen_*.xml layout"); } mFadeInAnimation = AnimationUtils.loadAnimation(mContext, android.R.anim.fade_in); mFadeOutAnimation = AnimationUtils.loadAnimation(mContext, android.R.anim.fade_out); } public void setMenu(MenuBuilder menu, MenuPresenter.Callback cb) { mActionView.setMenu(menu, cb); } public void onMenuVisibilityChanged(boolean isVisible) { //Marshal to all listeners for (OnMenuVisibilityListener listener : mMenuListeners) { listener.onMenuVisibilityChanged(isVisible); } } // ------------------------------------------------------------------------ // ACTION MODE METHODS // ------------------------------------------------------------------------ @Override protected ActionMode startActionMode(ActionMode.Callback callback) { throw new RuntimeException("Not implemented."); } // ------------------------------------------------------------------------ // ACTION BAR METHODS // ------------------------------------------------------------------------ @Override public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) { if (!mMenuListeners.contains(listener)) { mMenuListeners.add(listener); } } @Override public void addTab(Tab tab) { mActionView.addTab(tab); } @Override public void addTab(Tab tab, boolean setSelected) { mActionView.addTab(tab, setSelected); } @Override public void addTab(Tab tab, int position) { mActionView.addTab(tab, position); } @Override public void addTab(ActionBar.Tab tab, int position, boolean setSelected) { mActionView.addTab(tab, position, setSelected); } @Override public View getCustomView() { return mActionView.getCustomView(); } @Override public int getDisplayOptions() { return mActionView.getDisplayOptions(); } @Override public int getHeight() { return mActionView.getHeight(); } @Override public int getNavigationItemCount() { switch (mActionView.getNavigationMode()) { default: case ActionBar.NAVIGATION_MODE_STANDARD: return 0; case ActionBar.NAVIGATION_MODE_LIST: SpinnerAdapter dropdownAdapter = mActionView.getDropdownAdapter(); return (dropdownAdapter != null) ? dropdownAdapter.getCount() : 0; case ActionBar.NAVIGATION_MODE_TABS: if (mActionView.getSelectedTab() == null) { return -1; } return mActionView.getTabCount(); } } @Override public int getNavigationMode() { return mActionView.getNavigationMode(); } @Override public int getSelectedNavigationIndex() { switch (mActionView.getNavigationMode()) { default: case ActionBar.NAVIGATION_MODE_STANDARD: return -1; case ActionBar.NAVIGATION_MODE_LIST: return mActionView.getDropdownSelectedPosition(); case ActionBar.NAVIGATION_MODE_TABS: return mActionView.getSelectedTab().getPosition(); } } @Override public ActionBar.Tab getSelectedTab() { return mActionView.getSelectedTab(); } @Override public CharSequence getSubtitle() { return mActionView.getSubtitle(); } @Override public ActionBar.Tab getTabAt(int index) { return mActionView.getTabAt(index); } @Override public int getTabCount() { return mActionView.getTabCount(); } @Override public CharSequence getTitle() { return mActionView.getTitle(); } @Override public void hide() { if (mContainerView.getVisibility() != View.GONE) { mContainerView.startAnimation(mFadeOutAnimation); mContainerView.setVisibility(View.GONE); } } @Override public boolean isShowing() { return mContainerView.getVisibility() == View.VISIBLE; } @Override public ActionBar.Tab newTab() { return mActionView.newTab(); } @Override public void removeAllTabs() { mActionView.removeAllTabs(); } @Override public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) { mMenuListeners.remove(listener); } @Override public void removeTab(ActionBar.Tab tab) { removeTabAt(tab.getPosition()); } @Override public void removeTabAt(int position) { mActionView.removeTabAt(position); } @Override public void setBackgroundDrawable(Drawable d) { mContainerView.setBackgroundDrawable(d); } @Override public void setCustomView(int resId) { View view = LayoutInflater.from(mContext).inflate(resId, mActionView, false); setCustomView(view); } @Override public void setCustomView(View view) { mActionView.setCustomNavigationView(view); } @Override public void setCustomView(View view, ActionBar.LayoutParams layoutParams) { view.setLayoutParams(layoutParams); mActionView.setCustomNavigationView(view); } @Override public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) { setDisplayOptions(showHomeAsUp ? ActionBar.DISPLAY_HOME_AS_UP : 0, ActionBar.DISPLAY_HOME_AS_UP); } @Override public void setDisplayOptions(int options) { mActionView.setDisplayOptions(options); } @Override public void setDisplayOptions(int newOptions, int mask) { mActionView.setDisplayOptions((mActionView.getDisplayOptions() & ~mask) | newOptions); } @Override public void setDisplayShowCustomEnabled(boolean showCustom) { setDisplayOptions(showCustom ? ActionBar.DISPLAY_SHOW_CUSTOM : 0, ActionBar.DISPLAY_SHOW_CUSTOM); } @Override public void setDisplayShowHomeEnabled(boolean showHome) { setDisplayOptions(showHome ? ActionBar.DISPLAY_SHOW_HOME : 0, ActionBar.DISPLAY_SHOW_HOME); } @Override public void setDisplayShowTitleEnabled(boolean showTitle) { setDisplayOptions(showTitle ? ActionBar.DISPLAY_SHOW_TITLE : 0, ActionBar.DISPLAY_SHOW_TITLE); } @Override public void setDisplayUseLogoEnabled(boolean useLogo) { setDisplayOptions(useLogo ? ActionBar.DISPLAY_USE_LOGO : 0, ActionBar.DISPLAY_USE_LOGO); } @Override public void setListNavigationCallbacks(SpinnerAdapter adapter, ActionBar.OnNavigationListener callback) { mActionView.setDropdownAdapter(adapter); mActionView.setCallback(callback); } @Override public void setNavigationMode(int mode) { mActionView.setNavigationMode(mode); } @Override public void setSelectedNavigationItem(int position) { switch (mActionView.getNavigationMode()) { default: case ActionBar.NAVIGATION_MODE_STANDARD: throw new IllegalStateException(); case ActionBar.NAVIGATION_MODE_TABS: mActionView.getTabAt(position).select(); break; case ActionBar.NAVIGATION_MODE_LIST: mActionView.setDropdownSelectedPosition(position); break; } } @Override public void selectTab(ActionBar.Tab tab) { mActionView.selectTab(tab); } @Override public void setSubtitle(CharSequence subtitle) { mActionView.setSubtitle(subtitle); } @Override public void setSubtitle(int resId) { mActionView.setSubtitle(resId); } @Override public void setTitle(CharSequence title) { mActionView.setTitle(title); } @Override public void setTitle(int resId) { mActionView.setTitle(resId); } @Override public void show() { if (mContainerView.getVisibility() != View.VISIBLE) { mContainerView.startAnimation(mFadeInAnimation); mContainerView.setVisibility(View.VISIBLE); } } }