summaryrefslogtreecommitdiffstats
path: root/tools/layoutlib/bridge/src/com
diff options
context:
space:
mode:
authorDeepanshu Gupta <deepanshu@google.com>2015-03-17 14:36:05 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-03-17 14:36:05 +0000
commit576801ff82a85c4de19404dfe364eef7184b84e0 (patch)
tree3bf96654bb1b3ff5f1856ad38621f1974772e475 /tools/layoutlib/bridge/src/com
parenta5be9a7d2d2cbcd3892fc916c9a944745024881d (diff)
parent842eee9f816a2e35bf3c9ce6c14cd5e43684265b (diff)
downloadframeworks_base-576801ff82a85c4de19404dfe364eef7184b84e0.zip
frameworks_base-576801ff82a85c4de19404dfe364eef7184b84e0.tar.gz
frameworks_base-576801ff82a85c4de19404dfe364eef7184b84e0.tar.bz2
am 842eee9f: am 1f9a26af: am 158c08bc: am ada85905: Fix AppCompat action bar theming.
* commit '842eee9f816a2e35bf3c9ce6c14cd5e43684265b': Fix AppCompat action bar theming.
Diffstat (limited to 'tools/layoutlib/bridge/src/com')
-rw-r--r--tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java5
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java8
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/AppCompatActionBar.java25
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/BridgeActionBar.java6
4 files changed, 39 insertions, 5 deletions
diff --git a/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java b/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
index 8d1d0c1..bb95c4e 100644
--- a/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
@@ -19,7 +19,6 @@ package com.android.internal.view.menu;
import com.android.layoutlib.bridge.android.BridgeContext;
import android.content.Context;
-import android.view.ContextThemeWrapper;
import android.view.View;
/**
@@ -42,9 +41,7 @@ public class BridgeMenuItemImpl extends MenuItemImpl {
CharSequence title, int showAsAction) {
super(menu, group, id, categoryOrder, ordering, title, showAsAction);
Context context = menu.getContext();
- while (context instanceof ContextThemeWrapper) {
- context = ((ContextThemeWrapper) context).getBaseContext();
- }
+ context = BridgeContext.getBaseContext(context);
if (context instanceof BridgeContext) {
mContext = ((BridgeContext) context);
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index aa4b560..868529e 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -41,6 +41,7 @@ import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentSender;
@@ -934,6 +935,13 @@ public final class BridgeContext extends Context {
return defValue;
}
+ public static Context getBaseContext(Context context) {
+ while (context instanceof ContextWrapper) {
+ context = ((ContextWrapper) context).getBaseContext();
+ }
+ return context;
+ }
+
//------------ NOT OVERRIDEN --------------------
@Override
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/AppCompatActionBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/AppCompatActionBar.java
index f54815e..ee57067 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/AppCompatActionBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/AppCompatActionBar.java
@@ -21,11 +21,15 @@ import com.android.annotations.Nullable;
import com.android.ide.common.rendering.api.RenderResources;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.ide.common.rendering.api.SessionParams;
+import com.android.ide.common.rendering.api.StyleResourceValue;
import com.android.layoutlib.bridge.android.BridgeContext;
import com.android.layoutlib.bridge.impl.ResourceHelper;
import com.android.resources.ResourceType;
+import android.content.Context;
import android.graphics.drawable.Drawable;
+import android.view.ContextThemeWrapper;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
@@ -85,6 +89,27 @@ public class AppCompatActionBar extends BridgeActionBar {
}
@Override
+ protected LayoutInflater getInflater(BridgeContext context) {
+ // Other than the resource resolution part, the code has been taken from the support
+ // library. see code from line 269 onwards in
+ // https://android.googlesource.com/platform/frameworks/support/+/android-5.1.0_r1/v7/appcompat/src/android/support/v7/app/ActionBarActivityDelegateBase.java
+ Context themedContext = context;
+ RenderResources resources = context.getRenderResources();
+ ResourceValue actionBarTheme = resources.findItemInTheme("actionBarTheme", false);
+ if (actionBarTheme != null) {
+ // resolve it, if needed.
+ actionBarTheme = resources.resolveResValue(actionBarTheme);
+ }
+ if (actionBarTheme instanceof StyleResourceValue) {
+ int styleId = context.getDynamicIdByStyle(((StyleResourceValue) actionBarTheme));
+ if (styleId != 0) {
+ themedContext = new ContextThemeWrapper(context, styleId);
+ }
+ }
+ return LayoutInflater.from(themedContext);
+ }
+
+ @Override
protected void setTitle(CharSequence title) {
if (title != null && mWindowDecorActionBar != null) {
Method setTitle = getMethod(mWindowActionBarClass, "setTitle", CharSequence.class);
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/BridgeActionBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/BridgeActionBar.java
index c25db35..2a83ea1 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/BridgeActionBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/BridgeActionBar.java
@@ -81,7 +81,7 @@ public abstract class BridgeActionBar {
}
// Inflate action bar layout.
- mDecorContent = LayoutInflater.from(context).inflate(layoutId, mEnclosingLayout, true);
+ mDecorContent = getInflater(context).inflate(layoutId, mEnclosingLayout, true);
}
@@ -92,6 +92,10 @@ public abstract class BridgeActionBar {
*/
protected abstract ResourceValue getLayoutResource(BridgeContext context);
+ protected LayoutInflater getInflater(BridgeContext context) {
+ return LayoutInflater.from(context);
+ }
+
protected void setContentRoot(@NonNull FrameLayout contentRoot) {
mContentRoot = contentRoot;
}