diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.cpp b/Telegram/SourceFiles/boxes/premium_preview_box.cpp index 13d3a3c8e2..9fb49d58a2 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_preview_box.cpp @@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_message_reactions.h" #include "data/data_document_media.h" #include "data/data_streaming.h" +#include "data/data_peer_values.h" #include "lang/lang_keys.h" #include "main/main_session.h" #include "main/main_domain.h" // kMaxAccounts @@ -42,6 +43,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "apiwrap.h" #include "styles/style_layers.h" #include "styles/style_chat_helpers.h" +#include "styles/style_settings.h" #include @@ -1241,6 +1243,15 @@ void PreviewBox( const auto outer = box->addRow( ChatBackPreview(box, size.height(), back), {}); + const auto close = Ui::CreateChild( + box->verticalLayout().get(), + st::settingsPremiumTopBarClose); + box->verticalLayout()->widthValue( + ) | rpl::start_with_next([=](int width) { + close->moveToRight(0, 0, width); + }, close->lifetime()); + close->setClickedCallback([=] { box->closeBox(); }); + struct Hiding { not_null widget; int leftFrom = 0; @@ -1304,16 +1315,8 @@ void PreviewBox( switch (descriptor.section) { case PremiumPreview::Stickers: state->content = media - ? StickerPreview( - outer, - controller, - media, - state->preload) - : GenericPreview( - outer, - controller, - descriptor.section, - state->preload); + ? StickerPreview(outer, controller, media, state->preload) + : StickersPreview(outer, controller, state->preload); break; case PremiumPreview::Reactions: state->content = ReactionsPreview( @@ -1437,40 +1440,52 @@ void PreviewBox( box->addRow( CreateSwitch(box->verticalLayout(), &state->selected), st::premiumDotsMargin); - box->setStyle(st::premiumPreviewBox); - const auto buttonPadding = st::premiumPreviewBox.buttonPadding; - const auto width = size.width() - - buttonPadding.left() - - buttonPadding.right(); - const auto computeRef = [=] { - return Settings::LookupPremiumRef(state->selected.current()); - }; - auto unlock = state->selected.value( - ) | rpl::map([=](PremiumPreview section) { - return (section == PremiumPreview::Reactions) - ? tr::lng_premium_unlock_reactions() - : (section == PremiumPreview::Stickers) - ? tr::lng_premium_unlock_stickers() - : tr::lng_premium_more_about(); - }) | rpl::flatten_latest(); - auto button = descriptor.fromSettings - ? object_ptr::fromRaw( - Settings::CreateSubscribeButton(controller, box, computeRef)) - : CreateUnlockButton(box, std::move(unlock)); - button->resizeToWidth(width); - button->setClickedCallback([=] { - Settings::ShowPremium( - controller, - Settings::LookupPremiumRef(state->selected.current())); - }); - box->setShowFinishedCallback([=, raw = button.data()] { - state->showFinished = true; - if (base::take(state->preloadScheduled)) { - state->preload(); - } - raw->startGlareAnimation(); - }); - box->addButton(std::move(button)); + if (descriptor.fromSettings && controller->session().premium()) { + box->addButton(tr::lng_close(), [=] { box->closeBox(); }); + } else { + box->setStyle(st::premiumPreviewBox); + const auto buttonPadding = st::premiumPreviewBox.buttonPadding; + const auto width = size.width() + - buttonPadding.left() + - buttonPadding.right(); + const auto computeRef = [=] { + return Settings::LookupPremiumRef(state->selected.current()); + }; + auto unlock = state->selected.value( + ) | rpl::map([=](PremiumPreview section) { + return (section == PremiumPreview::Reactions) + ? tr::lng_premium_unlock_reactions() + : (section == PremiumPreview::Stickers) + ? tr::lng_premium_unlock_stickers() + : tr::lng_premium_more_about(); + }) | rpl::flatten_latest(); + auto button = descriptor.fromSettings + ? object_ptr::fromRaw( + Settings::CreateSubscribeButton(controller, box, computeRef)) + : CreateUnlockButton(box, std::move(unlock)); + button->resizeToWidth(width); + button->setClickedCallback([=] { + Settings::ShowPremium( + controller, + Settings::LookupPremiumRef(state->selected.current())); + }); + box->setShowFinishedCallback([=, raw = button.data()] { + state->showFinished = true; + if (base::take(state->preloadScheduled)) { + state->preload(); + } + raw->startGlareAnimation(); + }); + box->addButton(std::move(button)); + } + + if (descriptor.fromSettings) { + Data::AmPremiumValue( + &controller->session() + ) | rpl::skip(1) | rpl::start_with_next([=](bool premium) { + box->closeBox(); + }, box->lifetime()); + } if (const auto &hidden = descriptor.hiddenCallback) { box->boxClosing() | rpl::start_with_next(hidden, box->lifetime()); diff --git a/Telegram/SourceFiles/settings/settings_premium.cpp b/Telegram/SourceFiles/settings/settings_premium.cpp index 01b271f559..2175a737a3 100644 --- a/Telegram/SourceFiles/settings/settings_premium.cpp +++ b/Telegram/SourceFiles/settings/settings_premium.cpp @@ -770,31 +770,39 @@ void Premium::setupContent() { } controller->show(Box([=](not_null box) { DoubledLimitsPreviewBox(box, &controller->session()); - - const auto button = CreateSubscribeButton( - controller, - box, - [] { return u"double_limits"_q; }); - - box->boxClosing( - ) | rpl::start_with_next(hidden, box->lifetime()); - - box->setShowFinishedCallback([=] { - button->startGlareAnimation(); + box->addTopButton(st::boxTitleClose, [=] { + box->closeBox(); }); + if (controller->session().premium()) { + box->addButton(tr::lng_close(), [=] { + box->closeBox(); + }); + } else { + const auto button = CreateSubscribeButton( + controller, + box, + [] { return u"double_limits"_q; }); - box->setStyle(st::premiumPreviewDoubledLimitsBox); - box->widthValue( - ) | rpl::start_with_next([=](int width) { - const auto &padding = - st::premiumPreviewDoubledLimitsBox.buttonPadding; - button->resizeToWidth(width - - padding.left() - - padding.right()); - button->moveToLeft(padding.left(), padding.top()); - }, button->lifetime()); - box->addButton( - object_ptr::fromRaw(button)); + box->boxClosing( + ) | rpl::start_with_next(hidden, box->lifetime()); + + box->setShowFinishedCallback([=] { + button->startGlareAnimation(); + }); + + box->setStyle(st::premiumPreviewDoubledLimitsBox); + box->widthValue( + ) | rpl::start_with_next([=](int width) { + const auto &padding = + st::premiumPreviewDoubledLimitsBox.buttonPadding; + button->resizeToWidth(width + - padding.left() + - padding.right()); + button->moveToLeft(padding.left(), padding.top()); + }, button->lifetime()); + box->addButton( + object_ptr::fromRaw(button)); + } })); }); diff --git a/Telegram/lib_ui b/Telegram/lib_ui index 1679da738b..3aa78fb000 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit 1679da738b2739820287fbf810981c91de48b73d +Subproject commit 3aa78fb00043e83bb000cec091bdbd93a8233794