// Copyright 2018 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 ASH_BLUETOOTH_DEVICES_OBSERVER_H_
#define ASH_BLUETOOTH_DEVICES_OBSERVER_H_

#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "device/bluetooth/bluetooth_adapter.h"
#include "ui/events/devices/input_device.h"

namespace ash {

// This class observes the bluetooth devices and sends out notification when
// bluetooth device changes. It's used as a supplementary to the class
// ui::InputDeviceEventObserver as InputDeviceEventObserver does not have
// knowledge about bluetooth device status thus does not send notifications of
// bluetooth device changes.
class BluetoothDevicesObserver : public device::BluetoothAdapter::Observer {
 public:
  // Note |device| can be nullptr here if only the bluetooth adapter status
  // changes.
  using AdapterOrDeviceChangedCallback =
      base::RepeatingCallback<void(device::BluetoothDevice* device)>;

  explicit BluetoothDevicesObserver(
      const AdapterOrDeviceChangedCallback& device_changed_callback);
  ~BluetoothDevicesObserver() override;

  // device::BluetoothAdapter::Observer:
  void AdapterPresentChanged(device::BluetoothAdapter* adapter,
                             bool present) override;
  void AdapterPoweredChanged(device::BluetoothAdapter* adapter,
                             bool powered) override;
  void DeviceChanged(device::BluetoothAdapter* adapter,
                     device::BluetoothDevice* device) override;

  // Returns true if |input_device| is a connected bluetooth device. Note this
  // function may not work well if there are more than one identical Bluetooth
  // devices: the function might return true even if it should return false.
  // E.g., Connect two idential bluetooth devices (Input device A & input device
  // B, thus the same vendor id and same product id) to Chrome OS, and then
  // disconnect device A, calling IsConnectedBluetoothDevice(Input device A)
  // still returns true although it should return false as Input device B is
  // still connected. Unfortunately there is no good map from an InputDevice to
  // a BluetoothDevice, thus we can only guess a match.
  bool IsConnectedBluetoothDevice(const ui::InputDevice& input_device) const;

 private:
  void InitializeOnAdapterReady(
      scoped_refptr<device::BluetoothAdapter> adapter);

  // Reference to the underlying Bluetooth Adapter. Used to listen for bluetooth
  // device change event.
  scoped_refptr<device::BluetoothAdapter> bluetooth_adapter_;

  // Callback function to be called when the bluetooth adapter's status or a
  // bluetooth device's status changes.
  AdapterOrDeviceChangedCallback adapter_or_device_changed_callback_;

  base::WeakPtrFactory<BluetoothDevicesObserver> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(BluetoothDevicesObserver);
};

}  // namespace ash

#endif  // ASH_BLUETOOTH_DEVICES_OBSERVER_H_
