#ifndef CHROME_BROWSER_ASH_ARC_NOTIFICATION_ARC_PROVISION_NOTIFICATION_SERVICE_H_
#define CHROME_BROWSER_ASH_ARC_NOTIFICATION_ARC_PROVISION_NOTIFICATION_SERVICE_H_
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "chrome/browser/ash/arc/session/arc_session_manager_observer.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/session_manager/core/session_manager.h"
#include "components/session_manager/core/session_manager_observer.h"
namespace content {
class BrowserContext;
}
namespace arc {
class ArcBridgeService;
class ArcProvisionNotificationService
: public KeyedService,
public ArcSessionManagerObserver,
public session_manager::SessionManagerObserver {
public:
static ArcProvisionNotificationService* GetForBrowserContext(
content::BrowserContext* context);
ArcProvisionNotificationService(content::BrowserContext* context,
ArcBridgeService* bridge_service);
ArcProvisionNotificationService(const ArcProvisionNotificationService&) =
delete;
ArcProvisionNotificationService& operator=(
const ArcProvisionNotificationService&) = delete;
~ArcProvisionNotificationService() override;
void OnSessionStateChanged() override;
static void EnsureFactoryBuilt();
private:
void MaybeShowNotification();
void ShowNotification();
void HideNotification();
void OnArcPlayStoreEnabledChanged(bool enabled) override;
void OnArcStarted() override;
void OnArcOptInManagementCheckStarted() override;
void OnArcInitialStart() override;
void OnArcSessionStopped(ArcStopReason stop_reason) override;
void OnArcErrorShowRequested(ArcSupportHost::ErrorInfo error_info) override;
const raw_ptr<content::BrowserContext> context_;
base::ScopedObservation<session_manager::SessionManager,
session_manager::SessionManagerObserver>
session_observation_{this};
bool show_on_session_starts_ = false;
};
}
#endif