summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2014-01-04 02:31:09 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-01-04 02:31:10 +0000
commit3bb64aa83a8ddd069a98700eae255db7f1a3db6e (patch)
tree2acc197310034c3f959bdbd6b1544c43722c1304 /core
parent2208e652d6881bb8747cb50d87d98a679d7c0e07 (diff)
parentdd9233253b88d86473403d5b63c72e223b5e40bd (diff)
downloadframeworks_base-3bb64aa83a8ddd069a98700eae255db7f1a3db6e.zip
frameworks_base-3bb64aa83a8ddd069a98700eae255db7f1a3db6e.tar.gz
frameworks_base-3bb64aa83a8ddd069a98700eae255db7f1a3db6e.tar.bz2
Merge "Allow Views to specify a theme override"
Diffstat (limited to 'core')
-rw-r--r--core/java/android/view/LayoutInflater.java41
1 files changed, 32 insertions, 9 deletions
diff --git a/core/java/android/view/LayoutInflater.java b/core/java/android/view/LayoutInflater.java
index aa43bad..32c9885 100644
--- a/core/java/android/view/LayoutInflater.java
+++ b/core/java/android/view/LayoutInflater.java
@@ -91,6 +91,8 @@ public abstract class LayoutInflater {
private static final String TAG_1995 = "blink";
private static final String TAG_REQUEST_FOCUS = "requestFocus";
+ private static final String ATTR_THEME = "theme";
+
/**
* Hook to allow clients of the LayoutInflater to restrict the set of Views that are allowed
* to be inflated.
@@ -677,23 +679,44 @@ public abstract class LayoutInflater {
name = attrs.getAttributeValue(null, "class");
}
+ // Apply a theme override, if necessary.
+ final Context viewContext;
+ final int themeResId = attrs.getAttributeResourceValue(null, ATTR_THEME, 0);
+ if (themeResId != 0) {
+ viewContext = new ContextThemeWrapper(mContext, themeResId);
+ } else if (parent != null) {
+ viewContext = parent.getContext();
+ } else {
+ viewContext = mContext;
+ }
+
if (DEBUG) System.out.println("******** Creating view: " + name);
try {
View view;
- if (mFactory2 != null) view = mFactory2.onCreateView(parent, name, mContext, attrs);
- else if (mFactory != null) view = mFactory.onCreateView(name, mContext, attrs);
- else view = null;
+ if (mFactory2 != null) {
+ view = mFactory2.onCreateView(parent, name, viewContext, attrs);
+ } else if (mFactory != null) {
+ view = mFactory.onCreateView(name, viewContext, attrs);
+ } else {
+ view = null;
+ }
if (view == null && mPrivateFactory != null) {
- view = mPrivateFactory.onCreateView(parent, name, mContext, attrs);
+ view = mPrivateFactory.onCreateView(parent, name, viewContext, attrs);
}
-
+
if (view == null) {
- if (-1 == name.indexOf('.')) {
- view = onCreateView(parent, name, attrs);
- } else {
- view = createView(name, null, attrs);
+ final Object lastContext = mConstructorArgs[0];
+ mConstructorArgs[0] = viewContext;
+ try {
+ if (-1 == name.indexOf('.')) {
+ view = onCreateView(parent, name, attrs);
+ } else {
+ view = createView(name, null, attrs);
+ }
+ } finally {
+ mConstructorArgs[0] = lastContext;
}
}