Index: chrome/browser/chromeos/lock_screen_apps/state_controller.h |
diff --git a/chrome/browser/chromeos/lock_screen_apps/state_controller.h b/chrome/browser/chromeos/lock_screen_apps/state_controller.h |
index 0d9d401aa158bcf3a1def3cf373436ce2df2e091..78e3938159dc1b885bf57f0c16490aaf463c09ad 100644 |
--- a/chrome/browser/chromeos/lock_screen_apps/state_controller.h |
+++ b/chrome/browser/chromeos/lock_screen_apps/state_controller.h |
@@ -9,9 +9,18 @@ |
#include "ash/public/interfaces/tray_action.mojom.h" |
#include "base/observer_list.h" |
+#include "base/scoped_observer.h" |
+#include "chrome/browser/chromeos/lock_screen_apps/app_manager.h" |
#include "chrome/browser/chromeos/lock_screen_apps/state_observer.h" |
+#include "components/session_manager/core/session_manager_observer.h" |
#include "mojo/public/cpp/bindings/binding.h" |
+class Profile; |
+ |
+namespace session_manager { |
+class SessionManager; |
+} |
+ |
namespace lock_screen_apps { |
class StateObserver; |
@@ -19,7 +28,8 @@ class StateObserver; |
// Manages state of lock screen action handler apps, and notifies |
// interested parties as the state changes. |
// Currently assumes single supported action - NEW_NOTE. |
-class StateController : public ash::mojom::TrayActionClient { |
+class StateController : public ash::mojom::TrayActionClient, |
+ public session_manager::SessionManagerObserver { |
public: |
// Returns whether the StateController is enabled - it is currently guarded by |
// a feature flag. If not enabled, |StateController| instance is not allowed |
@@ -40,10 +50,14 @@ class StateController : public ash::mojom::TrayActionClient { |
// Has to be called before |Initialize|. |
void SetTrayActionPtrForTesting(ash::mojom::TrayActionPtr tray_action_ptr); |
void FlushTrayActionForTesting(); |
+ // Sets test AppManager implementation. Should be called before |
+ // |SetPrimaryProfile| |
+ void SetAppManagerForTesting(std::unique_ptr<AppManager> app_manager); |
// Initializes mojo bindings for the StateController - it creates binding to |
// ash's tray action interface and sets this object as the interface's client. |
void Initialize(); |
+ void SetPrimaryProfile(Profile* profile); |
void AddObserver(StateObserver* observer); |
void RemoveObserver(StateObserver* observer); |
@@ -54,6 +68,9 @@ class StateController : public ash::mojom::TrayActionClient { |
// ash::mojom::TrayActionClient: |
void RequestNewLockScreenNote() override; |
+ // session_manager::SessionManagerObserver: |
+ void OnSessionStateChanged() override; |
+ |
// If there are any active lock screen action handlers, moved their windows |
// to background, to ensure lock screen UI is visible. |
void MoveToBackground(); |
@@ -67,6 +84,9 @@ class StateController : public ash::mojom::TrayActionClient { |
void SetLockScreenNoteStateForTesting(ash::mojom::TrayActionState state); |
private: |
+ // Called when app manager reports that note taking availability has changed. |
+ void OnNoteTakingAvailabilityChanged(); |
+ |
// Requests lock screen note action state change to |state|. |
// Returns whether the action state has changed. |
bool UpdateLockScreenNoteState(ash::mojom::TrayActionState state); |
@@ -83,6 +103,12 @@ class StateController : public ash::mojom::TrayActionClient { |
mojo::Binding<ash::mojom::TrayActionClient> binding_; |
ash::mojom::TrayActionPtr tray_action_ptr_; |
+ std::unique_ptr<AppManager> app_manager_; |
+ |
+ ScopedObserver<session_manager::SessionManager, |
+ session_manager::SessionManagerObserver> |
+ session_observer_; |
+ |
DISALLOW_COPY_AND_ASSIGN(StateController); |
}; |