Merge "Fix multiple styles case in resource resolution." into lmp-dev
diff --git a/tools/layoutlib/bridge/src/android/content/res/AssetManager_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/AssetManager_Delegate.java
index 914a359..e0d3b8c 100644
--- a/tools/layoutlib/bridge/src/android/content/res/AssetManager_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/content/res/AssetManager_Delegate.java
@@ -38,8 +38,4 @@
         Resources_Theme_Delegate.getDelegateManager().removeJavaReferenceFor(theme);
     }
 
-    @LayoutlibDelegate
-    /*package*/ static void applyThemeStyle(long theme, int styleRes, boolean force) {
-        Resources_Theme_Delegate.getDelegateManager().getDelegate(theme).force = force;
-    }
 }
diff --git a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
index 6946ee8..4bd83e9 100644
--- a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
@@ -39,9 +39,6 @@
  */
 public class Resources_Theme_Delegate {
 
-    // Whether to use the Theme.mThemeResId as primary theme.
-    boolean force;
-
     // ---- delegate manager ----
 
     private static final DelegateManager<Resources_Theme_Delegate> sManager =
@@ -111,14 +108,29 @@
     // ---- private helper methods ----
 
     private static boolean setupResources(Theme thisTheme) {
-        Resources_Theme_Delegate themeDelegate = sManager.getDelegate(thisTheme.getNativeTheme());
-        StyleResourceValue style = resolveStyle(thisTheme.getAppliedStyleResId());
-        if (style != null) {
-            RenderSessionImpl.getCurrentContext().getRenderResources()
-                    .applyStyle(style, themeDelegate.force);
-            return true;
+        // Key is a space-separated list of theme ids applied that have been merged into the
+        // BridgeContext's theme to make thisTheme.
+        String[] appliedStyles = thisTheme.getKey().split(" ");
+        boolean changed = false;
+        for (String s : appliedStyles) {
+            if (s.isEmpty()) {
+                continue;
+            }
+            // See the definition of force parameter in Theme.applyStyle().
+            boolean force = false;
+            if (s.charAt(s.length() - 1) == '!') {
+                force = true;
+                s = s.substring(0, s.length() - 1);
+            }
+            int styleId = Integer.parseInt(s, 16);
+            StyleResourceValue style = resolveStyle(styleId);
+            if (style != null) {
+                RenderSessionImpl.getCurrentContext().getRenderResources().applyStyle(style, force);
+                changed = true;
+            }
+
         }
-        return false;
+        return changed;
     }
 
     private static void restoreResources(boolean changed) {
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
index f20b890..bcfde57 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
@@ -143,7 +143,6 @@
         "android.content.res.Resources$Theme#resolveAttributes",
         "android.content.res.AssetManager#newTheme",
         "android.content.res.AssetManager#deleteTheme",
-        "android.content.res.AssetManager#applyThemeStyle",
         "android.content.res.TypedArray#getValueAt",
         "android.content.res.TypedArray#obtain",
         "android.graphics.BitmapFactory#finishDecode",