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
diff --git a/api/current.txt b/api/current.txt
index cc6cce9..d7ed27c 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2452,6 +2452,8 @@
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 46dc5ff..fe3b931d 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -402,13 +402,33 @@
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 90d19fd..ccca22e 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -346,7 +346,17 @@
}
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 fd9ee08..f95de62 100644
--- a/core/java/com/android/internal/widget/ActionBarContainer.java
+++ b/core/java/com/android/internal/widget/ActionBarContainer.java
@@ -76,6 +76,21 @@
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