// Copyright 2016 The Android Open Source Project
//
// 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.
//
// Callback object to be passed to brilloaudioservice.
#ifndef BRILLO_AUDIO_AUDIOSERVICE_AUDIO_SERVICE_CALLBACK_H_
#define BRILLO_AUDIO_AUDIOSERVICE_AUDIO_SERVICE_CALLBACK_H_
#include <vector>
#include <base/callback.h>
#include <binder/Status.h>
#include "android/brillo/brilloaudioservice/BnAudioServiceCallback.h"
#include "include/brillo_audio_manager.h"
using android::binder::Status;
using android::brillo::brilloaudioservice::BnAudioServiceCallback;
namespace brillo {
class AudioServiceCallback : public BnAudioServiceCallback {
public:
// Constructor for AudioServiceCallback.
//
// |callback| is an object of type BAudioCallback.
// |user_data| is an object to be passed to the callbacks.
AudioServiceCallback(const BAudioCallback* callback, void* user_data);
// Callback function triggered when a device is connected.
//
// |devices| is a vector of audio_devices_t.
Status OnAudioDevicesConnected(const std::vector<int>& devices);
// Callback function triggered when a device is disconnected.
//
// |devices| is a vector of audio_devices_t.
Status OnAudioDevicesDisconnected(const std::vector<int>& devices);
// Callback function triggered when volume is changed.
//
// |stream| is an int representing the stream.
// |previous_index| is the volume index before the key press.
// |current_index| is the volume index after the key press.
Status OnVolumeChanged(int stream, int previous_index, int current_index);
// Method to compare two AudioServiceCallback objects.
//
// |callback| is a ref counted pointer to a AudioServiceCallback object to be
// compared with this.
//
// Returns true if |callback| equals this.
bool Equals(const android::sp<AudioServiceCallback>& callback);
private:
// Callback when devices are connected.
base::Callback<void(const BAudioDeviceInfo*, void*)> connected_callback_;
// Callback when devices are disconnected.
base::Callback<void(const BAudioDeviceInfo*, void*)> disconnected_callback_;
// Callback when the volume button is pressed.
base::Callback<void(BAudioUsage, int, int, void*)> volume_callback_;
// User data passed to the callbacks.
void* user_data_;
};
} // namespace brillo
#endif // BRILLO_AUDIO_AUDIOSERVICE_AUDIO_SERVICE_CALLBACK_H_