mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-19 07:37:11 +02:00
Fixed order of premium feature previews.
This commit is contained in:
parent
8296d72923
commit
cf4dfa55da
6 changed files with 67 additions and 20 deletions
|
@ -52,7 +52,6 @@ namespace {
|
|||
constexpr auto kPremiumShift = 21. / 240;
|
||||
constexpr auto kReactionsPerRow = 5;
|
||||
constexpr auto kDisabledOpacity = 0.5;
|
||||
constexpr auto kPreviewsCount = int(PremiumPreview::kCount);
|
||||
constexpr auto kToggleStickerTimeout = 2 * crl::time(1000);
|
||||
constexpr auto kStarOpacityOff = 0.1;
|
||||
constexpr auto kStarOpacityOn = 1.;
|
||||
|
@ -744,19 +743,21 @@ struct VideoPreviewDocument {
|
|||
|
||||
[[nodiscard]] object_ptr<Ui::RpWidget> CreateSwitch(
|
||||
not_null<Ui::RpWidget*> parent,
|
||||
not_null<rpl::variable<PremiumPreview>*> selected) {
|
||||
not_null<rpl::variable<PremiumPreview>*> selected,
|
||||
std::vector<PremiumPreview> order) {
|
||||
const auto padding = st::premiumDotPadding;
|
||||
const auto width = padding.left() + st::premiumDot + padding.right();
|
||||
const auto height = padding.top() + st::premiumDot + padding.bottom();
|
||||
const auto stops = Ui::Premium::ButtonGradientStops();
|
||||
auto result = object_ptr<Ui::FixedHeightWidget>(parent.get(), height);
|
||||
const auto raw = result.data();
|
||||
for (auto i = 0; i != kPreviewsCount; ++i) {
|
||||
const auto section = PremiumPreview(i);
|
||||
const auto count = order.size();
|
||||
for (auto i = 0; i != count; ++i) {
|
||||
const auto section = order[i];
|
||||
const auto button = Ui::CreateChild<Ui::AbstractButton>(raw);
|
||||
parent->widthValue(
|
||||
) | rpl::start_with_next([=](int outer) {
|
||||
const auto full = width * kPreviewsCount;
|
||||
const auto full = width * count;
|
||||
const auto left = (outer - full) / 2 + (i * width);
|
||||
button->setGeometry(left, 0, width, height);
|
||||
}, button->lifetime());
|
||||
|
@ -770,7 +771,7 @@ struct VideoPreviewDocument {
|
|||
p.setBrush((selected->current() == section)
|
||||
? anim::gradient_color_at(
|
||||
stops,
|
||||
float64(i) / (kPreviewsCount - 1))
|
||||
float64(i) / (count - 1))
|
||||
: st::windowBgRipple->c);
|
||||
p.setPen(Qt::NoPen);
|
||||
p.drawEllipse(
|
||||
|
@ -815,15 +816,23 @@ void PreviewBox(
|
|||
Fn<void()> preload;
|
||||
std::vector<Hiding> hiding;
|
||||
rpl::variable<PremiumPreview> selected;
|
||||
std::vector<PremiumPreview> order;
|
||||
};
|
||||
const auto state = outer->lifetime().make_state<State>();
|
||||
state->selected = descriptor.section;
|
||||
state->order = Settings::PremiumPreviewOrder(&controller->session());
|
||||
|
||||
const auto index = [=](PremiumPreview section) {
|
||||
const auto it = ranges::find(state->order, section);
|
||||
return (it == end(state->order))
|
||||
? 0
|
||||
: std::distance(begin(state->order), it);
|
||||
};
|
||||
|
||||
const auto move = [=](int delta) {
|
||||
using Type = PremiumPreview;
|
||||
const auto count = int(Type::kCount);
|
||||
const auto count = int(state->order.size());
|
||||
const auto now = state->selected.current();
|
||||
state->selected = Type((int(now) + count + delta) % count);
|
||||
state->selected = state->order[(index(now) + count + delta) % count];
|
||||
};
|
||||
|
||||
const auto buttonsParent = box->verticalLayout().get();
|
||||
|
@ -912,7 +921,7 @@ void PreviewBox(
|
|||
}
|
||||
};
|
||||
animationCallback();
|
||||
const auto toLeft = int(now) > int(was);
|
||||
const auto toLeft = index(now) > index(was);
|
||||
auto start = state->content->x() + (toLeft ? single : -single);
|
||||
for (const auto &hiding : state->hiding) {
|
||||
const auto left = hiding.widget->x();
|
||||
|
@ -955,14 +964,10 @@ void PreviewBox(
|
|||
}, outer->lifetime());
|
||||
|
||||
auto title = state->selected.value(
|
||||
) | rpl::map([=](PremiumPreview section) {
|
||||
return SectionTitle(section);
|
||||
}) | rpl::flatten_latest();
|
||||
) | rpl::map(SectionTitle) | rpl::flatten_latest();
|
||||
|
||||
auto text = state->selected.value(
|
||||
) | rpl::map([=](PremiumPreview section) {
|
||||
return SectionAbout(section);
|
||||
}) | rpl::flatten_latest();
|
||||
) | rpl::map(SectionAbout) | rpl::flatten_latest();
|
||||
|
||||
const auto padding = st::premiumPreviewAboutPadding;
|
||||
const auto available = size.width() - padding.left() - padding.right();
|
||||
|
@ -985,7 +990,7 @@ void PreviewBox(
|
|||
object_ptr<Ui::CenterWrap<Ui::FlatLabel>>(box, std::move(textLabel)),
|
||||
padding);
|
||||
box->addRow(
|
||||
CreateSwitch(box->verticalLayout(), &state->selected),
|
||||
CreateSwitch(box->verticalLayout(), &state->selected, state->order),
|
||||
st::premiumDotsMargin);
|
||||
const auto showFinished = [=] {
|
||||
state->showFinished = true;
|
||||
|
|
|
@ -3910,7 +3910,8 @@ void HistoryItem::setServiceMessageByAction(const MTPmessageAction &action) {
|
|||
return result;
|
||||
};
|
||||
|
||||
auto prepareAttachMenuBotAllowed = [this](const MTPDmessageActionAttachMenuBotAllowed &action) {
|
||||
auto prepareAttachMenuBotAllowed = [](
|
||||
const MTPDmessageActionAttachMenuBotAllowed &action) {
|
||||
return PreparedServiceText{ {
|
||||
tr::lng_action_attach_menu_bot_allowed(tr::now)
|
||||
} };
|
||||
|
|
|
@ -1840,4 +1840,41 @@ not_null<Ui::GradientButton*> CreateSubscribeButton(
|
|||
return result;
|
||||
}
|
||||
|
||||
[[nodiscard]] std::vector<PremiumPreview> PremiumPreviewOrder(
|
||||
not_null<Main::Session*> session) {
|
||||
const auto mtpOrder = session->account().appConfig().get<Order>(
|
||||
"premium_promo_order",
|
||||
FallbackOrder());
|
||||
return ranges::views::all(
|
||||
mtpOrder
|
||||
) | ranges::views::transform([](const QString &s) {
|
||||
if (s == u"more_upload"_q) {
|
||||
return PremiumPreview::MoreUpload;
|
||||
} else if (s == u"faster_download"_q) {
|
||||
return PremiumPreview::FasterDownload;
|
||||
} else if (s == u"voice_to_text"_q) {
|
||||
return PremiumPreview::VoiceToText;
|
||||
} else if (s == u"no_ads"_q) {
|
||||
return PremiumPreview::NoAds;
|
||||
} else if (s == u"emoji_status"_q) {
|
||||
return PremiumPreview::EmojiStatus;
|
||||
} else if (s == u"infinite_reactions"_q) {
|
||||
return PremiumPreview::InfiniteReactions;
|
||||
} else if (s == u"premium_stickers"_q) {
|
||||
return PremiumPreview::Stickers;
|
||||
} else if (s == u"animated_emoji"_q) {
|
||||
return PremiumPreview::AnimatedEmoji;
|
||||
} else if (s == u"advanced_chat_management"_q) {
|
||||
return PremiumPreview::AdvancedChatManagement;
|
||||
} else if (s == u"profile_badge"_q) {
|
||||
return PremiumPreview::ProfileBadge;
|
||||
} else if (s == u"animated_userpics"_q) {
|
||||
return PremiumPreview::AnimatedUserpics;
|
||||
}
|
||||
return PremiumPreview::kCount;
|
||||
}) | ranges::views::filter([](PremiumPreview type) {
|
||||
return (type != PremiumPreview::kCount);
|
||||
}) | ranges::to_vector;
|
||||
}
|
||||
|
||||
} // namespace Settings
|
||||
|
|
|
@ -59,6 +59,9 @@ struct SubscribeButtonArgs final {
|
|||
[[nodiscard]] not_null<Ui::GradientButton*> CreateSubscribeButton(
|
||||
SubscribeButtonArgs &&args);
|
||||
|
||||
[[nodiscard]] std::vector<PremiumPreview> PremiumPreviewOrder(
|
||||
not_null<::Main::Session*> session);
|
||||
|
||||
|
||||
} // namespace Settings
|
||||
|
||||
|
|
|
@ -921,7 +921,8 @@ QGradientStops FullHeightGradientStops() {
|
|||
{ 0.0, st::premiumIconBg1->c },
|
||||
{ .28, st::premiumIconBg2->c },
|
||||
{ .55, st::premiumButtonBg2->c },
|
||||
{ 1.0, st::premiumButtonBg1->c },
|
||||
{ .75, st::premiumButtonBg1->c },
|
||||
{ 1.0, st::premiumIconBg3->c },
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 9f5ddf3d8aaa95e0c32c187f7e8b6c3239953991
|
||||
Subproject commit fbdc6ed5ac791890d87ca7f22b668ceca47d7684
|
Loading…
Add table
Reference in a new issue