Loading core/java/android/app/ActionBar.java +23 −8 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package android.app; import android.graphics.drawable.Drawable; import android.view.ActionBarView; import android.view.Menu; import android.view.MenuItem; import android.view.View; Loading Loading @@ -119,13 +118,29 @@ public abstract class ActionBar { public abstract void setNavigationMode(int mode); /** * Set display options. * Set display options. This changes all display option bits at once. To change * a limited subset of display options, see {@link #setDisplayOptions(int, int)}. * * @param options A combination of the bits defined by the DISPLAY_ constants * defined in ActionBar. */ public abstract void setDisplayOptions(int options); /** * Set selected display options. Only the options specified by mask will be changed. * To change all display option bits at once, see {@link #setDisplayOptions(int)}. * * <p>Example: setDisplayOptions(0, DISPLAY_HIDE_HOME) will disable the * {@link #DISPLAY_HIDE_HOME} option. * setDisplayOptions(DISPLAY_HIDE_HOME, DISPLAY_HIDE_HOME | DISPLAY_USE_LOGO) * will enable {@link #DISPLAY_HIDE_HOME} and disable {@link #DISPLAY_USE_LOGO}. * * @param options A combination of the bits defined by the DISPLAY_ constants * defined in ActionBar. * @param mask A bit mask declaring which display options should be changed. */ public abstract void setDisplayOptions(int options, int mask); /** * Set the ActionBar's background. * Loading core/java/android/view/ActionBarView.java +62 −28 Original line number Diff line number Diff line Loading @@ -58,7 +58,9 @@ public class ActionBarView extends ViewGroup { /** * Display options that require re-layout as opposed to a simple invalidate */ private static final int DISPLAY_RELAYOUT_MASK = ActionBar.DISPLAY_USE_LOGO; private static final int DISPLAY_RELAYOUT_MASK = ActionBar.DISPLAY_HIDE_HOME | ActionBar.DISPLAY_USE_LOGO; private final int mContentHeight; Loading Loading @@ -203,7 +205,6 @@ public class ActionBarView extends ViewGroup { if (view != null) { setNavigationMode(ActionBar.NAVIGATION_MODE_CUSTOM); } requestLayout(); } public void setDividerDrawable(Drawable d) { Loading Loading @@ -236,9 +237,17 @@ public class ActionBarView extends ViewGroup { } public void setDisplayOptions(int options) { final int flagsChanged = options & mDisplayOptions; final int flagsChanged = options ^ mDisplayOptions; mDisplayOptions = options; if ((flagsChanged & DISPLAY_RELAYOUT_MASK) != 0) { final int vis = (options & ActionBar.DISPLAY_HIDE_HOME) != 0 ? GONE : VISIBLE; if (mLogoView != null) { mLogoView.setVisibility(vis); } if (mIconView != null) { mIconView.setVisibility(vis); } requestLayout(); } else { invalidate(); Loading @@ -246,7 +255,30 @@ public class ActionBarView extends ViewGroup { } public void setNavigationMode(int mode) { if (mode != mNavigationMode) { final int oldMode = mNavigationMode; if (mode != oldMode) { switch (oldMode) { case ActionBar.NAVIGATION_MODE_NORMAL: if (mTitleView != null) { removeView(mTitleView); mTitleView = null; } break; case ActionBar.NAVIGATION_MODE_CUSTOM: if (mNavigationView != null) { removeView(mNavigationView); mNavigationView = null; } } switch (mode) { case ActionBar.NAVIGATION_MODE_NORMAL: initTitle(); break; case ActionBar.NAVIGATION_MODE_CUSTOM: addView(mNavigationView); break; } mNavigationMode = mode; requestLayout(); } Loading Loading @@ -347,6 +379,7 @@ public class ActionBarView extends ViewGroup { actionView.actionLabel = item.getTitle(); actionView.setAdjustViewBounds(true); actionView.setImageDrawable(item.getIcon()); actionView.setFocusable(true); actionView.setOnClickListener(mActionClickHandler); LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, Loading Loading @@ -401,6 +434,7 @@ public class ActionBarView extends ViewGroup { LayoutParams.MATCH_PARENT, LayoutParams.ITEM_TYPE_ICON)); mLogoView.setImageDrawable(mLogo); mLogoView.setClickable(true); mLogoView.setFocusable(true); mLogoView.setOnClickListener(mHomeClickListener); addView(mLogoView); } else if (mIcon != null) { Loading @@ -410,6 +444,7 @@ public class ActionBarView extends ViewGroup { LayoutParams.MATCH_PARENT, LayoutParams.ITEM_TYPE_ICON)); mIconView.setImageDrawable(mIcon); mIconView.setClickable(true); mIconView.setFocusable(true); mIconView.setOnClickListener(mHomeClickListener); addView(mIconView); } Loading @@ -418,16 +453,7 @@ public class ActionBarView extends ViewGroup { switch (mNavigationMode) { case ActionBar.NAVIGATION_MODE_NORMAL: if (mLogoView == null) { LayoutInflater inflater = LayoutInflater.from(getContext()); mTitleView = (TextView) inflater.inflate(R.layout.action_bar_title_item, null); mTitleView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, LayoutParams.ITEM_TYPE_TITLE)); if (mTitle != null) { mTitleView.setText(mTitle); } mTitleView.setClickable(true); mTitleView.setOnClickListener(mHomeClickListener); addView(mTitleView); initTitle(); } break; Loading @@ -441,14 +467,23 @@ public class ActionBarView extends ViewGroup { case ActionBar.NAVIGATION_MODE_CUSTOM: if (mNavigationView != null) { mNavigationView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, LayoutParams.ITEM_TYPE_CUSTOM_NAV)); addView(mNavigationView); } break; } } private void initTitle() { LayoutInflater inflater = LayoutInflater.from(getContext()); mTitleView = (TextView) inflater.inflate(R.layout.action_bar_title_item, null); mTitleView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, LayoutParams.ITEM_TYPE_TITLE)); if (mTitle != null) { mTitleView.setText(mTitle); } addView(mTitleView); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthMode = MeasureSpec.getMode(widthMeasureSpec); Loading @@ -466,13 +501,13 @@ public class ActionBarView extends ViewGroup { int contentWidth = MeasureSpec.getSize(widthMeasureSpec); int availableWidth = contentWidth - getPaddingLeft() - getPaddingRight(); int childSpecHeight = MeasureSpec.makeMeasureSpec(mContentHeight - getPaddingTop() - getPaddingBottom(), MeasureSpec.AT_MOST); final int height = mContentHeight - getPaddingTop() - getPaddingBottom(); final int childSpecHeight = MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST); if (mLogoView != null) { if (mLogoView != null && mLogoView.getVisibility() != GONE) { availableWidth = measureChildView(mLogoView, availableWidth, childSpecHeight, mSpacing); } if (mIconView != null) { if (mIconView != null && mIconView.getVisibility() != GONE) { availableWidth = measureChildView(mIconView, availableWidth, childSpecHeight, mSpacing); } Loading @@ -487,14 +522,14 @@ public class ActionBarView extends ViewGroup { switch (mNavigationMode) { case ActionBar.NAVIGATION_MODE_NORMAL: if (mTitleView != null) { availableWidth = measureChildView(mTitleView, availableWidth, childSpecHeight, mSpacing); measureChildView(mTitleView, availableWidth, childSpecHeight, mSpacing); } break; case ActionBar.NAVIGATION_MODE_CUSTOM: if (mNavigationView != null) { availableWidth = measureChildView(mNavigationView, availableWidth, childSpecHeight, mSpacing); mNavigationView.measure( MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); } break; } Loading @@ -503,8 +538,7 @@ public class ActionBarView extends ViewGroup { } private int measureChildView(View child, int availableWidth, int childSpecHeight, int spacing) { measureChild(child, MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST), child.measure(MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST), childSpecHeight); availableWidth -= child.getMeasuredWidth(); Loading @@ -519,10 +553,10 @@ public class ActionBarView extends ViewGroup { final int y = getPaddingTop(); final int contentHeight = b - t - getPaddingTop() - getPaddingBottom(); if (mLogoView != null) { if (mLogoView != null && mLogoView.getVisibility() != GONE) { x += positionChild(mLogoView, x, y, contentHeight) + mSpacing; } if (mIconView != null) { if (mIconView != null && mIconView.getVisibility() != GONE) { x += positionChild(mIconView, x, y, contentHeight) + mSpacing; } Loading core/java/com/android/internal/app/SplitActionBar.java +5 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,11 @@ public class SplitActionBar extends ActionBar { mActionView.setDisplayOptions(options); } public void setDisplayOptions(int options, int mask) { final int current = mActionView.getDisplayOptions(); mActionView.setDisplayOptions((options & mask) | (current & ~mask)); } public void setBackgroundDrawable(Drawable d) { mActionView.setBackgroundDrawable(d); } Loading Loading
core/java/android/app/ActionBar.java +23 −8 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package android.app; import android.graphics.drawable.Drawable; import android.view.ActionBarView; import android.view.Menu; import android.view.MenuItem; import android.view.View; Loading Loading @@ -119,13 +118,29 @@ public abstract class ActionBar { public abstract void setNavigationMode(int mode); /** * Set display options. * Set display options. This changes all display option bits at once. To change * a limited subset of display options, see {@link #setDisplayOptions(int, int)}. * * @param options A combination of the bits defined by the DISPLAY_ constants * defined in ActionBar. */ public abstract void setDisplayOptions(int options); /** * Set selected display options. Only the options specified by mask will be changed. * To change all display option bits at once, see {@link #setDisplayOptions(int)}. * * <p>Example: setDisplayOptions(0, DISPLAY_HIDE_HOME) will disable the * {@link #DISPLAY_HIDE_HOME} option. * setDisplayOptions(DISPLAY_HIDE_HOME, DISPLAY_HIDE_HOME | DISPLAY_USE_LOGO) * will enable {@link #DISPLAY_HIDE_HOME} and disable {@link #DISPLAY_USE_LOGO}. * * @param options A combination of the bits defined by the DISPLAY_ constants * defined in ActionBar. * @param mask A bit mask declaring which display options should be changed. */ public abstract void setDisplayOptions(int options, int mask); /** * Set the ActionBar's background. * Loading
core/java/android/view/ActionBarView.java +62 −28 Original line number Diff line number Diff line Loading @@ -58,7 +58,9 @@ public class ActionBarView extends ViewGroup { /** * Display options that require re-layout as opposed to a simple invalidate */ private static final int DISPLAY_RELAYOUT_MASK = ActionBar.DISPLAY_USE_LOGO; private static final int DISPLAY_RELAYOUT_MASK = ActionBar.DISPLAY_HIDE_HOME | ActionBar.DISPLAY_USE_LOGO; private final int mContentHeight; Loading Loading @@ -203,7 +205,6 @@ public class ActionBarView extends ViewGroup { if (view != null) { setNavigationMode(ActionBar.NAVIGATION_MODE_CUSTOM); } requestLayout(); } public void setDividerDrawable(Drawable d) { Loading Loading @@ -236,9 +237,17 @@ public class ActionBarView extends ViewGroup { } public void setDisplayOptions(int options) { final int flagsChanged = options & mDisplayOptions; final int flagsChanged = options ^ mDisplayOptions; mDisplayOptions = options; if ((flagsChanged & DISPLAY_RELAYOUT_MASK) != 0) { final int vis = (options & ActionBar.DISPLAY_HIDE_HOME) != 0 ? GONE : VISIBLE; if (mLogoView != null) { mLogoView.setVisibility(vis); } if (mIconView != null) { mIconView.setVisibility(vis); } requestLayout(); } else { invalidate(); Loading @@ -246,7 +255,30 @@ public class ActionBarView extends ViewGroup { } public void setNavigationMode(int mode) { if (mode != mNavigationMode) { final int oldMode = mNavigationMode; if (mode != oldMode) { switch (oldMode) { case ActionBar.NAVIGATION_MODE_NORMAL: if (mTitleView != null) { removeView(mTitleView); mTitleView = null; } break; case ActionBar.NAVIGATION_MODE_CUSTOM: if (mNavigationView != null) { removeView(mNavigationView); mNavigationView = null; } } switch (mode) { case ActionBar.NAVIGATION_MODE_NORMAL: initTitle(); break; case ActionBar.NAVIGATION_MODE_CUSTOM: addView(mNavigationView); break; } mNavigationMode = mode; requestLayout(); } Loading Loading @@ -347,6 +379,7 @@ public class ActionBarView extends ViewGroup { actionView.actionLabel = item.getTitle(); actionView.setAdjustViewBounds(true); actionView.setImageDrawable(item.getIcon()); actionView.setFocusable(true); actionView.setOnClickListener(mActionClickHandler); LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, Loading Loading @@ -401,6 +434,7 @@ public class ActionBarView extends ViewGroup { LayoutParams.MATCH_PARENT, LayoutParams.ITEM_TYPE_ICON)); mLogoView.setImageDrawable(mLogo); mLogoView.setClickable(true); mLogoView.setFocusable(true); mLogoView.setOnClickListener(mHomeClickListener); addView(mLogoView); } else if (mIcon != null) { Loading @@ -410,6 +444,7 @@ public class ActionBarView extends ViewGroup { LayoutParams.MATCH_PARENT, LayoutParams.ITEM_TYPE_ICON)); mIconView.setImageDrawable(mIcon); mIconView.setClickable(true); mIconView.setFocusable(true); mIconView.setOnClickListener(mHomeClickListener); addView(mIconView); } Loading @@ -418,16 +453,7 @@ public class ActionBarView extends ViewGroup { switch (mNavigationMode) { case ActionBar.NAVIGATION_MODE_NORMAL: if (mLogoView == null) { LayoutInflater inflater = LayoutInflater.from(getContext()); mTitleView = (TextView) inflater.inflate(R.layout.action_bar_title_item, null); mTitleView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, LayoutParams.ITEM_TYPE_TITLE)); if (mTitle != null) { mTitleView.setText(mTitle); } mTitleView.setClickable(true); mTitleView.setOnClickListener(mHomeClickListener); addView(mTitleView); initTitle(); } break; Loading @@ -441,14 +467,23 @@ public class ActionBarView extends ViewGroup { case ActionBar.NAVIGATION_MODE_CUSTOM: if (mNavigationView != null) { mNavigationView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, LayoutParams.ITEM_TYPE_CUSTOM_NAV)); addView(mNavigationView); } break; } } private void initTitle() { LayoutInflater inflater = LayoutInflater.from(getContext()); mTitleView = (TextView) inflater.inflate(R.layout.action_bar_title_item, null); mTitleView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, LayoutParams.ITEM_TYPE_TITLE)); if (mTitle != null) { mTitleView.setText(mTitle); } addView(mTitleView); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthMode = MeasureSpec.getMode(widthMeasureSpec); Loading @@ -466,13 +501,13 @@ public class ActionBarView extends ViewGroup { int contentWidth = MeasureSpec.getSize(widthMeasureSpec); int availableWidth = contentWidth - getPaddingLeft() - getPaddingRight(); int childSpecHeight = MeasureSpec.makeMeasureSpec(mContentHeight - getPaddingTop() - getPaddingBottom(), MeasureSpec.AT_MOST); final int height = mContentHeight - getPaddingTop() - getPaddingBottom(); final int childSpecHeight = MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST); if (mLogoView != null) { if (mLogoView != null && mLogoView.getVisibility() != GONE) { availableWidth = measureChildView(mLogoView, availableWidth, childSpecHeight, mSpacing); } if (mIconView != null) { if (mIconView != null && mIconView.getVisibility() != GONE) { availableWidth = measureChildView(mIconView, availableWidth, childSpecHeight, mSpacing); } Loading @@ -487,14 +522,14 @@ public class ActionBarView extends ViewGroup { switch (mNavigationMode) { case ActionBar.NAVIGATION_MODE_NORMAL: if (mTitleView != null) { availableWidth = measureChildView(mTitleView, availableWidth, childSpecHeight, mSpacing); measureChildView(mTitleView, availableWidth, childSpecHeight, mSpacing); } break; case ActionBar.NAVIGATION_MODE_CUSTOM: if (mNavigationView != null) { availableWidth = measureChildView(mNavigationView, availableWidth, childSpecHeight, mSpacing); mNavigationView.measure( MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); } break; } Loading @@ -503,8 +538,7 @@ public class ActionBarView extends ViewGroup { } private int measureChildView(View child, int availableWidth, int childSpecHeight, int spacing) { measureChild(child, MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST), child.measure(MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST), childSpecHeight); availableWidth -= child.getMeasuredWidth(); Loading @@ -519,10 +553,10 @@ public class ActionBarView extends ViewGroup { final int y = getPaddingTop(); final int contentHeight = b - t - getPaddingTop() - getPaddingBottom(); if (mLogoView != null) { if (mLogoView != null && mLogoView.getVisibility() != GONE) { x += positionChild(mLogoView, x, y, contentHeight) + mSpacing; } if (mIconView != null) { if (mIconView != null && mIconView.getVisibility() != GONE) { x += positionChild(mIconView, x, y, contentHeight) + mSpacing; } Loading
core/java/com/android/internal/app/SplitActionBar.java +5 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,11 @@ public class SplitActionBar extends ActionBar { mActionView.setDisplayOptions(options); } public void setDisplayOptions(int options, int mask) { final int current = mActionView.getDisplayOptions(); mActionView.setDisplayOptions((options & mask) | (current & ~mask)); } public void setBackgroundDrawable(Drawable d) { mActionView.setBackgroundDrawable(d); } Loading