Skip to content

Commit 538e565

Browse files
committed
Fix bug 5396097 - menu theme consistency
Fix a bug where action bar menus were using the wrong context to inflate stock views. This was causing them to use the action bar's themed widget context instead of the current theme's specific action bar items. Note that action views in the menu will still be inflated using the themed widget context. This can produce some weird side effects if the action views use theme attributes relating to these action bar item attributes. Change-Id: Ied3614d1fedb10a0f5366bbe7b90cd5f2f1ff969
1 parent 99f3668 commit 538e565

File tree

6 files changed

+22
-20
lines changed

6 files changed

+22
-20
lines changed

core/java/com/android/internal/view/menu/ActionMenuPresenter.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@
3131
import android.view.View.MeasureSpec;
3232
import android.view.ViewConfiguration;
3333
import android.view.ViewGroup;
34-
import android.view.ViewParent;
35-
import android.view.accessibility.AccessibilityEvent;
36-
import android.view.accessibility.AccessibilityNodeInfo;
3734
import android.widget.ImageButton;
3835

3936
import java.util.ArrayList;
@@ -71,8 +68,8 @@ public class ActionMenuPresenter extends BaseMenuPresenter
7168
final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback();
7269
int mOpenSubMenuId;
7370

74-
public ActionMenuPresenter() {
75-
super(com.android.internal.R.layout.action_menu_layout,
71+
public ActionMenuPresenter(Context context) {
72+
super(context, com.android.internal.R.layout.action_menu_layout,
7673
com.android.internal.R.layout.action_menu_item_layout);
7774
}
7875

@@ -98,7 +95,7 @@ public void initForMenu(Context context, MenuBuilder menu) {
9895
int width = mWidthLimit;
9996
if (mReserveOverflow) {
10097
if (mOverflowButton == null) {
101-
mOverflowButton = new OverflowMenuButton(mContext);
98+
mOverflowButton = new OverflowMenuButton(mSystemContext);
10299
final int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
103100
mOverflowButton.measure(spec, spec);
104101
}
@@ -215,7 +212,7 @@ public void updateMenuView(boolean cleared) {
215212

216213
if (hasOverflow) {
217214
if (mOverflowButton == null) {
218-
mOverflowButton = new OverflowMenuButton(mContext);
215+
mOverflowButton = new OverflowMenuButton(mSystemContext);
219216
}
220217
ViewGroup parent = (ViewGroup) mOverflowButton.getParent();
221218
if (parent != mMenuView) {

core/java/com/android/internal/view/menu/BaseMenuPresenter.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@
2929
* be reused if possible when items change.
3030
*/
3131
public abstract class BaseMenuPresenter implements MenuPresenter {
32+
protected Context mSystemContext;
3233
protected Context mContext;
3334
protected MenuBuilder mMenu;
35+
protected LayoutInflater mSystemInflater;
3436
protected LayoutInflater mInflater;
3537
private Callback mCallback;
3638

@@ -44,10 +46,13 @@ public abstract class BaseMenuPresenter implements MenuPresenter {
4446
/**
4547
* Construct a new BaseMenuPresenter.
4648
*
49+
* @param context Context for generating system-supplied views
4750
* @param menuLayoutRes Layout resource ID for the menu container view
4851
* @param itemLayoutRes Layout resource ID for a single item view
4952
*/
50-
public BaseMenuPresenter(int menuLayoutRes, int itemLayoutRes) {
53+
public BaseMenuPresenter(Context context, int menuLayoutRes, int itemLayoutRes) {
54+
mSystemContext = context;
55+
mSystemInflater = LayoutInflater.from(context);
5156
mMenuLayoutRes = menuLayoutRes;
5257
mItemLayoutRes = itemLayoutRes;
5358
}
@@ -62,7 +67,7 @@ public void initForMenu(Context context, MenuBuilder menu) {
6267
@Override
6368
public MenuView getMenuView(ViewGroup root) {
6469
if (mMenuView == null) {
65-
mMenuView = (MenuView) mInflater.inflate(mMenuLayoutRes, root, false);
70+
mMenuView = (MenuView) mSystemInflater.inflate(mMenuLayoutRes, root, false);
6671
mMenuView.initialize(mMenu);
6772
updateMenuView(true);
6873
}
@@ -138,7 +143,7 @@ public void setCallback(Callback cb) {
138143
* @return The new item view
139144
*/
140145
public MenuView.ItemView createItemView(ViewGroup parent) {
141-
return (MenuView.ItemView) mInflater.inflate(mItemLayoutRes, parent, false);
146+
return (MenuView.ItemView) mSystemInflater.inflate(mItemLayoutRes, parent, false);
142147
}
143148

144149
/**

core/java/com/android/internal/view/menu/IconMenuPresenter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public class IconMenuPresenter extends BaseMenuPresenter {
4343
private static final String VIEWS_TAG = "android:menu:icon";
4444
private static final String OPEN_SUBMENU_KEY = "android:menu:icon:submenu";
4545

46-
public IconMenuPresenter() {
47-
super(com.android.internal.R.layout.icon_menu_layout,
46+
public IconMenuPresenter(Context context) {
47+
super(context, com.android.internal.R.layout.icon_menu_layout,
4848
com.android.internal.R.layout.icon_menu_item_layout);
4949
}
5050

core/java/com/android/internal/widget/ActionBarContextView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ public void onClick(View v) {
207207
});
208208

209209
final MenuBuilder menu = (MenuBuilder) mode.getMenu();
210-
mActionMenuPresenter = new ActionMenuPresenter();
210+
mActionMenuPresenter = new ActionMenuPresenter(mContext);
211211
mActionMenuPresenter.setReserveOverflow(true);
212212

213213
final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,

core/java/com/android/internal/widget/ActionBarView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ public void setMenu(Menu menu, MenuPresenter.Callback cb) {
373373
}
374374
}
375375
if (mActionMenuPresenter == null) {
376-
mActionMenuPresenter = new ActionMenuPresenter();
376+
mActionMenuPresenter = new ActionMenuPresenter(mContext);
377377
mActionMenuPresenter.setCallback(cb);
378378
mActionMenuPresenter.setId(com.android.internal.R.id.action_menu_presenter);
379379
mExpandedMenuPresenter = new ExpandedActionViewMenuPresenter();

policy/src/com/android/internal/policy/impl/PhoneWindow.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,8 +1084,8 @@ protected boolean initializePanelContent(PanelFeatureState st) {
10841084
}
10851085

10861086
MenuView menuView = st.isInListMode()
1087-
? st.getListMenuView(mPanelMenuPresenterCallback)
1088-
: st.getIconMenuView(mPanelMenuPresenterCallback);
1087+
? st.getListMenuView(getContext(), mPanelMenuPresenterCallback)
1088+
: st.getIconMenuView(getContext(), mPanelMenuPresenterCallback);
10891089

10901090
st.shownPanelView = (View) menuView;
10911091

@@ -3251,11 +3251,11 @@ void setMenu(MenuBuilder menu) {
32513251
}
32523252
}
32533253

3254-
MenuView getListMenuView(MenuPresenter.Callback cb) {
3254+
MenuView getListMenuView(Context context, MenuPresenter.Callback cb) {
32553255
if (menu == null) return null;
32563256

32573257
if (!isCompact) {
3258-
getIconMenuView(cb); // Need this initialized to know where our offset goes
3258+
getIconMenuView(context, cb); // Need this initialized to know where our offset goes
32593259
}
32603260

32613261
if (listMenuPresenter == null) {
@@ -3275,11 +3275,11 @@ MenuView getListMenuView(MenuPresenter.Callback cb) {
32753275
return result;
32763276
}
32773277

3278-
MenuView getIconMenuView(MenuPresenter.Callback cb) {
3278+
MenuView getIconMenuView(Context context, MenuPresenter.Callback cb) {
32793279
if (menu == null) return null;
32803280

32813281
if (iconMenuPresenter == null) {
3282-
iconMenuPresenter = new IconMenuPresenter();
3282+
iconMenuPresenter = new IconMenuPresenter(context);
32833283
iconMenuPresenter.setCallback(cb);
32843284
iconMenuPresenter.setId(com.android.internal.R.id.icon_menu_presenter);
32853285
menu.addMenuPresenter(iconMenuPresenter);

0 commit comments

Comments
 (0)