Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java

Issue 2779543005: Add support for highlighting menu items (Closed)
Patch Set: Moved PulseDrawable Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.appmenu; 5 package org.chromium.chrome.browser.appmenu;
6 6
7 import android.animation.Animator; 7 import android.animation.Animator;
8 import android.animation.Animator.AnimatorListener; 8 import android.animation.Animator.AnimatorListener;
9 import android.animation.AnimatorSet; 9 import android.animation.AnimatorSet;
10 import android.content.Context; 10 import android.content.Context;
11 import android.content.res.Resources; 11 import android.content.res.Resources;
12 import android.graphics.Rect; 12 import android.graphics.Rect;
13 import android.graphics.drawable.Drawable; 13 import android.graphics.drawable.Drawable;
14 import android.os.Build; 14 import android.os.Build;
15 import android.support.annotation.IdRes;
15 import android.view.KeyEvent; 16 import android.view.KeyEvent;
16 import android.view.LayoutInflater; 17 import android.view.LayoutInflater;
17 import android.view.Menu; 18 import android.view.Menu;
18 import android.view.MenuItem; 19 import android.view.MenuItem;
19 import android.view.Surface; 20 import android.view.Surface;
20 import android.view.View; 21 import android.view.View;
21 import android.view.View.MeasureSpec; 22 import android.view.View.MeasureSpec;
22 import android.view.View.OnKeyListener; 23 import android.view.View.OnKeyListener;
23 import android.view.ViewGroup; 24 import android.view.ViewGroup;
24 import android.widget.AdapterView; 25 import android.widget.AdapterView;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 View view = list.getChildAt(index - startIndex); 122 View view = list.getChildAt(index - startIndex);
122 if (view == null) return; 123 if (view == null) return;
123 124
124 // Cause the Adapter to re-populate the View. 125 // Cause the Adapter to re-populate the View.
125 list.getAdapter().getView(index, view, list); 126 list.getAdapter().getView(index, view, list);
126 } 127 }
127 128
128 /** 129 /**
129 * Creates and shows the app menu anchored to the specified view. 130 * Creates and shows the app menu anchored to the specified view.
130 * 131 *
131 * @param context The context of the AppMenu (ensure the proper theme is set on this context). 132 * @param context The context of the AppMenu (ensure the proper theme is set on this
132 * @param anchorView The anchor {@link View} of the {@link ListPopupWindow}. 133 * context).
134 * @param anchorView The anchor {@link View} of the {@link ListPopu pWindow}.
133 * @param isByPermanentButton Whether or not permanent hardware button trigg ered it. (oppose to 135 * @param isByPermanentButton Whether or not permanent hardware button trigg ered it. (oppose to
134 * software button or keyboard). 136 * software button or keyboard).
135 * @param screenRotation Current device screen rotation. 137 * @param screenRotation Current device screen rotation.
136 * @param visibleDisplayFrame The display area rect in which AppMenu is supp osed to fit in. 138 * @param visibleDisplayFrame The display area rect in which AppMenu is supp osed to fit in.
137 * @param screenHeight Current device screen height. 139 * @param screenHeight Current device screen height.
138 * @param footerResourceId The resource id for a view to add to the end of t he menu list. 140 * @param footerResourceId The resource id for a view to add to the end o f the menu list. Can
139 * Can be 0 if no such view is required. 141 * be 0 if no such view is required.
142 * @param highlightedItemId The resource id of the menu item that should b e highlighted. Can
143 * be 0 if no item should be highlighted.
140 */ 144 */
141 void show(Context context, View anchorView, boolean isByPermanentButton, int screenRotation, 145 void show(Context context, View anchorView, boolean isByPermanentButton, int screenRotation,
142 Rect visibleDisplayFrame, int screenHeight, int footerResourceId) { 146 Rect visibleDisplayFrame, int screenHeight, @IdRes int footerResourc eId,
147 @IdRes int highlightedItemId) {
143 mPopup = new ListPopupWindow(context, null, android.R.attr.popupMenuStyl e); 148 mPopup = new ListPopupWindow(context, null, android.R.attr.popupMenuStyl e);
144 mPopup.setModal(true); 149 mPopup.setModal(true);
145 mPopup.setAnchorView(anchorView); 150 mPopup.setAnchorView(anchorView);
146 mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); 151 mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
147 152
148 int footerHeight = 0; 153 int footerHeight = 0;
149 if (footerResourceId != 0) { 154 if (footerResourceId != 0) {
150 mPopup.setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW); 155 mPopup.setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW);
151 View promptView = LayoutInflater.from(context).inflate(footerResourc eId, null); 156 View promptView = LayoutInflater.from(context).inflate(footerResourc eId, null);
152 mPopup.setPromptView(promptView); 157 mPopup.setPromptView(promptView);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 Rect sizingPadding = new Rect(bgPadding); 219 Rect sizingPadding = new Rect(bgPadding);
215 if (isByPermanentButton && originalBgDrawable != null) { 220 if (isByPermanentButton && originalBgDrawable != null) {
216 Rect originalPadding = new Rect(); 221 Rect originalPadding = new Rect();
217 originalBgDrawable.getPadding(originalPadding); 222 originalBgDrawable.getPadding(originalPadding);
218 sizingPadding.top = originalPadding.top; 223 sizingPadding.top = originalPadding.top;
219 sizingPadding.bottom = originalPadding.bottom; 224 sizingPadding.bottom = originalPadding.bottom;
220 } 225 }
221 226
222 // A List adapter for visible items in the Menu. The first row is added as a header to the 227 // A List adapter for visible items in the Menu. The first row is added as a header to the
223 // list view. 228 // list view.
224 mAdapter = new AppMenuAdapter(this, menuItems, LayoutInflater.from(conte xt)); 229 mAdapter = new AppMenuAdapter(
230 this, menuItems, LayoutInflater.from(context), highlightedItemId );
225 mPopup.setAdapter(mAdapter); 231 mPopup.setAdapter(mAdapter);
226 232
227 setMenuHeight( 233 setMenuHeight(
228 menuItems.size(), visibleDisplayFrame, screenHeight, sizingPaddi ng, footerHeight); 234 menuItems.size(), visibleDisplayFrame, screenHeight, sizingPaddi ng, footerHeight);
229 setPopupOffset(mPopup, mCurrentScreenRotation, visibleDisplayFrame, sizi ngPadding); 235 setPopupOffset(mPopup, mCurrentScreenRotation, visibleDisplayFrame, sizi ngPadding);
230 mPopup.setOnItemClickListener(this); 236 mPopup.setOnItemClickListener(this);
231 mPopup.show(); 237 mPopup.show();
232 mPopup.getListView().setItemsCanFocus(true); 238 mPopup.getListView().setItemsCanFocus(true);
233 mPopup.getListView().setOnKeyListener(this); 239 mPopup.getListView().setOnKeyListener(this);
234 240
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 } else { 434 } else {
429 builder.with((Animator) animatorObject); 435 builder.with((Animator) animatorObject);
430 } 436 }
431 } 437 }
432 } 438 }
433 439
434 mMenuItemEnterAnimator.addListener(mAnimationHistogramRecorder); 440 mMenuItemEnterAnimator.addListener(mAnimationHistogramRecorder);
435 mMenuItemEnterAnimator.start(); 441 mMenuItemEnterAnimator.start();
436 } 442 }
437 } 443 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698