diff options
| -rw-r--r-- | api/current.txt | 4 | ||||
| -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 | ||||
| -rwxr-xr-x | core/res/res/values/attrs.xml | 8 | ||||
| -rw-r--r-- | core/res/res/values/public.xml | 8 | ||||
| -rw-r--r-- | core/res/res/values/themes.xml | 4 |
7 files changed, 66 insertions, 6 deletions
diff --git a/api/current.txt b/api/current.txt index 4135b5d69390..773b580bc0d7 100644 --- a/api/current.txt +++ b/api/current.txt @@ -198,6 +198,7 @@ package android { field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4 field public static final int actionBarTabStyle = 16843507; // 0x10102f3 field public static final int actionBarTabTextStyle = 16843509; // 0x10102f5 + field public static final int actionBarWidgetTheme = 16843683; // 0x10103a3 field public static final int actionButtonStyle = 16843480; // 0x10102d8 field public static final int actionDropDownStyle = 16843479; // 0x10102d7 field public static final int actionLayout = 16843515; // 0x10102fb @@ -2243,6 +2244,7 @@ package android.app { method public abstract java.lang.CharSequence getSubtitle(); method public abstract android.app.ActionBar.Tab getTabAt(int); method public abstract int getTabCount(); + method public android.content.Context getThemedContext(); method public abstract java.lang.CharSequence getTitle(); method public abstract void hide(); method public abstract boolean isShowing(); @@ -2263,7 +2265,7 @@ package android.app { method public abstract void setDisplayShowHomeEnabled(boolean); method public abstract void setDisplayShowTitleEnabled(boolean); method public abstract void setDisplayUseLogoEnabled(boolean); - method public abstract void setHomeButtonEnabled(boolean); + method public void setHomeButtonEnabled(boolean); method public abstract void setIcon(int); method public abstract void setIcon(android.graphics.drawable.Drawable); method public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.app.ActionBar.OnNavigationListener); diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java index a21786780c3a..7acaec86716c 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 8d03ac70f802..c6c4025db89b 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 95f1f98f847f..7684bc52745e 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 */ diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index f6bf76bad8fc..f80f27dd3e6e 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -616,6 +616,14 @@ buttons. actionBarStyle is still used for the primary bar. --> <attr name="actionBarSplitStyle" format="reference" /> + <!-- Reference to a theme that should be used to inflate widgets + and layouts destined for the action bar. Most of the time + this will be a reference to the current theme, but when + the action bar has a significantly different contrast + profile than the rest of the activity the difference + can become important. If this is set to @null the current + theme will be used.--> + <attr name="actionBarWidgetTheme" format="reference" /> <!-- Size of the Action Bar, including the contextual bar used to present Action Modes. --> <attr name="actionBarSize" format="dimension" > diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 49c94479e288..0555d105a725 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1781,6 +1781,11 @@ <public type="attr" name="actionModeStyle" /> + <public type="attr" name="minResizeWidth" /> + <public type="attr" name="minResizeHeight" /> + + <public type="attr" name="actionBarWidgetTheme" /> + <public type="style" name="TextAppearance.SuggestionHighlight" /> <public type="style" name="Theme.Holo.SplitActionBarWhenNarrow" /> <public type="style" name="Theme.Holo.Light.SplitActionBarWhenNarrow" /> @@ -1819,7 +1824,4 @@ <public type="color" name="holo_orange_dark" /> <public type="color" name="holo_purple" /> <public type="color" name="holo_blue_bright" /> - - <public type="attr" name="minResizeWidth" /> - <public type="attr" name="minResizeHeight" /> </resources> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 8d66b93c3f28..3e7c5ca08dc3 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -290,6 +290,7 @@ <item name="actionModePopupWindowStyle">?android:attr/popupWindowStyle</item> <item name="actionMenuTextAppearance">@android:style/TextAppearance.Holo.Widget.ActionBar.Menu</item> <item name="actionMenuTextColor">?android:attr/textColorPrimary</item> + <item name="actionBarWidgetTheme">@null</item> <item name="dividerVertical">@drawable/divider_vertical_dark</item> <item name="dividerHorizontal">@drawable/divider_vertical_dark</item> @@ -1042,6 +1043,7 @@ <item name="actionBarStyle">@android:style/Widget.Holo.ActionBar</item> <item name="actionBarSize">@dimen/action_bar_default_height</item> <item name="actionModePopupWindowStyle">@android:style/Widget.Holo.PopupWindow.ActionMode</item> + <item name="actionBarWidgetTheme">@null</item> <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item> <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_dark</item> @@ -1338,6 +1340,7 @@ <item name="actionBarStyle">@android:style/Widget.Holo.Light.ActionBar</item> <item name="actionBarSize">@dimen/action_bar_default_height</item> <item name="actionModePopupWindowStyle">@android:style/Widget.Holo.Light.PopupWindow.ActionMode</item> + <item name="actionBarWidgetTheme">@null</item> <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_light</item> <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_light</item> @@ -1399,6 +1402,7 @@ <style name="Theme.Holo.Light.SolidActionBar.Inverse"> <item name="android:windowContentOverlay">@android:drawable/title_bar_shadow</item> <item name="android:actionBarStyle">@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse</item> + <item name="actionBarWidgetTheme">@android:style/Theme.Holo</item> <item name="actionDropDownStyle">@android:style/Widget.Holo.Spinner.DropDown.ActionBar</item> <item name="actionButtonStyle">@android:style/Widget.Holo.ActionButton</item> |