diff --git a/Telegram/SourceFiles/settings/settings_local_passcode.cpp b/Telegram/SourceFiles/settings/settings_local_passcode.cpp index 342244e98f..44b82b208b 100644 --- a/Telegram/SourceFiles/settings/settings_local_passcode.cpp +++ b/Telegram/SourceFiles/settings/settings_local_passcode.cpp @@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lottie/lottie_icon.h" #include "main/main_domain.h" #include "main/main_session.h" +#include "settings/settings_common.h" #include "storage/storage_domain.h" #include "ui/boxes/confirm_box.h" #include "ui/widgets/buttons.h" @@ -91,6 +92,42 @@ void Divider::paintEvent(QPaintEvent *e) { namespace details { +class LocalPasscodeEnter : public AbstractSection { +public: + enum class EnterType { + Create, + Check, + Change, + }; + + LocalPasscodeEnter( + QWidget *parent, + not_null controller); + ~LocalPasscodeEnter(); + + void showFinished() override; + void setInnerFocus() override; + [[nodiscard]] rpl::producer sectionShowOther() override; + [[nodiscard]] rpl::producer<> sectionShowBack() override; + + [[nodiscard]] rpl::producer title() override; + +protected: + void setupContent(); + + [[nodiscard]] virtual EnterType enterType() const = 0; + +private: + + const not_null _controller; + + rpl::event_stream<> _showFinished; + rpl::event_stream<> _setInnerFocus; + rpl::event_stream _showOther; + rpl::event_stream<> _showBack; + +}; + LocalPasscodeEnter::LocalPasscodeEnter( QWidget *parent, not_null controller) @@ -246,7 +283,7 @@ void LocalPasscodeEnter::setupContent() { } SetPasscode(_controller, newText); if (isCreate) { - _showOther.fire(LocalPasscodeManage::Id()); + _showOther.fire(LocalPasscodeManageId()); } else if (isChange) { _showBack.fire({}); } @@ -262,7 +299,7 @@ void LocalPasscodeEnter::setupContent() { const auto &domain = _controller->session().domain(); if (domain.local().checkPasscode(newText.toUtf8())) { cSetPasscodeBadTries(0); - _showOther.fire(LocalPasscodeManage::Id()); + _showOther.fire(LocalPasscodeManageId()); } else { cSetPasscodeBadTries(cPasscodeBadTries() + 1); cSetPasscodeLastTry(crl::now()); @@ -322,6 +359,95 @@ LocalPasscodeEnter::~LocalPasscodeEnter() = default; } // namespace details +class LocalPasscodeCreate; +class LocalPasscodeCheck; +class LocalPasscodeChange; + +template +class TypedLocalPasscodeEnter : public details::LocalPasscodeEnter { +public: + TypedLocalPasscodeEnter( + QWidget *parent, + not_null controller) + : details::LocalPasscodeEnter(parent, controller) { + setupContent(); + } + + [[nodiscard]] static Type Id() { + return &SectionMetaImplementation::Meta; + } + [[nodiscard]] Type id() const final override { + return Id(); + } + +protected: + [[nodiscard]] EnterType enterType() const final override { + if constexpr (std::is_same_v) { + return EnterType::Create; + } + if constexpr (std::is_same_v) { + return EnterType::Check; + } + if constexpr (std::is_same_v) { + return EnterType::Change; + } + return EnterType::Create; + } + +}; + +class LocalPasscodeCreate final + : public TypedLocalPasscodeEnter { +public: + using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter; + +}; + +class LocalPasscodeCheck final + : public TypedLocalPasscodeEnter { +public: + using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter; + +}; + +class LocalPasscodeChange final + : public TypedLocalPasscodeEnter { +public: + using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter; + +}; + +class LocalPasscodeManage : public Section { +public: + LocalPasscodeManage( + QWidget *parent, + not_null controller); + ~LocalPasscodeManage(); + + [[nodiscard]] rpl::producer title() override; + + void showFinished() override; + [[nodiscard]] rpl::producer sectionShowOther() override; + [[nodiscard]] rpl::producer<> sectionShowBack() override; + + [[nodiscard]] rpl::producer> removeFromStack() override; + + [[nodiscard]] QPointer createPinnedToBottom( + not_null parent) override; + +private: + void setupContent(); + + const not_null _controller; + + rpl::variable _isBottomFillerShown; + + rpl::event_stream<> _showFinished; + rpl::event_stream _showOther; + rpl::event_stream<> _showBack; + +}; + LocalPasscodeManage::LocalPasscodeManage( QWidget *parent, not_null controller) @@ -491,4 +617,16 @@ rpl::producer<> LocalPasscodeManage::sectionShowBack() { LocalPasscodeManage::~LocalPasscodeManage() = default; +Type LocalPasscodeCreateId() { + return LocalPasscodeCreate::Id(); +} + +Type LocalPasscodeCheckId() { + return LocalPasscodeCheck::Id(); +} + +Type LocalPasscodeManageId() { + return LocalPasscodeManage::Id(); +} + } // namespace Settings diff --git a/Telegram/SourceFiles/settings/settings_local_passcode.h b/Telegram/SourceFiles/settings/settings_local_passcode.h index a8103c2718..1f307189c5 100644 --- a/Telegram/SourceFiles/settings/settings_local_passcode.h +++ b/Telegram/SourceFiles/settings/settings_local_passcode.h @@ -7,137 +7,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once -#include "settings/settings_common.h" +#include "settings/settings_type.h" namespace Settings { -namespace details { -class LocalPasscodeEnter : public AbstractSection { -public: - enum class EnterType { - Create, - Check, - Change, - }; - - LocalPasscodeEnter( - QWidget *parent, - not_null controller); - ~LocalPasscodeEnter(); - - void showFinished() override; - void setInnerFocus() override; - [[nodiscard]] rpl::producer sectionShowOther() override; - [[nodiscard]] rpl::producer<> sectionShowBack() override; - - [[nodiscard]] rpl::producer title() override; - -protected: - void setupContent(); - - [[nodiscard]] virtual EnterType enterType() const = 0; - -private: - - const not_null _controller; - - rpl::event_stream<> _showFinished; - rpl::event_stream<> _setInnerFocus; - rpl::event_stream _showOther; - rpl::event_stream<> _showBack; - -}; - -} // namespace details - -class LocalPasscodeCreate; -class LocalPasscodeCheck; -class LocalPasscodeChange; - -template -class TypedLocalPasscodeEnter : public details::LocalPasscodeEnter { -public: - TypedLocalPasscodeEnter( - QWidget *parent, - not_null controller) - : details::LocalPasscodeEnter(parent, controller) { - setupContent(); - } - - [[nodiscard]] static Type Id() { - return &SectionMetaImplementation::Meta; - } - [[nodiscard]] Type id() const final override { - return Id(); - } - -protected: - [[nodiscard]] EnterType enterType() const final override { - if constexpr (std::is_same_v) { - return EnterType::Create; - } - if constexpr (std::is_same_v) { - return EnterType::Check; - } - if constexpr (std::is_same_v) { - return EnterType::Change; - } - return EnterType::Create; - } - -}; - -class LocalPasscodeCreate final - : public TypedLocalPasscodeEnter { -public: - using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter; - -}; - -class LocalPasscodeCheck final - : public TypedLocalPasscodeEnter { -public: - using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter; - -}; - -class LocalPasscodeChange final - : public TypedLocalPasscodeEnter { -public: - using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter; - -}; - -class LocalPasscodeManage : public Section { -public: - LocalPasscodeManage( - QWidget *parent, - not_null controller); - ~LocalPasscodeManage(); - - [[nodiscard]] rpl::producer title() override; - - void showFinished() override; - [[nodiscard]] rpl::producer sectionShowOther() override; - [[nodiscard]] rpl::producer<> sectionShowBack() override; - - [[nodiscard]] rpl::producer> removeFromStack() override; - - [[nodiscard]] QPointer createPinnedToBottom( - not_null parent) override; - -private: - void setupContent(); - - const not_null _controller; - - rpl::variable _isBottomFillerShown; - - rpl::event_stream<> _showFinished; - rpl::event_stream _showOther; - rpl::event_stream<> _showBack; - -}; +Type LocalPasscodeCreateId(); +Type LocalPasscodeCheckId(); +Type LocalPasscodeManageId(); } // namespace Settings diff --git a/Telegram/SourceFiles/settings/settings_privacy_security.cpp b/Telegram/SourceFiles/settings/settings_privacy_security.cpp index 08c283f004..c1a8c2aaa7 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_security.cpp +++ b/Telegram/SourceFiles/settings/settings_privacy_security.cpp @@ -250,9 +250,9 @@ void SetupLocalPasscode( { &st::settingsIconLock, kIconGreen } )->addClickHandler([=] { if (controller->session().domain().local().hasLocalPasscode()) { - showOther(LocalPasscodeCheck::Id()); + showOther(LocalPasscodeCheckId()); } else { - showOther(LocalPasscodeCreate::Id()); + showOther(LocalPasscodeCreateId()); } }); }