text: // Copyright 2014 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #ifndef ATHENA_INPUT_PUBLIC_INPUT_MANAGER_H_
  #define ATHENA_INPUT_PUBLIC_INPUT_MANAGER_H_
  
  #include "athena/athena_export.h"
  
  namespace aura {
  class Window;
  }
  
  namespace ui {
  class EventTarget;
  }
  
  namespace athena {
  class AcceleratorManager;
  
  class PowerButtonObserver {
   public:
    enum State {
      PRESSED,
      LONG_PRESSED,
      RELEASED,
    };
    virtual ~PowerButtonObserver() {}
    virtual void OnPowerButtonStateChanged(State state) = 0;
  };
  
  class ATHENA_EXPORT InputManager {
   public:
    // Creates and deletes the singleton object of the InputManager
    // implementation.
    static InputManager* Create();
    static InputManager* Get();
    static void Shutdown();
  
    // TODO(oshima): Fix the initialization process and replace this
    // with EnvObserver::WindowInitialized
    virtual void OnRootWindowCreated(aura::Window* root_window) = 0;
  
    // Add/remove power button observer.
    virtual void AddPowerButtonObserver(PowerButtonObserver* observer) = 0;
    virtual void RemovePowerButtonObserver(PowerButtonObserver* observer) = 0;
  
    virtual ui::EventTarget* GetTopmostEventTarget() = 0;
    virtual AcceleratorManager* GetAcceleratorManager() = 0;
  
    virtual ~InputManager() {}
  };
  
  }  // namespace athena
  
  #endif  // ATHENA_INPUT_PUBLIC_INPUT_MANAGER_H_
  