From f88b915567a37c481c4c50a6cc57e1ec0e7cf50d Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Wed, 7 Sep 2011 14:54:32 -0700 Subject: [PATCH] Fix bug 5258435 - ActionBar.setBackgroundDrawable Fix this call to work properly and add methods for setting split/stacked bar backgrounds to match existing styleable elements. Change-Id: I8c6b1c598af1110f84a9098683d8e0226daf2e27 --- api/current.txt | 2 ++ core/java/android/app/ActionBar.java | 22 +++++++++++++++++++++- .../com/android/internal/app/ActionBarImpl.java | 12 +++++++++++- .../internal/widget/ActionBarContainer.java | 15 +++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/api/current.txt b/api/current.txt index cc6cce9be2cb..d7ed27c812a5 100644 --- a/api/current.txt +++ b/api/current.txt @@ -2452,6 +2452,8 @@ package android.app { method public abstract void setLogo(android.graphics.drawable.Drawable); method public abstract void setNavigationMode(int); method public abstract void setSelectedNavigationItem(int); + method public abstract void setSplitBackgroundDrawable(android.graphics.drawable.Drawable); + method public abstract void setStackedBackgroundDrawable(android.graphics.drawable.Drawable); method public abstract void setSubtitle(java.lang.CharSequence); method public abstract void setSubtitle(int); method public abstract void setTitle(java.lang.CharSequence); diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java index 46dc5ff582fb..fe3b931dbff5 100644 --- a/core/java/android/app/ActionBar.java +++ b/core/java/android/app/ActionBar.java @@ -402,13 +402,33 @@ public abstract class ActionBar { public abstract void setDisplayShowCustomEnabled(boolean showCustom); /** - * Set the ActionBar's background. + * Set the ActionBar's background. This will be used for the primary + * action bar. * * @param d Background drawable + * @see #setStackedBackgroundDrawable(Drawable) + * @see #setSplitBackgroundDrawable(Drawable) */ public abstract void setBackgroundDrawable(Drawable d); /** + * Set the ActionBar's stacked background. This will appear + * in the second row/stacked bar on some devices and configurations. + * + * @param d Background drawable for the stacked row + */ + public abstract void setStackedBackgroundDrawable(Drawable d); + + /** + * Set the ActionBar's split background. This will appear in + * the split action bar containing menu-provided action buttons + * on some devices and configurations. + * + * @param d Background drawable for the split bar + */ + public abstract void setSplitBackgroundDrawable(Drawable d); + + /** * @return The current custom view. */ public abstract View getCustomView(); diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java index 90d19fd45f98..ccca22ef2d13 100644 --- a/core/java/com/android/internal/app/ActionBarImpl.java +++ b/core/java/com/android/internal/app/ActionBarImpl.java @@ -346,7 +346,17 @@ public class ActionBarImpl extends ActionBar { } public void setBackgroundDrawable(Drawable d) { - mContainerView.setBackgroundDrawable(d); + mContainerView.setPrimaryBackground(d); + } + + public void setStackedBackgroundDrawable(Drawable d) { + mContainerView.setStackedBackground(d); + } + + public void setSplitBackgroundDrawable(Drawable d) { + if (mSplitView != null) { + mSplitView.setSplitBackground(d); + } } public View getCustomView() { diff --git a/core/java/com/android/internal/widget/ActionBarContainer.java b/core/java/com/android/internal/widget/ActionBarContainer.java index fd9ee086488f..f95de62fb920 100644 --- a/core/java/com/android/internal/widget/ActionBarContainer.java +++ b/core/java/com/android/internal/widget/ActionBarContainer.java @@ -76,6 +76,21 @@ public class ActionBarContainer extends FrameLayout { mActionBarView = (ActionBarView) findViewById(com.android.internal.R.id.action_bar); } + public void setPrimaryBackground(Drawable bg) { + mBackground = bg; + invalidate(); + } + + public void setStackedBackground(Drawable bg) { + mStackedBackground = bg; + invalidate(); + } + + public void setSplitBackground(Drawable bg) { + mSplitBackground = bg; + invalidate(); + } + /** * Set the action bar into a "transitioning" state. While transitioning * the bar will block focus and touch from all of its descendants. This -- 2.11.0