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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java

Issue 2443613002: Rename classes related to top controls (Closed)
Patch Set: fix test Created 4 years, 1 month 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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.fullscreen; 5 package org.chromium.chrome.browser.fullscreen;
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.app.Activity; 10 import android.app.Activity;
(...skipping 20 matching lines...) Expand all
31 import org.chromium.base.VisibleForTesting; 31 import org.chromium.base.VisibleForTesting;
32 import org.chromium.base.library_loader.LibraryLoader; 32 import org.chromium.base.library_loader.LibraryLoader;
33 import org.chromium.chrome.browser.fullscreen.FullscreenHtmlApiHandler.Fullscree nHtmlApiDelegate; 33 import org.chromium.chrome.browser.fullscreen.FullscreenHtmlApiHandler.Fullscree nHtmlApiDelegate;
34 import org.chromium.chrome.browser.tab.Tab; 34 import org.chromium.chrome.browser.tab.Tab;
35 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; 35 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
36 import org.chromium.chrome.browser.tabmodel.TabModelSelector; 36 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
37 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver; 37 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver;
38 import org.chromium.chrome.browser.widget.ControlContainer; 38 import org.chromium.chrome.browser.widget.ControlContainer;
39 import org.chromium.content.browser.ContentVideoView; 39 import org.chromium.content.browser.ContentVideoView;
40 import org.chromium.content.browser.ContentViewCore; 40 import org.chromium.content.browser.ContentViewCore;
41 import org.chromium.content_public.common.TopControlsState; 41 import org.chromium.content_public.common.BrowserControlsState;
42 42
43 import java.lang.ref.WeakReference; 43 import java.lang.ref.WeakReference;
44 import java.util.ArrayList; 44 import java.util.ArrayList;
45 import java.util.HashSet; 45 import java.util.HashSet;
46 46
47 /** 47 /**
48 * A class that manages control and content views to create the fullscreen mode. 48 * A class that manages control and content views to create the fullscreen mode.
49 */ 49 */
50 public class ChromeFullscreenManager 50 public class ChromeFullscreenManager
51 extends FullscreenManager implements ActivityStateListener, WindowFocusC hangedListener { 51 extends FullscreenManager implements ActivityStateListener, WindowFocusC hangedListener {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 85
86 private int mPersistentControlsCurrentToken; 86 private int mPersistentControlsCurrentToken;
87 private long mCurrentShowTime; 87 private long mCurrentShowTime;
88 private int mActivityShowToken = INVALID_TOKEN; 88 private int mActivityShowToken = INVALID_TOKEN;
89 89
90 private ObjectAnimator mControlAnimation; 90 private ObjectAnimator mControlAnimation;
91 private boolean mCurrentAnimationIsShowing; 91 private boolean mCurrentAnimationIsShowing;
92 92
93 private boolean mDisableBrowserOverride; 93 private boolean mDisableBrowserOverride;
94 94
95 private boolean mTopControlsPermanentlyHidden; 95 private boolean mBrowserControlsPermanentlyHidden;
96 private boolean mTopControlsAndroidViewHidden; 96 private boolean mBrowserControlsAndroidViewHidden;
97 private final boolean mSupportsBrowserOverride; 97 private final boolean mSupportsBrowserOverride;
98 98
99 private final ArrayList<FullscreenListener> mListeners = new ArrayList<Fulls creenListener>(); 99 private final ArrayList<FullscreenListener> mListeners = new ArrayList<Fulls creenListener>();
100 100
101 /** 101 /**
102 * A listener that gets notified of changes to the fullscreen state. 102 * A listener that gets notified of changes to the fullscreen state.
103 */ 103 */
104 public interface FullscreenListener { 104 public interface FullscreenListener {
105 /** 105 /**
106 * Called whenever the content's offset changes. 106 * Called whenever the content's offset changes.
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 } 268 }
269 } 269 }
270 270
271 @Override 271 @Override
272 protected FullscreenHtmlApiDelegate createApiDelegate() { 272 protected FullscreenHtmlApiDelegate createApiDelegate() {
273 return new FullscreenHtmlApiDelegate() { 273 return new FullscreenHtmlApiDelegate() {
274 @Override 274 @Override
275 public void onEnterFullscreen() { 275 public void onEnterFullscreen() {
276 Tab tab = getTab(); 276 Tab tab = getTab();
277 if (getControlOffset() == -mControlContainerHeight) { 277 if (getControlOffset() == -mControlContainerHeight) {
278 // The top controls are currently hidden. 278 // The browser controls are currently hidden.
279 getHtmlApiHandler().enterFullscreen(tab); 279 getHtmlApiHandler().enterFullscreen(tab);
280 } else { 280 } else {
281 // We should hide top controls first. 281 // We should hide browser controls first.
282 mIsEnteringPersistentModeState = true; 282 mIsEnteringPersistentModeState = true;
283 tab.updateFullscreenEnabledState(); 283 tab.updateFullscreenEnabledState();
284 } 284 }
285 } 285 }
286 286
287 @Override 287 @Override
288 public boolean cancelPendingEnterFullscreen() { 288 public boolean cancelPendingEnterFullscreen() {
289 boolean wasPending = mIsEnteringPersistentModeState; 289 boolean wasPending = mIsEnteringPersistentModeState;
290 mIsEnteringPersistentModeState = false; 290 mIsEnteringPersistentModeState = false;
291 return wasPending; 291 return wasPending;
292 } 292 }
293 293
294 @Override 294 @Override
295 public void onFullscreenExited(Tab tab) { 295 public void onFullscreenExited(Tab tab) {
296 // At this point, top controls are hidden. Show top controls onl y if it's 296 // At this point, browser controls are hidden. Show browser cont rols only if it's
297 // permitted. 297 // permitted.
298 tab.updateTopControlsState(TopControlsState.SHOWN, true); 298 tab.updateBrowserControlsState(BrowserControlsState.SHOWN, true) ;
299 } 299 }
300 300
301 @Override 301 @Override
302 public boolean shouldShowNotificationToast() { 302 public boolean shouldShowNotificationToast() {
303 return !isOverlayVideoMode(); 303 return !isOverlayVideoMode();
304 } 304 }
305 }; 305 };
306 } 306 }
307 307
308 /** 308 /**
309 * Disables the ability for the browser to override the renderer provided to p controls 309 * Disables the ability for the browser to override the renderer provided br owser controls
310 * position for testing. 310 * position for testing.
311 */ 311 */
312 @VisibleForTesting 312 @VisibleForTesting
313 public void disableBrowserOverrideForTest() { 313 public void disableBrowserOverrideForTest() {
314 ThreadUtils.assertOnUiThread(); 314 ThreadUtils.assertOnUiThread();
315 315
316 mDisableBrowserOverride = true; 316 mDisableBrowserOverride = true;
317 mPersistentControlTokens.clear(); 317 mPersistentControlTokens.clear();
318 mHandler.removeMessages(MSG_ID_HIDE_CONTROLS); 318 mHandler.removeMessages(MSG_ID_HIDE_CONTROLS);
319 if (mControlAnimation != null) { 319 if (mControlAnimation != null) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 public void hideControlsPersistent(int token) { 361 public void hideControlsPersistent(int token) {
362 if (!mSupportsBrowserOverride) return; 362 if (!mSupportsBrowserOverride) return;
363 if (mPersistentControlTokens.remove(token) && mPersistentControlTokens.i sEmpty()) { 363 if (mPersistentControlTokens.remove(token) && mPersistentControlTokens.i sEmpty()) {
364 update(false); 364 update(false);
365 } 365 }
366 } 366 }
367 367
368 /** 368 /**
369 * @param remove Whether or not to forcefully remove the toolbar. 369 * @param remove Whether or not to forcefully remove the toolbar.
370 */ 370 */
371 public void setTopControlsPermamentlyHidden(boolean remove) { 371 public void setBrowserControlsPermamentlyHidden(boolean remove) {
372 if (remove == mTopControlsPermanentlyHidden) return; 372 if (remove == mBrowserControlsPermanentlyHidden) return;
373 mTopControlsPermanentlyHidden = remove; 373 mBrowserControlsPermanentlyHidden = remove;
374 updateVisuals(); 374 updateVisuals();
375 } 375 }
376 376
377 /** 377 /**
378 * @return Whether or not the toolbar is forcefully being removed. 378 * @return Whether or not the toolbar is forcefully being removed.
379 */ 379 */
380 public boolean areTopControlsPermanentlyHidden() { 380 public boolean areBrowserControlsPermanentlyHidden() {
381 return mTopControlsPermanentlyHidden; 381 return mBrowserControlsPermanentlyHidden;
382 } 382 }
383 383
384 /** 384 /**
385 * @return Whether the top controls should be drawn as a texture. 385 * @return Whether the browser controls should be drawn as a texture.
386 */ 386 */
387 public boolean drawControlsAsTexture() { 387 public boolean drawControlsAsTexture() {
388 return getControlOffset() > -mControlContainerHeight; 388 return getControlOffset() > -mControlContainerHeight;
389 } 389 }
390 390
391 @Override 391 @Override
392 public int getTopControlsHeight() { 392 public int getBrowserControlsHeight() {
393 return mControlContainerHeight; 393 return mControlContainerHeight;
394 } 394 }
395 395
396 @Override 396 @Override
397 public float getContentOffset() { 397 public float getContentOffset() {
398 if (mTopControlsPermanentlyHidden) return 0; 398 if (mBrowserControlsPermanentlyHidden) return 0;
399 return rendererContentOffset(); 399 return rendererContentOffset();
400 } 400 }
401 401
402 /** 402 /**
403 * @return The offset of the controls from the top of the screen. 403 * @return The offset of the controls from the top of the screen.
404 */ 404 */
405 public float getControlOffset() { 405 public float getControlOffset() {
406 if (mTopControlsPermanentlyHidden) return -getTopControlsHeight(); 406 if (mBrowserControlsPermanentlyHidden) return -getBrowserControlsHeight( );
407 return mControlOffset; 407 return mControlOffset;
408 } 408 }
409 409
410 /** 410 /**
411 * @return The toolbar control container. 411 * @return The toolbar control container.
412 */ 412 */
413 public ControlContainer getControlContainer() { 413 public ControlContainer getControlContainer() {
414 return mControlContainer; 414 return mControlContainer;
415 } 415 }
416 416
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 486
487 /** 487 /**
488 * Updates the content view's viewport size to have it render the content co rrectly. 488 * Updates the content view's viewport size to have it render the content co rrectly.
489 * 489 *
490 * @param viewCore The ContentViewCore to update. 490 * @param viewCore The ContentViewCore to update.
491 */ 491 */
492 public void updateContentViewViewportSize(ContentViewCore viewCore) { 492 public void updateContentViewViewportSize(ContentViewCore viewCore) {
493 if (viewCore == null) return; 493 if (viewCore == null) return;
494 if (mInGesture || mContentViewScrolling) return; 494 if (mInGesture || mContentViewScrolling) return;
495 495
496 // Update content viewport size only when the top controls are not anima ting. 496 // Update content viewport size only when the browser controls are not a nimating.
497 int contentOffset = (int) rendererContentOffset(); 497 int contentOffset = (int) rendererContentOffset();
498 if (contentOffset != 0 && contentOffset != mControlContainerHeight) retu rn; 498 if (contentOffset != 0 && contentOffset != mControlContainerHeight) retu rn;
499 viewCore.setTopControlsHeight(mControlContainerHeight, contentOffset > 0 ); 499 viewCore.setTopControlsHeight(mControlContainerHeight, contentOffset > 0 );
500 } 500 }
501 501
502 @Override 502 @Override
503 public void updateContentViewChildrenState() { 503 public void updateContentViewChildrenState() {
504 ContentViewCore contentViewCore = getActiveContentViewCore(); 504 ContentViewCore contentViewCore = getActiveContentViewCore();
505 if (contentViewCore == null) return; 505 if (contentViewCore == null) return;
506 ViewGroup view = contentViewCore.getContainerView(); 506 ViewGroup view = contentViewCore.getContainerView();
(...skipping 21 matching lines...) Expand all
528 float offset = getControlOffset(); 528 float offset = getControlOffset();
529 if (Float.compare(mPreviousControlOffset, offset) != 0) { 529 if (Float.compare(mPreviousControlOffset, offset) != 0) {
530 mPreviousControlOffset = offset; 530 mPreviousControlOffset = offset;
531 531
532 scheduleVisibilityUpdate(); 532 scheduleVisibilityUpdate();
533 if (shouldShowAndroidControls()) { 533 if (shouldShowAndroidControls()) {
534 mControlContainer.getView().setTranslationY(getControlOffset()); 534 mControlContainer.getView().setTranslationY(getControlOffset());
535 } 535 }
536 536
537 // Whether we need the compositor to draw again to update our animat ion. 537 // Whether we need the compositor to draw again to update our animat ion.
538 // Should be |false| when the top controls are only moved through th e page scrolling. 538 // Should be |false| when the browser controls are only moved throug h the page
539 // scrolling.
539 boolean needsAnimate = mControlAnimation != null || shouldShowAndroi dControls(); 540 boolean needsAnimate = mControlAnimation != null || shouldShowAndroi dControls();
540 for (int i = 0; i < mListeners.size(); i++) { 541 for (int i = 0; i < mListeners.size(); i++) {
541 mListeners.get(i).onVisibleContentOffsetChanged( 542 mListeners.get(i).onVisibleContentOffsetChanged(
542 getVisibleContentOffset(), needsAnimate); 543 getVisibleContentOffset(), needsAnimate);
543 } 544 }
544 } 545 }
545 546
546 final Tab tab = getTab(); 547 final Tab tab = getTab();
547 if (tab != null && offset == -mControlContainerHeight && mIsEnteringPers istentModeState) { 548 if (tab != null && offset == -mControlContainerHeight && mIsEnteringPers istentModeState) {
548 getHtmlApiHandler().enterFullscreen(tab); 549 getHtmlApiHandler().enterFullscreen(tab);
549 mIsEnteringPersistentModeState = false; 550 mIsEnteringPersistentModeState = false;
550 } 551 }
551 552
552 updateContentViewChildrenState(); 553 updateContentViewChildrenState();
553 554
554 float contentOffset = getContentOffset(); 555 float contentOffset = getContentOffset();
555 if (Float.compare(mPreviousContentOffset, contentOffset) != 0) { 556 if (Float.compare(mPreviousContentOffset, contentOffset) != 0) {
556 for (int i = 0; i < mListeners.size(); i++) { 557 for (int i = 0; i < mListeners.size(); i++) {
557 mListeners.get(i).onContentOffsetChanged(contentOffset); 558 mListeners.get(i).onContentOffsetChanged(contentOffset);
558 } 559 }
559 mPreviousContentOffset = contentOffset; 560 mPreviousContentOffset = contentOffset;
560 } 561 }
561 562
562 TraceEvent.end("FullscreenManager:updateVisuals"); 563 TraceEvent.end("FullscreenManager:updateVisuals");
563 } 564 }
564 565
565 /** 566 /**
566 * @param hide Whether or not to force the top controls Android view to hide . If this is 567 * @param hide Whether or not to force the browser controls Android view to hide. If this is
567 * {@code false} the top controls Android view will show/hide ba sed on position, if 568 * {@code false} the browser controls Android view will show/hid e based on position,
568 * it is {@code true} the top controls Android view will always be hidden. 569 * if it is {@code true} the browser controls Android view will always be hidden.
569 */ 570 */
570 public void setHideTopControlsAndroidView(boolean hide) { 571 public void setHideBrowserControlsAndroidView(boolean hide) {
571 if (mTopControlsAndroidViewHidden == hide) return; 572 if (mBrowserControlsAndroidViewHidden == hide) return;
572 mTopControlsAndroidViewHidden = hide; 573 mBrowserControlsAndroidViewHidden = hide;
573 scheduleVisibilityUpdate(); 574 scheduleVisibilityUpdate();
574 } 575 }
575 576
576 private boolean shouldShowAndroidControls() { 577 private boolean shouldShowAndroidControls() {
577 if (mTopControlsAndroidViewHidden) return false; 578 if (mBrowserControlsAndroidViewHidden) return false;
578 579
579 boolean showControls = getControlOffset() == 0; 580 boolean showControls = getControlOffset() == 0;
580 ContentViewCore contentViewCore = getActiveContentViewCore(); 581 ContentViewCore contentViewCore = getActiveContentViewCore();
581 if (contentViewCore == null) return showControls; 582 if (contentViewCore == null) return showControls;
582 ViewGroup contentView = contentViewCore.getContainerView(); 583 ViewGroup contentView = contentViewCore.getContainerView();
583 584
584 for (int i = 0; i < contentView.getChildCount(); i++) { 585 for (int i = 0; i < contentView.getChildCount(); i++) {
585 View child = contentView.getChildAt(i); 586 View child = contentView.getChildAt(i);
586 if (!(child.getLayoutParams() instanceof FrameLayout.LayoutParams)) continue; 587 if (!(child.getLayoutParams() instanceof FrameLayout.LayoutParams)) continue;
587 588
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 } 630 }
630 631
631 private ContentViewCore getActiveContentViewCore() { 632 private ContentViewCore getActiveContentViewCore() {
632 Tab tab = getTab(); 633 Tab tab = getTab();
633 return tab != null ? tab.getContentViewCore() : null; 634 return tab != null ? tab.getContentViewCore() : null;
634 } 635 }
635 636
636 @Override 637 @Override
637 public void setPositionsForTabToNonFullscreen() { 638 public void setPositionsForTabToNonFullscreen() {
638 Tab tab = getTab(); 639 Tab tab = getTab();
639 if (tab == null || tab.isShowingTopControlsEnabled()) { 640 if (tab == null || tab.isShowingBrowserControlsEnabled()) {
640 setPositionsForTab(0, mControlContainerHeight); 641 setPositionsForTab(0, mControlContainerHeight);
641 } else { 642 } else {
642 setPositionsForTab(-mControlContainerHeight, 0); 643 setPositionsForTab(-mControlContainerHeight, 0);
643 } 644 }
644 } 645 }
645 646
646 @Override 647 @Override
647 public void setPositionsForTab(float controlsOffset, float contentOffset) { 648 public void setPositionsForTab(float controlsOffset, float contentOffset) {
648 // Once we get an update from a tab, clear the activity show token and a llow the render 649 // Once we get an update from a tab, clear the activity show token and a llow the render
649 // to control the positions of the top controls. 650 // to control the positions of the browser controls.
650 if (mActivityShowToken != INVALID_TOKEN) { 651 if (mActivityShowToken != INVALID_TOKEN) {
651 hideControlsPersistent(mActivityShowToken); 652 hideControlsPersistent(mActivityShowToken);
652 mActivityShowToken = INVALID_TOKEN; 653 mActivityShowToken = INVALID_TOKEN;
653 } 654 }
654 655
655 float rendererControlOffset = 656 float rendererControlOffset =
656 Math.round(Math.max(controlsOffset, -mControlContainerHeight)); 657 Math.round(Math.max(controlsOffset, -mControlContainerHeight));
657 float rendererContentOffset = Math.min( 658 float rendererContentOffset = Math.min(
658 Math.round(contentOffset), rendererControlOffset + mControlConta inerHeight); 659 Math.round(contentOffset), rendererControlOffset + mControlConta inerHeight);
659 660
660 if (Float.compare(rendererControlOffset, mRendererControlOffset) == 0 661 if (Float.compare(rendererControlOffset, mRendererControlOffset) == 0
661 && Float.compare(rendererContentOffset, mRendererContentOffset) == 0) { 662 && Float.compare(rendererContentOffset, mRendererContentOffset) == 0) {
662 return; 663 return;
663 } 664 }
664 665
665 mRendererControlOffset = rendererControlOffset; 666 mRendererControlOffset = rendererControlOffset;
666 mRendererContentOffset = rendererContentOffset; 667 mRendererContentOffset = rendererContentOffset;
667 updateControlOffset(); 668 updateControlOffset();
668 669
669 if (mControlAnimation == null) updateVisuals(); 670 if (mControlAnimation == null) updateVisuals();
670 } 671 }
671 672
672 /** 673 /**
673 * @param e The dispatched motion event 674 * @param e The dispatched motion event
674 * @return Whether or not this motion event is in the top control container area and should be 675 * @return Whether or not this motion event is in the top control container area and should be
675 * consumed. 676 * consumed.
676 */ 677 */
677 public boolean onInterceptMotionEvent(MotionEvent e) { 678 public boolean onInterceptMotionEvent(MotionEvent e) {
678 return e.getY() < getControlOffset() + mControlContainerHeight 679 return e.getY() < getControlOffset() + mControlContainerHeight
679 && !mTopControlsAndroidViewHidden; 680 && !mBrowserControlsAndroidViewHidden;
680 } 681 }
681 682
682 /** 683 /**
683 * Notifies the fullscreen manager that a motion event has occurred. 684 * Notifies the fullscreen manager that a motion event has occurred.
684 * @param e The dispatched motion event. 685 * @param e The dispatched motion event.
685 */ 686 */
686 public void onMotionEvent(MotionEvent e) { 687 public void onMotionEvent(MotionEvent e) {
687 int eventAction = e.getActionMasked(); 688 int eventAction = e.getActionMasked();
688 if (eventAction == MotionEvent.ACTION_DOWN 689 if (eventAction == MotionEvent.ACTION_DOWN
689 || eventAction == MotionEvent.ACTION_POINTER_DOWN) { 690 || eventAction == MotionEvent.ACTION_POINTER_DOWN) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 mControlAnimation.start(); 762 mControlAnimation.start();
762 mCurrentAnimationIsShowing = show; 763 mCurrentAnimationIsShowing = show;
763 } 764 }
764 765
765 @Override 766 @Override
766 public void onContentViewScrollingStateChanged(boolean scrolling) { 767 public void onContentViewScrollingStateChanged(boolean scrolling) {
767 mContentViewScrolling = scrolling; 768 mContentViewScrolling = scrolling;
768 if (!scrolling) updateVisuals(); 769 if (!scrolling) updateVisuals();
769 } 770 }
770 } 771 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698