diff options
author | Deepanshu Gupta <deepanshu@google.com> | 2015-03-17 14:53:17 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-03-17 14:53:17 +0000 |
commit | 74bf54037cdf23759530da0560aede33e6a35c5c (patch) | |
tree | 7ca6057af0e881fcbba24c2d949341fd20b9dd14 /tools/layoutlib/bridge/src/com | |
parent | a0c3191b74d1119999d94c71de8d916e128ea009 (diff) | |
parent | 199a70f1820c38a9f1db1697ad91c4f5f07d00aa (diff) | |
download | frameworks_base-74bf54037cdf23759530da0560aede33e6a35c5c.zip frameworks_base-74bf54037cdf23759530da0560aede33e6a35c5c.tar.gz frameworks_base-74bf54037cdf23759530da0560aede33e6a35c5c.tar.bz2 |
am 199a70f1: am 576801ff: am 842eee9f: am 1f9a26af: am 158c08bc: am ada85905: Fix AppCompat action bar theming.
* commit '199a70f1820c38a9f1db1697ad91c4f5f07d00aa':
Fix AppCompat action bar theming.
Diffstat (limited to 'tools/layoutlib/bridge/src/com')
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 179a8e7..e1c58fd 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 @@ -40,6 +40,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; @@ -963,6 +964,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; } |