From 3c2caeb43ae04adce69427b4eb1d5161883990a0 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 18 Feb 2022 18:32:46 +0300 Subject: [PATCH] Adjust Notifications settings to the mockup. --- Telegram/Resources/icons/settings/dock.png | Bin 0 -> 531 bytes Telegram/Resources/icons/settings/dock@2x.png | Bin 0 -> 986 bytes Telegram/Resources/icons/settings/dock@3x.png | Bin 0 -> 1457 bytes Telegram/Resources/icons/settings/pin.png | Bin 0 -> 431 bytes Telegram/Resources/icons/settings/pin@2x.png | Bin 0 -> 699 bytes Telegram/Resources/icons/settings/pin@3x.png | Bin 0 -> 991 bytes .../Resources/icons/settings/position.png | Bin 0 -> 306 bytes .../Resources/icons/settings/position@2x.png | Bin 0 -> 490 bytes .../Resources/icons/settings/position@3x.png | Bin 0 -> 689 bytes Telegram/Resources/icons/settings/sound.png | Bin 0 -> 526 bytes .../Resources/icons/settings/sound@2x.png | Bin 0 -> 949 bytes .../Resources/icons/settings/sound@3x.png | Bin 0 -> 1371 bytes Telegram/SourceFiles/settings/settings.style | 4 + .../settings/settings_notifications.cpp | 225 ++++++++++-------- 14 files changed, 130 insertions(+), 99 deletions(-) create mode 100644 Telegram/Resources/icons/settings/dock.png create mode 100644 Telegram/Resources/icons/settings/dock@2x.png create mode 100644 Telegram/Resources/icons/settings/dock@3x.png create mode 100644 Telegram/Resources/icons/settings/pin.png create mode 100644 Telegram/Resources/icons/settings/pin@2x.png create mode 100644 Telegram/Resources/icons/settings/pin@3x.png create mode 100644 Telegram/Resources/icons/settings/position.png create mode 100644 Telegram/Resources/icons/settings/position@2x.png create mode 100644 Telegram/Resources/icons/settings/position@3x.png create mode 100644 Telegram/Resources/icons/settings/sound.png create mode 100644 Telegram/Resources/icons/settings/sound@2x.png create mode 100644 Telegram/Resources/icons/settings/sound@3x.png diff --git a/Telegram/Resources/icons/settings/dock.png b/Telegram/Resources/icons/settings/dock.png new file mode 100644 index 0000000000000000000000000000000000000000..310e1b6b1a6dae28df1fc2d8f02241fc70863d31 GIT binary patch literal 531 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 LNkvXXu0mjfUCE9B literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/pin.png b/Telegram/Resources/icons/settings/pin.png new file mode 100644 index 0000000000000000000000000000000000000000..d446e5be08bcc624ef3e62872bb22098024d6c62 GIT binary patch literal 431 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgfOw!ZEF~maf zZNS=7Ee;~F{|_b@Nwuucyq>U*A78q~51vn1aB zHg8j^Wgl~;AqVpbgPzyBHtGDgbrW&zTBHye8aiv4qqoGXUHj&`?g>rpv>lwP}`k75rs0>zyCGtcwX7Uz080|`?Sy! zozp?rzsi~W3hTH&HsEQjlyN_7;GkUnJ@@vaUi~$xk*{}|`6_c9a(fe5Id8wm#Rac- zS@dPjs+-pMuJ-&?p;^ng@x!Hvh~FGhQJiMiqBJ^gL~-2v!04jG z%ALP8LW65JJM-ZQo=HN-eK$^aI`^me*_`wBMxG^BWrplCn9ndiJFvg>z~hfChZFb4 zt>4QWx4zs&>aWfEzjgDymTpP;^t0yn+i8m**2(v~t4+Sx*16>3B+ni;!=;yB+J8Ek zv{7ZU=RLoNyN?~6ep*$4!^2o|$?}tt?S}<<*!IsC=Xz6SJ=0T5ZL;R{)1j+Fi?}q4 z8voSQFTU7u{Bhc5N!>8P8#!j8t68RPxt&|Y9ipM1zgWNVnbW10B|?*?W*&aH;reUM zXys|Vx9w-24T)%)=CeFlLn$o2_aEQo6r+VchyOB{`pjPxczjFLTDwQQ`;K?jtP0Wk zam)Yc0haZJC5OFOTAdsPTka&E*PeC$`Q1Eoe-W8HGik@U%OrZ;^0&`!(f%>z^2;SR zXRmo$w3Dx$`CgDx+jh;!#$`z+QsUjLeg$^(H{aB;`BETw^z_q7Y1Ny;Hs5qPs}QmN z`oaK?OAqA4Q(k@log$d!wK3vI=B~SX{~82SR$a}ya_cjftJ1{RUr#aKegC~^=Naz? z#gidgQ%{(1am|@>H}CjGnf~JuI%;7eGd`3TC`}YNUE`g2b@WWotx=8!QjVB=8xqPqFyG YU0ABp@ymG5dr-phboFyt=akR{07w@fjQ{`u literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/pin@3x.png b/Telegram/Resources/icons/settings/pin@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..65ec723063e8edea4d5b2d147e095e5a6de8fd95 GIT binary patch literal 991 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1SD_us|Wxo#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz1|Sip>6gA`6MbbAj}?&;~`7?Q#I zcIJL>t3;XO#*5=axZDDq#W;ESR3&z_=t{EeH2I?LVzp}2SBz8h6qnz1`(o_BY}#EtuiDT5hsB)lcWUeQ-aBtwe%|)_^>+IZ22lsr z07ew5F;8Q`OSho9b6>xHojZ5#(xpq2HcIrm_4oImerj}o#r9i=4fCCH}jL5o12S^i@CYE)h55Jwzjvo zH!*PukvxARY2%%H_dfA)nXt2*^RzUzwA{IC7Z;BV+XRR64*xwqs&0ymi+d+C0!TMd!M^`Qqh@QSu zBq^9xwAf5E&@iRCzP|mZxOjkT^v}n-a{a~+6Kz&jS5-wtM|&^7eC24Wk!05WH1}f( z0#Y|(^umkz7X8gJ^G^9c-LTqVuHW;|KmVOlubLw|BSXoEx!0|@vQjf$k4fJ#MbkRD zwxB?vovY^Ix63nwI5!=5J@d@Zf46T-f3b8t#WzDwPj8yn(rtG`*M=4EjJX}Wr}_K$ z@3IfO7tI)}C{eZSy)7Navhg}cLb|1aFPp5A4%13egw{O4h6RIJSV|F|IY|#Hk-fLO=9>00_&g*N) zIXwZ68u60aT3b_7*XiEtuOB}9`OBA*>gw5gOv(EF#}7Bk%E?WtV^56X`dpx`t!>bo pBqzqah-n3bRs+`pG-_4I1NjMMLChiAKaD||%hT1*Wt~$(69AIHn5h5& literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/position.png b/Telegram/Resources/icons/settings/position.png new file mode 100644 index 0000000000000000000000000000000000000000..922250425060943148522ec460ff1118179e5821 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlfU&GB?`46zV= zJNY1Qg94B1QC*47&KV8T(T9WzF0OBJiw;^h_wT*eZp!^1mB*ym5_IaKc#=lc z^m99>1bvUMF1FXy<#uH@FVdQ&MBb@06B4BkpKVy literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/position@2x.png b/Telegram/Resources/icons/settings/position@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9f10178bf527fcc5c8b67c1d6cb0bd040a92203d GIT binary patch literal 490 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1SD@H^Qi6cI>kT z%LKj|%=J$l<~{el-1GPcM~ufphSc~?tcRJr<`|r^6Azh|djI>W{&YCkNb!H+D*U3uUYmrbrS0dEI^zK$;a314j*HRD0a>H{K50k(AKDgau+Fp;K zSJ%tlB^|QX?|Ym%E68KYCSev)S4E{=>x9=d9NEOnw(}|1id9}#`u8P7WhZ6b4r7Vs zOIgJ^ZBzGEM$)*M3JEqn3}~j#fToF-@F1&5->JWAOnQ1NOQjjp|&sd_Q^_0`Gys+0)g} JWt~$(69B?Lw6g#J literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/position@3x.png b/Telegram/Resources/icons/settings/position@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d9119fb77cc961479916631c298536f18b0d9a27 GIT binary patch literal 689 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1SD_us|Wxo#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz1|Sip>6gA`6MbbHUhz$ESI;uw;_ z`Zm(K?~s9js<*fENlpv47VFRv>puK& zLaPjySIF5?(<{7NH$A+;aqZM9u0JZT1Ts@&%w(hw@`WTF&lEDXdo6LgEm?WTx~>le zCY|0UMpnK-Cl20CGMnAHvZ#S~PD)d%kfCp?bL2dyQ#}@slvOH!{9;ktlxQK!W}g^R z{Gn>^oq|)h-gE4Z(aTFbbxZ2dlhmEJ-`+WN>v-w%`6>dyuI7&@c0YIo)oecC$~zE>LpuboFyt=akR{0DB-C;Q#;t literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/sound.png b/Telegram/Resources/icons/settings/sound.png new file mode 100644 index 0000000000000000000000000000000000000000..c8061b17529adebc993a56862abaccd71d6e8763 GIT binary patch literal 526 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgftisd9F~maf z?UcQJO%5Whp7c$}Q@=8C$)#zog#1QtvS()udvqq6Z6XV1nl#=>o@QD*WZ6jto};r z&GcEdDl1ZKqv`Ckck|fqRM_|}4LZNc!O&OO%;m|$%6r>#HD)byedN#StGJ-XE?#f? z!;>jSv(Kt=G&wC4=$@d$dE4#G^Uvq!#xS*2?R{qf)a`gLZ~Mk12{)Y=1r{-T!u^?= zOy>GcES3>(dziGbgEe;NN~X4`wQL7VW0T_6U;q7g9-FOg&8;s}ll!)mv0BOXf03Fi zd^^Xi`NXC*3LLAicIEw8&>gqFeWBCIw9UP4&2dhB#V0rQEV-Ix$g?>{FJJ22l>6)L zr=OncrMktg^skA~nui4*YH}|xa<6<{rDErIAV?(DL~3GKpvd;yx)&y&WO1*4v;VfE wUDW;W?9B&H%fIE_c>C?Xhvr4he}kV&rf+=Yc*N5GCnzpFUHx3vIVCg!06hoK$N&HU literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/sound@2x.png b/Telegram/Resources/icons/settings/sound@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8d85954283066528bb0c74183bc23b02fe156a GIT binary patch literal 949 zcmV;m14{gfP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NFA4x<(R9Fe^SiMWKQ507*S`Doz z2MtNXs8uR(aks!t1t*sX`+#uE$(A6ogogIEa&Yhu5X@R~5d?>H@B^ttDFdZ?58OJO z_dY%Gyy`Q(k4wLE?)mt6y64_=RjHJZQURp`N(Gb($Xo%vUVnFYSF6>c(dhK_w9MHg zgbxOTpWmNuw|j7KFg7+O!A~|5m&^6d=j-py&CTrWtZWHM;PLVC{r&y(^K*;ELewh1 z-(RUzD6NNw2dmXeZAOoQO){BeS@ZckmjG7x_V(W1-jG(cT9vU*lnqPC5n|%f(o&<* zKu))}w-XZ+KUxl@6taPoVi8wXR$8qVaymRb6tf&q|05epNZ3G?9!6KcVozW!@t2r4(jYi{iIwvP5Q3D_l2yAR@Pz_?W z`YROd<&%?>R4TQ(x%u(&!3=<3p-^Cr)^4|rMkCY=eIqGnOOkM}*F%3P0D~f-e!p)rnNSbc2*!!WMwggCpw#P#)c>ImD2iNBnX@)BBDSfGR+A0L@$Fc_$wVtEPCOcJrY zgi56n<$;BHdU~RIisdDg&1PvbxZ0Rluh*%bVo^fSwA5|@{QmxadU}eEQ&Urmi;GOm z<#MR!fGDA>t1Hg*U&UA~RxX#(%j@+b&SWx(Iq=twL)Uyh-^Im+PN$*#Y3`K%-7UP6w!trBub@k=t zg%N@oa(;dujYk83)AjW=eq#p2LN6~bKR-XCF-#_6mP6@vx7(q^kqx}pWEo*u zZr}u+$dcXP-*bdu73K|?50MQ#9p~oeII|IpuybJ)giXqA3+Pa2c%%XVM4Qbv;`9>3 z2_K5^*pR(8zmTI(Y3M09jf8#oi~H!8;Kv3i3GC&gqobLbnb9XuA}SS7Dxg&0KdZnW XU2l*e8~pNH00000NkvXXu0mjfC1$57 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/settings/sound@3x.png b/Telegram/Resources/icons/settings/sound@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3c1e3a2fd8ba76883b66e2a5e9db5f6beedd0065 GIT binary patch literal 1371 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1SD_us|Wxo#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz1|Sip>6gA`6MbbHUhz;e{n#W5s< z^=;Hm?fgIyv#B$C7JlIG*drzX{=uC4mb-p`U$FIBWcJ(l(be-etJ~SVTCTMK4Stv(df{ad{#?_>HD9-E*|K~0?)&xi?Ck8ava*Vbiqlfd4K5xy&~U8ludTK9 z>UHbN1SXmK_V@Q2d+jl>ww^sYIUA`P#Sh&&TRAO>O#Enm%HnDyA`gQB7RbE^gN=l2CFK3TE zqG9;(?OR`cuUV(0-8Mu;M<)v?%E-z}n#f2?TN@i6{+<2l^y%*IV@pnWIcGZfRJRmz ztF_!adD63}Xw&hC+p=FG7}w3*#?8$wFDJ*b{p?xa`1p9^hh;w{HW+#GoG2N>kx&e))R*)ladflohwR)&O#6n~hPa3@^Kt7+MyMNEN5PF$Hd zQSi{(?c1l@ex3ASmMvfY{rmUNpFc0vNKQ%udb1)gpt-qu>A7tZzMGg_F4=S( z>~P(C@0WnFwLec$ZLO{6CtXu3E2-DJPM`MPbNLbfWsS@@e^mvOq=LG-x@mr4j*gBQ zQ_gSOxY2P^jrZI+bDnIjk5p5TFjP6R%T80X)578H`}fahSJ&6~_wbmG+ly^)_OnCV88O1p{J?6iD{!C3z|14&EQ^c@2e|p?K{TtCyQ5*798m+CZBUC>h zyK^Td?&@S;!OPs+uJMJ<*yrKb_v6QpdseCM z?vALc+QlJaEp@NsXK(n|lybqt&sIf2_UvNH1wdpQ~ER8;H>1a@#m7IN zeSNa$8aJNOi?=hjZQVLCgqN3BrE{;=j){*0nLL6yIRp-Gjfjhr+nBA@#(6Wf>UW02 z;lws+#Q>m~l$2MGkF1=W+SQ5sTF%^eW4yD*s_t+qYhvqk-r5Z1s>fH3-RVib89b-{ zL9tUuqVy@5If4ee!otEhbbL*jIiiiuTv4gX&gO1sN;~xS>&3^{i_-<;DP;Ie;6&E-RNnP*|!f= Ouz9-rxvXadd( - object_ptr( - container, - tr::lng_settings_notify_all(tr::now), - Core::App().settings().notifyFromAll(), - st::settingsCheckbox), - st::settingsCheckboxPadding); - fromAll->checkedChanges( + const auto fromAll = AddButton( + container, + tr::lng_settings_notify_all(), + st::settingsButtonNoIcon + )->toggleOn(rpl::single(Core::App().settings().notifyFromAll())); + fromAll->toggledChanges( ) | rpl::filter([](bool checked) { return (checked != Core::App().settings().notifyFromAll()); }) | rpl::start_with_next([=](bool checked) { @@ -584,65 +582,98 @@ void SetupMultiAccountNotifications( void SetupNotificationsContent( not_null controller, not_null container) { + using namespace rpl::mappers; + + AddSkip(container); + using NotifyView = Core::Settings::NotifyView; SetupMultiAccountNotifications(controller, container); AddSubsectionTitle(container, tr::lng_settings_notify_title()); const auto session = &controller->session(); - const auto checkbox = [&](const QString &label, bool checked) { - return object_ptr( + const auto checkbox = [&]( + rpl::producer label, + IconDescriptor &&descriptor, + rpl::producer checked) { + auto result = CreateButton( container, - label, - checked, - st::settingsCheckbox); + std::move(label), + st::settingsButton, + std::move(descriptor) + ); + result->toggleOn(std::move(checked)); + return result; }; - const auto addCheckbox = [&](const QString &label, bool checked) { + const auto addCheckbox = [&]( + rpl::producer label, + IconDescriptor &&descriptor, + rpl::producer checked) { return container->add( - checkbox(label, checked), - st::settingsCheckboxPadding); + checkbox( + std::move(label), + std::move(descriptor), + std::move(checked))); }; - const auto addSlidingCheckbox = [&](const QString &label, bool checked) { + const auto addSlidingCheckbox = [&]( + rpl::producer label, + IconDescriptor &&descriptor, + rpl::producer checked) { return container->add( - object_ptr>( + object_ptr>( container, - checkbox(label, checked), - st::settingsCheckboxPadding)); + checkbox( + std::move(label), + std::move(descriptor), + std::move(checked)))); }; const auto &settings = Core::App().settings(); + const auto desktopToggles = container->lifetime( + ).make_state>(); const auto desktop = addCheckbox( - tr::lng_settings_desktop_notify(tr::now), - settings.desktopNotify()); - const auto name = addSlidingCheckbox( - tr::lng_settings_show_name(tr::now), - (settings.notifyView() <= NotifyView::ShowName)); - const auto preview = addSlidingCheckbox( - tr::lng_settings_show_preview(tr::now), - (settings.notifyView() <= NotifyView::ShowPreview)); + tr::lng_settings_desktop_notify(), + { &st::settingsIconNotifications, kIconRed }, + desktopToggles->events_starting_with(settings.desktopNotify())); + const auto soundToggles = container->lifetime( + ).make_state>(); const auto sound = addCheckbox( - tr::lng_settings_sound_notify(tr::now), - settings.soundNotify()); + tr::lng_settings_sound_notify(), + { &st::settingsIconSound, kIconLightOrange }, + soundToggles->events_starting_with(settings.soundNotify())); + const auto flashbounceToggles = container->lifetime( + ).make_state>(); const auto flashbounce = addCheckbox( (Platform::IsWindows() ? tr::lng_settings_alert_windows : Platform::IsMac() ? tr::lng_settings_alert_mac - : tr::lng_settings_alert_linux)(tr::now), - settings.flashBounceNotify()); + : tr::lng_settings_alert_linux)(), + { &st::settingsIconDock, kIconLightBlue }, + flashbounceToggles->events_starting_with( + settings.flashBounceNotify())); - AddSkip(container, st::settingsCheckboxesSkip); + const auto name = addSlidingCheckbox( + tr::lng_settings_show_name(), + {}, + rpl::single(settings.notifyView() <= NotifyView::ShowName)); + const auto preview = addSlidingCheckbox( + tr::lng_settings_show_preview(), + {}, + rpl::single(settings.notifyView() <= NotifyView::ShowPreview)); + + AddSkip(container); AddDivider(container); - AddSkip(container, st::settingsCheckboxesSkip); + AddSkip(container); AddSubsectionTitle(container, tr::lng_settings_events_title()); + auto joinSilent = rpl::single( + session->api().contactSignupSilentCurrent().value_or(false) + ) | rpl::then(session->api().contactSignupSilent()); const auto joined = addCheckbox( - tr::lng_settings_events_joined(tr::now), - !session->api().contactSignupSilentCurrent().value_or(false)); - session->api().contactSignupSilent( - ) | rpl::start_with_next([=](bool silent) { - joined->setChecked(!silent); - }, joined->lifetime()); - joined->checkedChanges( + tr::lng_settings_events_joined(), + { &st::settingsIconPlus, kIconGreen }, + std::move(joinSilent) | rpl::map(!_1)); + joined->toggledChanges( ) | rpl::filter([=](bool enabled) { const auto silent = session->api().contactSignupSilentCurrent(); return (enabled == silent.value_or(false)); @@ -651,13 +682,12 @@ void SetupNotificationsContent( }, joined->lifetime()); const auto pinned = addCheckbox( - tr::lng_settings_events_pinned(tr::now), - settings.notifyAboutPinned()); - settings.notifyAboutPinnedChanges( - ) | rpl::start_with_next([=](bool notify) { - pinned->setChecked(notify); - }, pinned->lifetime()); - pinned->checkedChanges( + tr::lng_settings_events_pinned(), + { &st::settingsIconPin, kIconLightOrange }, + rpl::single( + settings.notifyAboutPinned() + ) | rpl::then(settings.notifyAboutPinnedChanges())); + pinned->toggledChanges( ) | rpl::filter([=](bool notify) { return (notify != Core::App().settings().notifyAboutPinned()); }) | rpl::start_with_next([=](bool notify) { @@ -673,17 +703,14 @@ void SetupNotificationsContent( tr::lng_settings_notifications_calls_title()); const auto authorizations = &session->api().authorizations(); const auto acceptCalls = addCheckbox( - tr::lng_settings_call_accept_calls(tr::now), - !authorizations->callsDisabledHere()); - session->api().authorizations().callsDisabledHereChanges( - ) | rpl::start_with_next([=](bool disabled) { - acceptCalls->setChecked( - !disabled, - Ui::Checkbox::NotifyAboutChange::DontNotify); - }, acceptCalls->lifetime()); - acceptCalls->checkedChanges( - ) | rpl::start_with_next([=](bool value) { - authorizations->toggleCallsDisabledHere(!value); + tr::lng_settings_call_accept_calls(), + { &st::settingsIconCalls, kIconGreen }, + authorizations->callsDisabledHereValue() | rpl::map(!_1)); + acceptCalls->toggledChanges( + ) | rpl::filter([=](bool toggled) { + return (toggled == authorizations->callsDisabledHere()); + }) | rpl::start_with_next([=](bool toggled) { + authorizations->toggleCallsDisabledHere(!toggled); }, container->lifetime()); AddSkip(container, st::settingsCheckboxesSkip); @@ -691,24 +718,28 @@ void SetupNotificationsContent( AddSkip(container, st::settingsCheckboxesSkip); AddSubsectionTitle(container, tr::lng_settings_badge_title()); - const auto muted = addCheckbox( - tr::lng_settings_include_muted(tr::now), - settings.includeMutedCounter()); - const auto count = addCheckbox( - tr::lng_settings_count_unread(tr::now), - settings.countUnreadMessages()); + const auto muted = AddButton( + container, + tr::lng_settings_include_muted(), + st::settingsButtonNoIcon); + muted->toggleOn(rpl::single(settings.includeMutedCounter())); + const auto count = AddButton( + container, + tr::lng_settings_count_unread(), + st::settingsButtonNoIcon); + count->toggleOn(rpl::single(settings.countUnreadMessages())); - const auto nativeText = [&] { + auto nativeText = [&] { if (!Platform::Notifications::Supported() || Platform::Notifications::Enforced()) { - return QString(); + return rpl::producer(); } else if (Platform::IsWindows()) { - return tr::lng_settings_use_windows(tr::now); + return tr::lng_settings_use_windows(); } - return tr::lng_settings_use_native_notifications(tr::now); + return tr::lng_settings_use_native_notifications(); }(); - const auto native = [&]() -> Ui::Checkbox* { - if (nativeText.isEmpty()) { + const auto native = [&]() -> Ui::SettingsButton* { + if (!nativeText) { return nullptr; } @@ -716,7 +747,11 @@ void SetupNotificationsContent( AddDivider(container); AddSkip(container, st::settingsCheckboxesSkip); AddSubsectionTitle(container, tr::lng_settings_native_title()); - return addCheckbox(nativeText, settings.nativeNotifications()); + return AddButton( + container, + std::move(nativeText), + st::settingsButtonNoIcon + )->toggleOn(rpl::single(settings.nativeNotifications())); }(); const auto advancedSlide = !Platform::Notifications::Enforced() @@ -732,10 +767,10 @@ void SetupNotificationsContent( SetupAdvancedNotifications(controller, advancedWrap); } - if (!name->entity()->checked()) { + if (!name->entity()->toggled()) { preview->hide(anim::type::instant); } - if (!desktop->checked()) { + if (!desktop->toggled()) { name->hide(anim::type::instant); preview->hide(anim::type::instant); } @@ -748,7 +783,7 @@ void SetupNotificationsContent( Core::App().saveSettingsDelayed(); Core::App().notifications().notifySettingsChanged(change); }; - desktop->checkedChanges( + desktop->toggledChanges( ) | rpl::filter([](bool checked) { return (checked != Core::App().settings().desktopNotify()); }) | rpl::start_with_next([=](bool checked) { @@ -756,11 +791,11 @@ void SetupNotificationsContent( changed(Change::DesktopEnabled); }, desktop->lifetime()); - name->entity()->checkedChanges( + name->entity()->toggledChanges( ) | rpl::map([=](bool checked) { if (!checked) { return NotifyView::ShowNothing; - } else if (!preview->entity()->checked()) { + } else if (!preview->entity()->toggled()) { return NotifyView::ShowName; } return NotifyView::ShowPreview; @@ -771,11 +806,11 @@ void SetupNotificationsContent( changed(Change::ViewParams); }, name->lifetime()); - preview->entity()->checkedChanges( + preview->entity()->toggledChanges( ) | rpl::map([=](bool checked) { if (checked) { return NotifyView::ShowPreview; - } else if (name->entity()->checked()) { + } else if (name->entity()->toggled()) { return NotifyView::ShowName; } return NotifyView::ShowNothing; @@ -786,7 +821,7 @@ void SetupNotificationsContent( changed(Change::ViewParams); }, preview->lifetime()); - sound->checkedChanges( + sound->toggledChanges( ) | rpl::filter([](bool checked) { return (checked != Core::App().settings().soundNotify()); }) | rpl::start_with_next([=](bool checked) { @@ -794,7 +829,7 @@ void SetupNotificationsContent( changed(Change::SoundEnabled); }, sound->lifetime()); - flashbounce->checkedChanges( + flashbounce->toggledChanges( ) | rpl::filter([](bool checked) { return (checked != Core::App().settings().flashBounceNotify()); }) | rpl::start_with_next([=](bool checked) { @@ -802,7 +837,7 @@ void SetupNotificationsContent( changed(Change::FlashBounceEnabled); }, flashbounce->lifetime()); - muted->checkedChanges( + muted->toggledChanges( ) | rpl::filter([=](bool checked) { return (checked != Core::App().settings().includeMutedCounter()); }) | rpl::start_with_next([=](bool checked) { @@ -810,7 +845,7 @@ void SetupNotificationsContent( changed(Change::IncludeMuted); }, muted->lifetime()); - count->checkedChanges( + count->toggledChanges( ) | rpl::filter([=](bool checked) { return (checked != Core::App().settings().countUnreadMessages()); }) | rpl::start_with_next([=](bool checked) { @@ -821,25 +856,26 @@ void SetupNotificationsContent( Core::App().notifications().settingsChanged( ) | rpl::start_with_next([=](Change change) { if (change == Change::DesktopEnabled) { - desktop->setChecked(Core::App().settings().desktopNotify()); + desktopToggles->fire(Core::App().settings().desktopNotify()); name->toggle( Core::App().settings().desktopNotify(), anim::type::normal); preview->toggle( (Core::App().settings().desktopNotify() - && name->entity()->checked()), + && name->entity()->toggled()), anim::type::normal); } else if (change == Change::ViewParams) { - preview->toggle(name->entity()->checked(), anim::type::normal); + preview->toggle(name->entity()->toggled(), anim::type::normal); } else if (change == Change::SoundEnabled) { - sound->setChecked(Core::App().settings().soundNotify()); + soundToggles->fire(Core::App().settings().soundNotify()); } else if (change == Change::FlashBounceEnabled) { - flashbounce->setChecked(Core::App().settings().flashBounceNotify()); + flashbounceToggles->fire( + Core::App().settings().flashBounceNotify()); } }, desktop->lifetime()); if (native) { - native->checkedChanges( + native->toggledChanges( ) | rpl::filter([](bool checked) { return (checked != Core::App().settings().nativeNotifications()); }) | rpl::start_with_next([=](bool checked) { @@ -859,16 +895,7 @@ void SetupNotificationsContent( void SetupNotifications( not_null controller, not_null container) { - AddSkip(container, st::settingsCheckboxesSkip); - - auto wrap = object_ptr(container); - SetupNotificationsContent(controller, wrap.data()); - - container->add(object_ptr( - container, - std::move(wrap))); - - AddSkip(container, st::settingsCheckboxesSkip); + SetupNotificationsContent(controller, container); } } // namespace