diff --git a/Telegram/SourceFiles/auth_session.cpp b/Telegram/SourceFiles/auth_session.cpp index 2f9dce4fb..0ef8f3751 100644 --- a/Telegram/SourceFiles/auth_session.cpp +++ b/Telegram/SourceFiles/auth_session.cpp @@ -476,9 +476,17 @@ void AuthSession::saveSettingsDelayed(crl::time delay) { _saveDataTimer.callOnce(delay); } +void AuthSession::localPasscodeChanged() { + _shouldLockAt = 0; + _autoLockTimer.cancel(); + checkAutoLock(); +} + void AuthSession::checkAutoLock() { if (!Global::LocalPasscode() || Core::App().passcodeLocked()) { + _shouldLockAt = 0; + _autoLockTimer.cancel(); return; } @@ -487,6 +495,8 @@ void AuthSession::checkAutoLock() { const auto shouldLockInMs = Global::AutoLock() * 1000LL; const auto checkTimeMs = now - Core::App().lastNonIdleTime(); if (checkTimeMs >= shouldLockInMs || (_shouldLockAt > 0 && now > _shouldLockAt + kAutoLockTimeoutLateMs)) { + _shouldLockAt = 0; + _autoLockTimer.cancel(); Core::App().lockByPasscode(); } else { _shouldLockAt = now + (shouldLockInMs - checkTimeMs); diff --git a/Telegram/SourceFiles/auth_session.h b/Telegram/SourceFiles/auth_session.h index 84ce215aa..aa7fc789f 100644 --- a/Telegram/SourceFiles/auth_session.h +++ b/Telegram/SourceFiles/auth_session.h @@ -316,6 +316,7 @@ public: void checkAutoLock(); void checkAutoLockIn(crl::time time); + void localPasscodeChanged(); rpl::lifetime &lifetime() { return _lifetime; diff --git a/Telegram/SourceFiles/boxes/passcode_box.cpp b/Telegram/SourceFiles/boxes/passcode_box.cpp index c5e4f0a82..94e54e9b5 100644 --- a/Telegram/SourceFiles/boxes/passcode_box.cpp +++ b/Telegram/SourceFiles/boxes/passcode_box.cpp @@ -452,10 +452,13 @@ void PasscodeBox::save(bool force) { changeCloudPassword(old, pwd); } } else { + const auto weak = make_weak(this); cSetPasscodeBadTries(0); Local::setPasscode(pwd.toUtf8()); - Auth().checkAutoLock(); - closeBox(); + Auth().localPasscodeChanged(); + if (weak) { + closeBox(); + } } }