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

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

Issue 388803006: Add per-item animations to the menu (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased again Created 6 years, 5 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 | Annotate | Revision Log
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;
8 import android.animation.AnimatorSet;
7 import android.content.Context; 9 import android.content.Context;
8 import android.content.res.Resources; 10 import android.content.res.Resources;
9 import android.graphics.Rect; 11 import android.graphics.Rect;
10 import android.view.KeyEvent; 12 import android.view.KeyEvent;
11 import android.view.LayoutInflater; 13 import android.view.LayoutInflater;
12 import android.view.Menu; 14 import android.view.Menu;
13 import android.view.MenuItem; 15 import android.view.MenuItem;
14 import android.view.Surface; 16 import android.view.Surface;
15 import android.view.View; 17 import android.view.View;
16 import android.view.View.OnKeyListener; 18 import android.view.View.OnKeyListener;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 mPopup.show(); 142 mPopup.show();
141 mPopup.getListView().setItemsCanFocus(true); 143 mPopup.getListView().setItemsCanFocus(true);
142 mPopup.getListView().setOnKeyListener(this); 144 mPopup.getListView().setOnKeyListener(this);
143 145
144 mHandler.onMenuVisibilityChanged(true); 146 mHandler.onMenuVisibilityChanged(true);
145 147
146 if (mVerticalFadeDistance > 0) { 148 if (mVerticalFadeDistance > 0) {
147 mPopup.getListView().setVerticalFadingEdgeEnabled(true); 149 mPopup.getListView().setVerticalFadingEdgeEnabled(true);
148 mPopup.getListView().setFadingEdgeLength(mVerticalFadeDistance); 150 mPopup.getListView().setFadingEdgeLength(mVerticalFadeDistance);
149 } 151 }
152
153 mPopup.getListView().addOnLayoutChangeListener(new View.OnLayoutChangeLi stener() {
154 @Override
155 public void onLayoutChange(View v, int left, int top, int right, int bottom,
156 int oldLeft, int oldTop, int oldRight, int oldBottom) {
157 mPopup.getListView().removeOnLayoutChangeListener(this);
158 runMenuItemEnterAnimations();
159 }
160 });
150 } 161 }
151 162
152 private void setPopupOffset(ListPopupWindow popup, int screenRotation, Rect appRect) { 163 private void setPopupOffset(ListPopupWindow popup, int screenRotation, Rect appRect) {
153 Rect paddingRect = new Rect(); 164 Rect paddingRect = new Rect();
154 popup.getBackground().getPadding(paddingRect); 165 popup.getBackground().getPadding(paddingRect);
155 int[] anchorLocation = new int[2]; 166 int[] anchorLocation = new int[2];
156 popup.getAnchorView().getLocationInWindow(anchorLocation); 167 popup.getAnchorView().getLocationInWindow(anchorLocation);
157 168
158 // If we have a hardware menu button, locate the app menu closer to the estimated 169 // If we have a hardware menu button, locate the app menu closer to the estimated
159 // hardware menu button location. 170 // hardware menu button location.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 } 229 }
219 } 230 }
220 return false; 231 return false;
221 } 232 }
222 233
223 /** 234 /**
224 * Dismisses the app menu and cancels the drag-to-scroll if it is taking pla ce. 235 * Dismisses the app menu and cancels the drag-to-scroll if it is taking pla ce.
225 */ 236 */
226 void dismiss() { 237 void dismiss() {
227 mHandler.appMenuDismissed(); 238 mHandler.appMenuDismissed();
228 if (isShowing()) mPopup.dismiss(); 239 if (isShowing()) {
240 mPopup.dismiss();
241 }
229 } 242 }
230 243
231 /** 244 /**
232 * @return Whether the app menu is currently showing. 245 * @return Whether the app menu is currently showing.
233 */ 246 */
234 boolean isShowing() { 247 boolean isShowing() {
235 if (mPopup == null) { 248 if (mPopup == null) {
236 return false; 249 return false;
237 } 250 }
238 return mPopup.isShowing(); 251 return mPopup.isShowing();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 mPopup.setHeight(spaceForFullItems + spaceForPartialItem + 283 mPopup.setHeight(spaceForFullItems + spaceForPartialItem +
271 padding.top + padding.bottom); 284 padding.top + padding.bottom);
272 } else { 285 } else {
273 mPopup.setHeight(spaceForFullItems - mItemRowHeight + spaceForPa rtialItem + 286 mPopup.setHeight(spaceForFullItems - mItemRowHeight + spaceForPa rtialItem +
274 padding.top + padding.bottom); 287 padding.top + padding.bottom);
275 } 288 }
276 } else { 289 } else {
277 mPopup.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); 290 mPopup.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
278 } 291 }
279 } 292 }
293
294 private void runMenuItemEnterAnimations() {
295 AnimatorSet animation = new AnimatorSet();
296 AnimatorSet.Builder builder = null;
297
298 ViewGroup list = mPopup.getListView();
299 for (int i = 0; i < list.getChildCount(); i++) {
300 View view = list.getChildAt(i);
301 Object animatorObject = view.getTag(R.id.menu_item_enter_anim_id);
302 if (animatorObject != null) {
303 if (builder == null) {
304 builder = animation.play((Animator) animatorObject);
305 } else {
306 builder.with((Animator) animatorObject);
307 }
308 }
309 }
310
311 animation.start();
312 }
280 } 313 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698