From 55a363376b4d877870650a5a4b757d286f571345 Mon Sep 17 00:00:00 2001 From: Deepanshu Gupta Date: Mon, 27 Jul 2015 11:50:43 -0700 Subject: [PATCH] LayoutLib: Fix Status/Navigation Bar color. [DO NOT MERGE] If the color value for status bar or navigation bar is declared directly in the theme (i.e. doesn't reference a color resource via @color/foo), the ResourceType for the attribute is not assigned by the IDE. LayoutLib used to ignore resources that were not of type color. This change fixes the issue by also checking the resources without a type. Change-Id: I94735ec225415282db06ab9db5c3233ad89c052f (cherry picked from commit e3f9834ebd8a6e4ee155c8e4c9456dfc98e8b832) --- .../com/android/layoutlib/bridge/bars/CustomBar.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 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 145a03a27274..b76ec1707fcc 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 @@ -16,6 +16,7 @@ package com.android.layoutlib.bridge.bars; +import com.android.ide.common.rendering.api.LayoutLog; import com.android.ide.common.rendering.api.RenderResources; import com.android.ide.common.rendering.api.ResourceValue; import com.android.ide.common.rendering.api.StyleResourceValue; @@ -258,8 +259,21 @@ abstract class CustomBar extends LinearLayout { ResourceValue resource = renderResources.findItemInTheme(attr, true); // Form @color/bar to the #AARRGGBB resource = renderResources.resolveResValue(resource); - if (resource != null && ResourceType.COLOR.equals(resource.getResourceType())) { - return ResourceHelper.getColor(resource.getValue()); + if (resource != null) { + ResourceType type = resource.getResourceType(); + if (type == null || type == ResourceType.COLOR) { + // if no type is specified, the value may have been specified directly in the style + // file, rather than referencing a color resource value. + try { + return ResourceHelper.getColor(resource.getValue()); + } catch (NumberFormatException e) { + // Conversion failed. + Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_FORMAT, + "Theme attribute @android:" + attr + + " does not reference a color, instead is '" + + resource.getValue() + "'.", resource); + } + } } return 0; } -- 2.11.0