From c9c988e5f48b823eabfe522155cc3da827101509 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 6 May 2022 05:58:45 +0300 Subject: [PATCH] Added step section of hint input to cloud password settings. --- Telegram/CMakeLists.txt | 2 + .../animations/cloud_password/hint.tgs | Bin 0 -> 3696 bytes Telegram/Resources/langs/lang.strings | 3 +- .../Resources/qrc/telegram/animations.qrc | 1 + .../settings_cloud_password_common.cpp | 13 ++ .../settings_cloud_password_common.h | 9 ++ .../settings_cloud_password_hint.cpp | 112 ++++++++++++++++++ .../settings_cloud_password_hint.h | 17 +++ .../settings_cloud_password_input.cpp | 2 + 9 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 Telegram/Resources/animations/cloud_password/hint.tgs create mode 100644 Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp create mode 100644 Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.h diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index dd4a7fe51..9149029ae 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -1074,6 +1074,8 @@ PRIVATE profile/profile_cover_drop_area.h settings/cloud_password/settings_cloud_password_common.cpp settings/cloud_password/settings_cloud_password_common.h + settings/cloud_password/settings_cloud_password_hint.cpp + settings/cloud_password/settings_cloud_password_hint.h settings/cloud_password/settings_cloud_password_input.cpp settings/cloud_password/settings_cloud_password_input.h settings/cloud_password/settings_cloud_password_start.cpp diff --git a/Telegram/Resources/animations/cloud_password/hint.tgs b/Telegram/Resources/animations/cloud_password/hint.tgs new file mode 100644 index 0000000000000000000000000000000000000000..c85dd321dfba45206a3b6d24bf46c8e0ae34182a GIT binary patch literal 3696 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 OfBhfVWsMr{k^lgSB@nOx literal 0 HcmV?d00001 diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 9060e836b..600a48a4c 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -561,6 +561,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_settings_cloud_password_manage_email_new" = "Set Recovery Email"; "lng_settings_cloud_password_manage_email_change" = "Change Recovery Email"; "lng_settings_cloud_password_manage_password_change" = "Change Password"; +"lng_settings_cloud_password_skip_hint" = "Skip hint"; "lng_clear_payment_info_title" = "Clear payment info"; "lng_clear_payment_info_sure" = "Are you sure you want to clear your payment and shipping info?"; @@ -701,7 +702,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_cloud_password_enter_first" = "Enter a password"; "lng_cloud_password_enter_new" = "Enter password"; "lng_cloud_password_confirm_new" = "Re-enter password"; -"lng_cloud_password_hint" = "Enter password hint"; +"lng_cloud_password_hint" = "Enter Password Hint"; "lng_cloud_password_change_hint" = "Enter new password hint"; "lng_cloud_password_bad" = "Password and hint cannot be the same."; "lng_cloud_password_email" = "Enter recovery email"; diff --git a/Telegram/Resources/qrc/telegram/animations.qrc b/Telegram/Resources/qrc/telegram/animations.qrc index 3b435db30..f8590c6bb 100644 --- a/Telegram/Resources/qrc/telegram/animations.qrc +++ b/Telegram/Resources/qrc/telegram/animations.qrc @@ -6,5 +6,6 @@ ../../animations/local_passcode_enter.tgs ../../animations/cloud_password/intro.tgs ../../animations/cloud_password/password_input.tgs + ../../animations/cloud_password/hint.tgs diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp index fc9a3c9fc..c1414a27a 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.cpp @@ -150,6 +150,19 @@ not_null AddPasswordField( return field; } +not_null*> AddWrappedField( + not_null content, + rpl::producer &&placeholder, + const QString &text) { + return content->add(object_ptr>( + content, + object_ptr( + content, + st::settingLocalPasscodeInputField, + std::move(placeholder), + text))); +} + not_null AddError( not_null content, Ui::PasswordInput *input) { diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h index 19db8ab35..cd226079d 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_common.h @@ -11,7 +11,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/box_content_divider.h" namespace Ui { +template +class CenterWrap; class FlatLabel; +class InputField; class PasswordInput; class RoundButton; class VerticalLayout; @@ -21,6 +24,7 @@ namespace Settings::CloudPassword { struct StepData { QString password; + QString hint; }; void SetupHeader( @@ -35,6 +39,11 @@ void SetupHeader( rpl::producer &&placeholder, const QString &text); +[[nodiscard]] not_null*> AddWrappedField( + not_null content, + rpl::producer &&placeholder, + const QString &text); + [[nodiscard]] not_null AddError( not_null content, Ui::PasswordInput *input); diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp new file mode 100644 index 000000000..b847268a0 --- /dev/null +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.cpp @@ -0,0 +1,112 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#include "settings/cloud_password/settings_cloud_password_hint.h" + +#include "lang/lang_keys.h" +#include "settings/cloud_password/settings_cloud_password_common.h" +#include "settings/cloud_password/settings_cloud_password_email.h" +#include "ui/widgets/buttons.h" +#include "ui/widgets/input_fields.h" +#include "ui/widgets/labels.h" +#include "ui/wrap/padding_wrap.h" +#include "ui/wrap/vertical_layout.h" +#include "styles/style_boxes.h" +#include "styles/style_settings.h" + +namespace Settings { +namespace CloudPassword { + +class Hint : public TypedAbstractStep { +public: + using TypedAbstractStep::TypedAbstractStep; + + [[nodiscard]] rpl::producer title() override; + void setupContent(); + +}; + +rpl::producer Hint::title() { + return tr::lng_settings_cloud_password_hint_title(); +} + +void Hint::setupContent() { + const auto content = Ui::CreateChild(this); + auto currentStepData = stepData(); + const auto currentStepDataHint = base::take(currentStepData.hint); + setStepData(currentStepData); + + SetupHeader( + content, + u"cloud_password/hint"_q, + showFinishes(), + tr::lng_settings_cloud_password_hint_subtitle(), + tr::lng_settings_cloud_password_hint_about()); + + AddSkip(content, st::settingLocalPasscodeDescriptionBottomSkip); + + const auto wrap = AddWrappedField( + content, + tr::lng_cloud_password_hint(), + currentStepDataHint); + const auto newInput = wrap->entity(); + const auto error = AddError(content, nullptr); + QObject::connect(newInput, &Ui::InputField::changed, [=] { + error->hide(); + }); + AddSkipInsteadOfField(content); + + const auto save = [=](const QString &hint) { + auto data = stepData(); + data.hint = hint; + setStepData(std::move(data)); + showOther(CloudPasswordEmailId()); + }; + + const auto skip = Ui::CreateChild( + this, + tr::lng_settings_cloud_password_skip_hint(tr::now)); + wrap->geometryValue( + ) | rpl::start_with_next([=](QRect r) { + r.translate(wrap->entity()->pos().x(), 0); + skip->moveToLeft(r.x(), r.y() + r.height() + st::passcodeTextLine); + }, skip->lifetime()); + skip->setClickedCallback([=] { + save(QString()); + }); + + const auto button = AddDoneButton(content, tr::lng_continue()); + button->setClickedCallback([=] { + const auto newText = newInput->getLastText(); + if (newText.isEmpty()) { + newInput->setFocus(); + newInput->showError(); + } else if (newText == stepData().password) { + error->show(); + error->setText(tr::lng_cloud_password_bad(tr::now)); + newInput->setFocus(); + newInput->showError(); + } else { + save(newText); + } + }); + + const auto submit = [=] { button->clicked({}, Qt::LeftButton); }; + QObject::connect(newInput, &Ui::InputField::submitted, submit); + + setFocusCallback([=] { newInput->setFocus(); }); + + Ui::ResizeFitChild(this, content); +} + +} // namespace CloudPassword + +Type CloudPasswordHintId() { + return CloudPassword::Hint::Id(); +} + +} // namespace Settings diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.h b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.h new file mode 100644 index 000000000..6a4df1097 --- /dev/null +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_hint.h @@ -0,0 +1,17 @@ +/* +This file is part of Telegram Desktop, +the official desktop application for the Telegram messaging service. + +For license and copyright information please follow this link: +https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL +*/ +#pragma once + +#include "settings/settings_type.h" + +namespace Settings { + +Type CloudPasswordHintId(); + +} // namespace Settings + diff --git a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp index 907ced39c..80ba14bc7 100644 --- a/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp +++ b/Telegram/SourceFiles/settings/cloud_password/settings_cloud_password_input.cpp @@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "lottie/lottie_icon.h" #include "settings/cloud_password/settings_cloud_password_common.h" +#include "settings/cloud_password/settings_cloud_password_hint.h" #include "ui/widgets/buttons.h" #include "ui/widgets/input_fields.h" #include "ui/widgets/labels.h" @@ -130,6 +131,7 @@ void Input::setupContent() { auto data = stepData(); data.password = newText; setStepData(std::move(data)); + showOther(CloudPasswordHintId()); } });