Commit aa7d32d0 authored by Lijin Shen's avatar Lijin Shen Committed by Commit Bot

[Messages] Wait to show message until browser controls fully visible

Add an observer to notify mediator that message is ready to be
shown when browser controls are fully visibly.

Bug: 1123947
Change-Id: I46396310824a3b10cfafdabcffcc56b6a3104295
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2507401Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Commit-Queue: Lijin Shen <lazzzis@google.com>
Cr-Commit-Position: refs/heads/master@{#823236}
parent f336dcff
......@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.messages;
import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.browser_controls.BrowserControlsUtils;
import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager.Observer;
......@@ -24,6 +26,7 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate {
private BrowserControlsManager mBrowserControlsManager;
private FullscreenManager mFullscreenManager;
private int mBrowserControlsToken = TokenHolder.INVALID_TOKEN;
private BrowserControlsObserver mBrowserControlsObserver;
private FullscreenManager.Observer mFullScreenObserver = new Observer() {
private int mToken = TokenHolder.INVALID_TOKEN;
......@@ -55,10 +58,13 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate {
mFullscreenManager = fullscreenManager;
mQueueController = messageDispatcher;
mFullscreenManager.addObserver(mFullScreenObserver);
mBrowserControlsObserver = new BrowserControlsObserver();
mBrowserControlsManager.addObserver(mBrowserControlsObserver);
}
public void destroy() {
mFullscreenManager.removeObserver(mFullScreenObserver);
mBrowserControlsManager.removeObserver(mBrowserControlsObserver);
mQueueController = null;
mContainerCoordinator = null;
mBrowserControlsManager = null;
......@@ -67,12 +73,14 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate {
@Override
public void prepareToShow(Runnable runnable) {
// TODO(crbug.com/1123947): observe the browser control change to wait until animation
// is finished.
mBrowserControlsToken =
mBrowserControlsManager.getBrowserVisibilityDelegate().showControlsPersistent();
mContainerCoordinator.showMessageContainer();
runnable.run();
if (BrowserControlsUtils.areBrowserControlsFullyVisible(mBrowserControlsManager)) {
runnable.run();
} else {
mBrowserControlsObserver.setOneTimeRunnableOnControlsFullyVisible(runnable);
}
}
@Override
......@@ -98,4 +106,23 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate {
void resumeQueue(int token) {
mQueueController.resume(token);
}
class BrowserControlsObserver implements BrowserControlsStateProvider.Observer {
private Runnable mRunOnControlsFullyVisible;
@Override
public void onControlsOffsetChanged(int topOffset, int topControlsMinHeightOffset,
int bottomOffset, int bottomControlsMinHeightOffset, boolean needsAnimate) {
if (mRunOnControlsFullyVisible != null
&& BrowserControlsUtils.areBrowserControlsFullyVisible(
mBrowserControlsManager)) {
mRunOnControlsFullyVisible.run();
mRunOnControlsFullyVisible = null;
}
}
void setOneTimeRunnableOnControlsFullyVisible(Runnable runnable) {
mRunOnControlsFullyVisible = runnable;
}
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment