diff options
Diffstat (limited to 'samples/shared/DefaultErrorCallback.h')
-rw-r--r-- | samples/shared/DefaultErrorCallback.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/samples/shared/DefaultErrorCallback.h b/samples/shared/DefaultErrorCallback.h new file mode 100644 index 00000000..12a80749 --- /dev/null +++ b/samples/shared/DefaultErrorCallback.h @@ -0,0 +1,56 @@ +/* + * Copyright 2020 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. + */ + +#ifndef SAMPLES_DEFAULT_ERROR_CALLBACK_H +#define SAMPLES_DEFAULT_ERROR_CALLBACK_H + +#include <vector> +#include <oboe/AudioStreamCallback.h> +#include <logging_macros.h> + +#include "IRestartable.h" + +/** + * This is a callback object which will be called when a stream error occurs. + * + * It is constructed using an `IRestartable` which allows it to automatically restart the parent + * object if the stream is disconnected (for example, when headphones are attached). + * + * @param IRestartable - the object which should be restarted when the stream is disconnected + */ +class DefaultErrorCallback : public oboe::AudioStreamErrorCallback { +public: + + DefaultErrorCallback(IRestartable &parent): mParent(parent) {} + virtual ~DefaultErrorCallback() = default; + + virtual void onErrorAfterClose(oboe::AudioStream *oboeStream, oboe::Result error) override { + // Restart the stream when it errors out with disconnect + if (error == oboe::Result::ErrorDisconnected) { + LOGE("Restarting AudioStream after disconnect"); + mParent.restart(); + } else { + LOGE("Unknown error"); + } + } + +private: + IRestartable &mParent; + +}; + + +#endif //SAMPLES_DEFAULT_ERROR_CALLBACK_H |