From 405ccb8580ed565dcd2ceff3dd02a8cb3b4e675a Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 29 Aug 2019 11:44:03 +0300 Subject: [PATCH] Add editing of AddedByPhone privacy. --- Telegram/Resources/langs/lang.strings | 3 + Telegram/SourceFiles/apiwrap.cpp | 4 + Telegram/SourceFiles/apiwrap.h | 1 + .../SourceFiles/boxes/edit_privacy_box.cpp | 18 ++++- Telegram/SourceFiles/boxes/edit_privacy_box.h | 18 ++++- .../view/history_view_schedule_box.cpp | 2 +- .../settings/settings_privacy_controllers.cpp | 79 ++++++++++++++++++- .../settings/settings_privacy_controllers.h | 12 +++ .../settings/settings_privacy_security.cpp | 2 + 9 files changed, 128 insertions(+), 11 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index ece3d18e0..7ba9df501 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -631,6 +631,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_edit_privacy_phone_number_always_title" = "Always share with"; "lng_edit_privacy_phone_number_never_title" = "Never share with"; +"lng_edit_privacy_phone_number_find" = "Who can find me by my number"; +"lng_edit_privacy_phone_number_contacts" = "Users who add your number to their contacts will see it on Telegram only if they are your contacts."; + "lng_edit_privacy_lastseen_title" = "Last seen privacy"; "lng_edit_privacy_lastseen_header" = "Who can see your last seen time"; "lng_edit_privacy_lastseen_warning" = "Important: you won't be able to see Last Seen times for people with whom you don't share your Last Seen time. Approximate last seen will be shown instead (recently, within a week, within a month)."; diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 4bae3e00b..45eb27c35 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -162,6 +162,8 @@ MTPInputPrivacyKey ApiWrap::Privacy::Input(Key key) { case Privacy::Key::Calls: return MTP_inputPrivacyKeyPhoneCall(); case Privacy::Key::Invites: return MTP_inputPrivacyKeyChatInvite(); case Privacy::Key::PhoneNumber: return MTP_inputPrivacyKeyPhoneNumber(); + case Privacy::Key::AddedByPhone: + return MTP_inputPrivacyKeyAddedByPhone(); case Privacy::Key::LastSeen: return MTP_inputPrivacyKeyStatusTimestamp(); case Privacy::Key::CallsPeer2Peer: @@ -180,6 +182,8 @@ std::optional ApiWrap::Privacy::KeyFromMTP( switch (type) { case mtpc_privacyKeyPhoneNumber: case mtpc_inputPrivacyKeyPhoneNumber: return Key::PhoneNumber; + case mtpc_privacyKeyAddedByPhone: + case mtpc_inputPrivacyKeyAddedByPhone: return Key::AddedByPhone; case mtpc_privacyKeyStatusTimestamp: case mtpc_inputPrivacyKeyStatusTimestamp: return Key::LastSeen; case mtpc_privacyKeyChatInvite: diff --git a/Telegram/SourceFiles/apiwrap.h b/Telegram/SourceFiles/apiwrap.h index b05b5b179..a7fc8c5fc 100644 --- a/Telegram/SourceFiles/apiwrap.h +++ b/Telegram/SourceFiles/apiwrap.h @@ -93,6 +93,7 @@ public: struct Privacy { enum class Key { PhoneNumber, + AddedByPhone, LastSeen, Calls, Invites, diff --git a/Telegram/SourceFiles/boxes/edit_privacy_box.cpp b/Telegram/SourceFiles/boxes/edit_privacy_box.cpp index 7c6a0ee45..1578716bd 100644 --- a/Telegram/SourceFiles/boxes/edit_privacy_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_privacy_box.cpp @@ -250,8 +250,9 @@ bool EditPrivacyBox::showExceptionLink(Exception exception) const { Unexpected("Invalid exception value."); } -Ui::Radioenum *EditPrivacyBox::addOption( +Ui::Radioenum *EditPrivacyBox::AddOption( not_null container, + not_null controller, const std::shared_ptr> &group, Option option) { return container->add( @@ -259,7 +260,7 @@ Ui::Radioenum *EditPrivacyBox::addOption( container, group, option, - _controller->optionLabel(option), + controller->optionLabel(option), st::settingsSendType), st::settingsSendTypePadding); } @@ -306,7 +307,7 @@ void EditPrivacyBox::setupContent() { const auto addOptionRow = [&](Option option) { return (_controller->hasOption(option) || (_value.option == option)) - ? addOption(content, group, option) + ? AddOption(content, _controller.get(), group, option) : nullptr; }; const auto addExceptionLink = [=](Exception exception) { @@ -345,7 +346,7 @@ void EditPrivacyBox::setupContent() { auto above = _controller->setupAboveWidget( content, - std::move(optionValue)); + rpl::duplicate(optionValue)); if (above) { content->add(std::move(above)); } @@ -357,6 +358,14 @@ void EditPrivacyBox::setupContent() { addLabel(content, _controller->warning()); AddSkip(content); + auto middle = _controller->setupMiddleWidget( + _window, + content, + std::move(optionValue)); + if (middle) { + content->add(std::move(middle)); + } + AddDivider(content); AddSkip(content); AddSubsectionTitle(content, tr::lng_edit_privacy_exceptions()); @@ -373,6 +382,7 @@ void EditPrivacyBox::setupContent() { const auto someAreDisallowed = (_value.option != Option::Everyone) || !_value.never.empty(); _controller->confirmSave(someAreDisallowed, crl::guard(this, [=] { + _controller->saveAdditional(); _window->session().api().savePrivacy( _controller->apiKey(), collectResult()); diff --git a/Telegram/SourceFiles/boxes/edit_privacy_box.h b/Telegram/SourceFiles/boxes/edit_privacy_box.h index 29110f2cf..80efbdbc0 100644 --- a/Telegram/SourceFiles/boxes/edit_privacy_box.h +++ b/Telegram/SourceFiles/boxes/edit_privacy_box.h @@ -58,6 +58,12 @@ public: rpl::producer