// 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 UI_EVENTS_OZONE_DEVICE_DEVICE_MANAGER_H_
#define UI_EVENTS_OZONE_DEVICE_DEVICE_MANAGER_H_

#include <memory>

#include "ui/events/ozone/events_ozone_export.h"

namespace ui {

class DeviceEventObserver;

class EVENTS_OZONE_EXPORT DeviceManager {
 public:
  virtual ~DeviceManager() {}

  // Scans the currently available devices and notifies |observer| for each
  // device found. If also registering for notifications through AddObserver(),
  // the scan should happen after the registration otherwise the observer may
  // miss events.
  virtual void ScanDevices(DeviceEventObserver* observer) = 0;

  // Registers |observer| for device event notifications.
  virtual void AddObserver(DeviceEventObserver* observer) = 0;

  // Removes |observer| from the list of observers notified.
  virtual void RemoveObserver(DeviceEventObserver* observer) = 0;
};

EVENTS_OZONE_EXPORT std::unique_ptr<DeviceManager> CreateDeviceManager();

}  // namespace ui

#endif  // UI_EVENTS_OZONE_DEVICE_DEVICE_MANAGER_H_
