chromium/remoting/ios/app/account_manager.h

// 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.

#ifndef REMOTING_IOS_APP_ACCOUNT_MANAGER_H_
#define REMOTING_IOS_APP_ACCOUNT_MANAGER_H_

#include <memory>

#import <UIKit/UIKit.h>

namespace remoting {
namespace ios {

// An interface that provides UI components to manage the user's account. The
// implementation may come from some internal libraries.
//
// This interface does not deal with callbacks of user sign-in, sign-out, or
// account switching. For these events you can listen to the kUserDidUpdate
// event defined in remoting_service.h.
class AccountManager {
 public:
  AccountManager();
  virtual ~AccountManager();

  // Sets the AccountManager singleton. Can only be called once.
  static void SetInstance(std::unique_ptr<AccountManager> account_manager);

  // Gets the AccountManager instance.
  static AccountManager* GetInstance();

  // Creates a view controller that renders an account particle disc, a little
  // circular button that shows the user's avatar image and pops up the account
  // management menu.
  virtual UIViewController* CreateAccountParticleDiscViewController() = 0;

  // Presents a menu that allows the user to choose an account to sign in or add
  // a new account. This is usually used when the app is first launched or the
  // user has previously signed out.
  virtual void PresentSignInMenu() = 0;
};

}  // namespace ios
}  // namespace remoting

#endif  // REMOTING_IOS_APP_ACCOUNT_MANAGER_H_