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 @@ ...@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.messages; 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.BrowserControlsManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager.Observer; import org.chromium.chrome.browser.fullscreen.FullscreenManager.Observer;
...@@ -24,6 +26,7 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate { ...@@ -24,6 +26,7 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate {
private BrowserControlsManager mBrowserControlsManager; private BrowserControlsManager mBrowserControlsManager;
private FullscreenManager mFullscreenManager; private FullscreenManager mFullscreenManager;
private int mBrowserControlsToken = TokenHolder.INVALID_TOKEN; private int mBrowserControlsToken = TokenHolder.INVALID_TOKEN;
private BrowserControlsObserver mBrowserControlsObserver;
private FullscreenManager.Observer mFullScreenObserver = new Observer() { private FullscreenManager.Observer mFullScreenObserver = new Observer() {
private int mToken = TokenHolder.INVALID_TOKEN; private int mToken = TokenHolder.INVALID_TOKEN;
...@@ -55,10 +58,13 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate { ...@@ -55,10 +58,13 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate {
mFullscreenManager = fullscreenManager; mFullscreenManager = fullscreenManager;
mQueueController = messageDispatcher; mQueueController = messageDispatcher;
mFullscreenManager.addObserver(mFullScreenObserver); mFullscreenManager.addObserver(mFullScreenObserver);
mBrowserControlsObserver = new BrowserControlsObserver();
mBrowserControlsManager.addObserver(mBrowserControlsObserver);
} }
public void destroy() { public void destroy() {
mFullscreenManager.removeObserver(mFullScreenObserver); mFullscreenManager.removeObserver(mFullScreenObserver);
mBrowserControlsManager.removeObserver(mBrowserControlsObserver);
mQueueController = null; mQueueController = null;
mContainerCoordinator = null; mContainerCoordinator = null;
mBrowserControlsManager = null; mBrowserControlsManager = null;
...@@ -67,12 +73,14 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate { ...@@ -67,12 +73,14 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate {
@Override @Override
public void prepareToShow(Runnable runnable) { public void prepareToShow(Runnable runnable) {
// TODO(crbug.com/1123947): observe the browser control change to wait until animation
// is finished.
mBrowserControlsToken = mBrowserControlsToken =
mBrowserControlsManager.getBrowserVisibilityDelegate().showControlsPersistent(); mBrowserControlsManager.getBrowserVisibilityDelegate().showControlsPersistent();
mContainerCoordinator.showMessageContainer(); mContainerCoordinator.showMessageContainer();
if (BrowserControlsUtils.areBrowserControlsFullyVisible(mBrowserControlsManager)) {
runnable.run(); runnable.run();
} else {
mBrowserControlsObserver.setOneTimeRunnableOnControlsFullyVisible(runnable);
}
} }
@Override @Override
...@@ -98,4 +106,23 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate { ...@@ -98,4 +106,23 @@ public class ChromeMessageQueueMediator implements MessageQueueDelegate {
void resumeQueue(int token) { void resumeQueue(int token) {
mQueueController.resume(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