Add "tones remaining" argument to DTMF ontonechange callback

Bug: webrtc:9725
Change-Id: I2ad3e57d7357a9bd7cfbfa675df36ec66ff7c851
Reviewed-on: https://webrtc-review.googlesource.com/98361
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24633}
This commit is contained in:
Harald Alvestrand
2018-09-06 09:33:56 +02:00
committed by Commit Bot
parent 792df6b4b9
commit d7b79af9df
3 changed files with 28 additions and 1 deletions

View File

@ -26,7 +26,14 @@ class DtmfSenderObserverInterface {
// Triggered when DTMF |tone| is sent.
// If |tone| is empty that means the DtmfSender has sent out all the given
// tones.
virtual void OnToneChange(const std::string& tone) = 0;
// The callback includes the state of the tone buffer at the time when
// the tone finished playing.
virtual void OnToneChange(const std::string& tone,
const std::string& tone_buffer) {}
// DEPRECATED: Older API without tone buffer.
// TODO(bugs.webrtc.org/9725): Remove old API and default implementation
// when old callers are gone.
virtual void OnToneChange(const std::string& tone) {}
protected:
virtual ~DtmfSenderObserverInterface() = default;

View File

@ -166,6 +166,7 @@ void DtmfSender::DoInsertDtmf() {
tones_.clear();
// Fire a “OnToneChange” event with an empty string and stop.
if (observer_) {
observer_->OnToneChange(std::string(), tones_);
observer_->OnToneChange(std::string());
}
return;
@ -200,6 +201,8 @@ void DtmfSender::DoInsertDtmf() {
// Fire a “OnToneChange” event with the tone that's just processed.
if (observer_) {
observer_->OnToneChange(tones_.substr(first_tone_pos, 1),
tones_.substr(first_tone_pos + 1));
observer_->OnToneChange(tones_.substr(first_tone_pos, 1));
}

View File

@ -34,7 +34,15 @@ class FakeDtmfObserver : public DtmfSenderObserverInterface {
// Implements DtmfSenderObserverInterface.
void OnToneChange(const std::string& tone) override {
tones_from_single_argument_callback_.push_back(tone);
if (tone.empty()) {
completed_ = true;
}
}
void OnToneChange(const std::string& tone,
const std::string& tone_buffer) override {
tones_.push_back(tone);
tones_remaining_ = tone_buffer;
if (tone.empty()) {
completed_ = true;
}
@ -42,10 +50,16 @@ class FakeDtmfObserver : public DtmfSenderObserverInterface {
// getters
const std::vector<std::string>& tones() const { return tones_; }
const std::vector<std::string>& tones_from_single_argument_callback() const {
return tones_from_single_argument_callback_;
}
const std::string tones_remaining() { return tones_remaining_; }
bool completed() const { return completed_; }
private:
std::vector<std::string> tones_;
std::vector<std::string> tones_from_single_argument_callback_;
std::string tones_remaining_;
bool completed_;
};
@ -181,7 +195,10 @@ class DtmfSenderTest : public testing::Test {
const std::vector<std::string>& tones = observer_->tones();
// The observer will get an empty string at the end.
EXPECT_EQ(tones_ref.size() + 1, tones.size());
EXPECT_EQ(observer_->tones(),
observer_->tones_from_single_argument_callback());
EXPECT_TRUE(tones.back().empty());
EXPECT_TRUE(observer_->tones_remaining().empty());
std::string::const_iterator it_ref = tones_ref.begin();
std::vector<std::string>::const_iterator it = tones.begin();
while (it_ref != tones_ref.end() && it != tones.end()) {