LayoutLib: fix the background of title/action bars.

The bars are supposed to sit on top of the window so
that if they are transparent (which is the default case
for the action bar), the window background shows through.

Fix this using a layout to represent the window content
(all but the system bar) in which the title/action bars
and the layout content sits. This layout receives the
windowBackground drawable.

Change-Id: I8072c5ff52f585fa32acb589d8526e1c13cbcd94
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
index 70c507c..771d89a 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
@@ -65,7 +65,6 @@
         super(context);
         setOrientation(LinearLayout.HORIZONTAL);
         setGravity(Gravity.CENTER_VERTICAL);
-        setBackgroundColor(0xFF000000);
 
         LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/PhoneSystemBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/PhoneSystemBar.java
index e3022b4..04d06e4 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/PhoneSystemBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/PhoneSystemBar.java
@@ -33,6 +33,7 @@
         super(context, density, "/bars/tablet_system_bar.xml");
 
         setGravity(mGravity | Gravity.RIGHT);
+        setBackgroundColor(0xFF000000);
 
         // Cannot access the inside items through id because no R.id values have been
         // created for them.
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/TabletSystemBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/TabletSystemBar.java
index db1efdb..5ca68fa 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/TabletSystemBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/TabletSystemBar.java
@@ -31,6 +31,8 @@
     public TabletSystemBar(Context context, Density density) throws XmlPullParserException {
         super(context, density, "/bars/tablet_system_bar.xml");
 
+        setBackgroundColor(0xFF000000);
+
         // Cannot access the inside items through id because no R.id values have been
         // created for them.
         // We do know the order though.
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
index 3e5127e..136b205 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
@@ -204,8 +204,11 @@
             SessionParams params = getParams();
             BridgeContext context = getContext();
 
+            // the view group that receives the window background.
+            ViewGroup backgroundView = null;
+
             if (mWindowIsFloating || params.isForceNoDecor()) {
-                mViewRoot = mContentRoot = new FrameLayout(context);
+                backgroundView = mViewRoot = mContentRoot = new FrameLayout(context);
             } else {
                 /*
                  * we're creating the following layout
@@ -213,10 +216,13 @@
                    +-------------------------------------------------+
                    | System bar (only in phone UI)                   |
                    +-------------------------------------------------+
-                   | Title/Action bar (optional)                     |
-                   +-------------------------------------------------+
-                   | Content, vertical extending                     |
-                   |                                                 |
+                   | (Layout with background drawable)               |
+                   | +---------------------------------------------+ |
+                   | | Title/Action bar (optional)                 | |
+                   | +---------------------------------------------+ |
+                   | | Content, vertical extending                 | |
+                   | |                                             | |
+                   | +---------------------------------------------+ |
                    +-------------------------------------------------+
                    | System bar (only in tablet UI)                  |
                    +-------------------------------------------------+
@@ -241,6 +247,16 @@
                     }
                 }
 
+                LinearLayout backgroundLayout = new LinearLayout(context);
+                backgroundView = backgroundLayout;
+                backgroundLayout.setOrientation(LinearLayout.VERTICAL);
+                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
+                        LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
+                layoutParams.weight = 1;
+                backgroundLayout.setLayoutParams(layoutParams);
+                topLayout.addView(backgroundLayout);
+
+
                 // if the theme says no title/action bar, then the size will be 0
                 if (mActionBarSize > 0) {
                     try {
@@ -250,7 +266,7 @@
                         actionBar.setLayoutParams(
                                 new LinearLayout.LayoutParams(
                                         LayoutParams.MATCH_PARENT, mActionBarSize));
-                        topLayout.addView(actionBar);
+                        backgroundLayout.addView(actionBar);
                     } catch (XmlPullParserException e) {
 
                     }
@@ -261,7 +277,7 @@
                         titleBar.setLayoutParams(
                                 new LinearLayout.LayoutParams(
                                         LayoutParams.MATCH_PARENT, mTitleBarSize));
-                        topLayout.addView(titleBar);
+                        backgroundLayout.addView(titleBar);
                     } catch (XmlPullParserException e) {
 
                     }
@@ -270,11 +286,11 @@
 
                 // content frame
                 mContentRoot = new FrameLayout(context);
-                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
+                layoutParams = new LinearLayout.LayoutParams(
                         LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
                 layoutParams.weight = 1;
                 mContentRoot.setLayoutParams(layoutParams);
-                topLayout.addView(mContentRoot);
+                backgroundLayout.addView(mContentRoot);
 
                 if (mSystemBarSize > 0) {
                     // system bar
@@ -289,7 +305,6 @@
 
                     }
                 }
-
             }
 
 
@@ -314,9 +329,9 @@
             postInflateProcess(view, params.getProjectCallback());
 
             // get the background drawable
-            if (mWindowBackground != null) {
+            if (mWindowBackground != null && backgroundView != null) {
                 Drawable d = ResourceHelper.getDrawable(mWindowBackground, context);
-                mContentRoot.setBackgroundDrawable(d);
+                backgroundView.setBackgroundDrawable(d);
             }
 
             return SUCCESS.createResult();