diff --git a/Telegram/SourceFiles/boxes/edit_privacy_box.cpp b/Telegram/SourceFiles/boxes/edit_privacy_box.cpp index f09b10448..7ad5798ec 100644 --- a/Telegram/SourceFiles/boxes/edit_privacy_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_privacy_box.cpp @@ -10,28 +10,24 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_global_privacy.h" #include "ui/layers/generic_box.h" #include "ui/widgets/checkbox.h" -#include "ui/widgets/labels.h" -#include "ui/widgets/buttons.h" #include "ui/widgets/shadow.h" #include "ui/text/text_utilities.h" #include "ui/toast/toast.h" #include "ui/wrap/slide_wrap.h" -#include "ui/wrap/vertical_layout.h" #include "ui/painter.h" #include "ui/vertical_list.h" #include "history/history.h" #include "boxes/peer_list_controllers.h" -#include "settings/settings_common.h" #include "settings/settings_premium.h" #include "settings/settings_privacy_security.h" #include "calls/calls_instance.h" -#include "base/binary_guard.h" #include "lang/lang_keys.h" #include "apiwrap.h" #include "main/main_session.h" #include "data/data_user.h" #include "data/data_chat.h" #include "data/data_channel.h" +#include "data/data_peer_values.h" #include "window/window_session_controller.h" #include "styles/style_settings.h" #include "styles/style_layers.h" @@ -67,6 +63,32 @@ void CreateRadiobuttonLock( }, lock->lifetime()); } +void AddPremiumRequiredRow( + not_null widget, + not_null session, + Fn clickedCallback, + Fn setDefaultOption, + const style::Checkbox &st) { + const auto row = Ui::CreateChild(widget.get()); + + widget->sizeValue( + ) | rpl::start_with_next([=](const QSize &s) { + row->resize(s); + }, row->lifetime()); + row->setClickedCallback(std::move(clickedCallback)); + + CreateRadiobuttonLock(row, st); + + Data::AmPremiumValue( + session + ) | rpl::start_with_next([=](bool premium) { + row->setVisible(!premium); + if (!premium) { + setDefaultOption(); + } + }, row->lifetime()); +} + } // namespace class PrivacyExceptionsBoxController : public ChatsListBoxController { @@ -363,10 +385,29 @@ void EditPrivacyBox::setupContent() { content, _controller->optionsTitleKey(), { 0, st::settingsPrivacySkipTop, 0, 0 }); - addOptionRow(Option::Everyone); - addOptionRow(Option::Contacts); - addOptionRow(Option::CloseFriends); - addOptionRow(Option::Nobody); + + const auto options = { + Option::Everyone, + Option::Contacts, + Option::CloseFriends, + Option::Nobody, + }; + for (const auto &option : options) { + if (const auto row = addOptionRow(option)) { + const auto premiumCallback = _controller->premiumClickedCallback( + option, + _window); + if (premiumCallback) { + AddPremiumRequiredRow( + row, + &_window->session(), + premiumCallback, + [=] { group->setValue(Option::Everyone); }, + st::messagePrivacyCheck); + } + } + } + const auto warning = addLabelOrDivider( content, _controller->warning(), diff --git a/Telegram/SourceFiles/boxes/edit_privacy_box.h b/Telegram/SourceFiles/boxes/edit_privacy_box.h index c715ef473..cfdc14ad7 100644 --- a/Telegram/SourceFiles/boxes/edit_privacy_box.h +++ b/Telegram/SourceFiles/boxes/edit_privacy_box.h @@ -88,6 +88,12 @@ public: virtual void saveAdditional() { } + [[nodiscard]] virtual Fn premiumClickedCallback( + Option option, + not_null controller) { + return nullptr; + } + virtual ~EditPrivacyController() = default; protected: diff --git a/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp b/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp index 6620c4bbb..503ea62e4 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp +++ b/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp @@ -19,7 +19,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/peers/prepare_short_info_box.h" #include "calls/calls_instance.h" #include "core/application.h" -#include "core/core_settings.h" #include "data/data_changes.h" #include "data/data_file_origin.h" #include "data/data_peer_values.h" // Data::AmPremiumValue. @@ -31,34 +30,27 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "editor/photo_editor_layer_widget.h" #include "history/admin_log/history_admin_log_item.h" #include "history/history.h" -#include "history/history_item.h" #include "history/history_item_components.h" -#include "history/view/history_view_element.h" #include "history/view/history_view_message.h" #include "lang/lang_keys.h" #include "main/main_session.h" #include "settings/settings_premium.h" #include "settings/settings_privacy_security.h" #include "ui/boxes/confirm_box.h" -#include "ui/cached_round_corners.h" #include "ui/chat/chat_style.h" #include "ui/chat/chat_theme.h" -#include "ui/image/image_prepare.h" -#include "ui/image/image_prepare.h" #include "ui/painter.h" #include "ui/vertical_list.h" #include "ui/text/format_values.h" // Ui::FormatPhone #include "ui/text/text_utilities.h" +#include "ui/toast/toast.h" #include "ui/widgets/checkbox.h" -#include "ui/wrap/padding_wrap.h" #include "ui/wrap/slide_wrap.h" -#include "ui/wrap/vertical_layout.h" #include "window/section_widget.h" #include "window/window_controller.h" #include "window/window_session_controller.h" #include "styles/style_chat.h" #include "styles/style_chat_helpers.h" -#include "styles/style_boxes.h" #include "styles/style_settings.h" #include "styles/style_info.h" #include "styles/style_menu_icons.h" @@ -1377,6 +1369,78 @@ auto VoicesPrivacyController::exceptionsDescription() const return tr::lng_edit_privacy_voices_exceptions(); } +object_ptr VoicesPrivacyController::setupBelowWidget( + not_null controller, + not_null parent, + rpl::producer