Loading api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -2102,6 +2102,7 @@ package android.app { method public abstract void setCustomView(android.view.View); method public abstract void setCustomView(android.view.View, android.app.ActionBar.LayoutParams); method public abstract void setCustomView(int); method public abstract void setDisplayDisableHomeEnabled(boolean); method public abstract void setDisplayHomeAsUpEnabled(boolean); method public abstract void setDisplayOptions(int); method public abstract void setDisplayOptions(int, int); Loading @@ -2121,6 +2122,7 @@ package android.app { method public abstract void setTitle(java.lang.CharSequence); method public abstract void setTitle(int); method public abstract void show(); field public static final int DISPLAY_DISABLE_HOME = 32; // 0x20 field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4 field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10 field public static final int DISPLAY_SHOW_HOME = 2; // 0x2 core/java/android/app/ActionBar.java +27 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,18 @@ public abstract class ActionBar { */ public static final int DISPLAY_SHOW_CUSTOM = 0x10; /** * Disable the 'home' element. This may be combined with * {@link #DISPLAY_SHOW_HOME} to create a non-focusable/non-clickable * 'home' element. Useful for a level of your app's navigation hierarchy * where clicking 'home' doesn't do anything. * * @see #setDisplayOptions(int) * @see #setDisplayOptions(int, int) * @see #setDisplayDisableHomeEnabled(boolean) */ public static final int DISPLAY_DISABLE_HOME = 0x20; /** * Set the action bar into custom navigation mode, supplying a view * for custom navigation. Loading Loading @@ -392,6 +404,21 @@ public abstract class ActionBar { */ public abstract void setDisplayShowCustomEnabled(boolean showCustom); /** * Set whether the 'home' affordance on the action bar should be disabled. * If set, the 'home' element will not be focusable or clickable, useful if * the user is at the top level of the app's navigation hierarchy. * * <p>To set several display options at once, see the setDisplayOptions methods. * * @param disableHome true to disable the 'home' element. * * @see #setDisplayOptions(int) * @see #setDisplayOptions(int, int) * @see #DISPLAY_DISABLE_HOME */ public abstract void setDisplayDisableHomeEnabled(boolean disableHome); /** * Set the ActionBar's background. * Loading core/java/com/android/internal/app/ActionBarImpl.java +27 −1 Original line number Diff line number Diff line Loading @@ -42,8 +42,10 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.animation.DecelerateInterpolator; import android.widget.HorizontalScrollView; import android.widget.LinearLayout; import android.widget.SpinnerAdapter; Loading Loading @@ -71,6 +73,7 @@ public class ActionBarImpl extends ActionBar { private ActionBarContextView mUpperContextView; private LinearLayout mLowerContextView; private View mContentView; private ViewGroup mExternalTabView; private ArrayList<TabImpl> mTabs = new ArrayList<TabImpl>(); Loading Loading @@ -172,6 +175,18 @@ public class ActionBarImpl extends ActionBar { mActionView.setContextView(mUpperContextView); mContextDisplayMode = mLowerContextView == null ? CONTEXT_DISPLAY_NORMAL : CONTEXT_DISPLAY_SPLIT; if (!mActionView.hasEmbeddedTabs()) { HorizontalScrollView tabScroller = new HorizontalScrollView(mContext); ViewGroup tabContainer = mActionView.createTabContainer(); tabScroller.setHorizontalFadingEdgeEnabled(true); tabScroller.addView(tabContainer); tabScroller.setVisibility(getNavigationMode() == NAVIGATION_MODE_TABS ? View.VISIBLE : View.GONE); mActionView.setExternalTabLayout(tabContainer); mContainerView.setTabContainer(tabScroller); mExternalTabView = tabScroller; } } /** Loading Loading @@ -238,6 +253,11 @@ public class ActionBarImpl extends ActionBar { setDisplayOptions(showCustom ? DISPLAY_SHOW_CUSTOM : 0, DISPLAY_SHOW_CUSTOM); } @Override public void setDisplayDisableHomeEnabled(boolean disableHome) { setDisplayOptions(disableHome ? DISPLAY_DISABLE_HOME : 0, DISPLAY_DISABLE_HOME); } @Override public void setTitle(int resId) { setTitle(mContext.getString(resId)); Loading Loading @@ -533,7 +553,7 @@ public class ActionBarImpl extends ActionBar { final int count = mContainerView.getChildCount(); for (int i = 0; i < count; i++) { final View child = mContainerView.getChildAt(i); if (i == viewIndex) { if (i == viewIndex || child == mContainerView.getTabContainer()) { continue; } Loading Loading @@ -840,11 +860,17 @@ public class ActionBarImpl extends ActionBar { case NAVIGATION_MODE_TABS: mSavedTabPosition = getSelectedNavigationIndex(); selectTab(null); if (!mActionView.hasEmbeddedTabs()) { mExternalTabView.setVisibility(View.GONE); } break; } mActionView.setNavigationMode(mode); switch (mode) { case NAVIGATION_MODE_TABS: if (!mActionView.hasEmbeddedTabs()) { mExternalTabView.setVisibility(View.VISIBLE); } if (mSavedTabPosition != INVALID_POSITION) { setSelectedNavigationItem(mSavedTabPosition); mSavedTabPosition = INVALID_POSITION; Loading core/java/com/android/internal/widget/ActionBarContainer.java +40 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; /** Loading @@ -29,6 +30,7 @@ import android.widget.FrameLayout; */ public class ActionBarContainer extends FrameLayout { private boolean mIsTransitioning; private View mTabContainer; public ActionBarContainer(Context context) { this(context, null); Loading Loading @@ -65,6 +67,44 @@ public class ActionBarContainer extends FrameLayout { @Override public boolean onTouchEvent(MotionEvent ev) { super.onTouchEvent(ev); // An action bar always eats touch events. return true; } public void setTabContainer(View tabView) { if (mTabContainer != null) { removeView(mTabContainer); } mTabContainer = tabView; addView(tabView); } public View getTabContainer() { return mTabContainer; } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (mTabContainer != null && mTabContainer.getVisibility() != GONE) { final int mode = MeasureSpec.getMode(heightMeasureSpec); if (mode == MeasureSpec.AT_MOST) { final int measuredHeight = getMeasuredHeight(); final int maxHeight = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(getMeasuredWidth(), Math.min(measuredHeight + mTabContainer.getMeasuredHeight(), maxHeight)); } } } @Override public void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if (mTabContainer != null && mTabContainer.getVisibility() != GONE) { final int containerHeight = getMeasuredHeight(); mTabContainer.layout(l, containerHeight - mTabContainer.getMeasuredHeight(), r, containerHeight); } } } core/java/com/android/internal/widget/ActionBarView.java +33 −5 Original line number Diff line number Diff line Loading @@ -97,7 +97,7 @@ public class ActionBarView extends ViewGroup { private Spinner mSpinner; private LinearLayout mListNavLayout; private HorizontalScrollView mTabScrollView; private LinearLayout mTabLayout; private ViewGroup mTabLayout; private View mCustomNavView; private ProgressBar mProgressView; private ProgressBar mIndeterminateProgressView; Loading @@ -112,6 +112,7 @@ public class ActionBarView extends ViewGroup { private boolean mShowMenu; private boolean mUserTitle; private boolean mIncludeTabs; private MenuBuilder mOptionsMenu; private ActionMenuView mMenuView; Loading Loading @@ -201,6 +202,8 @@ public class ActionBarView extends ViewGroup { mProgressBarPadding = a.getDimensionPixelOffset(R.styleable.ActionBar_progressBarPadding, 0); mItemPadding = a.getDimensionPixelOffset(R.styleable.ActionBar_itemPadding, 0); mIncludeTabs = a.getBoolean(R.styleable.ActionBar_embeddedTabs, true); setDisplayOptions(a.getInt(R.styleable.ActionBar_displayOptions, DISPLAY_DEFAULT)); final int customNavId = a.getResourceId(R.styleable.ActionBar_customNavigationLayout, 0); Loading Loading @@ -242,6 +245,14 @@ public class ActionBarView extends ViewGroup { addView(mIndeterminateProgressView); } public boolean hasEmbeddedTabs() { return mIncludeTabs; } public void setExternalTabLayout(ViewGroup tabLayout) { mTabLayout = tabLayout; } @Override public ActionMode startActionModeForChild(View child, ActionMode.Callback callback) { // No starting an action mode for an action bar child! (Where would it go?) Loading Loading @@ -389,6 +400,12 @@ public class ActionBarView extends ViewGroup { public void setDisplayOptions(int options) { final int flagsChanged = options ^ mDisplayOptions; mDisplayOptions = options; if ((flagsChanged & ActionBar.DISPLAY_DISABLE_HOME) != 0) { final boolean disableHome = (options & ActionBar.DISPLAY_DISABLE_HOME) != 0; mHomeLayout.setEnabled(!disableHome); } if ((flagsChanged & DISPLAY_RELAYOUT_MASK) != 0) { final int vis = (options & ActionBar.DISPLAY_SHOW_HOME) != 0 ? VISIBLE : GONE; mHomeLayout.setVisibility(vis); Loading Loading @@ -477,7 +494,7 @@ public class ActionBarView extends ViewGroup { } break; case ActionBar.NAVIGATION_MODE_TABS: if (mTabLayout != null) { if (mTabScrollView != null) { removeView(mTabScrollView); } } Loading @@ -502,7 +519,9 @@ public class ActionBarView extends ViewGroup { break; case ActionBar.NAVIGATION_MODE_TABS: ensureTabsExist(); if (mTabScrollView != null) { addView(mTabScrollView); } break; } mNavigationMode = mode; Loading @@ -511,15 +530,24 @@ public class ActionBarView extends ViewGroup { } private void ensureTabsExist() { if (!mIncludeTabs) return; if (mTabScrollView == null) { mTabScrollView = new HorizontalScrollView(getContext()); mTabScrollView.setHorizontalFadingEdgeEnabled(true); mTabLayout = new LinearLayout(getContext(), null, com.android.internal.R.attr.actionBarTabBarStyle); mTabLayout = createTabContainer(); mTabScrollView.addView(mTabLayout); } } public ViewGroup createTabContainer() { ViewGroup result = new LinearLayout(getContext(), null, com.android.internal.R.attr.actionBarTabBarStyle); result.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, mContentHeight)); return result; } public void setDropdownAdapter(SpinnerAdapter adapter) { mSpinnerAdapter = adapter; if (mSpinner != null) { Loading Loading
api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -2102,6 +2102,7 @@ package android.app { method public abstract void setCustomView(android.view.View); method public abstract void setCustomView(android.view.View, android.app.ActionBar.LayoutParams); method public abstract void setCustomView(int); method public abstract void setDisplayDisableHomeEnabled(boolean); method public abstract void setDisplayHomeAsUpEnabled(boolean); method public abstract void setDisplayOptions(int); method public abstract void setDisplayOptions(int, int); Loading @@ -2121,6 +2122,7 @@ package android.app { method public abstract void setTitle(java.lang.CharSequence); method public abstract void setTitle(int); method public abstract void show(); field public static final int DISPLAY_DISABLE_HOME = 32; // 0x20 field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4 field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10 field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
core/java/android/app/ActionBar.java +27 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,18 @@ public abstract class ActionBar { */ public static final int DISPLAY_SHOW_CUSTOM = 0x10; /** * Disable the 'home' element. This may be combined with * {@link #DISPLAY_SHOW_HOME} to create a non-focusable/non-clickable * 'home' element. Useful for a level of your app's navigation hierarchy * where clicking 'home' doesn't do anything. * * @see #setDisplayOptions(int) * @see #setDisplayOptions(int, int) * @see #setDisplayDisableHomeEnabled(boolean) */ public static final int DISPLAY_DISABLE_HOME = 0x20; /** * Set the action bar into custom navigation mode, supplying a view * for custom navigation. Loading Loading @@ -392,6 +404,21 @@ public abstract class ActionBar { */ public abstract void setDisplayShowCustomEnabled(boolean showCustom); /** * Set whether the 'home' affordance on the action bar should be disabled. * If set, the 'home' element will not be focusable or clickable, useful if * the user is at the top level of the app's navigation hierarchy. * * <p>To set several display options at once, see the setDisplayOptions methods. * * @param disableHome true to disable the 'home' element. * * @see #setDisplayOptions(int) * @see #setDisplayOptions(int, int) * @see #DISPLAY_DISABLE_HOME */ public abstract void setDisplayDisableHomeEnabled(boolean disableHome); /** * Set the ActionBar's background. * Loading
core/java/com/android/internal/app/ActionBarImpl.java +27 −1 Original line number Diff line number Diff line Loading @@ -42,8 +42,10 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.animation.DecelerateInterpolator; import android.widget.HorizontalScrollView; import android.widget.LinearLayout; import android.widget.SpinnerAdapter; Loading Loading @@ -71,6 +73,7 @@ public class ActionBarImpl extends ActionBar { private ActionBarContextView mUpperContextView; private LinearLayout mLowerContextView; private View mContentView; private ViewGroup mExternalTabView; private ArrayList<TabImpl> mTabs = new ArrayList<TabImpl>(); Loading Loading @@ -172,6 +175,18 @@ public class ActionBarImpl extends ActionBar { mActionView.setContextView(mUpperContextView); mContextDisplayMode = mLowerContextView == null ? CONTEXT_DISPLAY_NORMAL : CONTEXT_DISPLAY_SPLIT; if (!mActionView.hasEmbeddedTabs()) { HorizontalScrollView tabScroller = new HorizontalScrollView(mContext); ViewGroup tabContainer = mActionView.createTabContainer(); tabScroller.setHorizontalFadingEdgeEnabled(true); tabScroller.addView(tabContainer); tabScroller.setVisibility(getNavigationMode() == NAVIGATION_MODE_TABS ? View.VISIBLE : View.GONE); mActionView.setExternalTabLayout(tabContainer); mContainerView.setTabContainer(tabScroller); mExternalTabView = tabScroller; } } /** Loading Loading @@ -238,6 +253,11 @@ public class ActionBarImpl extends ActionBar { setDisplayOptions(showCustom ? DISPLAY_SHOW_CUSTOM : 0, DISPLAY_SHOW_CUSTOM); } @Override public void setDisplayDisableHomeEnabled(boolean disableHome) { setDisplayOptions(disableHome ? DISPLAY_DISABLE_HOME : 0, DISPLAY_DISABLE_HOME); } @Override public void setTitle(int resId) { setTitle(mContext.getString(resId)); Loading Loading @@ -533,7 +553,7 @@ public class ActionBarImpl extends ActionBar { final int count = mContainerView.getChildCount(); for (int i = 0; i < count; i++) { final View child = mContainerView.getChildAt(i); if (i == viewIndex) { if (i == viewIndex || child == mContainerView.getTabContainer()) { continue; } Loading Loading @@ -840,11 +860,17 @@ public class ActionBarImpl extends ActionBar { case NAVIGATION_MODE_TABS: mSavedTabPosition = getSelectedNavigationIndex(); selectTab(null); if (!mActionView.hasEmbeddedTabs()) { mExternalTabView.setVisibility(View.GONE); } break; } mActionView.setNavigationMode(mode); switch (mode) { case NAVIGATION_MODE_TABS: if (!mActionView.hasEmbeddedTabs()) { mExternalTabView.setVisibility(View.VISIBLE); } if (mSavedTabPosition != INVALID_POSITION) { setSelectedNavigationItem(mSavedTabPosition); mSavedTabPosition = INVALID_POSITION; Loading
core/java/com/android/internal/widget/ActionBarContainer.java +40 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; /** Loading @@ -29,6 +30,7 @@ import android.widget.FrameLayout; */ public class ActionBarContainer extends FrameLayout { private boolean mIsTransitioning; private View mTabContainer; public ActionBarContainer(Context context) { this(context, null); Loading Loading @@ -65,6 +67,44 @@ public class ActionBarContainer extends FrameLayout { @Override public boolean onTouchEvent(MotionEvent ev) { super.onTouchEvent(ev); // An action bar always eats touch events. return true; } public void setTabContainer(View tabView) { if (mTabContainer != null) { removeView(mTabContainer); } mTabContainer = tabView; addView(tabView); } public View getTabContainer() { return mTabContainer; } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (mTabContainer != null && mTabContainer.getVisibility() != GONE) { final int mode = MeasureSpec.getMode(heightMeasureSpec); if (mode == MeasureSpec.AT_MOST) { final int measuredHeight = getMeasuredHeight(); final int maxHeight = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(getMeasuredWidth(), Math.min(measuredHeight + mTabContainer.getMeasuredHeight(), maxHeight)); } } } @Override public void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if (mTabContainer != null && mTabContainer.getVisibility() != GONE) { final int containerHeight = getMeasuredHeight(); mTabContainer.layout(l, containerHeight - mTabContainer.getMeasuredHeight(), r, containerHeight); } } }
core/java/com/android/internal/widget/ActionBarView.java +33 −5 Original line number Diff line number Diff line Loading @@ -97,7 +97,7 @@ public class ActionBarView extends ViewGroup { private Spinner mSpinner; private LinearLayout mListNavLayout; private HorizontalScrollView mTabScrollView; private LinearLayout mTabLayout; private ViewGroup mTabLayout; private View mCustomNavView; private ProgressBar mProgressView; private ProgressBar mIndeterminateProgressView; Loading @@ -112,6 +112,7 @@ public class ActionBarView extends ViewGroup { private boolean mShowMenu; private boolean mUserTitle; private boolean mIncludeTabs; private MenuBuilder mOptionsMenu; private ActionMenuView mMenuView; Loading Loading @@ -201,6 +202,8 @@ public class ActionBarView extends ViewGroup { mProgressBarPadding = a.getDimensionPixelOffset(R.styleable.ActionBar_progressBarPadding, 0); mItemPadding = a.getDimensionPixelOffset(R.styleable.ActionBar_itemPadding, 0); mIncludeTabs = a.getBoolean(R.styleable.ActionBar_embeddedTabs, true); setDisplayOptions(a.getInt(R.styleable.ActionBar_displayOptions, DISPLAY_DEFAULT)); final int customNavId = a.getResourceId(R.styleable.ActionBar_customNavigationLayout, 0); Loading Loading @@ -242,6 +245,14 @@ public class ActionBarView extends ViewGroup { addView(mIndeterminateProgressView); } public boolean hasEmbeddedTabs() { return mIncludeTabs; } public void setExternalTabLayout(ViewGroup tabLayout) { mTabLayout = tabLayout; } @Override public ActionMode startActionModeForChild(View child, ActionMode.Callback callback) { // No starting an action mode for an action bar child! (Where would it go?) Loading Loading @@ -389,6 +400,12 @@ public class ActionBarView extends ViewGroup { public void setDisplayOptions(int options) { final int flagsChanged = options ^ mDisplayOptions; mDisplayOptions = options; if ((flagsChanged & ActionBar.DISPLAY_DISABLE_HOME) != 0) { final boolean disableHome = (options & ActionBar.DISPLAY_DISABLE_HOME) != 0; mHomeLayout.setEnabled(!disableHome); } if ((flagsChanged & DISPLAY_RELAYOUT_MASK) != 0) { final int vis = (options & ActionBar.DISPLAY_SHOW_HOME) != 0 ? VISIBLE : GONE; mHomeLayout.setVisibility(vis); Loading Loading @@ -477,7 +494,7 @@ public class ActionBarView extends ViewGroup { } break; case ActionBar.NAVIGATION_MODE_TABS: if (mTabLayout != null) { if (mTabScrollView != null) { removeView(mTabScrollView); } } Loading @@ -502,7 +519,9 @@ public class ActionBarView extends ViewGroup { break; case ActionBar.NAVIGATION_MODE_TABS: ensureTabsExist(); if (mTabScrollView != null) { addView(mTabScrollView); } break; } mNavigationMode = mode; Loading @@ -511,15 +530,24 @@ public class ActionBarView extends ViewGroup { } private void ensureTabsExist() { if (!mIncludeTabs) return; if (mTabScrollView == null) { mTabScrollView = new HorizontalScrollView(getContext()); mTabScrollView.setHorizontalFadingEdgeEnabled(true); mTabLayout = new LinearLayout(getContext(), null, com.android.internal.R.attr.actionBarTabBarStyle); mTabLayout = createTabContainer(); mTabScrollView.addView(mTabLayout); } } public ViewGroup createTabContainer() { ViewGroup result = new LinearLayout(getContext(), null, com.android.internal.R.attr.actionBarTabBarStyle); result.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, mContentHeight)); return result; } public void setDropdownAdapter(SpinnerAdapter adapter) { mSpinnerAdapter = adapter; if (mSpinner != null) { Loading