diff options
author | Adam Powell <adamp@google.com> | 2011-07-28 11:58:21 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-07-28 11:58:21 -0700 |
commit | 7c8d19d53cd48b6c748365aa6393eab2e9f09641 (patch) | |
tree | d1c8eacb4cbbfb263a6ae0e8ad8e936acc2348d2 /core/java | |
parent | a7ffaee29892cc38ae2327017b6670adafef711b (diff) | |
parent | 88ab69780f58e4b32d497266b2ad646a4d74827b (diff) | |
download | frameworks_base-7c8d19d53cd48b6c748365aa6393eab2e9f09641.zip frameworks_base-7c8d19d53cd48b6c748365aa6393eab2e9f09641.tar.gz frameworks_base-7c8d19d53cd48b6c748365aa6393eab2e9f09641.tar.bz2 |
Merge "Fix bug 5087752 - Maintain correct contrast against action bars in inverse-bar themes"
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/app/ActionBar.java | 13 | ||||
-rw-r--r-- | core/java/android/app/Activity.java | 14 | ||||
-rw-r--r-- | core/java/com/android/internal/app/ActionBarImpl.java | 21 |
3 files changed, 46 insertions, 2 deletions
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java index a217867..7acaec8 100644 --- a/core/java/android/app/ActionBar.java +++ b/core/java/android/app/ActionBar.java @@ -627,7 +627,18 @@ public abstract class ActionBar { * * @param enabled true to enable the home button, false to disable the home button. */ - public abstract void setHomeButtonEnabled(boolean enabled); + public void setHomeButtonEnabled(boolean enabled) { } + + /** + * Returns a {@link Context} with an appropriate theme for creating views that + * will appear in the action bar. If you are inflating or instantiating custom views + * that will appear in an action bar, you should use the Context returned by this method. + * (This includes adapters used for list navigation mode.) + * This will ensure that views contrast properly against the action bar. + * + * @return A themed Context for creating views + */ + public Context getThemedContext() { return null; } /** * Listener interface for ActionBar navigation events. diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 8d03ac7..c6c4025 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -32,6 +32,7 @@ import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; +import android.content.res.Resources.Theme; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -54,6 +55,7 @@ import android.util.AttributeSet; import android.util.EventLog; import android.util.Log; import android.util.SparseArray; +import android.util.TypedValue; import android.view.ActionMode; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; @@ -672,6 +674,7 @@ public class Activity extends ContextThemeWrapper /*package*/ int mConfigChangeFlags; /*package*/ Configuration mCurrentConfig; private SearchManager mSearchManager; + private MenuInflater mMenuInflater; static final class NonConfigurationInstances { Object activity; @@ -3083,7 +3086,16 @@ public class Activity extends ContextThemeWrapper * Returns a {@link MenuInflater} with this context. */ public MenuInflater getMenuInflater() { - return new MenuInflater(this); + // Make sure that action views can get an appropriate theme. + if (mMenuInflater == null) { + initActionBar(); + if (mActionBar != null) { + mMenuInflater = new MenuInflater(mActionBar.getThemedContext()); + } else { + mMenuInflater = new MenuInflater(this); + } + } + return mMenuInflater; } @Override diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java index 95f1f98..7684bc5 100644 --- a/core/java/com/android/internal/app/ActionBarImpl.java +++ b/core/java/com/android/internal/app/ActionBarImpl.java @@ -35,10 +35,13 @@ import android.app.Dialog; import android.app.FragmentTransaction; import android.content.Context; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Handler; +import android.util.TypedValue; import android.view.ActionMode; +import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -61,6 +64,7 @@ public class ActionBarImpl extends ActionBar { private static final String TAG = "ActionBarImpl"; private Context mContext; + private Context mThemedContext; private Activity mActivity; private Dialog mDialog; @@ -605,6 +609,23 @@ public class ActionBarImpl extends ActionBar { } } + public Context getThemedContext() { + if (mThemedContext == null) { + TypedValue outValue = new TypedValue(); + Resources.Theme currentTheme = mContext.getTheme(); + currentTheme.resolveAttribute(com.android.internal.R.attr.actionBarWidgetTheme, + outValue, true); + final int targetThemeRes = outValue.resourceId; + + if (targetThemeRes != 0 && mContext.getThemeResId() != targetThemeRes) { + mThemedContext = new ContextThemeWrapper(mContext, targetThemeRes); + } else { + mThemedContext = mContext; + } + } + return mThemedContext; + } + /** * @hide */ |