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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/widget/BottomSheet.java

Issue 2630513003: Expand bottom sheet when URL bar is focused (Closed)
Patch Set: rebase Created 3 years, 11 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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.widget; 5 package org.chromium.chrome.browser.widget;
6 6
7 import android.animation.Animator; 7 import android.animation.Animator;
8 import android.animation.AnimatorListenerAdapter; 8 import android.animation.AnimatorListenerAdapter;
9 import android.animation.ObjectAnimator; 9 import android.animation.ObjectAnimator;
10 import android.content.Context; 10 import android.content.Context;
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 * @param controlContainer The container for the toolbar. 225 * @param controlContainer The container for the toolbar.
226 */ 226 */
227 public void init(View root, View controlContainer) { 227 public void init(View root, View controlContainer) {
228 mToolbarHeight = controlContainer.getHeight(); 228 mToolbarHeight = controlContainer.getHeight();
229 mCurrentState = SHEET_STATE_PEEK; 229 mCurrentState = SHEET_STATE_PEEK;
230 230
231 // Listen to height changes on the root. 231 // Listen to height changes on the root.
232 root.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 232 root.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
233 public void onLayoutChange(View v, int left, int top, int right, int bottom, 233 public void onLayoutChange(View v, int left, int top, int right, int bottom,
234 int oldLeft, int oldTop, int oldRight, int oldBottom) { 234 int oldLeft, int oldTop, int oldRight, int oldBottom) {
235 // Make sure the size of the layout actually changed.
gone 2017/01/20 19:04:08 Can't you just do equality checks? Subtraction of
mdjones 2017/01/20 20:11:47 Yeah, not really sure what I was thinking here. Fi
236 if (top - oldTop == 0 && bottom - oldBottom == 0 && left - oldLe ft == 0
237 && right - oldRight == 0) {
238 return;
239 }
240
235 mContainerHeight = bottom - top; 241 mContainerHeight = bottom - top;
236 updateSheetPeekHeight(); 242 updateSheetPeekHeight();
243
244 cancelAnimation();
237 setSheetState(mCurrentState, false); 245 setSheetState(mCurrentState, false);
238 } 246 }
239 }); 247 });
240 248
241 // Listen to height changes on the toolbar. 249 // Listen to height changes on the toolbar.
242 controlContainer.addOnLayoutChangeListener(new View.OnLayoutChangeListen er() { 250 controlContainer.addOnLayoutChangeListener(new View.OnLayoutChangeListen er() {
243 public void onLayoutChange(View v, int left, int top, int right, int bottom, 251 public void onLayoutChange(View v, int left, int top, int right, int bottom,
244 int oldLeft, int oldTop, int oldRight, int oldBottom) { 252 int oldLeft, int oldTop, int oldRight, int oldBottom) {
253 // Make sure the size of the layout actually changed.
254 if (top - oldTop == 0 && bottom - oldBottom == 0 && left - oldLe ft == 0
255 && right - oldRight == 0) {
256 return;
257 }
258
245 mToolbarHeight = bottom - top; 259 mToolbarHeight = bottom - top;
246 updateSheetPeekHeight(); 260 updateSheetPeekHeight();
261
262 cancelAnimation();
247 setSheetState(mCurrentState, false); 263 setSheetState(mCurrentState, false);
248 } 264 }
249 }); 265 });
250 } 266 }
251 267
252 /** 268 /**
253 * Creates an unadjusted version of a MotionEvent. 269 * Creates an unadjusted version of a MotionEvent.
254 * @param e The original event. 270 * @param e The original event.
255 * @return The unadjusted version of the event. 271 * @return The unadjusted version of the event.
256 */ 272 */
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 private void setSheetOffsetFromBottom(float offset) { 359 private void setSheetOffsetFromBottom(float offset) {
344 setTranslationY(mContainerHeight - offset); 360 setTranslationY(mContainerHeight - offset);
345 } 361 }
346 362
347 /** 363 /**
348 * Moves the sheet to the provided state. 364 * Moves the sheet to the provided state.
349 * @param state The state to move the panel to. 365 * @param state The state to move the panel to.
350 * @param animate If true, the sheet will animate to the provided state, oth erwise it will 366 * @param animate If true, the sheet will animate to the provided state, oth erwise it will
351 * move there instantly. 367 * move there instantly.
352 */ 368 */
353 private void setSheetState(@SheetState int state, boolean animate) { 369 public void setSheetState(@SheetState int state, boolean animate) {
354 mCurrentState = state; 370 mCurrentState = state;
355 371
356 if (animate) { 372 if (animate) {
357 createSettleAnimation(state); 373 createSettleAnimation(state);
358 } else { 374 } else {
359 setSheetOffsetFromBottom(getSheetHeightForState(state)); 375 setSheetOffsetFromBottom(getSheetHeightForState(state));
360 } 376 }
361 } 377 }
362 378
363 /** 379 /**
380 * @return The current state of the bottom sheet. If the sheet is animating, this will be the
381 * state the sheet is animating to.
382 */
383 public int getSheetState() {
384 return mCurrentState;
385 }
386
387 /**
388 * If the animation to settle the sheet in one of its states is running.
389 * @return True if the animation is running.
390 */
391 private boolean isRunningSettleAnimation() {
392 return mSettleAnimator != null;
393 }
394
395 /**
364 * Gets the height of the bottom sheet based on a provided state. 396 * Gets the height of the bottom sheet based on a provided state.
365 * @param state The state to get the height from. 397 * @param state The state to get the height from.
366 * @return The height of the sheet at the provided state. 398 * @return The height of the sheet at the provided state.
367 */ 399 */
368 private float getSheetHeightForState(@SheetState int state) { 400 private float getSheetHeightForState(@SheetState int state) {
369 return mStateRatios[state] * mContainerHeight; 401 return mStateRatios[state] * mContainerHeight;
370 } 402 }
371 403
372 /** 404 /**
373 * Gets the target state of the sheet based on the sheet's height and veloci ty. 405 * Gets the target state of the sheet based on the sheet's height and veloci ty.
(...skipping 27 matching lines...) Expand all
401 float distance = getSheetHeightForState(nextState) - lowerBound; 433 float distance = getSheetHeightForState(nextState) - lowerBound;
402 float thresholdToNextState = 434 float thresholdToNextState =
403 yVelocity < 0.0f ? THRESHOLD_TO_NEXT_STATE : 1.0f - THRESHOLD_TO _NEXT_STATE; 435 yVelocity < 0.0f ? THRESHOLD_TO_NEXT_STATE : 1.0f - THRESHOLD_TO _NEXT_STATE;
404 if ((sheetHeight - lowerBound) / distance > thresholdToNextState) { 436 if ((sheetHeight - lowerBound) / distance > thresholdToNextState) {
405 return nextState; 437 return nextState;
406 } else { 438 } else {
407 return prevState; 439 return prevState;
408 } 440 }
409 } 441 }
410 } 442 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698