From 4eb298a941c3f465944b63f1a06518e911681c89 Mon Sep 17 00:00:00 2001 From: Deepanshu Gupta Date: Fri, 21 Aug 2015 17:23:50 -0700 Subject: LayoutLib: Fix true transparency in status bar. Change-Id: Ieedf23cde9ab3e36c77501d30cc7e808e66a4782 --- .../src/com/android/layoutlib/bridge/bars/CustomBar.java | 16 ++++++++++------ .../com/android/layoutlib/bridge/bars/NavigationBar.java | 4 ++-- .../src/com/android/layoutlib/bridge/bars/StatusBar.java | 5 +++-- .../android/layoutlib/bridge/impl/RenderSessionImpl.java | 3 +-- 4 files changed, 16 insertions(+), 12 deletions(-) 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 b76ec17..567002e 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 @@ -33,6 +33,7 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.annotation.NonNull; +import android.annotation.Nullable; import android.content.res.ColorStateList; import android.graphics.Bitmap; import android.graphics.Bitmap_Delegate; @@ -227,16 +228,18 @@ abstract class CustomBar extends LinearLayout { * Find the background color for this bar from the theme attributes. Only relevant to StatusBar * and NavigationBar. *

- * Returns 0 if not found. + * Returns null if not found. * * @param colorAttrName the attribute name for the background color * @param translucentAttrName the attribute name for the translucency property of the bar. * * @throws NumberFormatException if color resolved to an invalid string. */ - protected int getBarColor(@NonNull String colorAttrName, @NonNull String translucentAttrName) { + @Nullable + protected Integer getBarColor(@NonNull String colorAttrName, + @NonNull String translucentAttrName) { if (!Config.isGreaterOrEqual(mSimulatedPlatformVersion, LOLLIPOP)) { - return 0; + return null; } RenderResources renderResources = getContext().getRenderResources(); // First check if the bar is translucent. @@ -251,10 +254,11 @@ abstract class CustomBar extends LinearLayout { if (transparent) { return getColor(renderResources, colorAttrName); } - return 0; + return null; } - private static int getColor(RenderResources renderResources, String attr) { + @Nullable + private static Integer getColor(RenderResources renderResources, String attr) { // From ?attr/foo to @color/bar. This is most likely an ItemResourceValue. ResourceValue resource = renderResources.findItemInTheme(attr, true); // Form @color/bar to the #AARRGGBB @@ -275,7 +279,7 @@ abstract class CustomBar extends LinearLayout { } } } - return 0; + return null; } private ResourceValue getResourceValue(String reference) { diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java index 9c89bfe..d50ce23 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java @@ -65,8 +65,8 @@ public class NavigationBar extends CustomBar { super(context, orientation, getShortestWidth(context)>= 600 ? LAYOUT_600DP_XML : LAYOUT_XML, "navigation_bar.xml", simulatedPlatformVersion); - int color = getBarColor(ATTR_COLOR, ATTR_TRANSLUCENT); - setBackgroundColor(color == 0 ? 0xFF000000 : color); + Integer color = getBarColor(ATTR_COLOR, ATTR_TRANSLUCENT); + setBackgroundColor(color == null ? 0xFF000000 : color); // 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/StatusBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java index 2dc7c65..95a5a58 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java @@ -71,8 +71,9 @@ public class StatusBar extends CustomBar { // FIXME: use FILL_H? setGravity(Gravity.START | Gravity.TOP | Gravity.RIGHT); - int color = getBarColor(ATTR_COLOR, ATTR_TRANSLUCENT); - setBackgroundColor(color == 0 ? Config.getStatusBarColor(simulatedPlatformVersion) : color); + Integer color = getBarColor(ATTR_COLOR, ATTR_TRANSLUCENT); + setBackgroundColor( + color == null ? Config.getStatusBarColor(simulatedPlatformVersion) : color); // 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/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java index ac7c409..24e1ce7 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 @@ -421,8 +421,7 @@ public class RenderSessionImpl extends RenderAction { gc.setComposite(AlphaComposite.Src); gc.setColor(new Color(0x00000000, true)); - gc.fillRect(0, 0, - mMeasuredScreenWidth, mMeasuredScreenHeight); + gc.fillRect(0, 0, mMeasuredScreenWidth, mMeasuredScreenHeight); // done gc.dispose(); -- cgit v1.1