Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 55a36337 authored by Deepanshu Gupta's avatar Deepanshu Gupta
Browse files

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 e3f9834e)
parent d861fd81
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -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())) {
        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;
    }