From 5cd065ef6bcfba5087a00abd0b593868c02d5e3f Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 20 May 2022 17:12:56 +0400 Subject: [PATCH] Show premium page on limit increase decision. --- Telegram/SourceFiles/apiwrap.cpp | 6 ++---- Telegram/SourceFiles/boxes/boxes.style | 2 +- .../SourceFiles/boxes/premium_limits_box.cpp | 9 +++------ .../boxes/reactions_settings_box.cpp | 5 ++--- .../SourceFiles/boxes/sticker_preview_box.cpp | 3 ++- .../data/stickers/data_stickers.cpp | 6 ++---- .../SourceFiles/settings/settings_premium.cpp | 20 +++++++++++++++++++ .../SourceFiles/settings/settings_premium.h | 8 +++++++- .../ui/effects/premium_graphics.cpp | 2 +- .../SourceFiles/window/section_widget.cpp | 5 ++--- 10 files changed, 42 insertions(+), 24 deletions(-) diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 5cc2978df..b5d4f9349 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -82,6 +82,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/chat/attach/attach_prepare.h" #include "ui/toasts/common_toasts.h" #include "support/support_helper.h" +#include "settings/settings_premium.h" #include "storage/localimageloader.h" #include "storage/download_manager_mtproto.h" #include "storage/file_upload.h" @@ -452,10 +453,7 @@ void ApiWrap::sendMessageFail( : tr::lng_error_noforwards_group(tr::now) }, .duration = kJoinErrorDuration }); } else if (error.type() == qstr("PREMIUM_ACCOUNT_REQUIRED")) { - Ui::ShowMultilineToast({ - .text = { u"Premium sticker."_q }, - .duration = kJoinErrorDuration, - }); + Settings::ShowPremium(&session()); } if (const auto item = _session->data().message(itemId)) { Assert(randomId != 0); diff --git a/Telegram/SourceFiles/boxes/boxes.style b/Telegram/SourceFiles/boxes/boxes.style index 4322190c7..3455548c4 100644 --- a/Telegram/SourceFiles/boxes/boxes.style +++ b/Telegram/SourceFiles/boxes/boxes.style @@ -1082,7 +1082,7 @@ premiumBubblePadding: margins(14px, 0px, 14px, 0px); premiumBubbleHeight: 40px; premiumBubbleSkip: 5px; premiumBubbleTextSkip: 3px; -premiumBubbleSlideDuration: 500; +premiumBubbleSlideDuration: 1000; premiumBubbleTailSize: size(21px, 7px); premiumBubbleFont: font(19px); premiumLineTextSkip: 11px; diff --git a/Telegram/SourceFiles/boxes/premium_limits_box.cpp b/Telegram/SourceFiles/boxes/premium_limits_box.cpp index baaaa9b39..1b02125b3 100644 --- a/Telegram/SourceFiles/boxes/premium_limits_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_limits_box.cpp @@ -25,6 +25,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_session.h" #include "lang/lang_keys.h" #include "settings/settings_common.h" +#include "settings/settings_premium.h" #include "base/unixtime.h" #include "apiwrap.h" #include "styles/style_boxes.h" @@ -432,9 +433,7 @@ void SimpleLimitBox( }); } else { box->addButton(tr::lng_limits_increase(), [=] { - Ui::ShowMultilineToast({ - .text = { u"Premium!"_q }, - }); + Settings::ShowPremium(session); }); } @@ -565,9 +564,7 @@ void ChannelsLimitBox( }); } else { box->addButton(tr::lng_limits_increase(), [=] { - Ui::ShowMultilineToast({ - .text = { u"Premium!"_q }, - }); + Settings::ShowPremium(session); }); } }, box->lifetime()); diff --git a/Telegram/SourceFiles/boxes/reactions_settings_box.cpp b/Telegram/SourceFiles/boxes/reactions_settings_box.cpp index 1f47ae7ed..bd0207b30 100644 --- a/Telegram/SourceFiles/boxes/reactions_settings_box.cpp +++ b/Telegram/SourceFiles/boxes/reactions_settings_box.cpp @@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lottie/lottie_icon.h" #include "main/main_session.h" #include "settings/settings_common.h" +#include "settings/settings_premium.h" #include "ui/chat/chat_style.h" #include "ui/chat/chat_theme.h" #include "ui/effects/scroll_content_shadow.h" @@ -447,9 +448,7 @@ void ReactionsSettingsBox( button->setClickedCallback([=, emoji = r.emoji] { if (premium && !controller->session().user()->isPremium()) { - Ui::ShowMultilineToast({ - .text = { u"Premium reaction."_q }, - }); + Settings::ShowPremium(&controller->session()); return; } checkButton(button); diff --git a/Telegram/SourceFiles/boxes/sticker_preview_box.cpp b/Telegram/SourceFiles/boxes/sticker_preview_box.cpp index 8dfbbffe8..43c23baf9 100644 --- a/Telegram/SourceFiles/boxes/sticker_preview_box.cpp +++ b/Telegram/SourceFiles/boxes/sticker_preview_box.cpp @@ -19,6 +19,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/buttons.h" #include "ui/widgets/gradient_round_button.h" #include "ui/wrap/padding_wrap.h" +#include "settings/settings_premium.h" #include "lottie/lottie_single_player.h" #include "history/view/media/history_view_sticker.h" #include "window/window_session_controller.h" @@ -204,7 +205,7 @@ void StickerBox( const auto width = size - buttonPadding.left() - buttonPadding.right(); auto button = CreateUnlockButton(box, width); button->setClickedCallback([=] { - controller->showSettings(); + controller->showSettings(Settings::PremiumId()); }); box->addButton(std::move(button)); } diff --git a/Telegram/SourceFiles/data/stickers/data_stickers.cpp b/Telegram/SourceFiles/data/stickers/data_stickers.cpp index 5b532f4ad..40a71d8c6 100644 --- a/Telegram/SourceFiles/data/stickers/data_stickers.cpp +++ b/Telegram/SourceFiles/data/stickers/data_stickers.cpp @@ -20,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/history_item_components.h" #include "apiwrap.h" #include "storage/storage_account.h" +#include "settings/settings_premium.h" #include "core/application.h" #include "core/core_settings.h" #include "main/main_session.h" @@ -98,10 +99,7 @@ void MaybeShowPremiumToast( const auto widget = QPointer( controller->window().widget()->bodyWidget()); const auto filter = [=](const auto ...) { - Ui::ShowMultilineToast({ - .parentOverride = widget, - .text = { u"Premium!"_q }, - }); + controller->showSettings(Settings::PremiumId()); return false; }; Ui::ShowMultilineToast({ diff --git a/Telegram/SourceFiles/settings/settings_premium.cpp b/Telegram/SourceFiles/settings/settings_premium.cpp index 1f584dfbb..ecd6417a7 100644 --- a/Telegram/SourceFiles/settings/settings_premium.cpp +++ b/Telegram/SourceFiles/settings/settings_premium.cpp @@ -9,6 +9,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "settings/settings_common.h" +#include "settings/settings_premium.h" +#include "core/application.h" #include "ui/abstract_button.h" #include "ui/effects/gradient.h" #include "ui/text/text_utilities.h" @@ -17,6 +19,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/wrap/padding_wrap.h" #include "ui/wrap/vertical_layout.h" #include "window/window_session_controller.h" +#include "window/window_controller.h" +#include "main/main_session.h" #include "styles/style_boxes.h" #include "styles/style_chat_helpers.h" #include "styles/style_layers.h" @@ -251,4 +255,20 @@ Type PremiumId() { return Premium::Id(); } +void ShowPremium(not_null session) { + const auto active = Core::App().activeWindow(); + const auto controller = (active && active->isPrimary()) + ? active->sessionController() + : nullptr; + if (controller && session == &controller->session()) { + controller->showSettings(Settings::PremiumId()); + } else { + for (const auto &controller : session->windows()) { + if (controller->window().isPrimary()) { + controller->showSettings(Settings::PremiumId()); + } + } + } +} + } // namespace Settings diff --git a/Telegram/SourceFiles/settings/settings_premium.h b/Telegram/SourceFiles/settings/settings_premium.h index cdc83c1b3..3a8111917 100644 --- a/Telegram/SourceFiles/settings/settings_premium.h +++ b/Telegram/SourceFiles/settings/settings_premium.h @@ -9,9 +9,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/settings_type.h" +namespace Main { +class Session; +} // namespace Main + namespace Settings { -Type PremiumId(); +[[nodiscard]] Type PremiumId(); + +void ShowPremium(not_null<::Main::Session*> session); } // namespace Settings diff --git a/Telegram/SourceFiles/ui/effects/premium_graphics.cpp b/Telegram/SourceFiles/ui/effects/premium_graphics.cpp index 1e40ff4e1..b3c16bd5a 100644 --- a/Telegram/SourceFiles/ui/effects/premium_graphics.cpp +++ b/Telegram/SourceFiles/ui/effects/premium_graphics.cpp @@ -303,7 +303,7 @@ BubbleWidget::BubbleWidget( 0., 1., st::premiumBubbleSlideDuration, - anim::easeOutCubic); + anim::easeOutCirc); }, lifetime()); } diff --git a/Telegram/SourceFiles/window/section_widget.cpp b/Telegram/SourceFiles/window/section_widget.cpp index 76c766d5b..3ed5bca4a 100644 --- a/Telegram/SourceFiles/window/section_widget.cpp +++ b/Telegram/SourceFiles/window/section_widget.cpp @@ -20,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_cloud_themes.h" #include "data/data_message_reactions.h" #include "history/history_item.h" +#include "settings/settings_premium.h" #include "main/main_session.h" #include "window/section_memento.h" #include "window/window_slide_animation.h" @@ -353,9 +354,7 @@ bool ShowReactPremiumError( if (i == end(list) || !i->premium) { return false; } - Ui::ShowMultilineToast({ - .text = { u"Premium reaction."_q }, - }); + Settings::ShowPremium(&controller->session()); return true; }