From 13499894948f9a861804563feab262554befce62 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 1 May 2022 21:08:16 +0300 Subject: [PATCH] Moved settings of blocked peers to section. --- Telegram/CMakeLists.txt | 2 + .../animations/blocked_peers_empty.tgs | Bin 0 -> 53774 bytes Telegram/Resources/icons/settings/blocked.png | Bin 0 -> 476 bytes .../Resources/icons/settings/blocked@2x.png | Bin 0 -> 789 bytes .../Resources/icons/settings/blocked@3x.png | Bin 0 -> 1116 bytes Telegram/Resources/langs/lang.strings | 4 + .../Resources/qrc/telegram/animations.qrc | 3 + Telegram/SourceFiles/boxes/boxes.style | 3 + Telegram/SourceFiles/settings/settings.style | 1 + .../settings/settings_blocked_peers.cpp | 211 ++++++++++++++++++ .../settings/settings_blocked_peers.h | 46 ++++ .../SourceFiles/settings/settings_common.cpp | 2 +- .../settings/settings_privacy_controllers.cpp | 7 + .../settings/settings_privacy_controllers.h | 4 + .../settings/settings_privacy_security.cpp | 14 +- 15 files changed, 284 insertions(+), 13 deletions(-) create mode 100644 Telegram/Resources/animations/blocked_peers_empty.tgs create mode 100644 Telegram/Resources/icons/settings/blocked.png create mode 100644 Telegram/Resources/icons/settings/blocked@2x.png create mode 100644 Telegram/Resources/icons/settings/blocked@3x.png create mode 100644 Telegram/SourceFiles/settings/settings_blocked_peers.cpp create mode 100644 Telegram/SourceFiles/settings/settings_blocked_peers.h diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 47b693e36..0050add99 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -1067,6 +1067,8 @@ PRIVATE profile/profile_cover_drop_area.h settings/settings_advanced.cpp settings/settings_advanced.h + settings/settings_blocked_peers.cpp + settings/settings_blocked_peers.h settings/settings_chat.cpp settings/settings_chat.h settings/settings_calls.cpp diff --git a/Telegram/Resources/animations/blocked_peers_empty.tgs b/Telegram/Resources/animations/blocked_peers_empty.tgs new file mode 100644 index 0000000000000000000000000000000000000000..02d5a9de67de927829f9825f7312404d4e2ad13f GIT binary patch literal 53774 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/blocked.png b/Telegram/Resources/icons/settings/blocked.png new file mode 100644 index 0000000000000000000000000000000000000000..394b9f28999741eda3908a8fa3ca96072950999d GIT binary patch literal 476 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index 0a07b55d1..19f288c59 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -799,6 +799,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_blocked_list_confirm_text" = "Do you want to block {name} from messaging and calling you on Telegram?"; "lng_blocked_list_confirm_clear" = "Delete this chat"; "lng_blocked_list_confirm_ok" = "Block"; +"lng_blocked_list_empty_title" = "No blocked users"; +"lng_blocked_list_empty_description" = "You haven't blocked anyone yet."; +"lng_blocked_list_subtitle#one" = "{count} blocked user"; +"lng_blocked_list_subtitle#other" = "{count} blocked users"; "lng_edit_privacy_everyone" = "Everybody"; "lng_edit_privacy_contacts" = "My contacts"; diff --git a/Telegram/Resources/qrc/telegram/animations.qrc b/Telegram/Resources/qrc/telegram/animations.qrc index eac41dc7f..a750dc771 100644 --- a/Telegram/Resources/qrc/telegram/animations.qrc +++ b/Telegram/Resources/qrc/telegram/animations.qrc @@ -2,4 +2,7 @@ ../../animations/change_number.tgs + + ../../animations/blocked_peers_empty.tgs + diff --git a/Telegram/SourceFiles/boxes/boxes.style b/Telegram/SourceFiles/boxes/boxes.style index 98f306627..8c1456e84 100644 --- a/Telegram/SourceFiles/boxes/boxes.style +++ b/Telegram/SourceFiles/boxes/boxes.style @@ -602,6 +602,9 @@ changePhoneError: FlatLabel(changePhoneLabel) { textFg: boxTextFgError; } +blockedUsersListSubtitleAddPadding: margins(0px, 1px, 0px, -14px); +blockedUsersListIconPadding: margins(0px, 34px, 0px, 5px); + adminLogFilterUserpicLeft: 15px; adminLogFilterLittleSkip: 16px; adminLogFilterCheckbox: Checkbox(defaultBoxCheckbox) { diff --git a/Telegram/SourceFiles/settings/settings.style b/Telegram/SourceFiles/settings/settings.style index 2c08e93a2..0d2b88e93 100644 --- a/Telegram/SourceFiles/settings/settings.style +++ b/Telegram/SourceFiles/settings/settings.style @@ -90,6 +90,7 @@ settingsIconPosition: icon {{ "settings/position", settingsIconFg }}; settingsIconPin: icon {{ "settings/pin", settingsIconFg }}; settingsIconDownload: icon {{ "settings/download", settingsIconFg }}; settingsIconMention: icon {{ "settings/mention", settingsIconFg }}; +settingsIconBlocked: icon {{ "settings/blocked", settingsIconFg }}; settingsCheckbox: Checkbox(defaultBoxCheckbox) { textPosition: point(15px, 1px); diff --git a/Telegram/SourceFiles/settings/settings_blocked_peers.cpp b/Telegram/SourceFiles/settings/settings_blocked_peers.cpp new file mode 100644 index 000000000..522b81fca --- /dev/null +++ b/Telegram/SourceFiles/settings/settings_blocked_peers.cpp @@ -0,0 +1,211 @@ +/* +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/settings_blocked_peers.h" + +#include "api/api_blocked_peers.h" +#include "apiwrap.h" +#include "data/data_changes.h" +#include "data/data_peer.h" +#include "lang/lang_keys.h" +#include "lottie/lottie_icon.h" +#include "main/main_session.h" +#include "settings/settings_privacy_controllers.h" +#include "ui/widgets/buttons.h" +#include "ui/wrap/padding_wrap.h" +#include "ui/wrap/slide_wrap.h" +#include "ui/wrap/vertical_layout.h" +#include "window/window_session_controller.h" +#include "styles/style_settings.h" +#include "styles/style_boxes.h" + +namespace Settings { + +Blocked::Blocked( + QWidget *parent, + not_null controller) +: Section(parent) +, _controller(controller) { + + setupContent(); + + { + auto padding = st::changePhoneIconPadding; + padding.setBottom(padding.top()); + _loading = base::make_unique_q>( + this, + object_ptr>( + this, + object_ptr( + this, + tr::lng_contacts_loading(), + st::changePhoneDescription), + std::move(padding))); + Ui::ResizeFitChild(this, _loading.get()); + } + + _controller->session().api().blockedPeers().slice( + ) | rpl::start_with_next([=](const Api::BlockedPeers::Slice &slice) { + checkTotal(slice.total); + }, lifetime()); + + _controller->session().changes().peerUpdates( + Data::PeerUpdate::Flag::IsBlocked + ) | rpl::start_with_next([=](const Data::PeerUpdate &update) { + if (update.peer->isBlocked()) { + checkTotal(1); + } + }, lifetime()); +} + +rpl::producer Blocked::title() { + return tr::lng_settings_blocked_users(); +} + +QPointer Blocked::createPinnedToTop(not_null parent) { + const auto content = Ui::CreateChild(parent.get()); + + AddSkip(content); + + AddButton( + content, + tr::lng_blocked_list_add(), + st::settingsButton, + { &st::settingsIconBlocked, kIconLightBlue } + )->addClickHandler([=] { + BlockedBoxController::BlockNewPeer(_controller); + }); + + AddSkip(content); + AddDividerText(content, tr::lng_blocked_list_about()); + + { + const auto subtitle = content->add( + object_ptr>( + content, + object_ptr(content)))->setDuration(0); + AddSkip(subtitle->entity()); + auto subtitleText = _countBlocked.value( + ) | rpl::map([=](int count) { + return tr::lng_blocked_list_subtitle(tr::now, lt_count, count); + }); + AddSubsectionTitle( + subtitle->entity(), + rpl::duplicate(subtitleText), + st::blockedUsersListSubtitleAddPadding); + subtitle->toggleOn( + rpl::merge( + _emptinessChanges.events() | rpl::map(!rpl::mappers::_1), + _countBlocked.value() | rpl::map(rpl::mappers::_1 > 0) + ) | rpl::distinct_until_changed()); + + // Workaround. + std::move( + subtitleText + ) | rpl::start_with_next([=] { + subtitle->entity()->resizeToWidth(content->width()); + }, subtitle->lifetime()); + } + + return Ui::MakeWeak(not_null{ content }); +} + +void Blocked::setupContent() { + using namespace rpl::mappers; + const auto container = Ui::CreateChild(this); + + const auto listWrap = container->add( + object_ptr>( + container, + object_ptr(container))); + listWrap->toggleOn( + _emptinessChanges.events_starting_with(true) | rpl::map(!_1), + anim::type::instant); + + { + struct State { + std::unique_ptr controller; + std::unique_ptr delegate; + }; + + auto controller = std::make_unique(_controller); + const auto content = listWrap->entity()->add( + object_ptr(this, controller.get())); + + const auto state = content->lifetime().make_state(); + state->controller = std::move(controller); + state->delegate = std::make_unique(); + + state->delegate->setContent(content); + state->controller->setDelegate(state->delegate.get()); + + state->controller->rowsCountChanges( + ) | rpl::start_with_next([=](int total) { + _countBlocked = total; + checkTotal(total); + }, content->lifetime()); + _countBlocked = content->fullRowsCount(); + } + + const auto emptyWrap = container->add( + object_ptr>( + container, + object_ptr(container))); + emptyWrap->toggleOn( + _emptinessChanges.events_starting_with(false), + anim::type::instant); + + { + const auto content = emptyWrap->entity(); + auto icon = CreateLottieIcon(content, { + .name = u"blocked_peers_empty"_q, + .sizeOverride = { + st::changePhoneIconSize, + st::changePhoneIconSize, + }, + }, st::blockedUsersListIconPadding); + content->add(std::move(icon.widget)); + + _showFinished.events( + ) | rpl::start_with_next([animate = std::move(icon.animate)] { + animate(); + }, content->lifetime()); + + content->add( + object_ptr>( + content, + object_ptr( + content, + tr::lng_blocked_list_empty_title(), + st::changePhoneTitle)), + st::changePhoneTitlePadding); + + content->add( + object_ptr>( + content, + object_ptr( + content, + tr::lng_blocked_list_empty_description(), + st::changePhoneDescription)), + st::changePhoneDescriptionPadding); + + AddSkip(content, st::blockedUsersListIconPadding.top()); + } + + Ui::ResizeFitChild(this, container); +} + +void Blocked::checkTotal(int total) { + _loading = nullptr; + _emptinessChanges.fire(total <= 0); +} + +void Blocked::showFinished() { + _showFinished.fire({}); +} + +} // namespace Settings diff --git a/Telegram/SourceFiles/settings/settings_blocked_peers.h b/Telegram/SourceFiles/settings/settings_blocked_peers.h new file mode 100644 index 000000000..a5642faa9 --- /dev/null +++ b/Telegram/SourceFiles/settings/settings_blocked_peers.h @@ -0,0 +1,46 @@ +/* +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_common.h" + +namespace Window { +class Controller; +} // namespace Window + +namespace Settings { + +class Blocked : public Section { +public: + Blocked( + QWidget *parent, + not_null controller); + + void showFinished() override; + + [[nodiscard]] rpl::producer title() override; + + [[nodiscard]] QPointer createPinnedToTop( + not_null parent) override; + +private: + void setupContent(); + void checkTotal(int total); + + const not_null _controller; + + base::unique_qptr _loading; + + rpl::variable _countBlocked; + + rpl::event_stream<> _showFinished; + rpl::event_stream _emptinessChanges; + +}; + +} // namespace Settings diff --git a/Telegram/SourceFiles/settings/settings_common.cpp b/Telegram/SourceFiles/settings/settings_common.cpp index 92cf74939..9c1967322 100644 --- a/Telegram/SourceFiles/settings/settings_common.cpp +++ b/Telegram/SourceFiles/settings/settings_common.cpp @@ -264,7 +264,7 @@ LottieIcon CreateLottieIcon( raw->lifetime().add([kept = std::move(owned)]{}); const auto animate = [=] { - icon->animate([=] { raw->update(); }, 0, icon->framesCount()); + icon->animate([=] { raw->update(); }, 0, icon->framesCount() - 1); }; raw->paintRequest( ) | rpl::start_with_next([=] { diff --git a/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp b/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp index 7b6c1a6a2..b09be4621 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp +++ b/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp @@ -383,6 +383,7 @@ void BlockedBoxController::handleBlockedEvent(not_null user) { } else if (auto row = delegate()->peerListFindRow(user->id.value)) { delegate()->peerListRemoveRow(row); delegate()->peerListRefreshRows(); + _rowsCountChanges.fire(delegate()->peerListFullRowsCount()); } } @@ -408,6 +409,7 @@ bool BlockedBoxController::appendRow(not_null peer) { return false; } delegate()->peerListAppendRow(createRow(peer)); + _rowsCountChanges.fire(delegate()->peerListFullRowsCount()); return true; } @@ -416,6 +418,7 @@ bool BlockedBoxController::prependRow(not_null peer) { return false; } delegate()->peerListPrependRow(createRow(peer)); + _rowsCountChanges.fire(delegate()->peerListFullRowsCount()); return true; } @@ -440,6 +443,10 @@ std::unique_ptr BlockedBoxController::createRow( return row; } +rpl::producer BlockedBoxController::rowsCountChanges() const { + return _rowsCountChanges.events(); +} + PhoneNumberPrivacyController::PhoneNumberPrivacyController( not_null controller) : _controller(controller) { diff --git a/Telegram/SourceFiles/settings/settings_privacy_controllers.h b/Telegram/SourceFiles/settings/settings_privacy_controllers.h index 240724607..60d26e2dc 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_controllers.h +++ b/Telegram/SourceFiles/settings/settings_privacy_controllers.h @@ -33,6 +33,8 @@ public: void rowRightActionClicked(not_null row) override; void loadMoreRows() override; + [[nodiscard]] rpl::producer rowsCountChanges() const; + static void BlockNewPeer(not_null window); private: @@ -50,6 +52,8 @@ private: base::has_weak_ptr _guard; + rpl::event_stream _rowsCountChanges; + }; class PhoneNumberPrivacyController : public EditPrivacyController { diff --git a/Telegram/SourceFiles/settings/settings_privacy_security.cpp b/Telegram/SourceFiles/settings/settings_privacy_security.cpp index 22af983bc..f0507396e 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_security.cpp +++ b/Telegram/SourceFiles/settings/settings_privacy_security.cpp @@ -13,11 +13,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_self_destruct.h" #include "api/api_sensitive_content.h" #include "api/api_global_privacy.h" +#include "settings/settings_blocked_peers.h" #include "settings/settings_common.h" #include "settings/settings_privacy_controllers.h" #include "base/timer_rpl.h" #include "base/unixtime.h" -#include "boxes/peer_list_box.h" #include "boxes/edit_privacy_box.h" #include "boxes/passcode_box.h" #include "boxes/auto_lock_box.h" @@ -772,17 +772,7 @@ void SetupBlockedList( st::settingsButton, { &st::settingsIconMinus, kIconRed }); blockedPeers->addClickHandler([=] { - const auto initBox = [=](not_null box) { - box->addButton(tr::lng_close(), [=] { - box->closeBox(); - }); - box->addLeftButton(tr::lng_blocked_list_add(), [=] { - BlockedBoxController::BlockNewPeer(controller); - }); - }; - controller->show(Box( - std::make_unique(controller), - initBox)); + showOther(Blocked::Id()); }); std::move( updateTrigger