summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/res/AssetManager.java2
-rw-r--r--core/java/android/content/res/Resources.java5
-rw-r--r--core/jni/android_util_AssetManager.cpp12
-rw-r--r--include/utils/ResourceTypes.h1
-rw-r--r--libs/utils/ResourceTypes.cpp23
5 files changed, 42 insertions, 1 deletions
diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java
index 9f3f2d3..1ec4c9e 100644
--- a/core/java/android/content/res/AssetManager.java
+++ b/core/java/android/content/res/AssetManager.java
@@ -24,7 +24,6 @@ import android.util.TypedValue;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
-import java.util.Locale;
/**
* Provides access to an application's raw asset files; see {@link Resources}
@@ -702,6 +701,7 @@ public final class AssetManager {
private native final int newTheme();
private native final void deleteTheme(int theme);
/*package*/ native static final void applyThemeStyle(int theme, int styleRes, boolean force);
+ /*package*/ native static final void setAttributeValue(int theme, int attr, int color);
/*package*/ native static final void copyTheme(int dest, int source);
/*package*/ native static final int loadThemeAttributeValue(int theme, int ident,
TypedValue outValue,
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index e195fff..dd011c8 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -931,6 +931,11 @@ public class Resources {
AssetManager.applyThemeStyle(mTheme, resid, force);
}
+ /** @hide */
+ public void setAttributeValue(int attr, int color) {
+ AssetManager.setAttributeValue(mTheme, attr, color);
+ }
+
/**
* Set this theme to hold the same contents as the theme
* <var>other</var>. If both of these themes are from the same
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
index 3442785..fbedc83 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -827,6 +827,16 @@ static void android_content_AssetManager_applyThemeStyle(JNIEnv* env, jobject cl
theme->applyStyle(styleRes, force ? true : false);
}
+static void android_content_AssetManager_setAttributeValue(JNIEnv* env, jobject clazz,
+ jint themeInt,
+ jint attribute,
+ jint value)
+{
+ ResTable::Theme* theme = (ResTable::Theme*)themeInt;
+ theme->setAttributeValue(attribute, value);
+}
+
+
static void android_content_AssetManager_copyTheme(JNIEnv* env, jobject clazz,
jint destInt, jint srcInt)
{
@@ -1715,6 +1725,8 @@ static JNINativeMethod gAssetManagerMethods[] = {
(void*) android_content_AssetManager_getArraySize },
{ "retrieveArray","(I[I)I",
(void*) android_content_AssetManager_retrieveArray },
+ { "setAttributeValue", "(III)V",
+ (void*) android_content_AssetManager_setAttributeValue },
// XML files.
{ "openXmlAssetNative", "(ILjava/lang/String;)I",
diff --git a/include/utils/ResourceTypes.h b/include/utils/ResourceTypes.h
index d01d83f..e580755 100644
--- a/include/utils/ResourceTypes.h
+++ b/include/utils/ResourceTypes.h
@@ -1524,6 +1524,7 @@ public:
status_t applyStyle(uint32_t resID, bool force=false);
status_t setTo(const Theme& other);
+ void setAttributeValue(uint32_t attribute, uint32_t value);
/**
* Retrieve a value in the theme. If the theme defines this
diff --git a/libs/utils/ResourceTypes.cpp b/libs/utils/ResourceTypes.cpp
index 2ad3bfe..5910c86 100644
--- a/libs/utils/ResourceTypes.cpp
+++ b/libs/utils/ResourceTypes.cpp
@@ -1294,6 +1294,29 @@ ResTable::Theme::package_info* ResTable::Theme::copy_package(package_info* pi)
return newpi;
}
+void ResTable::Theme::setAttributeValue(uint32_t attrID, uint32_t value)
+{
+ const ssize_t p = mTable.getResourcePackageIndex(attrID);
+ const uint32_t t = Res_GETTYPE(attrID);
+ const uint32_t e = Res_GETENTRY(attrID);
+
+ TABLE_NOISY(LOGV("Looking up attr 0x%08x in theme %p", attrID, this));
+
+ if (p >= 0) {
+ const package_info* const pi = mPackages[p];
+ if (pi != NULL) {
+ if (t < pi->numTypes) {
+ const type_info& ti = pi->types[t];
+ if (e < ti.numEntries) {
+ theme_entry& te = ti.entries[e];
+ te.value.data = value;
+ te.value.dataType = Res_value::TYPE_FIRST_INT;
+ }
+ }
+ }
+ }
+}
+
status_t ResTable::Theme::applyStyle(uint32_t resID, bool force)
{
const bag_entry* bag;