From 4dd5be93565ff80c16e504c2be156652c90a932a Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 31 Mar 2022 00:34:21 +0300 Subject: [PATCH] Simplified settings of notification sound. --- .../Resources/icons/menu/sound_disable.png | Bin 0 -> 748 bytes .../Resources/icons/menu/sound_disable@2x.png | Bin 0 -> 1365 bytes .../Resources/icons/menu/sound_disable@3x.png | Bin 0 -> 2084 bytes .../Resources/icons/menu/sound_enable.png | Bin 0 -> 585 bytes .../Resources/icons/menu/sound_enable@2x.png | Bin 0 -> 1042 bytes .../Resources/icons/menu/sound_enable@3x.png | Bin 0 -> 1520 bytes Telegram/Resources/langs/lang.strings | 6 +- Telegram/SourceFiles/menu/menu_mute.cpp | 102 +++--------------- Telegram/SourceFiles/ui/menu_icons.style | 2 + .../SourceFiles/window/window_peer_menu.cpp | 4 +- 10 files changed, 21 insertions(+), 93 deletions(-) create mode 100644 Telegram/Resources/icons/menu/sound_disable.png create mode 100644 Telegram/Resources/icons/menu/sound_disable@2x.png create mode 100644 Telegram/Resources/icons/menu/sound_disable@3x.png create mode 100644 Telegram/Resources/icons/menu/sound_enable.png create mode 100644 Telegram/Resources/icons/menu/sound_enable@2x.png create mode 100644 Telegram/Resources/icons/menu/sound_enable@3x.png diff --git a/Telegram/Resources/icons/menu/sound_disable.png b/Telegram/Resources/icons/menu/sound_disable.png new file mode 100644 index 0000000000000000000000000000000000000000..75b6855f6763ad6dd86a53f7ea38f2e50550c16e GIT binary patch literal 748 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 Gp$P!}@#(Dq literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/sound_enable@2x.png b/Telegram/Resources/icons/menu/sound_enable@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..57f11693c97318068b0e1238d57a1e8ced92f138 GIT binary patch literal 1042 zcmV+t1nv8YP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NFd`Uz>R9Fe^SY0T)Q5ZM-3x%b8 z%~xA4cEPleWF=RMqDak!tZd}g1+Bz|5|knzjNMq&$GBV>5>$X6!>Eb$YXH7GMTKXsHm!{Dkmq$ z?RLi?BS#9gTHV^(IyN@8xw-l9@bDSB4h{~ova&b=e%w@8SlH6iGBPri z@jWv$BamGtfC)p1iHUV}b(NKs<>loS6&0D8nQZ^t+uQ%4>*(lcaB#4vr^n;*WM^ly zor&ciA0TWmD=S-DTT?2Pl-u3i9SH32?-Lpz6z=!R^76>hFq_Ta%GcZ5i@>L+CxNJV0gMkyNl77)-EQaeiP|0wp{SEZ5-1T8 zQ%O=tQb>?r2Rl&#R>;vygvvibS>R2JL@;R@L(D57aeNy+2mBg2D{9hP7)$Vce% z@)FSG&4-ccsLXUxd%4jsA(~FPij>3v$ zkN7k=IXQt3DfI<7aX@{2eME_dh6W18UZ9WRQ)qQ{6%cg7$)f^ub9233FVNZ9Sqc)L zuB@yelJ6;NJML5nk>zrP0;n0It^pgAWDm`|L_(b3W5 zAoA}=YHDg*TN`!_?^zrRoSWt4<+HQ1Ut%LID=8o;@D~;M0x|qSq)&dp)c^nh M07*qoM6N<$g7b&kL;wH) literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/sound_enable@3x.png b/Telegram/Resources/icons/menu/sound_enable@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c91d56032bf9ae57634b116901c256f13bbdef0d GIT binary patch literal 1520 zcmY*ZdpOf;9RJO&b=hI8Vv5$>>mk=Ol3^QW%r(b`O|3bVi6Kcmi)J%(Z=E{knuZV^ z>R=od%PnU`hZBiJ?$@HE4rl&3m-q90zMs$gzTfBj{XWn8JTK3a=nUBf-vs~w1n+|N zmZ{4&!E&-Vl&Pa46Ht`5vm;O~JuoBNVCnw&5O;ULNan!+h@isb&ebt#hn*Ka3gnK~^2fFc=>b?`l_xIiWuBm}5$33)lzG)|hX@_v)f<;Q$> z&X@z+(*Usx&oi?HXS4M&Iy8ZyNw>g&9(U~Kie6pBQq5L%|Chp3`3cgIsRHr6zg8E* z6F!pXz7A{-Y_9Q79F_Y&^!GC}GuphVuV0()-Gf-gsZLcP9`CnVFfY8J#Q)RNAPg(&%85q{w=@g4V{(ti^_ zdZb_Q_~(xwqt<%fKi93Lm6n#e4Cckne<&!>npcaBjErm@)$=mI#q@M^aD9ap6%|q` z(W}ZAlTr=0h3%u!XlC8!CTej^Q1(H!KT(LjTQtYpWe|!LZ74;olFw*oV?8vR8SM|C z7ZEmtX*+oZR4uL z1%keRsCa(V)ZDyoczAeqHJZg@^_e81>+9=ZzI=K1{noc{Qzr|O^uG1mX&ceIVmaNK-4Xvu%v@?#Cll%iQZB50`ikr zBO}C=j`sFcKL5E?3RbeG({(>lXf)*FVV#wCZAwZ?I2tYG0{?V4%E#LqtP5;jam%(p*WA=}Jhwl`W}g((CdQwwU(L46Gthj15+;3Ym^eYmm!wwj_d3t8SoE9sELQO6;DCp$SF^a$cAxE9# zzbhE-_gqw8Y;<;Vin!6ag53JFww9cnjOa6PXpqW^wd!Rb34*Ft=4x(y`{s+qEI0g! zJob(dTx=f`V@29oZVdu~B6Sbv+oI8Gu7E()(A?bP^)9Zfv(u&8K8X<)rhA%cfru>z z{C4Z_?}b1hq7;IQ%b|Th5z3E3AsRG^#Rg{C>2`K@sCOkL$X%lI7!HTyeY!53NK9vaIpLK!x+bEE86E9wEj*P^^})x4>S?!S9%Y>Y%A-D*opN|H#hgW7gy8ri2^2?Sm*a6fi(YRZdpb!mFq zzE|QA$OcG)0xLEdX^b{AGtHNK+}7Ia$UGSu2%j|}Lt!-;nVHPZ7Yzq?5Q*RA zuqP-T+Ly=2$JeEz_=K~q>S8xb)?C~EwtH?S>43Xwsp<|G_%i`7M>yh8vl8 RW menu, - not_null peer, - rpl::producer &&soundOnText, - rpl::producer &&soundOffText, - Fn notifySound) { - const auto createView = [&](rpl::producer &&text, bool checked) { - auto item = base::make_unique_q( - menu->menu(), - st::popupMenuWithIcons.menu, - new QAction(QString(), menu->menu()), - nullptr, - nullptr); - std::move( - text - ) | rpl::start_with_next([action = item->action()](QString text) { - action->setText(text); - }, item->lifetime()); - item->init(checked); - const auto view = item->checkView(); - menu->addAction(std::move(item)); - return view; - }; - - const auto soundIsNone = peer->owner().notifySoundIsNone(peer); - const auto soundOn = createView(std::move(soundOnText), !soundIsNone); - const auto soundOff = createView(std::move(soundOffText), soundIsNone); - - soundOn->checkedChanges( - ) | rpl::start_with_next([=](bool checked) { - soundOff->setChecked(!checked, anim::type::normal); - notifySound(!checked); - }, menu->lifetime()); - soundOff->checkedChanges( - ) | rpl::start_with_next([=](bool checked) { - soundOn->setChecked(!checked, anim::type::normal); - notifySound(checked); - }, menu->lifetime()); -} - void MuteBox(not_null box, not_null peer) { struct State { - base::unique_qptr menu; - rpl::variable noSoundChanges; int lastSeconds = 0; }; auto chooseTimeResult = ChooseTimeWidget(box, kMuteDurSecondsDefault); box->addRow(std::move(chooseTimeResult.widget)); - const auto state = box->lifetime().make_state(State{ - .noSoundChanges = false, - }); + const auto state = box->lifetime().make_state(); box->setTitle(tr::lng_mute_box_title()); - const auto topButton = box->addTopButton(st::infoTopBarMenu); - topButton->setClickedCallback([=] { - if (state->menu) { - return; - } - state->menu = base::make_unique_q( - topButton, - st::popupMenuWithIcons); - FillSoundMenu( - state->menu.get(), - peer, - tr::lng_mute_box_no_notifications(), - tr::lng_mute_box_silent_notifications(), - [=](bool silent) { - state->noSoundChanges = silent; - }); - state->menu->popup(QCursor::pos()); - return; - }); - - auto confirmText = rpl::combine( - std::move(chooseTimeResult.secondsValue), - state->noSoundChanges.value() - ) | rpl::map([=](int seconds, bool noSound) { + auto confirmText = std::move( + chooseTimeResult.secondsValue + ) | rpl::map([=](int seconds) { state->lastSeconds = seconds; return !seconds ? tr::lng_mute_menu_unmute() - : noSound - ? tr::lng_mute_box_silent_notifications() : tr::lng_mute_menu_mute(); }) | rpl::flatten_latest(); const auto confirm = box->addButton(std::move(confirmText), [=] { - peer->owner().updateNotifySettings( - peer, - state->lastSeconds, - std::nullopt, - state->noSoundChanges.current()); + peer->owner().updateNotifySettings(peer, state->lastSeconds); box->closeBox(); }); box->addButton(tr::lng_cancel(), [=] { box->closeBox(); }); @@ -204,16 +132,16 @@ void FillMuteMenu( Args args) { const auto peer = args.peer; - FillSoundMenu( - menu, - peer, - tr::lng_mute_menu_sound_on(), - tr::lng_mute_menu_sound_off(), - [peer](bool silent) { - peer->owner().updateNotifySettings(peer, {}, {}, silent); - }); - - menu->addSeparator(); + const auto soundIsNone = peer->owner().notifySoundIsNone(peer); + menu->addAction( + soundIsNone + ? tr::lng_mute_menu_sound_on(tr::now) + : tr::lng_mute_menu_sound_off(tr::now), + [=] { + const auto soundIsNone = peer->owner().notifySoundIsNone(peer); + peer->owner().updateNotifySettings(peer, {}, {}, !soundIsNone); + }, + soundIsNone ? &st::menuIconSoundOn : &st::menuIconSoundOff); menu->addAction( tr::lng_mute_menu_duration(tr::now), diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index f2f95e0c8f..ff6aec0a4c 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -97,6 +97,8 @@ menuIconViolence: icon {{ "menu/violence", menuIconColor }}; menuIconMuteFor: icon {{ "menu/mute_for", menuIconColor }}; menuIconSilent: icon {{ "menu/silent", menuIconColor }}; menuIconCustomize: icon {{ "menu/customize", menuIconColor }}; +menuIconSoundOn: icon {{ "menu/sound_enable", menuIconColor }}; +menuIconSoundOff: icon {{ "menu/sound_disable", menuIconColor }}; menuIconTTLAny: icon {{ "menu/auto_delete_plain", menuIconColor }}; menuIconTTLAnyTextPosition: point(11px, 22px); diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 5f12f764e8..5ecb719348 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -133,7 +133,7 @@ void PeerMenuAddMuteSubmenuAction( peer->owner().requestNotifySettings(peer); const auto isMuted = peer->owner().notifyIsMuted(peer); if (isMuted) { - const auto text = tr::lng_mute_menu_unmute(tr::now) + const auto text = tr::lng_context_unmute(tr::now) + '\t' + Ui::FormatMuteForTiny(peer->notifyMuteUntil().value_or(0) - base::unixtime::now()); @@ -143,7 +143,7 @@ void PeerMenuAddMuteSubmenuAction( } else { const auto show = std::make_shared(controller); addAction(PeerMenuCallback::Args{ - .text = tr::lng_mute_menu_mute(tr::now), + .text = tr::lng_context_mute(tr::now), .handler = nullptr, .icon = peer->owner().notifySoundIsNone(peer) ? &st::menuIconSilent