// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.components.messages;
/**
* Delegate for message queue to call when a message is about to show and hide. The delegate should
* do preparation work and then call the given callback after preparation is finished.
*/
public interface MessageQueueDelegate {
/**
* Called before a message is shown to allow the delegate to do preparation work. Should be
* called only once before showing.
* @param callback The callback called after all the preparation work has been done.
*/
void onRequestShowing(Runnable callback);
/** Called after all messages are finished hiding. Should be called only once after hiding. */
void onFinishHiding();
/** Called when a message animation is about to start. */
void onAnimationStart();
/** Called after a message animation has ended. */
void onAnimationEnd();
/**
* Returns whether the browser/UI is ready to show items from the queue.
* @return Whether everything is ready for showing a new message.
*/
boolean isReadyForShowing();
/**
* Returns whether the delegate is preparing to show a message.
* @return True if {@link #onRequestShowing(Runnable)} is called but not finished yet.
*/
boolean isPendingShow();
/**
* Returns whether the associated activity has been destroyed.
* @return True if the lifecycle has been destroyed such that no animation will be resumed.
*/
boolean isDestroyed();
/**
* Returns whether the queue is switching to another scope. This is used to catch some edge
* cases in which the browser control is not ready while the scope is about to change.
* @return Whether the queue is switching to another scope.
*/
boolean isSwitchingScope();
}