Added privacy link to birthday box from top bar suggestion.

This commit is contained in:
23rd 2025-04-18 00:16:59 +03:00 committed by John Preston
parent ff67d876b2
commit 7e45283ba2
3 changed files with 58 additions and 8 deletions

View file

@ -37,6 +37,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "passport/passport_form_controller.h"
#include "ui/text/text_utilities.h"
#include "ui/toast/toast.h"
#include "ui/vertical_list.h"
#include "data/components/credits.h"
#include "data/data_birthday.h"
#include "data/data_channel.h"
@ -936,10 +937,41 @@ bool ShowEditBirthday(
: (u"Error: "_q + error.type()));
})).handleFloodErrors().send();
};
controller->show(Box(
Ui::EditBirthdayBox,
user->birthday(),
save));
if (match->captured(1).isEmpty()) {
controller->show(Box(Ui::EditBirthdayBox, user->birthday(), save));
} else {
controller->show(Box([=](not_null<Ui::GenericBox*> box) {
Ui::EditBirthdayBox(box, user->birthday(), save);
const auto container = box->verticalLayout();
const auto session = &user->session();
const auto key = Api::UserPrivacy::Key::Birthday;
session->api().userPrivacy().reload(key);
auto isExactlyContacts = session->api().userPrivacy().value(
key
) | rpl::map([=](const Api::UserPrivacy::Rule &value) {
return (value.option == Api::UserPrivacy::Option::Contacts)
&& value.always.peers.empty()
&& !value.always.premiums
&& value.never.peers.empty();
}) | rpl::distinct_until_changed();
Ui::AddSkip(container);
const auto link = u"internal:edit_privacy_birthday:from_box"_q;
Ui::AddDividerText(container, rpl::conditional(
std::move(isExactlyContacts),
tr::lng_settings_birthday_contacts(
lt_link,
tr::lng_settings_birthday_contacts_link(
) | Ui::Text::ToLink(link),
Ui::Text::WithEntities),
tr::lng_settings_birthday_about(
lt_link,
tr::lng_settings_birthday_about_link(
) | Ui::Text::ToLink(link),
Ui::Text::WithEntities)));
}));
}
return true;
}
@ -950,11 +982,29 @@ bool ShowEditBirthdayPrivacy(
if (!controller) {
return false;
}
const auto isFromBox = !match->captured(1).isEmpty();
auto syncLifetime = controller->session().api().userPrivacy().value(
Api::UserPrivacy::Key::Birthday
) | rpl::take(
1
) | rpl::start_with_next([=](const Api::UserPrivacy::Rule &value) {
if (isFromBox) {
using namespace ::Settings;
class Controller final : public BirthdayPrivacyController {
object_ptr<Ui::RpWidget> setupAboveWidget(
not_null<Window::SessionController*> controller,
not_null<QWidget*> parent,
rpl::producer<Option> optionValue,
not_null<QWidget*> outerContainer) override {
return { nullptr };
}
};
controller->show(Box<EditPrivacyBox>(
controller,
std::make_unique<Controller>(),
value));
return;
}
controller->show(Box<EditPrivacyBox>(
controller,
std::make_unique<::Settings::BirthdayPrivacyController>(),
@ -1595,11 +1645,11 @@ const std::vector<LocalUrlHandler> &InternalUrlHandlers() {
ShowSearchTagsPromo
},
{
u"^edit_birthday$"_q,
u"^edit_birthday(.*)$"_q,
ShowEditBirthday,
},
{
u"^edit_privacy_birthday$"_q,
u"^edit_privacy_birthday(.*)$"_q,
ShowEditBirthdayPrivacy,
},
{

View file

@ -360,7 +360,7 @@ rpl::producer<Ui::SlideWrap<Ui::RpWidget>*> TopBarSuggestionValue(
return;
}
Core::App().openInternalUrl(
u"internal:edit_birthday"_q,
u"internal:edit_birthday:add_privacy"_q,
QVariant::fromValue(ClickHandlerContext{
.sessionWindow = base::make_weak(controller),
}));

View file

@ -317,7 +317,7 @@ public:
};
class BirthdayPrivacyController final : public EditPrivacyController {
class BirthdayPrivacyController : public EditPrivacyController {
public:
using Option = EditPrivacyBox::Option;
using Exception = EditPrivacyBox::Exception;