From 0f14370c8bbaa678cb060cd5ff48d40bd5eae6d1 Mon Sep 17 00:00:00 2001 From: Mis012 Date: Sun, 7 Apr 2024 21:55:16 +0200 Subject: [PATCH] AssetManager: applyStyle: handle "style" value being an attribute, append styles to global theme instead of replacing it --- .../android/content/res/AssetManager.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/api-impl/android/content/res/AssetManager.java b/src/api-impl/android/content/res/AssetManager.java index 394cec35..ebe73f79 100644 --- a/src/api-impl/android/content/res/AssetManager.java +++ b/src/api-impl/android/content/res/AssetManager.java @@ -767,11 +767,22 @@ public final class AssetManager { TypedValue value = new TypedValue(); if (defStyleRes == 0 && theme != 0 && loadThemeAttributeValue(theme, defStyleAttr, value, true) >= 0) defStyleRes = value.data; - if (defStyleRes == 0 && set != null) - defStyleRes = set.getAttributeResourceValue(null, "style", 0); + if (defStyleRes == 0 && set != null) { + int styleVal = set.getAttributeResourceValue(null, "style", 0); + if(((styleVal >> 16) & 0xff) == 0x3) { // attribute + if (theme != 0 && loadThemeAttributeValue(theme, styleVal, value, true) >= 0) + defStyleRes = value.data; + } + else { + defStyleRes = styleVal; + } + } long defStyle = 0; if (defStyleRes != 0) { defStyle = newTheme(); + if(theme != 0) + copyTheme(defStyle, theme); + applyThemeStyle(defStyle, defStyleRes, true); }