chromium/ios/chrome/app/application_delegate/observing_app_state_agent.h

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_APP_APPLICATION_DELEGATE_OBSERVING_APP_STATE_AGENT_H_
#define IOS_CHROME_APP_APPLICATION_DELEGATE_OBSERVING_APP_STATE_AGENT_H_

#import "ios/chrome/app/application_delegate/app_state_agent.h"
#import "ios/chrome/app/application_delegate/app_state_observer.h"
#import "ios/chrome/browser/shared/coordinator/scene/scene_state_observer.h"

// An app agent that acts as a app state observer.
// Since most agents are also app state observers, this is a convenience base
// class that provides universally useful functionality for app agents.
@interface ObservingAppAgent : NSObject <AppStateAgent, AppStateObserver>

// Returns the agent of this class iff one is already added to `appState`.
+ (instancetype)agentFromApp:(AppState*)appState;

// App state this agent serves and observes.
@property(nonatomic, weak) AppState* appState;

@end

// An App Agent that observes the AppState and every connected scene.
// Provides some convenient synthetic events.
// Use this class when you want to observe some simple event that is made
// complicated because of the multiple windows, e.g. "the app is foreground".
// Extend this class with new events as necessary.
@interface SceneObservingAppAgent : ObservingAppAgent <SceneStateObserver>

// Overridable methods.

// Called when the app enters foreground, e.g. any scene is foreground.
- (void)appDidEnterForeground;

// Called when the app enters background, e.g. no scene is foreground.
- (void)appDidEnterBackground;

// Require super calls for overriden observer callbacks:
- (void)appState:(AppState*)appState
    sceneConnected:(SceneState*)sceneState NS_REQUIRES_SUPER;
- (void)appState:(AppState*)appState
    didTransitionFromInitStage:(InitStage)previousInitStage NS_REQUIRES_SUPER;
- (void)sceneState:(SceneState*)sceneState
    transitionedToActivationLevel:(SceneActivationLevel)level NS_REQUIRES_SUPER;

@end

#endif  // IOS_CHROME_APP_APPLICATION_DELEGATE_OBSERVING_APP_STATE_AGENT_H_