From e7dcd5ab15570e5e268aa6fd0284ff547c5a1325 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 8 May 2017 12:26:43 +0300 Subject: [PATCH] Don't decline awaited incoming call on app quit. --- Telegram/SourceFiles/calls/calls_call.cpp | 7 +++++++ Telegram/SourceFiles/calls/calls_call.h | 1 + Telegram/SourceFiles/calls/calls_instance.cpp | 2 +- Telegram/SourceFiles/calls/calls_panel.cpp | 8 ++++---- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Telegram/SourceFiles/calls/calls_call.cpp b/Telegram/SourceFiles/calls/calls_call.cpp index ca2c88ca9..bce0bfbb8 100644 --- a/Telegram/SourceFiles/calls/calls_call.cpp +++ b/Telegram/SourceFiles/calls/calls_call.cpp @@ -106,6 +106,13 @@ void Call::generateModExpFirst(base::const_byte_span randomSeed) { } } +bool Call::isIncomingWaiting() const { + if (type() != Call::Type::Incoming) { + return false; + } + return (_state == State::Starting) || (_state == State::WaitingIncoming); +} + void Call::start(base::const_byte_span random) { // Save config here, because it is possible that it changes between // different usages inside the same call. diff --git a/Telegram/SourceFiles/calls/calls_call.h b/Telegram/SourceFiles/calls/calls_call.h index eab2b4943..a6928b63d 100644 --- a/Telegram/SourceFiles/calls/calls_call.h +++ b/Telegram/SourceFiles/calls/calls_call.h @@ -77,6 +77,7 @@ public: gsl::not_null user() const { return _user; } + bool isIncomingWaiting() const; void start(base::const_byte_span random); bool handleUpdate(const MTPPhoneCall &call); diff --git a/Telegram/SourceFiles/calls/calls_instance.cpp b/Telegram/SourceFiles/calls/calls_instance.cpp index fce7051eb..36c68ee42 100644 --- a/Telegram/SourceFiles/calls/calls_instance.cpp +++ b/Telegram/SourceFiles/calls/calls_instance.cpp @@ -253,7 +253,7 @@ void Instance::showInfoPanel(gsl::not_null call) { } bool Instance::isQuitPrevent() { - if (!_currentCall) { + if (!_currentCall || _currentCall->isIncomingWaiting()) { return false; } _currentCall->hangup(); diff --git a/Telegram/SourceFiles/calls/calls_panel.cpp b/Telegram/SourceFiles/calls/calls_panel.cpp index 159617ca2..254464818 100644 --- a/Telegram/SourceFiles/calls/calls_panel.cpp +++ b/Telegram/SourceFiles/calls/calls_panel.cpp @@ -318,7 +318,7 @@ void Panel::initControls() { auto state = _call->state(); if (state == State::Busy) { _call->redial(); - } else if ((_call->type() == Call::Type::Incoming) && ((state == State::Starting) || (state == State::WaitingIncoming))) { + } else if (_call->isIncomingWaiting()) { _call->answer(); } else { _call->hangup(); @@ -702,11 +702,11 @@ void Panel::stateChanged(State state) { button->toggleAnimated(visible); } }; - auto waitingIncoming = (_call->type() == Call::Type::Incoming) && ((state == State::Starting) || (state == State::WaitingIncoming)); - if (waitingIncoming) { + auto incomingWaiting = _call->isIncomingWaiting(); + if (incomingWaiting) { _updateOuterRippleTimer.callEach(Call::kSoundSampleMs); } - toggleButton(_decline, waitingIncoming); + toggleButton(_decline, incomingWaiting); toggleButton(_cancel, (state == State::Busy)); auto hangupShown = _decline->isHiddenOrHiding() && _cancel->isHiddenOrHiding(); if (_hangupShown != hangupShown) {