From e63d573414622b79b53d571a33f12a4958b88f13 Mon Sep 17 00:00:00 2001 From: John Preston <johnprestonmail@gmail.com> Date: Tue, 9 Jan 2024 04:19:55 -0800 Subject: [PATCH] Proof-of-concept last seen hidden. --- .../icons/settings/premium/large_lastseen.png | Bin 0 -> 1864 bytes .../settings/premium/large_lastseen@2x.png | Bin 0 -> 3667 bytes .../settings/premium/large_lastseen@3x.png | Bin 0 -> 5500 bytes .../icons/settings/premium/large_readtime.png | Bin 0 -> 1768 bytes .../settings/premium/large_readtime@2x.png | Bin 0 -> 3483 bytes .../settings/premium/large_readtime@3x.png | Bin 0 -> 5251 bytes Telegram/Resources/langs/lang.strings | 16 +- .../SourceFiles/boxes/premium_preview_box.cpp | 195 ++++++++++++++++++ .../SourceFiles/boxes/premium_preview_box.h | 11 + .../info/profile/info_profile_cover.cpp | 45 +++- .../settings/settings_privacy_controllers.cpp | 21 +- .../settings/settings_privacy_controllers.h | 2 + Telegram/SourceFiles/ui/effects/premium.style | 26 +++ 13 files changed, 291 insertions(+), 25 deletions(-) create mode 100644 Telegram/Resources/icons/settings/premium/large_lastseen.png create mode 100644 Telegram/Resources/icons/settings/premium/large_lastseen@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/large_lastseen@3x.png create mode 100644 Telegram/Resources/icons/settings/premium/large_readtime.png create mode 100644 Telegram/Resources/icons/settings/premium/large_readtime@2x.png create mode 100644 Telegram/Resources/icons/settings/premium/large_readtime@3x.png diff --git a/Telegram/Resources/icons/settings/premium/large_lastseen.png b/Telegram/Resources/icons/settings/premium/large_lastseen.png new file mode 100644 index 0000000000000000000000000000000000000000..e47bd7935bc38ba2adea14a70d045dc999917df4 GIT binary patch literal 1864 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 Cu!&y) literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/large_lastseen@2x.png b/Telegram/Resources/icons/settings/premium/large_lastseen@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..305b6a491966b13ac2338539e06bd5263edfc2e7 GIT binary patch literal 3667 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/large_lastseen@3x.png b/Telegram/Resources/icons/settings/premium/large_lastseen@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd1e12ab09dc27ab556a77078fb322b56164616 GIT binary patch literal 5500 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/large_readtime.png b/Telegram/Resources/icons/settings/premium/large_readtime.png new file mode 100644 index 0000000000000000000000000000000000000000..c06294a82e44e211c095e6c567a4a3e266597aef GIT binary patch literal 1768 zcmV<E1{e8>P)<h;3K|Lk000e1NJLTq001xm001xu0ssI2*kEqZ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NIQb|NXR9Fe^SX)R{O%&c{8Jd>@ zyZqhMitHsSFG(huDB?o|Y7`NLz8FYKn1}``n77hE(e%X!>p{FnVreNESqP$J<}Jds zyk()5rd`zj|I-!YoW1Alv-hc&A36_*nYF%k*)wa_S~HUL_xC?r0Soi|UA1b}kt0Xk z+}t*A-u%zf&(hNJ{rmT0V`KR5?Ch+sumAGpi+Rd*NZHufoI7`}tgP(w=g<GD{=R?z z4xcVwytrY*1|0^pL$M^0k&&aLqpEHQm{_NjloSUC2aUEgZP}?)r_$2WcI?=}D}DX? zbzNOue}DhT$Os%=SXkJ&apR^<o3?G+77!5N?(S}3v8;S@axy(V{l<+OKY#w@mFOO0 zVe<3y`41l$7>JFH-MxFax-K{u9v<G-*2c@;zkgr*QVH}sIyydn{FrG(z(z+$TUl8N zphieoq!TAj^z`&FCB419uCA^|;HqRNCnszNQ*`UrEn8b#RSBa^9KfWcBy1LG`}FCP zr>Cb;w2-l8&6*c4UXc9!{QRX$mxM4~#NgoI>FH_GIW#ncXwxc=b-r`w4oQCf`ZXvh zNUNkN+}^!=KYsj3nwy)OSFc`eN@9thn3za1_&;;zj3yb)AYWhKxw$#gUszaZT5kLH z?cctABLN&#(*pVt$Y<<>O$XEM+qVh*?AfywD^}<?r%9ruq=c+IeE3jJVE_L8>?|BQ zbVv>Qd%T@HcmDYCgM9My^E0ZfsHliQm6er7L4Sx*P*6a&8X6kJDp#&tIX*s4Ae3=2 z$Si6|NC@&_US1wAy=BW5BovrKjIUk0mS_DMqX3aNZ{EBSu+1gmSh3wfpTeto`t&JT zM6G1><*-HKB5GAt6=VPA0QDHVkAet2EiEmm!MwtI_wLd3*s)_g{nz-(lPBb_zrVkL zt)FCXZ{O9`MLOZi)~#D*I`-|`N8G`|K^bdt`tIF3VmmuK3)nhIs9&|UwWJW~{@}rb zN(I26X#oad#P=$TNUSRH5NL>QrLbN~c6K&-ga6Z~Pa6~e@Zkf&)~{c0fI(M94Dsq2 zU>7G>uU^F#A3l6o!C53kL_{!el9Q8#7$SCbbPy6{&Hx4niGilafUz{$vu6*Y;nAZ< zRHB*p6B85YQe=1}I(Dqe%gg0^VTf*OY9hNnK0XE<v|YqNAv0hsP4Jb(ZES4B#=}Nm zUmsCWVfZcHwQCnkX05HQxD+V0@swAuUXdO_3pzVHOFU&)fRLml1^{h=mzNhS+Gw}Q z2HI2B91af;BlYpNh2yEIDKctjXD0`+k4Aqk=Sk9)D_2Mov5yoAKwMlLPr=GPc<_KI z_%;s@52X?r1uZDy#Wy%Ksl<+niIGWSipr0B76EV-L@;6FaO)rn(hRGED9<NPo>Xd3 zQdn(x`SPWbE8&tr+N-Op1#C&el@Epqg8+w%Jca1^NBb-kR}yn_a!4vGD@)0hkmiYv z1zfjood6+8I6;)IfJ9>n48D?4Kt!V>6ciF!kQ_aFR0xpRHR|%^%VLBiu?818jWDUH zsq`hNR@T<m#sp<_^jjo_J0yQj4PZ#A1j5!R&l*9oQxz2zfZe@&mnaD5goFf~K5-Xe zU}1TJO($Dwoi#kg#guUI@$t*jijguODj;fvz`#JVf;R~hr86ojia`$?IH0E0TprfG zy}g~R<mTp@P=obneN%ULxAvGYp_gN`{DRYiCjgFPWa#4J!k&K+E^v_n!@|OjA3x5f zW(;r%rnSNU`Sa(sYQU=$6Duw*CZCWkKt$m*`vv3d*|V$!;Za4aH-yW~%w#^{vPRwz z#f;d(+04kuU<&c5LVc}1pAd0O1wYWcYj}sOsi|Qa5Yc$((dP=GQLWhRiK)Zj!i5VO z)uD#tJ#S`ahKb__fu|J}akXw0S`ghzVch?fM4o~T^7i%)4GqOx1>c*(IZE_ASjQNT z4eZPKfwExXqw#8kSA=WVu9cRSq8;Gz7^AA-f~Lc^5{eTcQ_8035@mRn=op3#P(g7I zRBvQu+Qd`zls9kQ#Onkuvh1vq8QDbu=Y_rCFhB4{hBJZgfKOv$ONP|tms>-+!3-vm zEzvL255}%vzs@7@vWalP1p%e-?c2BLl%GF;4(E8x-|-(>f&TzKwvsa^bnR;Z0000< KMNUMnLSTZsmOowq literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/large_readtime@2x.png b/Telegram/Resources/icons/settings/premium/large_readtime@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f30a355ee8d7aa1c3d7b77632e1b2ebefd048d84 GIT binary patch literal 3483 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 JPDHLkV1msInZW=6 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/premium/large_readtime@3x.png b/Telegram/Resources/icons/settings/premium/large_readtime@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7d022a30e9918d4aa81a699eebb8daf0ff6823 GIT binary patch literal 5251 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index bf186e1f7..73d0fde25 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -170,21 +170,21 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_remember" = "Remember this choice"; -"lng_lastseen_show_title" = "Show your last seen"; -"lng_lastseen_show_about" = "To see **{user}'s** Last Seen time, either start showing your own Last Seen time..."; -"lng_lastseen_show_button" = "Show my Last Seen"; +"lng_lastseen_show_title" = "Show Your Last Seen"; +"lng_lastseen_show_about" = "To see **{user}'s** Last Seen time, either start\nshowing your own Last Seen time..."; +"lng_lastseen_show_button" = "Show My Last Seen"; "lng_lastseen_or" = "or"; "lng_lastseen_premium_title" = "Upgrade to Premium"; -"lng_lastseen_premium_about" = "Subscription will let you see **{user}'s** Last Seen status without showing yours."; +"lng_lastseen_premium_about" = "Subscription will let you see **{user}'s** Last Seen\nstatus without showing yours."; "lng_lastseen_premium_button" = "Subscribe to Telegram Premium"; "lng_lastseen_shown_toast" = "Your last seen time is now visible."; -"lng_readtime_show_title" = "Show your read date"; -"lng_readtime_show_about" = "To see when **{user}** read the message, either start showing your own read time..."; -"lng_readtime_show_button" = "Show my Read Time"; +"lng_readtime_show_title" = "Show Your Read Date"; +"lng_readtime_show_about" = "To see when **{user}** read the message,\neither start showing your own read time..."; +"lng_readtime_show_button" = "Show My Read Time"; "lng_readtime_or" = "or"; "lng_readtime_premium_title" = "Upgrade to Premium"; -"lng_readtime_premium_about" = "Subscription will let you see **{user}'s** read time without showing yours."; +"lng_readtime_premium_about" = "Subscription will let you see **{user}'s** read time\nwithout showing yours."; "lng_readtime_premium_button" = "Subscribe to Telegram Premium"; "lng_readtime_shown_toast" = "Your read times are now visible."; diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.cpp b/Telegram/SourceFiles/boxes/premium_preview_box.cpp index 06835d603..4f5afd8f0 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_preview_box.cpp @@ -55,6 +55,7 @@ constexpr auto kToggleStickerTimeout = 2 * crl::time(1000); constexpr auto kStarOpacityOff = 0.1; constexpr auto kStarOpacityOn = 1.; constexpr auto kStarPeriod = 3 * crl::time(1000); +constexpr auto kShowOrLineOpacity = 0.3; using Data::ReactionId; @@ -1315,6 +1316,200 @@ void PremiumUnavailableBox(not_null<Ui::GenericBox*> box) { }); } +[[nodiscard]] object_ptr<Ui::RpWidget> MakeShowOrPremiumIcon( + not_null<Ui::RpWidget*> parent, + not_null<const style::icon*> icon) { + const auto margin = st::showOrIconMargin; + const auto padding = st::showOrIconPadding; + const auto inner = padding.top() + icon->height() + padding.bottom(); + const auto full = margin.top() + inner + margin.bottom(); + auto result = object_ptr<Ui::FixedHeightWidget>(parent, full); + const auto raw = result.data(); + + raw->resize(st::boxWideWidth, full); + raw->paintRequest( + ) | rpl::start_with_next([=] { + auto p = QPainter(raw); + auto hq = PainterHighQualityEnabler(p); + const auto width = raw->width(); + const auto position = QPoint((width - inner) / 2, margin.top()); + const auto rect = QRect(position, QSize(inner, inner)); + const auto shift = QPoint(padding.left(), padding.top()); + p.setPen(Qt::NoPen); + p.setBrush(st::showOrIconBg); + p.drawEllipse(rect); + icon->paint(p, position + shift, width); + }, raw->lifetime()); + + return result; +} + +[[nodiscard]] object_ptr<Ui::RpWidget> MakeShowOrLabel( + not_null<Ui::RpWidget*> parent, + rpl::producer<QString> text) { + auto result = object_ptr<Ui::FlatLabel>( + parent, + std::move(text), + st::showOrLabel); + const auto raw = result.data(); + + raw->paintRequest( + ) | rpl::start_with_next([=] { + auto p = QPainter(raw); + + const auto full = st::showOrLineWidth; + const auto left = (raw->width() - full) / 2; + const auto text = raw->textMaxWidth() + 2 * st::showOrLabelSkip; + const auto fill = (full - text) / 2; + const auto stroke = st::lineWidth; + const auto top = st::showOrLineTop; + p.setOpacity(kShowOrLineOpacity); + p.fillRect(left, top, fill, stroke, st::windowSubTextFg); + const auto start = left + full - fill; + p.fillRect(start, top, fill, stroke, st::windowSubTextFg); + }, raw->lifetime()); + + return result; +} + +void ShowOrPremiumBox( + not_null<Ui::GenericBox*> box, + ShowOrPremium type, + QString shortName, + Fn<void()> justShow, + Fn<void()> toPremium) { + struct Skin { + rpl::producer<QString> showTitle; + rpl::producer<TextWithEntities> showAbout; + rpl::producer<QString> showButton; + rpl::producer<QString> orPremium; + rpl::producer<QString> premiumTitle; + rpl::producer<TextWithEntities> premiumAbout; + rpl::producer<QString> premiumButton; + QString toast; + const style::icon *icon = nullptr; + }; + auto skin = (type == ShowOrPremium::LastSeen) + ? Skin{ + tr::lng_lastseen_show_title(), + tr::lng_lastseen_show_about( + lt_user, + rpl::single(TextWithEntities{ shortName }), + Ui::Text::RichLangValue), + tr::lng_lastseen_show_button(), + tr::lng_lastseen_or(), + tr::lng_lastseen_premium_title(), + tr::lng_lastseen_premium_about( + lt_user, + rpl::single(TextWithEntities{ shortName }), + Ui::Text::RichLangValue), + tr::lng_lastseen_premium_button(), + tr::lng_lastseen_shown_toast(tr::now), + &st::showOrIconLastSeen, + } + : (type == ShowOrPremium::ReadTime) + ? Skin{ + tr::lng_readtime_show_title(), + tr::lng_readtime_show_about( + lt_user, + rpl::single(TextWithEntities{ shortName }), + Ui::Text::RichLangValue), + tr::lng_readtime_show_button(), + tr::lng_readtime_or(), + tr::lng_readtime_premium_title(), + tr::lng_readtime_premium_about( + lt_user, + rpl::single(TextWithEntities{ shortName }), + Ui::Text::RichLangValue), + tr::lng_readtime_premium_button(), + tr::lng_readtime_shown_toast(tr::now), + &st::showOrIconReadTime, + } + : Skin(); + + box->setStyle(st::showOrBox); + box->setWidth(st::boxWideWidth); + box->addTopButton(st::boxTitleClose, [=] { + box->closeBox(); + }); + + box->addRow(MakeShowOrPremiumIcon(box, skin.icon)); + box->addRow( + object_ptr<Ui::FlatLabel>( + box, + std::move(skin.showTitle), + st::boostCenteredTitle), + st::showOrTitlePadding); + box->addRow( + object_ptr<Ui::FlatLabel>( + box, + std::move(skin.showAbout), + st::boostText), + st::showOrAboutPadding); + const auto show = box->addRow( + object_ptr<Ui::RoundButton>( + box, + std::move(skin.showButton), + st::showOrShowButton), + QMargins( + st::showOrBox.buttonPadding.left(), + 0, + st::showOrBox.buttonPadding.right(), + 0)); + show->setTextTransform(Ui::RoundButton::TextTransform::NoTransform); + box->addRow( + MakeShowOrLabel(box, std::move(skin.orPremium)), + st::showOrLabelPadding); + box->addRow( + object_ptr<Ui::FlatLabel>( + box, + std::move(skin.premiumTitle), + st::boostCenteredTitle), + st::showOrTitlePadding); + box->addRow( + object_ptr<Ui::FlatLabel>( + box, + std::move(skin.premiumAbout), + st::boostText), + st::showOrPremiumAboutPadding); + + const auto premium = Ui::CreateChild<Ui::GradientButton>( + box.get(), + Ui::Premium::ButtonGradientStops()); + + const auto &st = st::premiumPreviewBox.button; + premium->resize(st::showOrShowButton.width, st::showOrShowButton.height); + + const auto label = Ui::CreateChild<Ui::FlatLabel>( + premium, + std::move(skin.premiumButton), + st::premiumPreviewButtonLabel); + label->setAttribute(Qt::WA_TransparentForMouseEvents); + rpl::combine( + premium->widthValue(), + label->widthValue() + ) | rpl::start_with_next([=](int outer, int width) { + label->moveToLeft( + (outer - width) / 2, + st::premiumPreviewBox.button.textTop, + outer); + }, label->lifetime()); + + box->setShowFinishedCallback([=] { + premium->startGlareAnimation(); + }); + + box->addButton( + object_ptr<Ui::AbstractButton>::fromRaw(premium)); + + show->setClickedCallback([box, justShow, toast = skin.toast] { + justShow(); + box->uiShow()->showToast(toast); + box->closeBox(); + }); + premium->setClickedCallback(std::move(toPremium)); +} + void DoubledLimitsPreviewBox( not_null<Ui::GenericBox*> box, not_null<Main::Session*> session) { diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.h b/Telegram/SourceFiles/boxes/premium_preview_box.h index 60c5699ca..f49cdf618 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.h +++ b/Telegram/SourceFiles/boxes/premium_preview_box.h @@ -83,6 +83,17 @@ void ShowPremiumPreviewToBuy( void PremiumUnavailableBox(not_null<Ui::GenericBox*> box); +enum class ShowOrPremium : uchar { + LastSeen, + ReadTime, +}; +void ShowOrPremiumBox( + not_null<Ui::GenericBox*> box, + ShowOrPremium type, + QString shortName, + Fn<void()> justShow, + Fn<void()> toPremium); + [[nodiscard]] object_ptr<Ui::GradientButton> CreateUnlockButton( QWidget *parent, rpl::producer<QString> text); diff --git a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp index 3f9445787..15ec3df2b 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "info/profile/info_profile_cover.h" +#include "api/api_user_privacy.h" #include "data/data_peer_values.h" #include "data/data_channel.h" #include "data/data_chat.h" @@ -23,6 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "info/profile/info_profile_emoji_status_panel.h" #include "info/info_controller.h" #include "boxes/peers/edit_forum_topic_box.h" +#include "boxes/premium_preview_box.h" #include "history/view/media/history_view_sticker_player.h" #include "lang/lang_keys.h" #include "ui/controls/userpic_button.h" @@ -373,23 +375,54 @@ void Cover::setupShowLastSeen() { && !user->isBot() && !user->isServiceUser() && user->session().premiumPossible()) { + if (user->session().premium()) { + if (user->onlineTill == kOnlineHidden) { + user->updateFullForced(); + } + _showLastSeen->hide(); + return; + } + rpl::combine( user->session().changes().peerFlagsValue( user, Data::PeerUpdate::Flag::OnlineStatus), Data::AmPremiumValue(&user->session()) - ) | rpl::start_with_next([=] { - _showLastSeen->setVisible( - (user->onlineTill == kOnlineHidden) - && !user->session().premium() - && user->session().premiumPossible()); + ) | rpl::start_with_next([=](auto, bool premium) { + const auto wasShown = !_showLastSeen->isHidden(); + const auto onlineHidden = (user->onlineTill == kOnlineHidden); + const auto shown = onlineHidden + && !premium + && user->session().premiumPossible(); + _showLastSeen->setVisible(shown); + if (wasShown && premium && onlineHidden) { + user->updateFullForced(); + } + }, _showLastSeen->lifetime()); + + _controller->session().api().userPrivacy().value( + Api::UserPrivacy::Key::LastSeen + ) | rpl::filter([=](Api::UserPrivacy::Rule rule) { + return (rule.option == Api::UserPrivacy::Option::Everyone); + }) | rpl::start_with_next([=] { + if (user->onlineTill == kOnlineHidden) { + user->updateFullForced(); + } }, _showLastSeen->lifetime()); } else { _showLastSeen->hide(); } _showLastSeen->setClickedCallback([=] { - ::Settings::ShowPremium(_controller, u"lastseen_hidden"_q); + const auto type = ShowOrPremium::LastSeen; + auto box = Box(ShowOrPremiumBox, type, user->shortName(), [=] { + _controller->session().api().userPrivacy().save( + ::Api::UserPrivacy::Key::LastSeen, + {}); + }, [=] { + ::Settings::ShowPremium(_controller, u"lastseen_hidden"_q); + }); + _controller->show(std::move(box)); }); } diff --git a/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp b/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp index c38afcd32..34e98bd42 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp +++ b/Telegram/SourceFiles/settings/settings_privacy_controllers.cpp @@ -710,21 +710,13 @@ object_ptr<Ui::RpWidget> LastSeenPrivacyController::setupBelowWidget( void LastSeenPrivacyController::confirmSave( bool someAreDisallowed, Fn<void()> saveCallback) { - const auto privacy = &_session->api().globalPrivacy(); - const auto hideReadTime = _hideReadTime; - const auto save = [=, saveCallback = std::move(saveCallback)] { - if (privacy->hideReadTimeCurrent() != hideReadTime) { - privacy->updateHideReadTime(hideReadTime); - } - saveCallback(); - }; if (someAreDisallowed && !Core::App().settings().lastSeenWarningSeen()) { auto callback = [ =, - save = std::move(save) + saveCallback = std::move(saveCallback) ](Fn<void()> &&close) { close(); - save(); + saveCallback(); Core::App().settings().setLastSeenWarningSeen(true); Core::App().saveSettingsDelayed(); }; @@ -735,7 +727,14 @@ void LastSeenPrivacyController::confirmSave( }); Ui::show(std::move(box), Ui::LayerOption::KeepOther); } else { - save(); + saveCallback(); + } +} + +void LastSeenPrivacyController::saveAdditional() { + const auto privacy = &_session->api().globalPrivacy(); + if (privacy->hideReadTimeCurrent() != _hideReadTime) { + privacy->updateHideReadTime(_hideReadTime); } } diff --git a/Telegram/SourceFiles/settings/settings_privacy_controllers.h b/Telegram/SourceFiles/settings/settings_privacy_controllers.h index 5211d0731..7b097ec44 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_controllers.h +++ b/Telegram/SourceFiles/settings/settings_privacy_controllers.h @@ -117,6 +117,8 @@ public: bool someAreDisallowed, Fn<void()> saveCallback) override; + void saveAdditional() override; + private: const not_null<::Main::Session*> _session; bool _hideReadTime = false; diff --git a/Telegram/SourceFiles/ui/effects/premium.style b/Telegram/SourceFiles/ui/effects/premium.style index c9c9ccd84..5b97d8cb4 100644 --- a/Telegram/SourceFiles/ui/effects/premium.style +++ b/Telegram/SourceFiles/ui/effects/premium.style @@ -303,3 +303,29 @@ boostReplaceIconSkip: 3px; boostReplaceIconOutline: 2px; boostReplaceIconAdd: point(4px, 2px); boostReplaceArrow: icon{{ "mediaview/next", windowSubTextFg }}; + +showOrIconLastSeen: icon{{ "settings/premium/large_lastseen", windowFgActive }}; +showOrIconReadTime: icon{{ "settings/premium/large_readtime", windowFgActive }}; +showOrIconBg: windowBgActive; +showOrIconPadding: margins(12px, 12px, 12px, 12px); +showOrIconMargin: margins(0px, 28px, 0px, 12px); +showOrTitlePadding: margins(0px, 0px, 0px, 5px); +showOrAboutPadding: margins(0px, 0px, 0px, 16px); +showOrShowButton: RoundButton(defaultActiveButton) { + width: 308px; + height: 42px; + textTop: 12px; + font: font(13px semibold); +} +showOrLabel: FlatLabel(boostText) { + textFg: windowSubTextFg; +} +showOrLineWidth: 190px; +showOrLabelSkip: 7px; +showOrLineTop: 10px; +showOrLabelPadding: margins(0px, 17px, 0px, 13px); +showOrPremiumAboutPadding: margins(0px, 0px, 0px, 0px); +showOrBox: Box(boostBox) { + buttonPadding: margins(28px, 16px, 28px, 27px); + button: showOrShowButton; +}