diff options
author | Sergey Ten <sergey.ten6@t-mobile.com> | 2009-05-07 07:05:23 -0700 |
---|---|---|
committer | Josh Guilfoyle <Josh.Guilfoyle@T-Mobile.com> | 2009-07-29 19:58:03 -0700 |
commit | c6c07646aabfa31d009b4bcf3cd0dd3ab9c9f15e (patch) | |
tree | d8a3d6bb7b3dca8f20801ed8a3abf836451355d0 | |
parent | 777e111e4463da144548224f08cdf239140d77f3 (diff) | |
download | frameworks_base-c6c07646aabfa31d009b4bcf3cd0dd3ab9c9f15e.zip frameworks_base-c6c07646aabfa31d009b4bcf3cd0dd3ab9c9f15e.tar.gz frameworks_base-c6c07646aabfa31d009b4bcf3cd0dd3ab9c9f15e.tar.bz2 |
Changes allowing to set color attributes directly on a theme, without (re-)generating resource bundle/theme apk.
-rw-r--r-- | core/java/android/content/res/AssetManager.java | 2 | ||||
-rw-r--r-- | core/java/android/content/res/Resources.java | 5 | ||||
-rw-r--r-- | core/jni/android_util_AssetManager.cpp | 12 | ||||
-rw-r--r-- | include/utils/ResourceTypes.h | 1 | ||||
-rw-r--r-- | libs/utils/ResourceTypes.cpp | 23 |
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; |