blob: c97c9a31808f40ed7d9d028968e70833392b3c9c [file] [log] [blame]
//
// Copyright (C) 2017 Google, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at:
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#pragma once
#include <base/macros.h>
#include <base/observer_list.h>
#include "abstract_observer_list.h"
#include "service/hal/bluetooth_av_interface.h"
#include "types/raw_address.h"
namespace bluetooth {
namespace hal {
class FakeBluetoothAvInterface : public BluetoothAvInterface {
public:
// Handles HAL Bluetooth A2DP API calls for testing. Test code can provide a
// fake or mock implementation of this and all calls will be routed to it.
class TestA2dpSourceHandler {
public:
virtual bt_status_t Connect(RawAddress bda) = 0;
virtual bt_status_t Disconnect(RawAddress bda) = 0;
protected:
virtual ~TestA2dpSourceHandler() = default;
};
class TestA2dpSinkHandler {
public:
virtual bt_status_t Connect(RawAddress bda) = 0;
virtual bt_status_t Disconnect(RawAddress bda) = 0;
virtual void SetAudioFocusState(int focus_state) = 0;
virtual void SetAudioTrackGain(float gain) = 0;
protected:
virtual ~TestA2dpSinkHandler() = default;
};
// Constructs the fake with the given handlers. Implementations can
// provide their own handlers or simply pass "nullptr" for the default
// behavior in which BT_STATUS_FAIL will be returned from all calls.
FakeBluetoothAvInterface(
std::shared_ptr<TestA2dpSourceHandler> a2dp_source_handler);
FakeBluetoothAvInterface(
std::shared_ptr<TestA2dpSinkHandler> a2dp_sink_handler);
~FakeBluetoothAvInterface();
// The methods below can be used to notify observers with certain events and
// given parameters.
// A2DP common callbacks
void NotifyConnectionState(const RawAddress& bda,
btav_connection_state_t state);
void NotifyAudioState(const RawAddress& bda, btav_audio_state_t state);
// A2DP source callbacks
void NotifyAudioConfig(
const RawAddress& bda, const btav_a2dp_codec_config_t& codec_config,
const std::vector<btav_a2dp_codec_config_t> codecs_local_capabilities,
const std::vector<btav_a2dp_codec_config_t>
codecs_selectable_capabilities);
bool QueryMandatoryCodecPreferred(const RawAddress& bda);
// A2DP sink callbacks
void NotifyAudioConfig(const RawAddress& bda, uint32_t sample_rate,
uint8_t channel_count);
// BluetoothAvInterface overrides:
bool A2dpSourceEnable(
std::vector<btav_a2dp_codec_config_t> codec_priorities) override;
void A2dpSourceDisable() override;
bool A2dpSinkEnable() override;
void A2dpSinkDisable() override;
void AddA2dpSourceObserver(A2dpSourceObserver* observer) override;
void RemoveA2dpSourceObserver(A2dpSourceObserver* observer) override;
void AddA2dpSinkObserver(A2dpSinkObserver* observer) override;
void RemoveA2dpSinkObserver(A2dpSinkObserver* observer) override;
const btav_source_interface_t* GetA2dpSourceHALInterface() override;
const btav_sink_interface_t* GetA2dpSinkHALInterface() override;
private:
btbase::AbstractObserverList<A2dpSourceObserver> a2dp_source_observers_;
btbase::AbstractObserverList<A2dpSinkObserver> a2dp_sink_observers_;
DISALLOW_COPY_AND_ASSIGN(FakeBluetoothAvInterface);
};
} // namespace hal
} // namespace bluetooth