From f033954db2c043b45434432afda18bddb603c83d Mon Sep 17 00:00:00 2001 From: ichmagmaus 812 Date: Wed, 4 Mar 2026 22:06:16 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=84?= =?UTF-8?q?=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8,=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BA=D1=80=D0=B8?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B8=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B8=20=D0=B1=D0=B0=D0=B3=D0=B8=20=D0=B8=D0=BD=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0,=20=D0=B1=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D1=88=D0=B5=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81=D0=B5?= =?UTF-8?q?=D0=B9=20=D0=B2=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + Telegram/BUILD | 15 +- .../AppIconLLC.appiconset/BlueIcon@2x-1.png | Bin 7776 -> 0 bytes .../AppIconLLC.appiconset/BlueIcon@2x.png | Bin 3871 -> 0 bytes .../AppIconLLC.appiconset/BlueIcon@3x.png | Bin 6013 -> 0 bytes .../AppIconLLC.appiconset/BlueIconIpad@2x.png | Bin 10649 -> 0 bytes .../BlueIconLargeIpad@2x.png | Bin 5604 -> 0 bytes .../BlueNotificationIcon.png | Bin 665 -> 0 bytes .../BlueNotificationIcon@2x-1.png | Bin 1781 -> 0 bytes .../BlueNotificationIcon@2x.png | Bin 1781 -> 0 bytes .../BlueNotificationIcon@3x.png | Bin 3428 -> 0 bytes .../AppIconLLC.appiconset/Contents.json | 146 ++++----- .../AppIconLLC.appiconset/GhostIcon@20x20.png | Bin 623 -> 0 bytes .../AppIconLLC.appiconset/GhostIcon@29x29.png | Bin 1045 -> 0 bytes .../AppIconLLC.appiconset/GhostIcon@76x76.png | Bin 4913 -> 0 bytes .../Simple-iTunesArtwork.png | Bin 162976 -> 0 bytes .../AppIconLLC.appiconset/Simple@29x29.png | Bin 1202 -> 0 bytes .../AppIconLLC.appiconset/Simple@40x40-1.png | Bin 1840 -> 0 bytes .../AppIconLLC.appiconset/Simple@58x58-1.png | Bin 2993 -> 0 bytes .../AppIconLLC.appiconset/Simple@58x58.png | Bin 2993 -> 0 bytes .../AppIconLLC.appiconset/Simple@80x80-1.png | Bin 4568 -> 0 bytes .../AppIconLLC.appiconset/Simple@80x80.png | Bin 4568 -> 0 bytes .../AppIconLLC.appiconset/Simple@87x87.png | Bin 5071 -> 0 bytes .../GenerateStrings/GenerateStrings.py | 2 +- build-system/Make/Make.py | 5 + build-system/Make/ProjectGeneration.py | 4 + build-system/config.json | 2 +- submodules/AsyncDisplayKit/BUILD | 2 + .../Sources/ChatListSearchItem.swift | 9 +- submodules/ChatListUI/BUILD | 11 +- .../Sources/ChatListController.swift | 97 ++++++ .../Sources/Node/ChatListNoticeItem.swift | 7 +- submodules/Display/Source/NavigationBar.swift | 4 - .../Display/Source/NavigationButtonNode.swift | 2 +- .../Sources/DeletedMessagesController.swift | 277 +++++++++++++++++- .../Sources/GhostgramSettingsController.swift | 42 ++- .../SettingsUI/Sources/MiscController.swift | 2 +- .../NotificationSearchItem.swift | 13 +- .../Sources/SendDelayController.swift | 148 ++++++++++ .../Sources/CallStatusBarNode.swift | 6 +- .../VideoChatScheduledInfoComponent.swift | 4 +- .../Sources/VoiceChatTimerNode.swift | 4 +- .../AntiDelete/AntiDeleteManager.swift | 31 ++ .../Sources/GhostMode/GhostModeManager.swift | 26 +- .../MiscSettings/MiscSettingsManager.swift | 18 +- .../PendingMessages/EnqueueMessage.swift | 34 ++- .../Sources/SendDelay/SendDelayManager.swift | 55 ++++ .../State/AccountStateManagementUtils.swift | 12 + .../State/ManagedAccountPresence.swift | 11 +- .../Sources/AvatarEditorScreen.swift | 1 - .../Sources/ChatMessageBubbleItemNode.swift | 33 +++ .../Sources/NavigationButtonComponent.swift | 155 +++++++++- .../Components/Gifts/GiftViewScreen/BUILD | 2 + .../Sources/GiftOfferAlertController.swift | 12 +- .../Sources/GiftTransferAlertController.swift | 12 +- .../LegacyChatHeaderPanelComponent.swift | 6 +- .../Sources/AffiliateProgramSetupScreen.swift | 40 ++- .../Sources/TableComponent.swift | 24 +- .../Sources/PeerSelectionController.swift | 3 +- .../Sources/BirthdayPickerComponent.swift | 2 +- .../backspace_24.svg | 5 - .../keyboard_24.svg | 8 - .../keyboard_2444.svg | 3 - .../PanelFeaturedIcon.imageset/Group 1.svg | 3 - .../Instant View/Back.imageset/ic_left.pdf | Bin 3911 -> 0 bytes .../Bookmark.imageset/Bookmark.pdf | Bin 2667 -> 0 bytes .../Instant View/Browser.imageset/Browser.pdf | Bin 2160 -> 0 bytes .../Forward.imageset/ic_right.pdf | Bin 3914 -> 0 bytes .../OpenDocument.imageset/docviewer_24.pdf | Bin 3269 -> 0 bytes .../Chat/ChatControllerLoadDisplayNode.swift | 38 +++ .../TelegramUI/Sources/ChatController.swift | 34 ++- .../Sources/ChatControllerContentData.swift | 6 +- .../Sources/ChatControllerNode.swift | 40 ++- .../Sources/ChatHistoryListNode.swift | 12 +- .../ChatSearchNavigationContentNode.swift | 7 +- .../Sources/ChatTitleAccessoryPanelNode.swift | 16 +- third-party/dav1d/BUILD | 3 +- third-party/dav1d/build-dav1d-bazel.sh | 8 +- third-party/mozjpeg/build-mozjpeg-bazel.sh | 16 + third-party/td/BUILD | 9 +- third-party/td/build-td-bazel.sh | 65 +++- 81 files changed, 1256 insertions(+), 298 deletions(-) delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIcon@2x-1.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIcon@2x.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIcon@3x.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIconIpad@2x.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIconLargeIpad@2x.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueNotificationIcon.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueNotificationIcon@2x-1.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueNotificationIcon@2x.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueNotificationIcon@3x.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/GhostIcon@20x20.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/GhostIcon@29x29.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/GhostIcon@76x76.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple-iTunesArtwork.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple@29x29.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple@40x40-1.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple@58x58-1.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple@58x58.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple@80x80-1.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple@80x80.png delete mode 100644 Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple@87x87.png create mode 100644 submodules/SettingsUI/Sources/SendDelayController.swift create mode 100644 submodules/TelegramCore/Sources/SendDelay/SendDelayManager.swift delete mode 100644 submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputClearIcon.imageset/backspace_24.svg delete mode 100644 submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputGlobeIcon.imageset/keyboard_24.svg delete mode 100644 submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputSettingsIcon.imageset/keyboard_2444.svg delete mode 100644 submodules/TelegramUI/Images.xcassets/Chat/Input/Media/PanelFeaturedIcon.imageset/Group 1.svg delete mode 100644 submodules/TelegramUI/Images.xcassets/Instant View/Back.imageset/ic_left.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Instant View/Bookmark.imageset/Bookmark.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Instant View/Browser.imageset/Browser.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Instant View/Forward.imageset/ic_right.pdf delete mode 100644 submodules/TelegramUI/Images.xcassets/Instant View/OpenDocument.imageset/docviewer_24.pdf diff --git a/.gitignore b/.gitignore index 704dfd16..f2976dc2 100644 --- a/.gitignore +++ b/.gitignore @@ -84,3 +84,5 @@ xcode-files /codesigning/ /build-system/real-codesigning/ /build-system/local-codesigning/ +build-output/ +build-output/ diff --git a/Telegram/BUILD b/Telegram/BUILD index 4b84ab9c..4247f058 100644 --- a/Telegram/BUILD +++ b/Telegram/BUILD @@ -36,6 +36,7 @@ load( "telegram_bazel_path", "telegram_use_xcode_managed_codesigning", "telegram_bundle_id", + "telegram_is_appstore_build", "telegram_aps_environment", "telegram_team_id", "telegram_enable_icloud", @@ -509,6 +510,16 @@ aps_fragment = "" if telegram_aps_environment == "" else """ {telegram_aps_environment} """.format(telegram_aps_environment=telegram_aps_environment) +beta_reports_active_fragment = "" if telegram_is_appstore_build != "true" else """ +beta-reports-active + +""" + +get_task_allow_fragment = """ +get-task-allow +<{value}/> +""".format(value = "false" if telegram_is_appstore_build == "true" else "true") + app_groups_fragment = """ com.apple.security.application-groups @@ -546,6 +557,8 @@ plist_fragment( extension = "entitlements", template = "".join([ aps_fragment, + beta_reports_active_fragment, + get_task_allow_fragment, app_groups_fragment, siri_fragment, associated_domains_fragment, @@ -1718,7 +1731,7 @@ ios_application( ":RequiredDeviceCapabilitiesPlist", ":UrlTypesInfoPlist", ], - app_icons = [ ":{}_icon".format(name) for name in composer_icon_folders ], + app_icons = [":DefaultAppIcon"], alternate_icons = [ ":{}".format(name) for name in alternate_icon_folders ], diff --git a/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIcon@2x-1.png b/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIcon@2x-1.png deleted file mode 100644 index dd360d8f50d2e50a84d833219279e382cb3f80de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7776 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

P=xGUH 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 diff --git a/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIcon@3x.png b/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIcon@3x.png deleted file mode 100644 index c47aeed4b142802df02be197f4f76bd21ff8ba7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6013 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 diff --git a/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIconIpad@2x.png b/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIconIpad@2x.png deleted file mode 100644 index 6d9e7ab98c742c89ebe044a1086bc98c2104cb24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10649 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 diff --git a/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIconLargeIpad@2x.png b/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueIconLargeIpad@2x.png deleted file mode 100644 index 9bf363744d5396c63ad2d96fdbc4967db4216582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5604 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 XqDnb;ef`Bt00000NkvXXu0mjf`=w&E diff --git a/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueNotificationIcon@2x.png b/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueNotificationIcon@2x.png deleted file mode 100644 index 0898af42d998a1fd6984552e31faaa6981e34d31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1781 zcmV%0n21%g$#9drp@xl33W@2{m!nP0D4tj+`v zx=vUzbshoZLNJ{mjxq32XM8=s;du`<%P`n9Y%!`Np|IuQ8S$`81sG#spq`wmdVXDl zdfA{bzY^9C&Ug{*jwd6m=A1ea)ow25r|zan;YkAkMW+Xwn5a;Sdr4{%P>{q29jymB zw*|p8ago0nkjxo!Tdpq89mn~G2p!ZcnKOe$X$3k<2l7~w)HEA^DJhQSb9g44jS$Xd zQ(`CiK`@!PPyU$^JV0w1aNB5l{x1MLslrV2P0u?P@K_))npYx)NJC zPp{Vo#-BH)-T8AkXcReMeL~PD&}xOxJH8c9U-OoV}Xr9T=?6JNJqG$uj5wj)Xp^(S#_7*7d6J9c4qtcqtZV-Dc?Lf zU&-ZTuTE5Dcw7m(q74f9tw|18_3T9*-dis2-p*#(v9?pTukMt2<$Nbxm|{n=_w<E-h+=VD9hUqcFD6#J7#?wk@*kp+O{KC zC{di*wiDB_ZE{w{MpgTxLfF0tzjKR0E4W>8m)5QhHiOvO;@d@i5*@0=*&%d z>*%PAO-It*)+7g>Ss;%tY)fK_l!Tza#ks&_i=D^&@yG3tU+tiM2WSWzR1jT~z2_q<0#2`knBJoapI=^)%}eLVhTaY- zHzPn~awd{}zh0Afe;Sn=Q*l+x=C;V8=N8GbuKWvOi-O1UFaDCj>-f~e7RR_ji1|wL z;qTg}yvr=8%w08jgCAPZZs+UxEjpe)wlx4Qw-f@$}OtdKxCDE9?b{lI@K#U{A5xu}GTi-a~LBe;|uE zNJkuU;ObP2-{AA~75&B{hA)YoZ~;O4SwSn9)JcCK^&CK4*c*p0$vgccb~YQ~cxuEE z#Jvk_NYjA_8=9bh%1H^r87DHMk#GUj6TgckVFQX3vnqRzjmX1a4a$jO{l2R+PF}`0 zV35;t1^8-<30k6p1vsBrX#WOL31W6;RVE};{nX{#vi|EqdGF}3OrsMu#>pWiXoS3+ zuGqMHDW;x5m$)Edjs#;NYy3@3S7mqqkgWf5Ku(V2yLsWplw2CqGi$|a1(YZTn3N7b zK7+N+0D`y`rfX%CbqYGJU3%p60on88kj!}9{Px_nwEOs21`edJC)icJGd?&`doSX8 zyeF@i^cqO71}`j7*Y&i^%MZ*KeB$r=?xKuNq<3g06ik=`4%JKY{_&I`n7fPF7E*`& zKSn|R_;brojv#+z=0S>d$_$hnqxcYYzp-s XqDnb;ef`Bt00000NkvXXu0mjf`=w&E diff --git a/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueNotificationIcon@3x.png b/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/BlueNotificationIcon@3x.png deleted file mode 100644 index f7725e9914ccb92344b4212199c93cfd2e5efb49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3428 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 P00000NkvXXu0mjfuP)Xs diff --git a/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/GhostIcon@76x76.png b/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/GhostIcon@76x76.png deleted file mode 100644 index 88823054503f362ab25310c6e59af362c03f69f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4913 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 diff --git a/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple-iTunesArtwork.png b/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple-iTunesArtwork.png deleted file mode 100644 index f00a2857f0fde2c6c5977396897d87797b2142e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162976 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 z%0Aw8EN)91NFt4?(N)Je{bAbxe#WCrJj7WJbbE#N_8QCRoGR{{9u%}bmXy49%tY(6 zYF_V{+3nd&XE~Qm!OLaz8Y7o7)k;*}aXC(#FqZ z_V#YGDoB3`D!KhaGEPbYVOw1Hsp7wX5MlZH#Lg;_7k>D8LeNHJ7NY4;3=nT+#3tR5 z_apsUgS;mvUYe=D!6t;l9efa0f6373h;0DW-T6Ojb?`M%3=&lVafG+KV^0*UB`or) zhuAKr(rq0}-iEcj7G<9iNG_kheoF6D@^Kf+XY{MH@!Fbq!JRX4sQ^9KaC*H|_@s6i z9b8J#4 z4fBtRQg}3bo%W~Yf^}$vaxBA?tZ=oK;3pFUl^vl2om##cVB(|fIS?G#Hf(3}M3^5T za=C>RJK$W~BO2tr`DbEvc~CQKT}`cjY>l(VML+=? zQk7~Wc^*0S&rM$upXp*iMk?~ni)O^1P)+t$v4|$N<-2dw&l!0HYCe?XM7Z})voPQ~ zOJX2O{{H&nvMn>O26_Eyp1a6`k^nll7!Q2ak8tZZD-=@D`A(Lh;^72FGmx@9{-gRiUb*3z9{u}{% zs8+}D+3rnBdUK%tgYCWlYMb?Cpt$%mXwjeM15KOtCr|x(TfbVo z=!l6i0cye%S z@C4rXAF$RH?wQU+rOIkHZOIO-!AVFKqgOYXWtwqCu`Rk&#}0k2huq>qE;cuGXq8xa zik!*clDNmo%1yT6A|~Nf*!Uz6Bk(7b{@o8MfS^$;NKBkmJBCPlH--i*7htLdJ;Q*1 zD&^{>=0^p0oiim4)#{vn$ou5GSBrU=(mqKU3m7uMXShgJDN=&B0Eu1}DjQCFX#PzG zsTu77c+)O8EWm7tug}zUJxtNIEhBms@r|U^l-aoC)iMV}N`B?X7p<=%dUH>%uxBl@ z4m{KT?K^Pk!#|R}ubUqy*HKH9YwSRU+M&>zp9ga}AAgJA&A}RaU2plJIA%pOul3H) zIACuxP-h$zJ+f?RP;fg@JF}%4qZRtDl#)V_{ZolXQfvt~5lwpBRQiYSTgkym3JQKXipZ7gH$BVnHRn&!Jl(H09tR)$0d#$kmybB!`C=hiVu#ec z&a+}c94RjU;fMyE;?~mx5A&tUKC>Z0t%oA z=nefb_Zt<^ecW1>hVmBSa=nf-yITun*J0aIf@=wCOoM=9PhIw~ZLvTRX#SEg9l7h- zIpK8dK{$D=FElaxSh(NQM$m*=K}lMYfKKimP`Xr7zBxP7_wz`Zb#Aky(o(S4r6t6%J*+t}EGwuXpGwYTt=U-6&@PMRcX z^{Mx|=HGu6%~H=%7C@}Qb~NDymN~Z38WMZZ&98jWaPV*-ckD>VYK-e=m?7mhoLvzN z%ef2E|F=b@XN-SrV;+V%+NTZD(;E8wnKn|590q@S_O?Z&_`>5}jb3Kjw-nu!0o9UU z1)A3YA(NJtfbd;zVn^F76XSnevlw#-aZ(hIGxBqYDK}uViSA9H8QjnR{*4B-)T~_HHi$J7W^}0zm;Oqy@CUy0*}*a($|7!-I`qQF7vuQJ_r< zTsgo4Ed7aO+tvL{l25qj1S=yNQa)uRjRa$@1ATzQW@{h!QT`&b3Y zI6UAWGDG+RD)kIRw8!-=2LVfu&$M4T-w%Qd(Bh-UZ%58S?MqMHb>TlUapl!23E2Q}7Db+ECW-J%JPJc)M8n34D5 z?UFqn^4?77RsxLLz#L>@)6@k?TrQAI*SLj>M^S)Oqrs!xr+op_0;QgOG#xB+O%%gv zu4)I;2AR0K@ zr$>$KxnQMw$Xq;g7;5L&?Dj5SB)RkHar@5&TJPo&AX2$-!P0TCqO0)UL^v(!TijAX z9i|NbMjq>G=)=^~W98HoAyO>Aq}~H&JX-K8#Ih+BP?%)%d!C?V34NgNAi)0V5;IfG z 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

O_A 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 Ql>h($07*qoM6N<$f}8nDVE_OC diff --git a/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple@40x40-1.png b/Telegram/Telegram-iOS/DefaultAppIcon.xcassets/AppIconLLC.appiconset/Simple@40x40-1.png deleted file mode 100644 index a79cb5dcdc06b480e459196f14e78b51a4f8f41d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1840 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 diff --git a/build-system/GenerateStrings/GenerateStrings.py b/build-system/GenerateStrings/GenerateStrings.py index e10ff2b8..5fa5da03 100644 --- a/build-system/GenerateStrings/GenerateStrings.py +++ b/build-system/GenerateStrings/GenerateStrings.py @@ -241,7 +241,7 @@ def generate(header_path: str, implementation_path: str, data_path: str, entries arguments_array += ', ' arguments_array += '[[NSString alloc] initWithFormat:@"%@", arg{}]'.format(i) formatted_accessors += ''' -static _FormattedString * _Nonnull getFormatted{num_arguments}(_PresentationStrings * _Nonnull strings, +static __attribute__((unused)) _FormattedString * _Nonnull getFormatted{num_arguments}(_PresentationStrings * _Nonnull strings, uint32_t keyId{arguments_string}) {{ NSString *formatString = getSingle(strings, strings->_idToKey[@(keyId)], nil); NSArray<_FormattedStringRange *> *argumentRanges = extractArgumentRanges(formatString); diff --git a/build-system/Make/Make.py b/build-system/Make/Make.py index 93b6a56d..3a8c15b0 100644 --- a/build-system/Make/Make.py +++ b/build-system/Make/Make.py @@ -232,6 +232,9 @@ class BazelCommandLine: combined_arguments += self.common_debug_args combined_arguments += self.get_define_arguments() + if self.disable_provisioning_profiles: + combined_arguments += ['--//Telegram:disableProvisioningProfiles'] + if self.remote_cache is not None: combined_arguments += [ '--remote_cache={}'.format(self.remote_cache), @@ -559,6 +562,8 @@ def generate_project(bazel, arguments): disable_extensions = arguments.disableExtensions if arguments.disableProvisioningProfiles is not None: disable_provisioning_profiles = arguments.disableProvisioningProfiles + if disable_provisioning_profiles: + bazel_command_line.set_disable_provisioning_profiles() if arguments.projectIncludeRelease is not None: project_include_release = arguments.projectIncludeRelease if arguments.xcodeManagedCodesigning is not None and arguments.xcodeManagedCodesigning == True: diff --git a/build-system/Make/ProjectGeneration.py b/build-system/Make/ProjectGeneration.py index 8de46931..610542da 100644 --- a/build-system/Make/ProjectGeneration.py +++ b/build-system/Make/ProjectGeneration.py @@ -26,6 +26,8 @@ def generate_xcodeproj(build_environment: BuildEnvironment, disable_extensions, if target_name == 'Telegram': if disable_extensions: bazel_generate_arguments += ['--//{}:disableExtensions'.format(app_target)] + if disable_provisioning_profiles: + bazel_generate_arguments += ['--//{}:disableProvisioningProfiles'.format(app_target)] bazel_generate_arguments += ['--//{}:disableStripping'.format(app_target)] project_bazel_arguments = [] @@ -35,6 +37,8 @@ def generate_xcodeproj(build_environment: BuildEnvironment, disable_extensions, if target_name == 'Telegram': if disable_extensions: project_bazel_arguments += ['--//{}:disableExtensions'.format(app_target)] + if disable_provisioning_profiles: + project_bazel_arguments += ['--//{}:disableProvisioningProfiles'.format(app_target)] project_bazel_arguments += ['--//{}:disableStripping'.format(app_target)] project_bazel_arguments += ['--features=-swift.debug_prefix_map'] diff --git a/build-system/config.json b/build-system/config.json index 262a5fdb..6ab48191 100755 --- a/build-system/config.json +++ b/build-system/config.json @@ -4,7 +4,7 @@ "api_hash": "", "team_id": "", "app_center_id": "0", - "is_internal_build": "false", + "is_internal_build": "true", "is_appstore_build": "true", "appstore_id": "0", "app_specific_url_scheme": "ghostgram", diff --git a/submodules/AsyncDisplayKit/BUILD b/submodules/AsyncDisplayKit/BUILD index f713d118..8c405fc1 100644 --- a/submodules/AsyncDisplayKit/BUILD +++ b/submodules/AsyncDisplayKit/BUILD @@ -16,9 +16,11 @@ objc_library( ], allow_empty=True) + private_headers, copts = [ "-Werror", + "-Wno-deprecated-declarations", ], cxxopts = [ "-Werror", + "-Wno-deprecated-declarations", "-std=c++17", ], hdrs = public_headers, diff --git a/submodules/ChatListSearchItemNode/Sources/ChatListSearchItem.swift b/submodules/ChatListSearchItemNode/Sources/ChatListSearchItem.swift index d2959cd0..82f722c1 100644 --- a/submodules/ChatListSearchItemNode/Sources/ChatListSearchItem.swift +++ b/submodules/ChatListSearchItemNode/Sources/ChatListSearchItem.swift @@ -89,7 +89,7 @@ public class ChatListSearchItemNode: ListViewItemNode { required public init() { self.searchBarNode = SearchBarPlaceholderNode(fieldStyle: .modern) - super.init(layerBacked: false, dynamicBounce: false) + super.init(layerBacked: false) self.addSubnode(self.searchBarNode) } @@ -107,7 +107,6 @@ public class ChatListSearchItemNode: ListViewItemNode { } public func asyncLayout() -> (_ item: ChatListSearchItem, _ params: ListViewItemLayoutParams, _ nextIsPinned: Bool, _ isEnabled: Bool) -> (ListViewItemNodeLayout, (Bool) -> Void) { - let searchBarNodeLayout = self.searchBarNode.asyncLayout() let placeholder = self.placeholder return { [weak self] item, params, nextIsPinned, isEnabled in @@ -115,9 +114,9 @@ public class ChatListSearchItemNode: ListViewItemNode { let backgroundColor = nextIsPinned ? item.theme.chatList.pinnedItemBackgroundColor : item.theme.chatList.itemBackgroundColor let placeholderColor = item.theme.list.itemSecondaryTextColor + let controlColor = item.theme.chat.inputPanel.panelControlColor let placeholderString = NSAttributedString(string: placeholder ?? "", font: searchBarFont, textColor: placeholderColor) - let (_, searchBarApply) = searchBarNodeLayout(placeholderString, placeholderString, CGSize(width: baseWidth - 20.0, height: 36.0), 1.0, placeholderColor, nextIsPinned ? item.theme.chatList.pinnedSearchBarColor : item.theme.chatList.regularSearchBarColor, backgroundColor, .immediate) let layout = ListViewItemNodeLayout(contentSize: CGSize(width: params.width, height: 54.0), insets: UIEdgeInsets()) @@ -132,9 +131,7 @@ public class ChatListSearchItemNode: ListViewItemNode { let searchBarFrame = CGRect(origin: CGPoint(x: params.leftInset + 10.0, y: 8.0), size: CGSize(width: baseWidth - 20.0, height: 36.0)) strongSelf.searchBarNode.frame = searchBarFrame - searchBarApply() - - strongSelf.searchBarNode.bounds = CGRect(origin: CGPoint(), size: CGSize(width: baseWidth - 20.0, height: 36.0)) + _ = strongSelf.searchBarNode.updateLayout(placeholderString: placeholderString, compactPlaceholderString: placeholderString, constrainedSize: searchBarFrame.size, expansionProgress: 1.0, iconColor: placeholderColor, foregroundColor: nextIsPinned ? item.theme.chatList.pinnedSearchBarColor : item.theme.chatList.regularSearchBarColor, backgroundColor: backgroundColor, controlColor: controlColor, transition: transition) if !item.isEnabled { if strongSelf.disabledOverlay == nil { diff --git a/submodules/ChatListUI/BUILD b/submodules/ChatListUI/BUILD index 87652ea3..2da4a2e0 100644 --- a/submodules/ChatListUI/BUILD +++ b/submodules/ChatListUI/BUILD @@ -3,9 +3,14 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") swift_library( name = "ChatListUI", module_name = "ChatListUI", - srcs = glob([ - "Sources/**/*.swift", - ]), + srcs = glob( + [ + "Sources/**/*.swift", + ], + exclude = [ + "Sources/ChatListFilterTabContainerNode.swift", + ], + ), copts = [ "-warnings-as-errors", ], diff --git a/submodules/ChatListUI/Sources/ChatListController.swift b/submodules/ChatListUI/Sources/ChatListController.swift index c020faa7..8de604b6 100644 --- a/submodules/ChatListUI/Sources/ChatListController.swift +++ b/submodules/ChatListUI/Sources/ChatListController.swift @@ -6595,8 +6595,17 @@ private final class ChatListLocationContext { var proxyButton: AnyComponentWithIdentity? var storyButton: AnyComponentWithIdentity? + // GHOSTGRAM: Account switcher — liquid glass avatar button for the next account + var accountSwitcherButton: AnyComponentWithIdentity? + private var accountSwitcherDisposable: Disposable? + private var accountSwitcherAvatarDisposable: Disposable? + var rightButtons: [AnyComponentWithIdentity] { var result: [AnyComponentWithIdentity] = [] + // Account switcher is first — leftmost of the right-side buttons + if let accountSwitcherButton = self.accountSwitcherButton { + result.append(accountSwitcherButton) + } if let rightButton = self.rightButton { result.append(rightButton) } @@ -6631,6 +6640,90 @@ private final class ChatListLocationContext { self.location = location self.parentController = parentController + // GHOSTGRAM: Subscribe to account list and maintain the switcher button + if case .chatList(.root) = location { + self.accountSwitcherDisposable = (context.sharedContext.activeAccountsWithInfo + |> deliverOnMainQueue) + .start(next: { [weak self] (info: (primary: AccountRecordId?, accounts: [AccountWithInfo])) in + guard let self else { return } + + let primaryId = info.primary + let accounts = info.accounts + + // Only show when there is more than one account + guard accounts.count > 1, let primaryId = primaryId else { + if self.accountSwitcherButton != nil { + self.accountSwitcherButton = nil + let _ = self.parentController?.updateHeaderContent() + self.parentController?.requestLayout(transition: .immediate) + } + return + } + + // Find next account cyclically + let currentIndex = accounts.firstIndex(where: { $0.account.id == primaryId }) ?? 0 + let nextIndex = (currentIndex + 1) % accounts.count + let nextAccount = accounts[nextIndex] + let nextPeer = nextAccount.peer + let nextPeerId = "\(nextAccount.account.id)" + + // Build button placeholder immediately (image loads async) + let buildButton: (UIImage?) -> Void = { [weak self] image in + guard let self else { return } + guard case .chatList(.root) = self.location else { return } + + let sharedContext = self.context.sharedContext + let nextAccountId = nextAccount.account.id + + self.accountSwitcherButton = AnyComponentWithIdentity( + id: "accountSwitcher", + component: AnyComponent(NavigationButtonComponent( + content: .avatar(peerId: nextPeerId, avatarImage: image), + pressed: { [weak sharedContext] _ in + sharedContext?.switchToAccount(id: nextAccountId, fromSettingsController: nil, withChatListController: nil) + } + )) + ) + // Trigger header rebuild + let _ = self.parentController?.updateHeaderContent() + self.parentController?.requestLayout(transition: .immediate) + } + + // Attempt to load the peer's avatar from mediaBox + if let representation = nextPeer.smallProfileImage { + self.accountSwitcherAvatarDisposable?.dispose() + let resource = representation.resource + let account = nextAccount.account + + // Try to read cached data first; if not ready, trigger a fetch then watch for completion + self.accountSwitcherAvatarDisposable = (account.postbox.mediaBox + .resourceData(resource) + |> deliverOnMainQueue) + .start(next: { data in + if data.complete, let uiImage = UIImage(contentsOfFile: data.path) { + buildButton(uiImage) + } + }, completed: { + // If resource was never complete after signal ended, show placeholder + buildButton(nil) + }) + + // Trigger the actual network fetch so mediaBox populates the resource + if let peerReference = PeerReference(nextPeer) { + let _ = fetchedMediaResource( + mediaBox: account.postbox.mediaBox, + userLocation: .peer(nextPeer.id), + userContentType: .avatar, + reference: .avatar(peer: peerReference, resource: resource) + ).start() + } + } else { + // No photo — show placeholder + buildButton(nil) + } + }) + } + let hasProxy = context.sharedContext.accountManager.sharedData(keys: [SharedDataKeys.proxySettings]) |> map { sharedData -> (Bool, Bool) in if let settings = sharedData.entries[SharedDataKeys.proxySettings]?.get(ProxySettings.self) { @@ -6949,6 +7042,8 @@ private final class ChatListLocationContext { deinit { self.titleDisposable?.dispose() self.stateDisposable?.dispose() + self.accountSwitcherDisposable?.dispose() + self.accountSwitcherAvatarDisposable?.dispose() } private func updateChatList( @@ -6982,6 +7077,7 @@ private final class ChatListLocationContext { if case .chatList(.root) = self.location { self.rightButton = nil self.storyButton = nil + self.accountSwitcherButton = nil } let title = !stateAndFilterId.state.selectedPeerIds.isEmpty ? presentationData.strings.ChatList_SelectedChats(Int32(stateAndFilterId.state.selectedPeerIds.count)) : defaultTitle @@ -6997,6 +7093,7 @@ private final class ChatListLocationContext { if case .chatList(.root) = self.location { self.rightButton = nil self.storyButton = nil + self.accountSwitcherButton = nil } self.leftButton = AnyComponentWithIdentity(id: "done", component: AnyComponent(NavigationButtonComponent( content: .text(title: presentationData.strings.Common_Done, isBold: true), diff --git a/submodules/ChatListUI/Sources/Node/ChatListNoticeItem.swift b/submodules/ChatListUI/Sources/Node/ChatListNoticeItem.swift index eae620ae..4833aefa 100644 --- a/submodules/ChatListUI/Sources/Node/ChatListNoticeItem.swift +++ b/submodules/ChatListUI/Sources/Node/ChatListNoticeItem.swift @@ -14,6 +14,7 @@ import MergedAvatarsNode import TextNodeWithEntities import TextFormat import AvatarNode +import GlobalControlPanelsContext class ChatListNoticeItem: ListViewItem { enum Action { @@ -25,12 +26,12 @@ class ChatListNoticeItem: ListViewItem { let context: AccountContext let theme: PresentationTheme let strings: PresentationStrings - let notice: ChatListNotice + let notice: GlobalControlPanelsContext.ChatListNotice let action: (Action) -> Void let selectable: Bool = true - init(context: AccountContext, theme: PresentationTheme, strings: PresentationStrings, notice: ChatListNotice, action: @escaping (Action) -> Void) { + init(context: AccountContext, theme: PresentationTheme, strings: PresentationStrings, notice: GlobalControlPanelsContext.ChatListNotice, action: @escaping (Action) -> Void) { self.context = context self.theme = theme self.strings = strings @@ -130,7 +131,7 @@ final class ChatListNoticeItemNode: ItemListRevealOptionsItemNode { self.arrowNode = ASImageNode() self.separatorNode = ASDisplayNode() - super.init(layerBacked: false, dynamicBounce: false, rotated: false, seeThrough: false) + super.init(layerBacked: false, rotated: false, seeThrough: false) self.contentContainer.clipsToBounds = true self.clipsToBounds = true diff --git a/submodules/Display/Source/NavigationBar.swift b/submodules/Display/Source/NavigationBar.swift index 67ad9cb6..35e9ee7f 100644 --- a/submodules/Display/Source/NavigationBar.swift +++ b/submodules/Display/Source/NavigationBar.swift @@ -122,10 +122,6 @@ public func navigationBarBackArrowImage(color: UIColor) -> UIImage? { } } -public protocol NavigationButtonCustomDisplayNode { - var isHighlightable: Bool { get } -} - public protocol NavigationButtonNode: ASDisplayNode { func updateManualAlpha(alpha: CGFloat, transition: ContainedViewLayoutTransition) var mainContentNode: ASDisplayNode? { get } diff --git a/submodules/Display/Source/NavigationButtonNode.swift b/submodules/Display/Source/NavigationButtonNode.swift index 1ebc26af..d71443aa 100644 --- a/submodules/Display/Source/NavigationButtonNode.swift +++ b/submodules/Display/Source/NavigationButtonNode.swift @@ -328,7 +328,7 @@ private final class NavigationButtonItemNode: ImmediateTextNode { } -public final class NavigationButtonNode: ContextControllerSourceNode { +public final class NavigationButtonNodeImpl: ContextControllerSourceNode, NavigationButtonNode { private var nodes: [NavigationButtonItemNode] = [] private var disappearingNodes: [(frame: CGRect, size: CGSize, node: NavigationButtonItemNode)] = [] diff --git a/submodules/SettingsUI/Sources/DeletedMessagesController.swift b/submodules/SettingsUI/Sources/DeletedMessagesController.swift index 92154df0..20fc8e6a 100644 --- a/submodules/SettingsUI/Sources/DeletedMessagesController.swift +++ b/submodules/SettingsUI/Sources/DeletedMessagesController.swift @@ -1,12 +1,22 @@ import Foundation import UIKit import Display +import AsyncDisplayKit import SwiftSignalKit import TelegramCore import Postbox import TelegramPresentationData import ItemListUI import AccountContext +import ComponentFlow +import SliderComponent + +private let minDeletedMessageTransparencyPercent: Int32 = Int32(AntiDeleteManager.minDeletedMessageTransparency * 100.0) +private let maxDeletedMessageTransparencyPercent: Int32 = Int32(AntiDeleteManager.maxDeletedMessageTransparency * 100.0) + +private func clampDeletedMessageTransparencyPercent(_ value: Int32) -> Int32 { + return max(minDeletedMessageTransparencyPercent, min(maxDeletedMessageTransparencyPercent, value)) +} // MARK: - Entry Definition @@ -17,6 +27,7 @@ private enum DeletedMessagesSection: Int32 { private enum DeletedMessagesEntry: ItemListNodeEntry { case enableToggle(PresentationTheme, String, Bool) case archiveMediaToggle(PresentationTheme, String, Bool) + case transparencySlider(PresentationTheme, Int32, Bool) case settingsInfo(PresentationTheme, String) var section: ItemListSectionId { @@ -29,8 +40,10 @@ private enum DeletedMessagesEntry: ItemListNodeEntry { return 0 case .archiveMediaToggle: return 1 - case .settingsInfo: + case .transparencySlider: return 2 + case .settingsInfo: + return 3 } } @@ -48,6 +61,12 @@ private enum DeletedMessagesEntry: ItemListNodeEntry { return true } return false + case let .transparencySlider(lhsTheme, lhsValue, lhsIsEnabled): + if case let .transparencySlider(rhsTheme, rhsValue, rhsIsEnabled) = rhs, + lhsTheme === rhsTheme, lhsValue == rhsValue, lhsIsEnabled == rhsIsEnabled { + return true + } + return false case let .settingsInfo(lhsTheme, lhsText): if case let .settingsInfo(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { return true @@ -85,6 +104,16 @@ private enum DeletedMessagesEntry: ItemListNodeEntry { arguments.toggleArchiveMedia(value) } ) + case let .transparencySlider(theme, value, isEnabled): + return DeletedMessagesTransparencySliderItem( + theme: theme, + value: value, + isEnabled: isEnabled, + sectionId: self.section, + updated: { value in + arguments.updateTransparency(value) + } + ) case let .settingsInfo(_, text): return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section) } @@ -96,13 +125,16 @@ private enum DeletedMessagesEntry: ItemListNodeEntry { private final class DeletedMessagesControllerArguments { let toggleEnabled: (Bool) -> Void let toggleArchiveMedia: (Bool) -> Void + let updateTransparency: (Int32) -> Void init( toggleEnabled: @escaping (Bool) -> Void, - toggleArchiveMedia: @escaping (Bool) -> Void + toggleArchiveMedia: @escaping (Bool) -> Void, + updateTransparency: @escaping (Int32) -> Void ) { self.toggleEnabled = toggleEnabled self.toggleArchiveMedia = toggleArchiveMedia + self.updateTransparency = updateTransparency } } @@ -111,10 +143,12 @@ private final class DeletedMessagesControllerArguments { private struct DeletedMessagesControllerState: Equatable { var isEnabled: Bool var archiveMedia: Bool + var transparencyPercent: Int32 static func ==(lhs: DeletedMessagesControllerState, rhs: DeletedMessagesControllerState) -> Bool { return lhs.isEnabled == rhs.isEnabled && - lhs.archiveMedia == rhs.archiveMedia + lhs.archiveMedia == rhs.archiveMedia && + lhs.transparencyPercent == rhs.transparencyPercent } } @@ -128,7 +162,8 @@ private func deletedMessagesControllerEntries( entries.append(.enableToggle(presentationData.theme, "Сохранять удалённые сообщения", state.isEnabled)) entries.append(.archiveMediaToggle(presentationData.theme, "Архивировать медиа", state.archiveMedia)) - entries.append(.settingsInfo(presentationData.theme, "Когда включено, сообщения, удалённые другими пользователями, будут сохраняться локально. Рядом со временем сообщения появится иконка корзины.")) + entries.append(.transparencySlider(presentationData.theme, state.transparencyPercent, state.isEnabled)) + entries.append(.settingsInfo(presentationData.theme, "Когда включено, сообщения, удалённые другими пользователями, будут сохраняться локально. Прозрачность влияет только на сообщения, которые уже помечены как удалённые.")) return entries } @@ -138,7 +173,8 @@ private func deletedMessagesControllerEntries( public func deletedMessagesController(context: AccountContext) -> ViewController { let initialState = DeletedMessagesControllerState( isEnabled: AntiDeleteManager.shared.isEnabled, - archiveMedia: AntiDeleteManager.shared.archiveMedia + archiveMedia: AntiDeleteManager.shared.archiveMedia, + transparencyPercent: clampDeletedMessageTransparencyPercent(Int32(round(AntiDeleteManager.shared.deletedMessageTransparency * 100.0))) ) let statePromise = ValuePromise(initialState, ignoreRepeated: true) @@ -163,6 +199,15 @@ public func deletedMessagesController(context: AccountContext) -> ViewController state.archiveMedia = value return state } + }, + updateTransparency: { value in + let clampedValue = clampDeletedMessageTransparencyPercent(value) + AntiDeleteManager.shared.deletedMessageTransparency = Double(clampedValue) / 100.0 + updateState { state in + var state = state + state.transparencyPercent = clampedValue + return state + } } ) @@ -195,3 +240,225 @@ public func deletedMessagesController(context: AccountContext) -> ViewController let controller = ItemListController(context: context, state: signal) return controller } + +private final class DeletedMessagesTransparencySliderItem: ListViewItem, ItemListItem { + let theme: PresentationTheme + let value: Int32 + let isEnabled: Bool + let sectionId: ItemListSectionId + let updated: (Int32) -> Void + + init(theme: PresentationTheme, value: Int32, isEnabled: Bool, sectionId: ItemListSectionId, updated: @escaping (Int32) -> Void) { + self.theme = theme + self.value = clampDeletedMessageTransparencyPercent(value) + self.isEnabled = isEnabled + self.sectionId = sectionId + self.updated = updated + } + + func nodeConfiguredForParams(async: @escaping (@escaping () -> Void) -> Void, params: ListViewItemLayoutParams, synchronousLoads: Bool, previousItem: ListViewItem?, nextItem: ListViewItem?, completion: @escaping (ListViewItemNode, @escaping () -> (Signal?, (ListViewItemApply) -> Void)) -> Void) { + async { + let node = DeletedMessagesTransparencySliderItemNode() + let (layout, apply) = node.asyncLayout()(self, params, itemListNeighbors(item: self, topItem: previousItem as? ItemListItem, bottomItem: nextItem as? ItemListItem)) + + node.contentSize = layout.contentSize + node.insets = layout.insets + + Queue.mainQueue().async { + completion(node, { + return (nil, { _ in apply() }) + }) + } + } + } + + func updateNode(async: @escaping (@escaping () -> Void) -> Void, node: @escaping () -> ListViewItemNode, params: ListViewItemLayoutParams, previousItem: ListViewItem?, nextItem: ListViewItem?, animation: ListViewItemUpdateAnimation, completion: @escaping (ListViewItemNodeLayout, @escaping (ListViewItemApply) -> Void) -> Void) { + Queue.mainQueue().async { + if let nodeValue = node() as? DeletedMessagesTransparencySliderItemNode { + let makeLayout = nodeValue.asyncLayout() + + async { + let (layout, apply) = makeLayout(self, params, itemListNeighbors(item: self, topItem: previousItem as? ItemListItem, bottomItem: nextItem as? ItemListItem)) + Queue.mainQueue().async { + completion(layout, { _ in + apply() + }) + } + } + } + } + } +} + +private final class DeletedMessagesTransparencySliderItemNode: ListViewItemNode { + private let backgroundNode: ASDisplayNode + private let topStripeNode: ASDisplayNode + private let bottomStripeNode: ASDisplayNode + private let maskNode: ASImageNode + + private let leftTextNode: ImmediateTextNode + private let rightTextNode: ImmediateTextNode + private let centerTextNode: ImmediateTextNode + private let slider = ComponentView() + + private var item: DeletedMessagesTransparencySliderItem? + + init() { + self.backgroundNode = ASDisplayNode() + self.backgroundNode.isLayerBacked = true + + self.topStripeNode = ASDisplayNode() + self.topStripeNode.isLayerBacked = true + + self.bottomStripeNode = ASDisplayNode() + self.bottomStripeNode.isLayerBacked = true + + self.maskNode = ASImageNode() + + self.leftTextNode = ImmediateTextNode() + self.rightTextNode = ImmediateTextNode() + self.centerTextNode = ImmediateTextNode() + + super.init(layerBacked: false) + + self.addSubnode(self.leftTextNode) + self.addSubnode(self.rightTextNode) + self.addSubnode(self.centerTextNode) + } + + func asyncLayout() -> (_ item: DeletedMessagesTransparencySliderItem, _ params: ListViewItemLayoutParams, _ neighbors: ItemListNeighbors) -> (ListViewItemNodeLayout, () -> Void) { + return { item, params, neighbors in + let separatorHeight = UIScreenPixel + let contentSize = CGSize(width: params.width, height: 88.0) + let insets = itemListNeighborsGroupedInsets(neighbors, params) + + let layout = ListViewItemNodeLayout(contentSize: contentSize, insets: insets) + let layoutSize = layout.size + + return (layout, { [weak self] in + guard let strongSelf = self else { + return + } + + strongSelf.item = item + + strongSelf.backgroundNode.backgroundColor = item.theme.list.itemBlocksBackgroundColor + strongSelf.topStripeNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor + strongSelf.bottomStripeNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor + + if strongSelf.backgroundNode.supernode == nil { + strongSelf.insertSubnode(strongSelf.backgroundNode, at: 0) + } + if strongSelf.topStripeNode.supernode == nil { + strongSelf.insertSubnode(strongSelf.topStripeNode, at: 1) + } + if strongSelf.bottomStripeNode.supernode == nil { + strongSelf.insertSubnode(strongSelf.bottomStripeNode, at: 2) + } + if strongSelf.maskNode.supernode == nil { + strongSelf.insertSubnode(strongSelf.maskNode, at: 3) + } + + let hasCorners = itemListHasRoundedBlockLayout(params) + var hasTopCorners = false + var hasBottomCorners = false + + switch neighbors.top { + case .sameSection(false): + strongSelf.topStripeNode.isHidden = true + default: + hasTopCorners = true + strongSelf.topStripeNode.isHidden = hasCorners + } + + let bottomStripeInset: CGFloat + let bottomStripeOffset: CGFloat + switch neighbors.bottom { + case .sameSection(false): + bottomStripeInset = 0.0 + bottomStripeOffset = -separatorHeight + strongSelf.bottomStripeNode.isHidden = false + default: + bottomStripeInset = 0.0 + bottomStripeOffset = 0.0 + hasBottomCorners = true + strongSelf.bottomStripeNode.isHidden = hasCorners + } + + strongSelf.maskNode.image = hasCorners ? PresentationResourcesItemList.cornersImage(item.theme, top: hasTopCorners, bottom: hasBottomCorners) : nil + + strongSelf.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -min(insets.top, separatorHeight)), size: CGSize(width: params.width, height: contentSize.height + min(insets.top, separatorHeight) + min(insets.bottom, separatorHeight))) + strongSelf.maskNode.frame = strongSelf.backgroundNode.frame.insetBy(dx: params.leftInset, dy: 0.0) + strongSelf.topStripeNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -min(insets.top, separatorHeight)), size: CGSize(width: layoutSize.width, height: separatorHeight)) + strongSelf.bottomStripeNode.frame = CGRect(origin: CGPoint(x: bottomStripeInset, y: contentSize.height + bottomStripeOffset), size: CGSize(width: layoutSize.width - bottomStripeInset, height: separatorHeight)) + + let sideTextColor = item.theme.list.itemSecondaryTextColor.withAlphaComponent(item.isEnabled ? 1.0 : 0.6) + let centerTextColor = item.isEnabled ? item.theme.list.itemPrimaryTextColor : item.theme.list.itemDisabledTextColor + + strongSelf.leftTextNode.attributedText = NSAttributedString(string: "Меньше", font: Font.regular(13.0), textColor: sideTextColor) + strongSelf.rightTextNode.attributedText = NSAttributedString(string: "Больше", font: Font.regular(13.0), textColor: sideTextColor) + strongSelf.centerTextNode.attributedText = NSAttributedString(string: "Прозрачность \(item.value)%", font: Font.regular(16.0), textColor: centerTextColor) + + let leftTextSize = strongSelf.leftTextNode.updateLayout(CGSize(width: 120.0, height: 100.0)) + let rightTextSize = strongSelf.rightTextNode.updateLayout(CGSize(width: 120.0, height: 100.0)) + let centerTextSize = strongSelf.centerTextNode.updateLayout(CGSize(width: params.width - params.leftInset - params.rightInset - 60.0, height: 100.0)) + + let sideInset: CGFloat = 18.0 + strongSelf.leftTextNode.frame = CGRect(origin: CGPoint(x: params.leftInset + sideInset, y: 15.0), size: leftTextSize) + strongSelf.rightTextNode.frame = CGRect(origin: CGPoint(x: params.width - params.leftInset - sideInset - rightTextSize.width, y: 15.0), size: rightTextSize) + strongSelf.centerTextNode.frame = CGRect(origin: CGPoint(x: floorToScreenPixels((params.width - centerTextSize.width) / 2.0), y: 11.0), size: centerTextSize) + + let maxRange = CGFloat(maxDeletedMessageTransparencyPercent - minDeletedMessageTransparencyPercent) + let normalizedValue: CGFloat + if maxRange.isZero { + normalizedValue = 0.0 + } else { + normalizedValue = CGFloat(item.value - minDeletedMessageTransparencyPercent) / maxRange + } + + let sliderSize = strongSelf.slider.update( + transition: .immediate, + component: AnyComponent( + SliderComponent( + content: .continuous(.init( + value: normalizedValue, + minValue: nil, + valueUpdated: { [weak self] value in + guard let self, let item = self.item, item.isEnabled else { + return + } + + let transparencyValue = Int32((CGFloat(minDeletedMessageTransparencyPercent) + maxRange * value).rounded()) + item.updated(clampDeletedMessageTransparencyPercent(transparencyValue)) + } + )), + useNative: true, + trackBackgroundColor: item.theme.list.itemSwitchColors.frameColor, + trackForegroundColor: item.isEnabled ? item.theme.list.itemAccentColor : item.theme.list.itemDisabledTextColor + ) + ), + environment: {}, + containerSize: CGSize(width: params.width - params.leftInset - params.rightInset - 15.0 * 2.0, height: 44.0) + ) + + if let sliderView = strongSelf.slider.view { + if sliderView.superview == nil { + strongSelf.view.addSubview(sliderView) + } + + sliderView.frame = CGRect(origin: CGPoint(x: floorToScreenPixels((params.width - sliderSize.width) / 2.0), y: 36.0), size: sliderSize) + sliderView.isUserInteractionEnabled = item.isEnabled + sliderView.alpha = item.isEnabled ? 1.0 : 0.55 + } + }) + } + } + + override func animateInsertion(_ currentTimestamp: Double, duration: Double, options: ListViewItemAnimationOptions) { + self.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) + } + + override func animateRemoved(_ currentTimestamp: Double, duration: Double) { + self.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.15, removeOnCompletion: false) + } +} diff --git a/submodules/SettingsUI/Sources/GhostgramSettingsController.swift b/submodules/SettingsUI/Sources/GhostgramSettingsController.swift index a045e524..0c7d5a40 100644 --- a/submodules/SettingsUI/Sources/GhostgramSettingsController.swift +++ b/submodules/SettingsUI/Sources/GhostgramSettingsController.swift @@ -19,6 +19,7 @@ private enum GhostgramSettingsEntry: ItemListNodeEntry { case misc(PresentationTheme, String, String) case deviceSpoof(PresentationTheme, String, String) case voiceMorpher(PresentationTheme, String, String) + case sendDelay(PresentationTheme, String, String) case info(PresentationTheme, String) var section: ItemListSectionId { @@ -37,8 +38,10 @@ private enum GhostgramSettingsEntry: ItemListNodeEntry { return 3 case .voiceMorpher: return 4 - case .info: + case .sendDelay: return 5 + case .info: + return 6 } } @@ -74,6 +77,12 @@ private enum GhostgramSettingsEntry: ItemListNodeEntry { return true } return false + case let .sendDelay(lhsTheme, lhsText, lhsValue): + if case let .sendDelay(rhsTheme, rhsText, rhsValue) = rhs, + lhsTheme === rhsTheme, lhsText == rhsText, lhsValue == rhsValue { + return true + } + return false case let .info(lhsTheme, lhsText): if case let .info(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { return true @@ -144,6 +153,17 @@ private enum GhostgramSettingsEntry: ItemListNodeEntry { arguments.openVoiceMorpher() } ) + case let .sendDelay(_, text, value): + return ItemListDisclosureItem( + presentationData: presentationData, + title: text, + label: value, + sectionId: self.section, + style: .blocks, + action: { + arguments.openSendDelay() + } + ) case let .info(_, text): return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section) } @@ -158,19 +178,22 @@ private final class GhostgramSettingsControllerArguments { let openMisc: () -> Void let openDeviceSpoof: () -> Void let openVoiceMorpher: () -> Void + let openSendDelay: () -> Void init( openDeletedMessages: @escaping () -> Void, openGhostMode: @escaping () -> Void, openMisc: @escaping () -> Void, openDeviceSpoof: @escaping () -> Void, - openVoiceMorpher: @escaping () -> Void + openVoiceMorpher: @escaping () -> Void, + openSendDelay: @escaping () -> Void ) { self.openDeletedMessages = openDeletedMessages self.openGhostMode = openGhostMode self.openMisc = openMisc self.openDeviceSpoof = openDeviceSpoof self.openVoiceMorpher = openVoiceMorpher + self.openSendDelay = openSendDelay } } @@ -184,6 +207,8 @@ private struct GhostgramSettingsState: Equatable { var miscActiveCount: Int var deviceSpoofEnabled: Bool var voiceMorpherEnabled: Bool + var voiceMorpherPresetName: String + var sendDelayEnabled: Bool static func current() -> GhostgramSettingsState { return GhostgramSettingsState( @@ -193,7 +218,9 @@ private struct GhostgramSettingsState: Equatable { miscEnabled: MiscSettingsManager.shared.isEnabled, miscActiveCount: MiscSettingsManager.shared.activeFeatureCount, deviceSpoofEnabled: DeviceSpoofManager.shared.isEnabled, - voiceMorpherEnabled: VoiceMorpherManager.shared.isEnabled + voiceMorpherEnabled: VoiceMorpherManager.shared.isEnabled, + voiceMorpherPresetName: VoiceMorpherManager.shared.selectedPreset.name, + sendDelayEnabled: SendDelayManager.shared.isEnabled ) } } @@ -223,9 +250,13 @@ private func ghostgramSettingsControllerEntries( entries.append(.deviceSpoof(presentationData.theme, "Подмена устройства", deviceSpoofStatus)) // Voice Morpher - let voiceMorpherStatus = state.voiceMorpherEnabled ? VoiceMorpherManager.shared.selectedPreset.name : "Выкл" + let voiceMorpherStatus = state.voiceMorpherEnabled ? state.voiceMorpherPresetName : "Выкл" entries.append(.voiceMorpher(presentationData.theme, "Голосовой двойник", voiceMorpherStatus)) + // Send Delay + let sendDelayStatus = state.sendDelayEnabled ? "Вкл" : "Выкл" + entries.append(.sendDelay(presentationData.theme, "Отложка сообщений", sendDelayStatus)) + // Info entries.append(.info(presentationData.theme, "Функции конфиденциальности Ghostgram. Скрытые отметки о прочтении, обход исчезающих сообщений, обход защиты от пересылки и другое.")) @@ -255,6 +286,9 @@ public func ghostgramSettingsController(context: AccountContext) -> ViewControll }, openVoiceMorpher: { pushControllerImpl?(voiceMorpherController(context: context), true) + }, + openSendDelay: { + pushControllerImpl?(sendDelayController(context: context), true) } ) diff --git a/submodules/SettingsUI/Sources/MiscController.swift b/submodules/SettingsUI/Sources/MiscController.swift index eb8f4997..35659dce 100644 --- a/submodules/SettingsUI/Sources/MiscController.swift +++ b/submodules/SettingsUI/Sources/MiscController.swift @@ -328,7 +328,7 @@ public func miscController(context: AccountContext) -> ViewController { let controllerState = ItemListControllerState( presentationData: ItemListPresentationData(presentationData), - title: .text("Misc"), + title: .text("Прочее"), leftNavigationButton: nil, rightNavigationButton: nil, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), diff --git a/submodules/SettingsUI/Sources/Notifications/NotificationSearchItem.swift b/submodules/SettingsUI/Sources/Notifications/NotificationSearchItem.swift index 49fd2c6d..393f2bac 100644 --- a/submodules/SettingsUI/Sources/Notifications/NotificationSearchItem.swift +++ b/submodules/SettingsUI/Sources/Notifications/NotificationSearchItem.swift @@ -90,7 +90,7 @@ class NotificationSearchItemNode: ListViewItemNode { required init() { self.searchBarNode = SearchBarPlaceholderNode() - super.init(layerBacked: false, dynamicBounce: false) + super.init(layerBacked: false) self.addSubnode(self.searchBarNode) } @@ -104,16 +104,16 @@ class NotificationSearchItemNode: ListViewItemNode { } func asyncLayout() -> (_ item: NotificationSearchItem, _ params: ListViewItemLayoutParams) -> (ListViewItemNodeLayout, (Bool) -> Void) { - let searchBarNodeLayout = self.searchBarNode.asyncLayout() let placeholder = self.placeholder return { item, params in let baseWidth = params.width - params.leftInset - params.rightInset let backgroundColor = item.theme.chatList.itemBackgroundColor + let iconColor = UIColor(rgb: 0x8e8e93) + let controlColor = item.theme.chat.inputPanel.panelControlColor let placeholderString = NSAttributedString(string: placeholder ?? "", font: searchBarFont, textColor: UIColor(rgb: 0x8e8e93)) - let (_, searchBarApply) = searchBarNodeLayout(placeholderString, placeholderString, CGSize(width: baseWidth - 16.0, height: 28.0), 1.0, UIColor(rgb: 0x8e8e93), item.theme.chatList.regularSearchBarColor, backgroundColor, .immediate) let layout = ListViewItemNodeLayout(contentSize: CGSize(width: params.width, height: 44.0), insets: UIEdgeInsets()) @@ -126,10 +126,9 @@ class NotificationSearchItemNode: ListViewItemNode { transition = .immediate } - strongSelf.searchBarNode.frame = CGRect(origin: CGPoint(x: params.leftInset + 8.0, y: 8.0), size: CGSize(width: baseWidth - 16.0, height: 28.0)) - searchBarApply() - - strongSelf.searchBarNode.bounds = CGRect(origin: CGPoint(), size: CGSize(width: baseWidth - 16.0, height: 28.0)) + let searchBarSize = CGSize(width: baseWidth - 16.0, height: 28.0) + strongSelf.searchBarNode.frame = CGRect(origin: CGPoint(x: params.leftInset + 8.0, y: 8.0), size: searchBarSize) + _ = strongSelf.searchBarNode.updateLayout(placeholderString: placeholderString, compactPlaceholderString: placeholderString, constrainedSize: searchBarSize, expansionProgress: 1.0, iconColor: iconColor, foregroundColor: item.theme.chatList.regularSearchBarColor, backgroundColor: backgroundColor, controlColor: controlColor, transition: transition) transition.updateBackgroundColor(node: strongSelf, color: backgroundColor) } diff --git a/submodules/SettingsUI/Sources/SendDelayController.swift b/submodules/SettingsUI/Sources/SendDelayController.swift new file mode 100644 index 00000000..34a68215 --- /dev/null +++ b/submodules/SettingsUI/Sources/SendDelayController.swift @@ -0,0 +1,148 @@ +import Foundation +import UIKit +import Display +import SwiftSignalKit +import TelegramCore +import TelegramPresentationData +import ItemListUI +import AccountContext + +// MARK: - Section / Entry definitions + +private enum SendDelaySection: Int32 { + case main +} + +private enum SendDelayEntry: ItemListNodeEntry { + case toggle(PresentationTheme, String, Bool) + case info(PresentationTheme, String) + + var section: ItemListSectionId { + return SendDelaySection.main.rawValue + } + + var stableId: Int32 { + switch self { + case .toggle: return 0 + case .info: return 1 + } + } + + static func ==(lhs: SendDelayEntry, rhs: SendDelayEntry) -> Bool { + switch lhs { + case let .toggle(lhsTheme, lhsText, lhsValue): + if case let .toggle(rhsTheme, rhsText, rhsValue) = rhs, + lhsTheme === rhsTheme, lhsText == rhsText, lhsValue == rhsValue { + return true + } + return false + case let .info(lhsTheme, lhsText): + if case let .info(rhsTheme, rhsText) = rhs, + lhsTheme === rhsTheme, lhsText == rhsText { + return true + } + return false + } + } + + static func <(lhs: SendDelayEntry, rhs: SendDelayEntry) -> Bool { + return lhs.stableId < rhs.stableId + } + + func item(presentationData: ItemListPresentationData, arguments: Any) -> ListViewItem { + let arguments = arguments as! SendDelayControllerArguments + switch self { + case let .toggle(_, text, value): + return ItemListSwitchItem( + presentationData: presentationData, + title: text, + value: value, + sectionId: self.section, + style: .blocks, + updated: { newValue in + arguments.toggleEnabled(newValue) + } + ) + case let .info(_, text): + return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section) + } + } +} + +// MARK: - Arguments + +private final class SendDelayControllerArguments { + let toggleEnabled: (Bool) -> Void + init(toggleEnabled: @escaping (Bool) -> Void) { + self.toggleEnabled = toggleEnabled + } +} + +// MARK: - State + +private struct SendDelayControllerState: Equatable { + var isEnabled: Bool +} + +// MARK: - Entries builder + +private func sendDelayControllerEntries( + presentationData: PresentationData, + state: SendDelayControllerState +) -> [SendDelayEntry] { + let theme = presentationData.theme + return [ + .toggle(theme, "Использовать отложку", state.isEnabled), + .info(theme, "Автоматически ставит задержку в ~12 секунд (дольше для сообщений с вложениями) при отправке сообщений. При использовании этой функции вы не будете появляться в сети.") + ] +} + +// MARK: - Controller + +public func sendDelayController(context: AccountContext) -> ViewController { + let statePromise = ValuePromise( + SendDelayControllerState(isEnabled: SendDelayManager.shared.isEnabled), + ignoreRepeated: true + ) + let stateValue = Atomic(value: SendDelayControllerState(isEnabled: SendDelayManager.shared.isEnabled)) + + let updateState: ((inout SendDelayControllerState) -> Void) -> Void = { f in + let result = stateValue.modify { state in + var s = state; f(&s); return s + } + statePromise.set(result) + } + + let arguments = SendDelayControllerArguments( + toggleEnabled: { value in + SendDelayManager.shared.isEnabled = value + updateState { $0.isEnabled = value } + } + ) + + let signal = combineLatest( + context.sharedContext.presentationData, + statePromise.get() + ) + |> map { presentationData, state -> (ItemListControllerState, (ItemListNodeState, Any)) in + let entries = sendDelayControllerEntries(presentationData: presentationData, state: state) + + let controllerState = ItemListControllerState( + presentationData: ItemListPresentationData(presentationData), + title: .text("Отложка сообщений"), + leftNavigationButton: nil, + rightNavigationButton: nil, + backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), + animateChanges: false + ) + let listState = ItemListNodeState( + presentationData: ItemListPresentationData(presentationData), + entries: entries, + style: .blocks, + animateChanges: true + ) + return (controllerState, (listState, arguments)) + } + + return ItemListController(context: context, state: signal) +} diff --git a/submodules/TelegramCallsUI/Sources/CallStatusBarNode.swift b/submodules/TelegramCallsUI/Sources/CallStatusBarNode.swift index 04529dbe..34a6a8cd 100644 --- a/submodules/TelegramCallsUI/Sources/CallStatusBarNode.swift +++ b/submodules/TelegramCallsUI/Sources/CallStatusBarNode.swift @@ -22,7 +22,7 @@ private let pink = UIColor(rgb: 0xef436c) private let latePurple = UIColor(rgb: 0xaa56a6) private let latePink = UIColor(rgb: 0xef476f) -private func textForTimeout(value: Int32) -> String { +private func callStatusBarTextForTimeout(value: Int32) -> String { if value < 3600 { let minutes = value / 60 let seconds = value % 60 @@ -498,9 +498,9 @@ public class CallStatusBarNodeImpl: CallStatusBarNode { timerText = presentationData.strings.VoiceChat_StatusStartsIn(scheduledTimeIntervalString(strings: presentationData.strings, value: elapsedTime)).string } else if elapsedTime < 0 { isLate = true - timerText = presentationData.strings.VoiceChat_StatusLateBy(textForTimeout(value: abs(elapsedTime))).string + timerText = presentationData.strings.VoiceChat_StatusLateBy(callStatusBarTextForTimeout(value: abs(elapsedTime))).string } else { - timerText = presentationData.strings.VoiceChat_StatusStartsIn(textForTimeout(value: elapsedTime)).string + timerText = presentationData.strings.VoiceChat_StatusStartsIn(callStatusBarTextForTimeout(value: elapsedTime)).string } segments.append(.text(0, NSAttributedString(string: timerText, font: textFont, textColor: textColor))) } else if let membersCount = membersCount { diff --git a/submodules/TelegramCallsUI/Sources/VideoChatScheduledInfoComponent.swift b/submodules/TelegramCallsUI/Sources/VideoChatScheduledInfoComponent.swift index 1143f2ea..42f21425 100644 --- a/submodules/TelegramCallsUI/Sources/VideoChatScheduledInfoComponent.swift +++ b/submodules/TelegramCallsUI/Sources/VideoChatScheduledInfoComponent.swift @@ -13,7 +13,7 @@ private let pink = UIColor(rgb: 0xef436c) private let latePurple = UIColor(rgb: 0x974aa9) private let latePink = UIColor(rgb: 0xf0436c) -private func textForTimeout(value: Int32) -> String { +private func scheduledInfoTextForTimeout(value: Int32) -> String { if value < 3600 { let minutes = value / 60 let seconds = value % 60 @@ -150,7 +150,7 @@ final class VideoChatScheduledInfoComponent: Component { if remainingSeconds >= 86400 { countdownText = scheduledTimeIntervalString(strings: component.strings, value: remainingSeconds) } else { - countdownText = textForTimeout(value: abs(remainingSeconds)) + countdownText = scheduledInfoTextForTimeout(value: abs(remainingSeconds)) /*if remainingSeconds < 0 && !self.isLate { self.isLate = true self.foregroundGradientLayer.colors = [latePink.cgColor, latePurple.cgColor, latePurple.cgColor] diff --git a/submodules/TelegramCallsUI/Sources/VoiceChatTimerNode.swift b/submodules/TelegramCallsUI/Sources/VoiceChatTimerNode.swift index 6f4abcd3..ad9ae24b 100644 --- a/submodules/TelegramCallsUI/Sources/VoiceChatTimerNode.swift +++ b/submodules/TelegramCallsUI/Sources/VoiceChatTimerNode.swift @@ -12,7 +12,7 @@ private let pink = UIColor(rgb: 0xef436c) private let latePurple = UIColor(rgb: 0x974aa9) private let latePink = UIColor(rgb: 0xf0436c) -private func textForTimeout(value: Int32) -> String { +private func voiceChatTimerTextForTimeout(value: Int32) -> String { if value < 3600 { let minutes = value / 60 let seconds = value % 60 @@ -189,7 +189,7 @@ final class VoiceChatTimerNode: ASDisplayNode { if elapsedTime >= 86400 { timerText = scheduledTimeIntervalString(strings: self.strings, value: elapsedTime) } else { - timerText = textForTimeout(value: abs(elapsedTime)) + timerText = voiceChatTimerTextForTimeout(value: abs(elapsedTime)) if elapsedTime < 0 && !self.isLate { self.isLate = true self.foregroundGradientLayer.colors = [latePink.cgColor, latePurple.cgColor, latePurple.cgColor] diff --git a/submodules/TelegramCore/Sources/AntiDelete/AntiDeleteManager.swift b/submodules/TelegramCore/Sources/AntiDelete/AntiDeleteManager.swift index 30614454..ca2f73f8 100644 --- a/submodules/TelegramCore/Sources/AntiDelete/AntiDeleteManager.swift +++ b/submodules/TelegramCore/Sources/AntiDelete/AntiDeleteManager.swift @@ -11,6 +11,7 @@ public final class AntiDeleteManager { private let defaults = UserDefaults.standard private let enabledKey = "antiDelete.enabled" private let archiveMediaKey = "antiDelete.archiveMedia" + private let deletedMessageTransparencyKey = "antiDelete.deletedMessageTransparency" private let archiveKey = "antiDelete.archive" private let deletedIdsKey = "antiDelete.deletedIds" @@ -26,6 +27,33 @@ public final class AntiDeleteManager { set { defaults.set(newValue, forKey: archiveMediaKey) } } + /// Минимальное значение прозрачности удалённого сообщения + public static let minDeletedMessageTransparency: Double = 0.0 + + /// Максимальное значение прозрачности удалённого сообщения + public static let maxDeletedMessageTransparency: Double = 0.8 + + /// Значение прозрачности удалённого сообщения по умолчанию + public static let defaultDeletedMessageTransparency: Double = 0.45 + + /// Прозрачность удалённых сообщений (0.0 = непрозрачно, 0.8 = максимально прозрачно) + public var deletedMessageTransparency: Double { + get { + let value = defaults.object(forKey: deletedMessageTransparencyKey) as? NSNumber + let resolvedValue = value?.doubleValue ?? Self.defaultDeletedMessageTransparency + return max(Self.minDeletedMessageTransparency, min(Self.maxDeletedMessageTransparency, resolvedValue)) + } + set { + let clampedValue = max(Self.minDeletedMessageTransparency, min(Self.maxDeletedMessageTransparency, newValue)) + defaults.set(clampedValue, forKey: deletedMessageTransparencyKey) + } + } + + /// Альфа для отображения удалённых сообщений + public var deletedMessageDisplayAlpha: Double { + return 1.0 - self.deletedMessageTransparency + } + // MARK: - Deleted Message IDs Storage private var deletedMessageIds: Set = [] @@ -120,6 +148,9 @@ public final class AntiDeleteManager { if defaults.object(forKey: archiveMediaKey) == nil { defaults.set(true, forKey: archiveMediaKey) } + if defaults.object(forKey: deletedMessageTransparencyKey) == nil { + defaults.set(Self.defaultDeletedMessageTransparency, forKey: deletedMessageTransparencyKey) + } loadArchive() loadDeletedIds() } diff --git a/submodules/TelegramCore/Sources/GhostMode/GhostModeManager.swift b/submodules/TelegramCore/Sources/GhostMode/GhostModeManager.swift index ba06e6d5..ccca924c 100644 --- a/submodules/TelegramCore/Sources/GhostMode/GhostModeManager.swift +++ b/submodules/TelegramCore/Sources/GhostMode/GhostModeManager.swift @@ -23,9 +23,6 @@ public final class GhostModeManager { private let defaults = UserDefaults.standard - // Prevents recursive mutual-exclusion calls - private var isApplyingMutualExclusion = false - // MARK: - Properties /// Master toggle for Ghost Mode. @@ -34,11 +31,9 @@ public final class GhostModeManager { get { defaults.bool(forKey: Keys.isEnabled) } set { defaults.set(newValue, forKey: Keys.isEnabled) - if newValue && !isApplyingMutualExclusion { - // Ghost Mode ON → disable Always Online - isApplyingMutualExclusion = true + if newValue { + // Ghost Mode ON → disable Always Online so they don't coexist in UI MiscSettingsManager.shared.disableAlwaysOnlineForMutualExclusion() - isApplyingMutualExclusion = false } notifySettingsChanged() } @@ -102,9 +97,11 @@ public final class GhostModeManager { } /// Online status is hidden only when Ghost Mode is on AND Always Online is NOT active. + /// Checks alwaysOnline raw value (not shouldAlwaysBeOnline) so ghost mode works + /// even when the Misc master toggle is off. public var shouldHideOnlineStatus: Bool { guard isEnabled && hideOnlineStatus else { return false } - return !MiscSettingsManager.shared.shouldAlwaysBeOnline + return !MiscSettingsManager.shared.alwaysOnline } public var shouldHideTypingIndicator: Bool { @@ -114,7 +111,7 @@ public final class GhostModeManager { /// Force offline only when Ghost Mode is on AND Always Online is NOT active. public var shouldForceOffline: Bool { guard isEnabled && forceOffline else { return false } - return !MiscSettingsManager.shared.shouldAlwaysBeOnline + return !MiscSettingsManager.shared.alwaysOnline } /// Count of active features (e.g., "5/5") @@ -131,17 +128,6 @@ public final class GhostModeManager { /// Total number of features public static let totalFeatureCount = 5 - // MARK: - Internal mutual exclusion (called by MiscSettingsManager) - - /// Called by MiscSettingsManager when Always Online is turned on. - /// Disables Ghost Mode without triggering mutual exclusion back. - public func disableForMutualExclusion() { - isApplyingMutualExclusion = true - defaults.set(false, forKey: Keys.isEnabled) - notifySettingsChanged() - isApplyingMutualExclusion = false - } - // MARK: - Initialization private init() { diff --git a/submodules/TelegramCore/Sources/MiscSettings/MiscSettingsManager.swift b/submodules/TelegramCore/Sources/MiscSettings/MiscSettingsManager.swift index 819c9e42..58d7161f 100644 --- a/submodules/TelegramCore/Sources/MiscSettings/MiscSettingsManager.swift +++ b/submodules/TelegramCore/Sources/MiscSettings/MiscSettingsManager.swift @@ -16,9 +16,6 @@ public final class MiscSettingsManager { private let defaults = UserDefaults.standard - // Prevents recursive mutual-exclusion calls - private var isApplyingMutualExclusion = false - // MARK: - Main Toggle public var isEnabled: Bool { @@ -68,17 +65,12 @@ public final class MiscSettingsManager { } /// Always appear as online. - /// Enabling this automatically disables Ghost Mode (mutual exclusion). + /// NOTE: Ghost Mode features dynamically yield to Always Online via their + /// `shouldAlwaysBeOnline` check, so no permanent disabling is needed here. public var alwaysOnline: Bool { get { defaults.bool(forKey: Keys.alwaysOnline) } set { defaults.set(newValue, forKey: Keys.alwaysOnline) - if newValue && !isApplyingMutualExclusion { - // Always Online ON → disable Ghost Mode - isApplyingMutualExclusion = true - GhostModeManager.shared.disableForMutualExclusion() - isApplyingMutualExclusion = false - } notifySettingsChanged() } } @@ -122,7 +114,7 @@ public final class MiscSettingsManager { disableViewOnceAutoDelete = true bypassScreenshotProtection = true blockAds = true - alwaysOnline = true // setter handles mutual exclusion + alwaysOnline = true } public func disableAll() { @@ -136,12 +128,10 @@ public final class MiscSettingsManager { // MARK: - Internal mutual exclusion (called by GhostModeManager) /// Called by GhostModeManager when Ghost Mode is turned on. - /// Disables Always Online without triggering mutual exclusion back. + /// Disables Always Online so the two modes don't coexist in the UI. public func disableAlwaysOnlineForMutualExclusion() { - isApplyingMutualExclusion = true defaults.set(false, forKey: Keys.alwaysOnline) notifySettingsChanged() - isApplyingMutualExclusion = false } // MARK: - Notification diff --git a/submodules/TelegramCore/Sources/PendingMessages/EnqueueMessage.swift b/submodules/TelegramCore/Sources/PendingMessages/EnqueueMessage.swift index 3395dae4..3b1f7165 100644 --- a/submodules/TelegramCore/Sources/PendingMessages/EnqueueMessage.swift +++ b/submodules/TelegramCore/Sources/PendingMessages/EnqueueMessage.swift @@ -365,14 +365,46 @@ public func enqueueMessages(account: Account, peerId: PeerId, messages: [Enqueue } else { signal = .single(messages.map { (false, $0) }) } + + let hasMedia = messages.contains { message in + if case let .message(_, _, _, mediaReference, _, _, _, _, _, _) = message { + return mediaReference != nil + } + return false + } + + // GHOSTGRAM: Send delay — write to Postbox immediately so the UI + // clears the input field, then delay _only_ the return signal. + // The actual network send delay is handled by scheduling: we add + // OutgoingScheduleInfoMessageAttribute inside the transaction so + // the message is stored as "scheduled" and Telegram server sends it + // after the delay elapses. The message appears in Scheduled Messages + // section for the duration of the delay. return signal |> mapToSignal { messages -> Signal<[MessageId?], NoError> in return account.postbox.transaction { transaction -> [MessageId?] in - return enqueueMessages(transaction: transaction, account: account, peerId: peerId, messages: messages) + var finalMessages = messages + if SendDelayManager.shared.isEnabled { + let delayInterval = hasMedia + ? SendDelayManager.mediaDelaySeconds + : SendDelayManager.textDelaySeconds + let scheduleTime = Int32(Date().timeIntervalSince1970) + Int32(delayInterval) + finalMessages = messages.map { (transformed, msg) in + let updatedMsg = msg.withUpdatedAttributes { attrs in + var attrs = attrs + attrs.removeAll(where: { $0 is OutgoingScheduleInfoMessageAttribute }) + attrs.append(OutgoingScheduleInfoMessageAttribute(scheduleTime: scheduleTime, repeatPeriod: nil)) + return attrs + } + return (transformed, updatedMsg) + } + } + return enqueueMessages(transaction: transaction, account: account, peerId: peerId, messages: finalMessages) } } } + public func enqueueMessagesToMultiplePeers(account: Account, peerIds: [PeerId], threadIds: [PeerId: Int64], messages: [EnqueueMessage]) -> Signal<[MessageId], NoError> { let signal: Signal<[(Bool, EnqueueMessage)], NoError> if let transformOutgoingMessageMedia = account.transformOutgoingMessageMedia { diff --git a/submodules/TelegramCore/Sources/SendDelay/SendDelayManager.swift b/submodules/TelegramCore/Sources/SendDelay/SendDelayManager.swift new file mode 100644 index 00000000..57e80e7b --- /dev/null +++ b/submodules/TelegramCore/Sources/SendDelay/SendDelayManager.swift @@ -0,0 +1,55 @@ +import Foundation + +/// SendDelayManager - delays outgoing messages by ~12 seconds to prevent +/// online status from appearing after sending. +/// +/// Delays are applied per-message at the enqueueMessages level. +/// Media messages receive a slightly longer delay (~20 s) because upload +/// time would otherwise reveal the send moment anyway. +public final class SendDelayManager { + + // MARK: - Singleton + + public static let shared = SendDelayManager() + + // MARK: - UserDefaults Keys + + private enum Keys { + static let isEnabled = "SendDelay.isEnabled" + } + + // MARK: - Storage + + private let defaults = UserDefaults.standard + + // MARK: - Properties + + /// When true, all outgoing messages are delayed before being enqueued. + public var isEnabled: Bool { + get { defaults.bool(forKey: Keys.isEnabled) } + set { + defaults.set(newValue, forKey: Keys.isEnabled) + notifySettingsChanged() + } + } + + // MARK: - Delay constants + + /// Base delay for text-only messages. + public static let textDelaySeconds: Double = 12.0 + + /// Delay for messages that contain media attachments. + public static let mediaDelaySeconds: Double = 20.0 + + // MARK: - Init + + private init() {} + + // MARK: - Notifications + + public static let settingsChangedNotification = Notification.Name("SendDelaySettingsChanged") + + private func notifySettingsChanged() { + NotificationCenter.default.post(name: SendDelayManager.settingsChangedNotification, object: nil) + } +} diff --git a/submodules/TelegramCore/Sources/State/AccountStateManagementUtils.swift b/submodules/TelegramCore/Sources/State/AccountStateManagementUtils.swift index 0f6e050e..d252bc6b 100644 --- a/submodules/TelegramCore/Sources/State/AccountStateManagementUtils.swift +++ b/submodules/TelegramCore/Sources/State/AccountStateManagementUtils.swift @@ -4233,6 +4233,9 @@ func replayFinalState( if AntiDeleteManager.shared.isEnabled { let messageIds = transaction.messageIdsForGlobalIds(ids) for (index, messageId) in messageIds.enumerated() { + // Skip scheduled/local/quick-reply messages — they get deleted when sent, not by the remote peer + guard messageId.namespace == Namespaces.Message.Cloud else { continue } + if let message = transaction.getMessage(messageId) { let globalId = index < ids.count ? ids[index] : 0 @@ -4289,6 +4292,9 @@ func replayFinalState( if AntiDeleteManager.shared.isEnabled { let messageIds = transaction.messageIdsForGlobalIds(ids) for messageId in messageIds { + // Skip scheduled/local/quick-reply messages — they get deleted when sent, not by the remote peer + guard messageId.namespace == Namespaces.Message.Cloud else { continue } + // Mark as deleted for icon display AntiDeleteManager.shared.markAsDeleted(peerId: messageId.peerId.toInt64(), messageId: messageId.id) @@ -4317,6 +4323,9 @@ func replayFinalState( // ANTI-DELETE: Archive channel messages with full content before deletion if AntiDeleteManager.shared.isEnabled { for messageId in ids { + // Skip scheduled/local/quick-reply messages — they get deleted when sent, not by the remote peer + guard messageId.namespace == Namespaces.Message.Cloud else { continue } + if let message = transaction.getMessage(messageId) { // Extract text content let textContent = message.text @@ -4370,6 +4379,9 @@ func replayFinalState( // ANTI-DELETE: Mark messages as deleted instead of removing them if AntiDeleteManager.shared.isEnabled { for messageId in ids { + // Skip scheduled/local/quick-reply messages — they get deleted when sent, not by the remote peer + guard messageId.namespace == Namespaces.Message.Cloud else { continue } + // Mark as deleted for icon display AntiDeleteManager.shared.markAsDeleted(peerId: messageId.peerId.toInt64(), messageId: messageId.id) diff --git a/submodules/TelegramCore/Sources/State/ManagedAccountPresence.swift b/submodules/TelegramCore/Sources/State/ManagedAccountPresence.swift index a5c70ae8..cae3b698 100644 --- a/submodules/TelegramCore/Sources/State/ManagedAccountPresence.swift +++ b/submodules/TelegramCore/Sources/State/ManagedAccountPresence.swift @@ -82,16 +82,19 @@ private final class AccountPresenceManagerImpl { /// 2. Ghost Mode hide online status → skip update entirely (freeze last-seen) /// 3. Default app behaviour (wasOnline) private func refreshPresence() { - let alwaysOnline = MiscSettingsManager.shared.shouldAlwaysBeOnline + // Use raw alwaysOnline flag (not shouldAlwaysBeOnline) so it works independently + // of the Misc master toggle. Ghost Mode's shouldHideOnlineStatus already checks + // !MiscSettingsManager.shared.alwaysOnline internally. + let alwaysOnline = MiscSettingsManager.shared.alwaysOnline let ghostHideOnline = GhostModeManager.shared.shouldHideOnlineStatus if alwaysOnline { // Always Online wins — push online regardless of Ghost Mode sendPresenceUpdate(online: true) } else if ghostHideOnline { - // Ghost Mode active, no Always Online — freeze presence (don't send anything) - self.onlineTimer?.invalidate() - self.onlineTimer = nil + // Ghost Mode active: actively send offline so the server immediately + // hides our last-seen instead of keeping the stale "online" status. + sendPresenceUpdate(online: false) } else { // Normal mode — follow the app-level state sendPresenceUpdate(online: wasOnline) diff --git a/submodules/TelegramUI/Components/AvatarEditorScreen/Sources/AvatarEditorScreen.swift b/submodules/TelegramUI/Components/AvatarEditorScreen/Sources/AvatarEditorScreen.swift index a43f3615..67727795 100644 --- a/submodules/TelegramUI/Components/AvatarEditorScreen/Sources/AvatarEditorScreen.swift +++ b/submodules/TelegramUI/Components/AvatarEditorScreen/Sources/AvatarEditorScreen.swift @@ -27,7 +27,6 @@ import MediaEditor import AvatarBackground import LottieComponent import UndoUI -import PremiumAlertController public struct AvatarKeyboardInputData: Equatable { var emoji: EmojiPagerContentComponent diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift index 1d378b4f..2fa5cd2f 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift @@ -481,6 +481,10 @@ private func mapVisibility(_ visibility: ListViewItemNodeVisibility, boundsSize: } } +private func isDeletedBubbleMessage(_ message: Message) -> Bool { + return AntiDeleteManager.shared.isMessageDeleted(peerId: message.id.peerId.toInt64(), messageId: message.id.id) || AntiDeleteManager.shared.isMessageDeleted(text: message.text) +} + public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode { public class ContentContainer { public let contentMessageStableId: UInt32 @@ -4368,6 +4372,14 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI } } + let deletedMessageAlpha = CGFloat(AntiDeleteManager.shared.deletedMessageDisplayAlpha) + var deletedMessageStableIds = Set() + for (message, _) in item.content { + if isDeletedBubbleMessage(message) { + deletedMessageStableIds.insert(message.stableId) + } + } + var incomingOffset: CGFloat = 0.0 switch backgroundType { case .incoming: @@ -4512,10 +4524,31 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI } contentContainer?.update(size: relativeFrame.size, contentOrigin: contentOrigin, selectionInsets: selectionInsets, index: index, presentationData: item.presentationData, graphics: graphics, backgroundType: backgroundType, presentationContext: item.controllerInteraction.presentationContext, mediaBox: item.context.account.postbox.mediaBox, messageSelection: itemSelection) + + if let contentContainer = contentContainer { + let containerAlpha: CGFloat = deletedMessageStableIds.contains(stableId) ? deletedMessageAlpha : 1.0 + if case .System = animation { + animation.animator.updateAlpha(layer: contentContainer.sourceNode.contentNode.layer, alpha: containerAlpha, completion: nil) + } else { + contentContainer.sourceNode.contentNode.alpha = containerAlpha + } + } index += 1 } + let mainContainerAlpha: CGFloat + if contentContainerNodeFrames.isEmpty, !deletedMessageStableIds.isEmpty { + mainContainerAlpha = deletedMessageAlpha + } else { + mainContainerAlpha = 1.0 + } + if case .System = animation { + animation.animator.updateAlpha(layer: strongSelf.mainContextSourceNode.contentNode.layer, alpha: mainContainerAlpha, completion: nil) + } else { + strongSelf.mainContextSourceNode.contentNode.alpha = mainContainerAlpha + } + if hasSelection { var currentMaskView: UIImageView? if let maskView = strongSelf.contentContainersWrapperNode.view.mask as? UIImageView { diff --git a/submodules/TelegramUI/Components/ChatListHeaderComponent/Sources/NavigationButtonComponent.swift b/submodules/TelegramUI/Components/ChatListHeaderComponent/Sources/NavigationButtonComponent.swift index 5ebc8200..09358a7a 100644 --- a/submodules/TelegramUI/Components/ChatListHeaderComponent/Sources/NavigationButtonComponent.swift +++ b/submodules/TelegramUI/Components/ChatListHeaderComponent/Sources/NavigationButtonComponent.swift @@ -29,6 +29,27 @@ public final class NavigationButtonComponent: Component { case more case icon(imageName: String) case proxy(status: ChatTitleProxyStatus) + /// Liquid glass avatar button for account switching. + /// peerId is used as a diff key; avatarImage is the rendered avatar. + case avatar(peerId: String, avatarImage: UIImage?) + + public static func ==(lhs: Content, rhs: Content) -> Bool { + switch (lhs, rhs) { + case let (.text(lt, lb), .text(rt, rb)): + return lt == rt && lb == rb + case (.more, .more): + return true + case let (.icon(l), .icon(r)): + return l == r + case let (.proxy(l), .proxy(r)): + return l == r + case let (.avatar(lId, _), .avatar(rId, _)): + // Re-render when peerId changes; image updates are handled by the view itself + return lId == rId + default: + return false + } + } } public let content: Content @@ -62,6 +83,12 @@ public final class NavigationButtonComponent: Component { private var moreButton: MoreHeaderButton? + // MARK: - Liquid Glass Avatar + private var avatarContainerView: UIView? + private var avatarBlurView: UIVisualEffectView? + private var avatarImageView: UIImageView? + private var avatarBorderLayer: CAShapeLayer? + private var component: NavigationButtonComponent? private var theme: PresentationTheme? @@ -74,19 +101,23 @@ public final class NavigationButtonComponent: Component { guard let self else { return } - if highlighted { - self.textView?.alpha = 0.6 - self.proxyNode?.alpha = 0.6 - self.iconView?.alpha = 0.6 - } else { - self.textView?.alpha = 1.0 - self.textView?.layer.animateAlpha(from: 0.6, to: 1.0, duration: 0.2) - - self.proxyNode?.alpha = 1.0 - self.proxyNode?.layer.animateAlpha(from: 0.6, to: 1.0, duration: 0.2) - - self.iconView?.alpha = 1.0 - self.iconView?.layer.animateAlpha(from: 0.6, to: 1.0, duration: 0.2) + let alpha: CGFloat = highlighted ? 0.55 : 1.0 + self.textView?.alpha = alpha + self.proxyNode?.alpha = alpha + self.iconView?.alpha = alpha + self.avatarContainerView?.alpha = alpha + if !highlighted { + let animateAlpha = { (layer: CALayer?) in + let anim = CABasicAnimation(keyPath: "opacity") + anim.fromValue = 0.55 + anim.toValue = 1.0 + anim.duration = 0.2 + layer?.add(anim, forKey: "opacity") + } + animateAlpha(self.textView?.layer) + animateAlpha(self.proxyNode?.layer) + animateAlpha(self.iconView?.layer) + animateAlpha(self.avatarContainerView?.layer) } } } @@ -99,6 +130,51 @@ public final class NavigationButtonComponent: Component { self.component?.pressed(self) } + // MARK: - Liquid glass avatar setup + + private func setupAvatarViewsIfNeeded() { + guard avatarContainerView == nil else { return } + + // Container holds blur + image + let container = UIView() + container.isUserInteractionEnabled = false + container.clipsToBounds = true + + // Blur background — liquid glass effect + let blurEffect = UIBlurEffect(style: .systemUltraThinMaterial) + let blurView = UIVisualEffectView(effect: blurEffect) + blurView.isUserInteractionEnabled = false + container.addSubview(blurView) + + // Avatar image on top of blur + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.isUserInteractionEnabled = false + imageView.clipsToBounds = true + container.addSubview(imageView) + + self.addSubview(container) + self.avatarContainerView = container + self.avatarBlurView = blurView + self.avatarImageView = imageView + + // Subtle glass ring border + let borderLayer = CAShapeLayer() + borderLayer.fillColor = UIColor.clear.cgColor + borderLayer.strokeColor = UIColor.white.withAlphaComponent(0.22).cgColor + borderLayer.lineWidth = 1.5 + container.layer.addSublayer(borderLayer) + self.avatarBorderLayer = borderLayer + } + + private func removeAvatarViews() { + avatarContainerView?.removeFromSuperview() + avatarContainerView = nil + avatarBlurView = nil + avatarImageView = nil + avatarBorderLayer = nil + } + func update(component: NavigationButtonComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: ComponentTransition) -> CGSize { self.component = component @@ -113,6 +189,7 @@ public final class NavigationButtonComponent: Component { var imageName: String? var proxyStatus: ChatTitleProxyStatus? var isMore: Bool = false + var avatarContent: (peerId: String, image: UIImage?)? = nil switch component.content { case let .text(title, isBold): @@ -123,10 +200,13 @@ public final class NavigationButtonComponent: Component { imageName = imageNameValue case let .proxy(status): proxyStatus = status + case let .avatar(peerId, image): + avatarContent = (peerId, image) } var size = CGSize(width: 0.0, height: availableSize.height) + // MARK: Text if let textString = textString { let textView: ImmediateTextView if let current = self.textView { @@ -144,11 +224,13 @@ public final class NavigationButtonComponent: Component { size.width = max(44.0, textSize.width + textInset * 2.0) textView.frame = CGRect(origin: CGPoint(x: floor((size.width - textSize.width) / 2.0), y: floor((availableSize.height - textSize.height) / 2.0)), size: textSize) + removeAvatarViews() } else if let textView = self.textView { self.textView = nil textView.removeFromSuperview() } + // MARK: Icon if let imageName = imageName { let iconView: UIImageView if let current = self.iconView { @@ -166,15 +248,16 @@ public final class NavigationButtonComponent: Component { if let iconSize = iconView.image?.size { size.width = 44.0 - iconView.frame = CGRect(origin: CGPoint(x: floor((size.width - iconSize.width) / 2.0), y: floor((availableSize.height - iconSize.height) / 2.0)), size: iconSize) } + removeAvatarViews() } else if let iconView = self.iconView { self.iconView = nil iconView.removeFromSuperview() self.iconImageName = nil } + // MARK: Proxy if let proxyStatus = proxyStatus { let proxyNode: ChatTitleProxyNode if let current = self.proxyNode { @@ -191,13 +274,14 @@ public final class NavigationButtonComponent: Component { proxyNode.theme = theme proxyNode.status = proxyStatus - proxyNode.frame = CGRect(origin: CGPoint(x: floor((size.width - proxySize.width) / 2.0), y: floor((availableSize.height - proxySize.height) / 2.0)), size: proxySize) + removeAvatarViews() } else if let proxyNode = self.proxyNode { self.proxyNode = nil proxyNode.removeFromSupernode() } + // MARK: More if isMore { let moreButton: MoreHeaderButton if let current = self.moreButton, !themeUpdated { @@ -233,13 +317,52 @@ public final class NavigationButtonComponent: Component { size.width = 44.0 moreButton.setContent(.more(MoreHeaderButton.optionsCircleImage(color: theme.rootController.navigationBar.buttonColor))) - moreButton.frame = CGRect(origin: CGPoint(x: floor((size.width - buttonSize.width) / 2.0), y: floor((size.height - buttonSize.height) / 2.0)), size: buttonSize) + removeAvatarViews() } else if let moreButton = self.moreButton { self.moreButton = nil moreButton.removeFromSupernode() } + // MARK: Liquid Glass Avatar + if let (_, image) = avatarContent { + setupAvatarViewsIfNeeded() + + let avatarDiameter: CGFloat = 28.0 + size.width = 44.0 + + let containerRect = CGRect( + x: floor((size.width - avatarDiameter) / 2.0), + y: floor((availableSize.height - avatarDiameter) / 2.0), + width: avatarDiameter, + height: avatarDiameter + ) + + avatarContainerView?.frame = containerRect + avatarContainerView?.layer.cornerRadius = avatarDiameter / 2.0 + + avatarBlurView?.frame = CGRect(origin: .zero, size: containerRect.size) + + if let image = image { + avatarImageView?.image = image + avatarImageView?.frame = CGRect(origin: .zero, size: containerRect.size) + avatarImageView?.backgroundColor = nil + } else { + avatarImageView?.image = nil + // Fallback: solid tinted background when no photo + avatarImageView?.frame = CGRect(origin: .zero, size: containerRect.size) + avatarImageView?.backgroundColor = theme.list.itemAccentColor.withAlphaComponent(0.35) + } + + // Update border ring path + let borderPath = UIBezierPath(roundedRect: CGRect(origin: .zero, size: containerRect.size).insetBy(dx: 0.75, dy: 0.75), cornerRadius: avatarDiameter / 2.0) + avatarBorderLayer?.path = borderPath.cgPath + avatarBorderLayer?.frame = CGRect(origin: .zero, size: containerRect.size) + + } else if avatarContent == nil && avatarContainerView != nil { + removeAvatarViews() + } + return size } } diff --git a/submodules/TelegramUI/Components/Gifts/GiftViewScreen/BUILD b/submodules/TelegramUI/Components/Gifts/GiftViewScreen/BUILD index 5d86b40c..bebd8c96 100644 --- a/submodules/TelegramUI/Components/Gifts/GiftViewScreen/BUILD +++ b/submodules/TelegramUI/Components/Gifts/GiftViewScreen/BUILD @@ -5,6 +5,8 @@ swift_library( module_name = "GiftViewScreen", srcs = glob([ "Sources/**/*.swift", + ], exclude = [ + "Sources/TableComponent.swift", ]), copts = [ "-warnings-as-errors", diff --git a/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftOfferAlertController.swift b/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftOfferAlertController.swift index 7b7409f4..ee3580ce 100644 --- a/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftOfferAlertController.swift +++ b/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftOfferAlertController.swift @@ -133,7 +133,7 @@ public func giftOfferAlertController( HStack(items, spacing: 4.0) ) - tableItems.append(.init( + tableItems.append(TableComponent.Item( id: id, title: title, hasBackground: false, @@ -180,12 +180,12 @@ public func giftOfferAlertController( AlertTextComponent(content: .plain(text)) ) )) - content.append(AnyComponentWithIdentity( + let tableComponent = AnyComponent(AlertTableComponent(items: tableItems)) + let tableEntry = AnyComponentWithIdentity( id: "table", - component: AnyComponent( - AlertTableComponent(items: tableItems) - ) - )) + component: tableComponent + ) + content.append(tableEntry) if let valueAmount = gift.valueUsdAmount { let resaleConfiguration = StarsSubscriptionConfiguration.with(appConfiguration: context.currentAppConfiguration.with { $0 }) diff --git a/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftTransferAlertController.swift b/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftTransferAlertController.swift index f625cc31..511e008a 100644 --- a/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftTransferAlertController.swift +++ b/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftTransferAlertController.swift @@ -118,7 +118,7 @@ public func giftTransferAlertController( HStack(items, spacing: 4.0) ) - tableItems.append(.init( + tableItems.append(TableComponent.Item( id: id, title: title, hasBackground: false, @@ -165,12 +165,12 @@ public func giftTransferAlertController( AlertTextComponent(content: .plain(text)) ) )) - content.append(AnyComponentWithIdentity( + let tableComponent = AnyComponent(AlertTableComponent(items: tableItems)) + let tableEntry = AnyComponentWithIdentity( id: "table", - component: AnyComponent( - AlertTableComponent(items: tableItems) - ) - )) + component: tableComponent + ) + content.append(tableEntry) let alertController = ChatMessagePaymentAlertController( context: context, diff --git a/submodules/TelegramUI/Components/LegacyChatHeaderPanelComponent/Sources/LegacyChatHeaderPanelComponent.swift b/submodules/TelegramUI/Components/LegacyChatHeaderPanelComponent/Sources/LegacyChatHeaderPanelComponent.swift index 941ae252..31a4ee6b 100644 --- a/submodules/TelegramUI/Components/LegacyChatHeaderPanelComponent/Sources/LegacyChatHeaderPanelComponent.swift +++ b/submodules/TelegramUI/Components/LegacyChatHeaderPanelComponent/Sources/LegacyChatHeaderPanelComponent.swift @@ -8,7 +8,7 @@ import ChatPresentationInterfaceState import AsyncDisplayKit import AccountContext -open class ChatTitleAccessoryPanelNode: ASDisplayNode { +open class LegacyChatTitleAccessoryPanelNode: ASDisplayNode { public typealias LayoutResult = ChatControllerCustomNavigationPanelNodeLayoutResult open var interfaceInteraction: ChatPanelInterfaceInteraction? @@ -19,11 +19,11 @@ open class ChatTitleAccessoryPanelNode: ASDisplayNode { } public final class LegacyChatHeaderPanelComponent: Component { - public let panelNode: ChatTitleAccessoryPanelNode + public let panelNode: LegacyChatTitleAccessoryPanelNode public let interfaceState: ChatPresentationInterfaceState public init( - panelNode: ChatTitleAccessoryPanelNode, + panelNode: LegacyChatTitleAccessoryPanelNode, interfaceState: ChatPresentationInterfaceState ) { self.panelNode = panelNode diff --git a/submodules/TelegramUI/Components/PeerInfo/AffiliateProgramSetupScreen/Sources/AffiliateProgramSetupScreen.swift b/submodules/TelegramUI/Components/PeerInfo/AffiliateProgramSetupScreen/Sources/AffiliateProgramSetupScreen.swift index 73d83595..fa88325a 100644 --- a/submodules/TelegramUI/Components/PeerInfo/AffiliateProgramSetupScreen/Sources/AffiliateProgramSetupScreen.swift +++ b/submodules/TelegramUI/Components/PeerInfo/AffiliateProgramSetupScreen/Sources/AffiliateProgramSetupScreen.swift @@ -232,20 +232,34 @@ final class AffiliateProgramSetupScreenComponent: Component { ) )) - let tableItems: [TableComponent.Item] = [ - TableComponent.Item(id: 0, title: environment.strings.AffiliateSetup_AlertApply_SectionCommission, component: AnyComponent(MultilineTextComponent( - text: .plain(NSAttributedString(string: commissionTitle, font: Font.regular(15.0), textColor: environment.theme.actionSheet.primaryTextColor)) - ))), - TableComponent.Item(id: 1, title: environment.strings.AffiliateSetup_AlertApply_SectionDuration, component: AnyComponent(MultilineTextComponent( - text: .plain(NSAttributedString(string: durationTitle, font: Font.regular(15.0), textColor: environment.theme.actionSheet.primaryTextColor)) - ))) - ] - content.append(AnyComponentWithIdentity( + let textColor = environment.theme.actionSheet.primaryTextColor + let commissionItemText = NSAttributedString( + string: commissionTitle, + font: Font.regular(15.0), + textColor: textColor + ) + let durationItemText = NSAttributedString( + string: durationTitle, + font: Font.regular(15.0), + textColor: textColor + ) + let commissionItem = TableComponent.Item( + id: 0, + title: environment.strings.AffiliateSetup_AlertApply_SectionCommission, + component: AnyComponent(MultilineTextComponent(text: .plain(commissionItemText))) + ) + let durationItem = TableComponent.Item( + id: 1, + title: environment.strings.AffiliateSetup_AlertApply_SectionDuration, + component: AnyComponent(MultilineTextComponent(text: .plain(durationItemText))) + ) + let tableItems: [TableComponent.Item] = [commissionItem, durationItem] + let tableComponent = AnyComponent(AlertTableComponent(items: tableItems)) + let tableEntry = AnyComponentWithIdentity( id: "table", - component: AnyComponent( - AlertTableComponent(items: tableItems) - ) - )) + component: tableComponent + ) + content.append(tableEntry) let alertController = AlertScreen( context: component.context, diff --git a/submodules/TelegramUI/Components/PeerInfo/AffiliateProgramSetupScreen/Sources/TableComponent.swift b/submodules/TelegramUI/Components/PeerInfo/AffiliateProgramSetupScreen/Sources/TableComponent.swift index 762cf5c9..162ab621 100644 --- a/submodules/TelegramUI/Components/PeerInfo/AffiliateProgramSetupScreen/Sources/TableComponent.swift +++ b/submodules/TelegramUI/Components/PeerInfo/AffiliateProgramSetupScreen/Sources/TableComponent.swift @@ -6,7 +6,7 @@ import TelegramPresentationData import MultilineTextComponent import AlertComponent -final class TableComponent: CombinedComponent { +final class AffiliateTableComponent: CombinedComponent { class Item: Equatable { public let id: AnyHashable public let title: String @@ -45,7 +45,7 @@ final class TableComponent: CombinedComponent { self.items = items } - public static func ==(lhs: TableComponent, rhs: TableComponent) -> Bool { + public static func ==(lhs: AffiliateTableComponent, rhs: AffiliateTableComponent) -> Bool { if lhs.theme !== rhs.theme { return false } @@ -228,9 +228,9 @@ private final class TableAlertContentComponent: CombinedComponent { let theme: PresentationTheme let title: String let text: String - let table: TableComponent + let table: AffiliateTableComponent - init(theme: PresentationTheme, title: String, text: String, table: TableComponent) { + init(theme: PresentationTheme, title: String, text: String, table: AffiliateTableComponent) { self.theme = theme self.title = title self.text = text @@ -256,7 +256,7 @@ private final class TableAlertContentComponent: CombinedComponent { public static var body: Body { let title = Child(MultilineTextComponent.self) let text = Child(MultilineTextComponent.self) - let table = Child(TableComponent.self) + let table = Child(AffiliateTableComponent.self) return { context in let title = title.update( @@ -318,17 +318,3 @@ private final class TableAlertContentComponent: CombinedComponent { } } } - -func tableAlert(theme: PresentationTheme, title: String, text: String, table: TableComponent, actions: [ComponentAlertAction]) -> ViewController { - return componentAlertController( - theme: AlertControllerTheme(presentationTheme: theme, fontSize: .regular), - content: AnyComponent(TableAlertContentComponent( - theme: theme, - title: title, - text: text, - table: table - )), - actions: actions, - actionLayout: .horizontal - ) -} diff --git a/submodules/TelegramUI/Components/PeerSelectionController/Sources/PeerSelectionController.swift b/submodules/TelegramUI/Components/PeerSelectionController/Sources/PeerSelectionController.swift index d5361bc5..689ea8ca 100644 --- a/submodules/TelegramUI/Components/PeerSelectionController/Sources/PeerSelectionController.swift +++ b/submodules/TelegramUI/Components/PeerSelectionController/Sources/PeerSelectionController.swift @@ -8,7 +8,8 @@ import TelegramPresentationData import ProgressNavigationButtonNode import AccountContext import SearchUI -import ChatListUI +import func ChatListUI.chatListFilterItems +import enum ChatListUI.ChatListContainerNodeFilter import CounterControllerTitleView import ChatListFilterTabContainerNode diff --git a/submodules/TelegramUI/Components/Settings/BirthdayPickerScreen/Sources/BirthdayPickerComponent.swift b/submodules/TelegramUI/Components/Settings/BirthdayPickerScreen/Sources/BirthdayPickerComponent.swift index b6d17cf8..fe7c818a 100644 --- a/submodules/TelegramUI/Components/Settings/BirthdayPickerScreen/Sources/BirthdayPickerComponent.swift +++ b/submodules/TelegramUI/Components/Settings/BirthdayPickerScreen/Sources/BirthdayPickerComponent.swift @@ -69,7 +69,7 @@ public final class BirthdayPickerComponent: Component { private let calendar = Calendar(identifier: .gregorian) private var value = TelegramBirthday(day: 1, month: 1, year: nil) - private var minYear: Int32 = 1900 + private var minYear: Int32 = 1 private let maxYear: Int32 override init(frame: CGRect) { diff --git a/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputClearIcon.imageset/backspace_24.svg b/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputClearIcon.imageset/backspace_24.svg deleted file mode 100644 index 3907ddf6..00000000 --- a/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputClearIcon.imageset/backspace_24.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputGlobeIcon.imageset/keyboard_24.svg b/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputGlobeIcon.imageset/keyboard_24.svg deleted file mode 100644 index 6134e3e7..00000000 --- a/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputGlobeIcon.imageset/keyboard_24.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputSettingsIcon.imageset/keyboard_2444.svg b/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputSettingsIcon.imageset/keyboard_2444.svg deleted file mode 100644 index 74f7d2fe..00000000 --- a/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/EntityInputSettingsIcon.imageset/keyboard_2444.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/PanelFeaturedIcon.imageset/Group 1.svg b/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/PanelFeaturedIcon.imageset/Group 1.svg deleted file mode 100644 index d93a88b5..00000000 --- a/submodules/TelegramUI/Images.xcassets/Chat/Input/Media/PanelFeaturedIcon.imageset/Group 1.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/submodules/TelegramUI/Images.xcassets/Instant View/Back.imageset/ic_left.pdf b/submodules/TelegramUI/Images.xcassets/Instant View/Back.imageset/ic_left.pdf deleted file mode 100644 index e77136afef578ff7cb34fa8b636b8b65330e7c12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3911 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

L zniHuz(P}q#w5j>hm#VS>7UtG*ifC^CzG+~RyiL>SSLv%8V) zbWFNk_UapKddHBGS0o0hj>+?3}F_9*R(aS#oRn3!Rx=EvNizm~_@ zJF2VC5L$I7w^gd1>BZJYfH9$)l=Z0f#pQj^#l>{^UhwV5{@oDxzx=P}fG{>T+7bu7 zEzA=NZ8VWcqEY}apKrS05qTO1Xk)N}-~GV}7l6lFlFk5LfDT;eOZ>gi-9mq_zMtfV zqmaVL{x}N2R~Wu~@O8wBM5N+~yc_xc@*QHZWF7X&wqdV2a`2;{Jf F&0n1gYytoP diff --git a/submodules/TelegramUI/Images.xcassets/Instant View/Browser.imageset/Browser.pdf b/submodules/TelegramUI/Images.xcassets/Instant View/Browser.imageset/Browser.pdf deleted file mode 100644 index 81f7ac317102df77bcaf0b495208ee9ccf7db77b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2160 zcmZXVdpMNo8^@8unEaLua>~A}^P!nx4C6PLF^tnxV+c8A@RHNanwd0{a%gCsjo7Ib z5!oc=5Zkhably%vE4EaFkknu)Np^;4+r9sIujlz*&wW4l_kOSI`52I$i5AGMHc%)M zKmhcx7$^W>v4DdE6r@Fnw@}M}>TqIo91COsaAF*l1v-P_^axOtAqqGNq(!mz09K;o z6pj}tv*jJjGwhkKX$XaAgjMvaO(BAXR+2dLk zqaWGrPmNMg?e-ly{QE=4KmCs1Gd!Kxe4%=$?yq<*EN6JC6w~r(2#-J1U$lr;*9PM^ zG`)|Q94+XTNkFh~Ucv{C^>nmifZtATQ$9Mhr@^?b;d#$ZE=CsfmI+QMWnz!CtPWS*V%lqCO~D z2cr=}R4XfCHWy`Be3U&BaM|$4xY2iL<0}=upnnR>wr6}}_#eJ}9?CN<_vNDjkA(BZ zktJQ(=X#8Y9xaBgFyFTuxE}MqNJa^Bz`-wIYkpzKoVqbvchhfE27c-+{#5rHkSTZQ#ueGh zCUCUMsYlmP|CJ}!YbH#(agq1`iU6*p^F_PteA(?VXFoZae4^qbRq|6;&s4G!gokn( z2uAw^^O}9Ecq18gOEsvQwucok66uzU9yn#Q!)EG^9QVHBf~xa#D&^J7JBx`V8H3I+ z3S{2eUZe54vnpd2<4p^_t0OIli-^19)?9X*a+H_RV))`}QPbcdmo$hoAJo?^3+0;H znco2m^)@B+I?Xz#gD~Aobz9_iPpI(k119Fv-&ZlS%VopT)TCdQW}o`NsU(0+Dhbz4 zneT}mnNO&HeULl<*s=WyNsxQcs>c!~Klm`Bj`8O7mM-GfZM!+jaU^^B(m#|FR4Yib z0jg7(r~C!Yfshb2yI$q49*v)qW`P5a7Kwbt8d~XynwK#5^)18JgcA17)>~=pkE~s- zfD(D4CLF2iCVSca+Y%i?{8(jto0j{-5Y*KP+)qE`Q3&j7@x9@{ld`wsxnT@vao|l_2t#A^=>c!vK*Vz5E z;C7_F)I*nEwp!L6(iA>XCpN%U)y(cyYEa=Zp9%-pT3Dvy3Hzcv-^Y_&bIm&z`OrE6 zEVJ#FUQs};u}s5}dNqFK*z)s>c#WLRrU>aQV2c7=6cb0|dT=qh+ifAF!)d@`AnYUB;SVHYJ{q%qSR`FI&^*wQ!)ko%m=k$E?eI5kR?bC_6bgtn3$iuA)07X zfwLy_Zu0?`@-GmD1QhuP)N1dL@_JlEX0%M zlv?#VIw6v+l6c*AEoJ$Tw)aw8uEf<;bB7nBpOPnJ&OlO@SqJPt*|u*W$dp3FaQOVX zuVF&`?yuqliNYY)>4938MO1;~X*4>E2?PdzW`+;vdk}z=sZnbX*#<^LQ=RB+AP_)o zMXbb^h1I(BWwlm`0y61)8Q~xk5OYinATg5&bQ%k!iEb1_Y)vFn86pj^{w)0ibz*59 zfpE|02vMtm*Z~DtyN5vEE6PRwr+?-u^46w-{;HDLAangfabv5-2~-v}jvn=ODw_dD zLJ@!sbk)B23!ts7t*il&{5g;aU}Xi+)+H-ZpW;}TkZ1(vKa!Pb5MQ6NMTlJgOS1Wr z$YM~V<3I*f{P*0QMdL7L(&IrBz&JX>WOXQT3Z2dZ#D-S}4EK)S4~n{9;XjqZTCsz~ NSlL1i3|w{){|5EXWUT-I diff --git a/submodules/TelegramUI/Images.xcassets/Instant View/Forward.imageset/ic_right.pdf b/submodules/TelegramUI/Images.xcassets/Instant View/Forward.imageset/ic_right.pdf deleted file mode 100644 index c0246a0829413f091daeb41081506023cc17c250..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3914 zcmai%c{tSF`^PO)7_yWlOZ7=+q-0jxBl{pxV=ZHwW*CfZYOE=1mdBPoOG%bUvJ^!$ zWG6i)*-{}fBzwu4{AQ}>SI_VH{;u!mI@jl%>pt&uU+3KKe_l7l1fzcpp@0HIS{R=g zGew_oy=Z9zqX9TTA-aN(9|vH@Bu{5=7eJ92G6P`xWOr{8l{vc;yh#|61I3X9XlQ`F zys0FD2iTw8F45>J=RrQq>W#e9PhVZ;yEg^GG1!vy#iKDX8{b~;HTJ_k;MlK_-UYK= zIr7tw{;w}(1d@geKF<^nu_tY%7@Vca2EFsL( zXC|m!Kp{A_4YvR$c{=`l9&^R23ab>X8Hqr$Hoq@_E11Q_^CSRfLU8{6r;qAOS3gbiELO^3MdnMMxEe$}HB?5SWmue?OK&H`#AtoG=;ZR@94t-%ExigLyPuUHkq#g8x zd9Q>K2YEgTnzS{VV)Pipac(>drHY?NvbNfBqeD~GgG0^>frGVdCSSuqP2N`QA?REy z;rW?H+ueJ*T2?vs3bONCu|FMiasnBwVL1A}($q6E@0@6>T$xu0ajbhI-(Uju8rTj_ zl2+E0*~tdh>sLA+1Qla&q?%W@iX*o{&z95VkdX+aXf99QJ?Zh5a`%;@$)k0h8R^i8 zTnSva_!IQaxH^-OEXY`X94OZ|1MIsX_M}OjA<4$c+eM04rT~~Fv$>v|^JP`wmHY64b4Q7xTA3B^imMYEHiHM`A&8Nox z^f#t2SMgnii-nX^uIaHua2}a1Npq!Ab91zdP8j7`L!|0zX4m}Y8MQ(&&Co-JA}Ep`qp+yZ2=n|oAAdUCacfm@d;F;? z`LE7q`5QS;#g-yISekxFG?DwTb|-Rq-vXmU72q85=XObjpw4rS0BqqQCj>dKaVnhPAZvjhXluM;18XB* zvHMA@;OrxzWbUv`ey88ji?5Hb(7ebNxFceST8G)zd-VF{E4Is6P!DvatRrGMcc&3qi}I!#505e;z@Xa zhC{{~W3fpkCqY!`df07Z|NTNM*?XG4JW4{>2sGtIlkpiBNwj*JK|gb6fyEfOyutOo~61@9kCIMCK0o5*7g zatjkUcny$om$49(;GW{%3KwcZn}*)OdP_$NUTm=?%H6;EO8beS6!dh8uwkT(n3;@R zW>u(#p{ukVR2@n?n9})&qXBgI&&4}734^N=7U8^&RV6hneh`OIu*6a3s7 z%1r!rTuNMBT*7Dc5?K=U65ngW=Uh*23irFZJ2Br-+9XXRo{rkxmtP^ozHF3 z1&S_FtZUD!c#Ff`(;v8{+I+m@a{k5Z>qmLjW36JdMTbT4@^kX$$7bXY;N);StURhd zR%|rCZpm`9a|mpYbRBo7>@FOhd{|n1Y}B`5E>JDYu3}iU?sOe}g?~kQ6S|4uQjhYF zqVcc3^7cJk7arIzH1lDsrh6%FoJ;nS?EPNDqS0(zw_NwG?tET8u|=`IV|%GR7shI& zs7VTr3UPS<^SOPNZ_>uCXEvUn8jPRvZSiOsex*LNRkL|iz(^p;AhtcVC}m25&TIc? zdimL;v*p#vtHcG@g(8hVG@>=)HTKl|)|Ujr)(Bf1TfQ5^p9dGGHU>AbAQjL(o)6#x zkUr=Pmj*AAXZH>tP;(=DV_nz**h{>OZJ#KI&R1REh~qqpe0CxmUV9bf(f6RU7i%p2 zgZ%wK$B23u-Ilr&2^}vx3}WL&jYR$QI}KX(`VCI$UD8X}GfKCT$5l?~$63b#h3cXQ zBtfd3Ra zQJk8XnlFbc?kWC@9A33n)vE&`#8e!$L#fNsV9n@!xNhw;a{s*Lo;joQRXT4!MHkt#o}b;%q?5d1m@tXmWWXYr?Z@U+3q}%^*c5ML!?sdf#u6UmF$Y z-S|r*2Fh&TJU;Db*H}CDrG6&C1MoO8wAiKJ6;F~J^^6(mGreV6QGd>*a$&Mf=dq6I z80}cM4ZnMzj0G`<^evuJdPGo!e`v+KjpSHkCLw^wd&`n~hz z_Io=#UHjQ8lZdk)dQtYyu9WfoQ{JcQy0f$OX9zYI&Iync922ULcOKAAmb)7C7kw=F z7%GvFHA(w;sd_H^b^DvahEb2;UiNs-RxXYG!ctFyJ628HO0_*&32(>lHPdJEKGrrk z2jhb=b0?OP=mrr6x7(W%eEQY;29@t9rz$nYC%4@nztB$EdiO>5(w>rO6IA}=HIT|d z)us3CYX=r?@*N+#7!!DRT6QaE<)v-v^ZNGX z<+zp1tjcH3M)ag^ksH@lbNqrn>9j>G#YT%o{c+Y?qqb_|Wp-Ib*+^Gtdb$15V`}jm z+U8fw^b+SXRXer7>_FOF4ys*wCVGeTi3=*uh#DfoZ7J4gpI7! z1~RU0XG?O%?%bGHsK2yr|5klEaAd28t60EZ^Lc>EmdlpI?0B9m7<=UAUCq+1{BQF#d#f+5HYp#TD!_Ckj}2o6|t;0%fCMW%QH2)F`5 z5wJb1<3o0L1Q4p)N^qpD9AN50pn3-YOoIOo{r=u^OmJs5P2S8i7$${-4`cp7!V#(n zI1-6aMkpfC)^NBib1-$MD2^-%@c&DGUD2OPastBv1Og2I-w#kyR75EPPQcF?3Z=|! zI9MOx`F9MCLNY!0XAFfzGmHMu7@T>(f5lL6rdR(*hlc-$eE&(O%kUfL(b|bn23VYWr_oTfF1R@@T z@&fzOr=%IjZ6LTJzxdv2p)-Ef&L3~fXb26}UJwRBd~UQHeuaGMwJ7Y-Uv@q%LH51T zmoKNkew(=TdLsDic2u2k@b$oF!Pmd-Y|U}suX~*ltQA=IU( z^2q-@tdG`s){)EpaQ)e!;N5NQUOQ7~LTSpp2KybSO|Lwe@VpUcA#I3XseQW4>`kq* z;#WDG9h$4#QxwoGN5YMWzDdo|Xe0J=J#)cR)Vg`cPg;Ihe3d0b5e)J!y;}L)r6Q(t zuNF917_LshRW9RfklG#Iv!n81KBmVi+)hMHzhHfwJ{Rzs*|2G%EK@%4wscfo{QWz} zBt+L845a9f^rrL$7?-rzYhcLtmhCbF+Zhrq96aT6=%6~oCg{&&BNDl8B^u+Z<#7TT z2=rkqq^Z-L$B~`WO?^x!-gvaOQ_Mfr6jXv%Q1j@LVP~1j_uWXIkh>zq-6px8les1x zkDg*87`9eq2$jLa$WH}E=A(sVC<8$Vy4EB+83dDi93u4W(+iTId!7b%;&-K<^q@lN zmAT9;1-e~p$8rPU^dTl>`q}c2SxO#vRo3S_VF8UXTGKGO%MB{3k|9=c$CdO>LVM3w zw3qD&G#CwHnJ~x26pvJjib~RwVtT@8oGr@$J91S>O<=0*mBgE;l^tX!eiFhzUQfBE!0_S{FZ%(S{Co2LGF1=$p`3wmuh52|C_qrEk$Kk z2BPnUkGXx$ZS0MPRT;Y1=+6CR{95BiPO}t?X7}U1nWNliugaD;b~KEI)u9vX>9bi1 zbs!v-hSj)Y8{NZ-T(p>i0RofTEGX?ce~M7R_$trR(WK51ipd8@Cn}T0^VpAQqgq=9KS8WcBwOAl1!q^+a?|+6 zjQkQD2X-t81*785S}K*SA1yKQ{_Xu+6SiF6vbdQ)mXJZWcBk?4=?}^H!YylBq=eg; zJ9BVTm>C*%Htg$PN|n-1*6On1EMxYx;p-g{y=eujm&W_T`L4__4wEB-3?w=ZB||t6 z!LSWeoow#6+7)-h;_fpV9p?;vP{lIE07(=Uq-jwSycQd_EBP1)jf&{RdAlp&PT1Ka zYOxGk40T*c-cv6)GK?$OHGs8SG|KH=l&kB0((Y5IJHOj9Y0R@(pQ>m zahP@&2pQC6%Ttm_heRUyd8;p9G#yYI^1UnYR^q$(I`wJprAN1hUpQ*9o3RFy^M&%d zm`6RY`qX&xUw^|(XVi+yN$4T_wK5-G*zg*OE{{o6pLafZJAG8GbeFSHj381ZpBHlkcnt-e4%Ym3V|T3v$I(%SSnc6a>6(J&wM;kD54L)rE{x!rM~%o2JLT#? zlI))>BDe(mr?-5s@C-n!!v~Js2SH~757=i&2bN7{8wmJkH;zVhAelEQTEG1bl$=6iJkaPdVTZFi9SI)r)v-rHV0lIUGw z!MBBVWgn}MA1Xgc#px3H{rglGx=G5OnRK%2In+aVW%hVgRn`l(ghiNB;5^B_N=aBR zue;A55(VaHHFdkdlAGC#l~aVV>4$yrG1@3O&BVlw7_MJ9v2)*7Ma#{im6`^ANjm>- zN_jvuiJ}zPmFeaxvTLeO5|^t#$)2zHN#VFla07))Q*({^YAk$oX`{@^nJZFU#lku1 z%v6rD*&h-)UPL9y%aof7Dr1HoT(HicM*P1s$!S-=bakAH-x(@_=P&$g% z#=pIE@`Uv4m2nljRC+0K8GosqMXb$kCB_FjPCeRW1!#dlULS}GBwOzmZJWa7iuH@k zj0AugVm`y)#oC!?$2OyxwN&S+5q>D3DhP@B#1?TnNu;4O!ywPO`YdBC<&Yj}4(ZC^ z-MW6&Sj<%5#G2jIi49!G?r6id>ZLD-TvPHSRh0S=JJ2sV3BIm@;=a()>Jt+Mg~^z;J`u6dh(tc> z+Oj@g|5xF&mHygo$xl}(>NdH&*yLUm3Zd#1i$Y6gfyY36$rBs1&yS0|r2#*z2cA!%kaL)e$%vd9q+ovcbEu|F!|^+ajpeXDD^fz#qI z>@&X$hr{qo`^5PR8Gp0qK1}{(Qh8-K{11{U{*m`kRaVE_8%HDn_Kv?m^ql_{3?OTc za{EoDrWiC9rHk_e>;bq8{73wKQ1~PLefnL=5<|fG;$1KVU>}b6sdgW9^>E%qjQ3v0 zeKP(nnxpW08ldz``UgMnOMkdp)&z^*8x`1hU!FA!Pn_GoQ~mH5S1=q<0spkW{{)nkloXVJJ^5G2!GRwq!26G+us7#^ z{E_5U ChatTitleContent? in + guard let peer = renderedPeer.peer else { return nil } + let peerData = ChatTitleContent.PeerData( + peerId: renderedPeer.peerId, + peer: peer, + isContact: false, + isSavedMessages: peer.id == self.context.account.peerId, + notificationSettings: nil, + peerPresences: [:], + cachedData: nil + ) + return .peer( + peerView: peerData, + customTitle: nil, + customSubtitle: nil, + onlineMemberCount: (nil, nil), + isScheduledMessages: false, + isMuted: nil, + customMessageCount: nil, + isEnabled: true + ) + } + if let initialTitleContent { + self.chatTitleView?.update( + context: self.context, + theme: self.presentationData.theme, + strings: self.presentationData.strings, + dateTimeFormat: self.presentationData.dateTimeFormat, + nameDisplayOrder: self.presentationData.nameDisplayOrder, + content: initialTitleContent, + transition: .immediate + ) + } + if let currentItem = self.globalControlPanelsContext?.tempVoicePlaylistCurrentItem { self.chatDisplayNode.historyNode.voicePlaylistItemChanged(nil, currentItem) } diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 6ba6d498..02d4268a 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -146,7 +146,6 @@ import ChatTextInputPanelNode import ChatInputAccessoryPanel import GlobalControlPanelsContext import ChatSearchNavigationContentNode -import ChatAgeRestrictionAlertController public final class ChatControllerOverlayPresentationData { public let expandData: (ASDisplayNode?, () -> Void) @@ -830,7 +829,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G return true } - let controllerInteraction = ChatControllerInteraction(openMessage: { [weak self] message, params in + let openMessage: (Message, OpenMessageParams) -> Bool = { [weak self] message, params in guard let self, self.isNodeLoaded, let message = self.chatDisplayNode.historyNode.messageInCurrentHistoryView(message.id) else { return false } @@ -1566,7 +1565,9 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G self.controllerInteraction?.isOpeningMediaSignal = openChatMessageParams.blockInteraction.get() return context.sharedContext.openChatMessage(openChatMessageParams) - }, openPeer: { [weak self] peer, navigation, fromMessage, source in + } + + let openPeer: (EnginePeer, ChatControllerInteractionNavigateToPeer, MessageReference?, ChatControllerInteraction.OpenPeerSource) -> Void = { [weak self] peer, navigation, fromMessage, source in var expandAvatar = false if case let .groupParticipant(storyStats, avatarHeaderNode) = source { if let storyStats, storyStats.totalCount != 0, let avatarHeaderNode = avatarHeaderNode as? ChatMessageAvatarHeaderNodeImpl { @@ -1581,20 +1582,28 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G fromReactionMessageId = fromMessage?.id } self?.openPeer(peer: peer, navigation: navigation, fromMessage: fromMessage, fromReactionMessageId: fromReactionMessageId, expandAvatar: expandAvatar) - }, openPeerMention: { [weak self] name, progress in + } + + let openPeerMention: (String, Promise?) -> Void = { [weak self] name, progress in self?.openPeerMention(name, progress: progress) - }, openMessageContextMenu: { [weak self] message, selectAll, node, frame, anyRecognizer, location in + } + + let openMessageContextMenu: (Message, Bool, ASDisplayNode, CGRect, UIGestureRecognizer?, CGPoint?) -> Void = { [weak self] message, selectAll, node, frame, anyRecognizer, location in guard let self, self.isNodeLoaded else { return } self.openMessageContextMenu(message: message, selectAll: selectAll, node: node, frame: frame, anyRecognizer: anyRecognizer, location: location) - }, openMessageReactionContextMenu: { [weak self] message, sourceView, gesture, value in + } + + let openMessageReactionContextMenu: (Message, ContextExtractedContentContainingView, ContextGesture?, MessageReaction.Reaction) -> Void = { [weak self] message, sourceView, gesture, value in guard let self else { return } self.openMessageReactionContextMenu(message: message, sourceView: sourceView, gesture: gesture, value: value) - }, updateMessageReaction: { [weak self] initialMessage, reaction, force, sourceView in + } + + let updateMessageReaction: (Message, ChatControllerInteractionReaction, Bool, ContextExtractedContentContainingView?) -> Void = { [weak self] initialMessage, reaction, force, sourceView in guard let strongSelf = self else { return } @@ -2062,7 +2071,16 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } } }) - }, activateMessagePinch: { [weak self] sourceNode in + } + + let controllerInteraction = ChatControllerInteraction( + openMessage: openMessage, + openPeer: openPeer, + openPeerMention: openPeerMention, + openMessageContextMenu: openMessageContextMenu, + openMessageReactionContextMenu: openMessageReactionContextMenu, + updateMessageReaction: updateMessageReaction, + activateMessagePinch: { [weak self] sourceNode in guard let strongSelf = self else { return } diff --git a/submodules/TelegramUI/Sources/ChatControllerContentData.swift b/submodules/TelegramUI/Sources/ChatControllerContentData.swift index 3caadb68..9d815c5b 100644 --- a/submodules/TelegramUI/Sources/ChatControllerContentData.swift +++ b/submodules/TelegramUI/Sources/ChatControllerContentData.swift @@ -893,7 +893,8 @@ extension ChatControllerImpl { peerVerification = cachedChannelData.verification } } - copyProtectionEnabled = peer.isCopyProtectionEnabled + // GHOSTGRAM: Bypass copy protection if enabled in Misc settings + copyProtectionEnabled = MiscSettingsManager.shared.shouldBypassCopyProtection ? false : peer.isCopyProtectionEnabled if let cachedGroupData = peerView.cachedData as? CachedGroupData { if !cachedGroupData.botInfos.isEmpty { hasBots = true @@ -1371,7 +1372,8 @@ extension ChatControllerImpl { var alwaysShowGiftButton = false var disallowedGifts: TelegramDisallowedGifts? if let peer = peerView.peers[peerView.peerId] { - copyProtectionEnabled = peer.isCopyProtectionEnabled + // GHOSTGRAM: Bypass copy protection if enabled in Misc settings + copyProtectionEnabled = MiscSettingsManager.shared.shouldBypassCopyProtection ? false : peer.isCopyProtectionEnabled if let cachedData = peerView.cachedData as? CachedUserData { contactStatus = ChatContactStatus(canAddContact: !peerView.peerIsContact, peerStatusSettings: cachedData.peerStatusSettings, invitedBy: nil, managingBot: managingBot) if case let .known(value) = cachedData.businessIntro { diff --git a/submodules/TelegramUI/Sources/ChatControllerNode.swift b/submodules/TelegramUI/Sources/ChatControllerNode.swift index a1e76201..b50efb0b 100644 --- a/submodules/TelegramUI/Sources/ChatControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatControllerNode.swift @@ -1129,7 +1129,9 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate { } } - let isSecret = self.chatPresentationInterfaceState.copyProtectionEnabled || self.chatLocation.peerId?.namespace == Namespaces.Peer.SecretChat || self.chatLocation.peerId?.isVerificationCodes == true + // GHOSTGRAM: Bypass screenshot protection if enabled in Misc settings + let effectiveCopyProtection = MiscSettingsManager.shared.shouldBypassScreenshotProtection ? false : self.chatPresentationInterfaceState.copyProtectionEnabled + let isSecret = effectiveCopyProtection || self.chatLocation.peerId?.namespace == Namespaces.Peer.SecretChat || self.chatLocation.peerId?.isVerificationCodes == true if self.historyNodeContainer.isSecret != isSecret { self.historyNodeContainer.isSecret = isSecret setLayerDisableScreenshots(self.titleAccessoryPanelContainer.layer, isSecret) @@ -4600,12 +4602,10 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate { } } - self.setupSendActionOnViewUpdate({ [weak self] in - guard let self, let textInputPanelNode = self.inputPanelNode as? ChatTextInputPanelNode else { - return - } + // GHOSTGRAM: When send delay is active, scheduled messages + // don't trigger history view update, so clear input immediately. + if SendDelayManager.shared.isEnabled { self.collapseInput() - self.ignoreUpdateHeight = true textInputPanelNode.text = "" self.requestUpdateChatInterfaceState(.immediate, overrideThreadId == nil, { state in @@ -4624,7 +4624,33 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate { return state }) self.ignoreUpdateHeight = false - }, usedCorrelationId) + } else { + self.setupSendActionOnViewUpdate({ [weak self] in + guard let self, let textInputPanelNode = self.inputPanelNode as? ChatTextInputPanelNode else { + return + } + self.collapseInput() + + self.ignoreUpdateHeight = true + textInputPanelNode.text = "" + self.requestUpdateChatInterfaceState(.immediate, overrideThreadId == nil, { state in + var state = state + state = state.withUpdatedReplyMessageSubject(nil) + state = state.withUpdatedSendMessageEffect(nil) + + if state.postSuggestionState != nil { + state = state.withUpdatedPostSuggestionState(nil) + state = state.withUpdatedEditMessage(nil) + } + + state = state.withUpdatedForwardMessageIds(nil) + state = state.withUpdatedForwardOptionsState(nil) + state = state.withUpdatedComposeDisableUrlPreviews([]) + return state + }) + self.ignoreUpdateHeight = false + }, usedCorrelationId) + } completion() self.sendMessages(messages, silentPosting, scheduleTime, repeatPeriod, messages.count > 1, postpone) diff --git a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift index eec79b5e..95b575d2 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift @@ -2056,6 +2056,10 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto } } } + // GHOSTGRAM: Bypass copy protection if enabled in Misc settings + if MiscSettingsManager.shared.shouldBypassCopyProtection { + isCopyProtectionEnabled = false + } let alwaysDisplayTranscribeButton = ChatMessageItemAssociatedData.DisplayTranscribeButton( canBeDisplayed: suggestAudioTranscription.0 < 2, displayForNotConsumed: suggestAudioTranscription.1, @@ -2102,7 +2106,8 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto selectedMessages: selectedMessages, presentationData: chatPresentationData, historyAppearsCleared: historyAppearsCleared, - skipViewOnceMedia: mode != .bubbles, + // GHOSTGRAM: Keep view-once media visible if bypass is enabled + skipViewOnceMedia: MiscSettingsManager.shared.shouldDisableViewOnceAutoDelete ? false : (mode != .bubbles), pendingUnpinnedAllMessages: pendingUnpinnedAllMessages, pendingRemovedMessages: pendingRemovedMessages, associatedData: associatedData, @@ -2110,8 +2115,9 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto customChannelDiscussionReadState: customChannelDiscussionReadState, customThreadOutgoingReadState: customThreadOutgoingReadState, cachedData: data.cachedData, - adMessage: allAdMessages.fixed, - dynamicAdMessages: allAdMessages.opportunistic + // GHOSTGRAM: Block ads if enabled in Misc settings + adMessage: MiscSettingsManager.shared.shouldBlockAds ? nil : allAdMessages.fixed, + dynamicAdMessages: MiscSettingsManager.shared.shouldBlockAds ? [] : allAdMessages.opportunistic ) let lastHeaderId = filteredEntries.last.flatMap { listMessageDateHeaderId(timestamp: $0.index.timestamp) } ?? 0 let processedView = ChatHistoryView(originalView: view, filteredEntries: filteredEntries, associatedData: associatedData, lastHeaderId: lastHeaderId, id: id, locationInput: update.2, ignoreMessagesInTimestampRange: update.3, ignoreMessageIds: update.4) diff --git a/submodules/TelegramUI/Sources/ChatSearchNavigationContentNode.swift b/submodules/TelegramUI/Sources/ChatSearchNavigationContentNode.swift index 73423965..632c0072 100644 --- a/submodules/TelegramUI/Sources/ChatSearchNavigationContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatSearchNavigationContentNode.swift @@ -31,7 +31,7 @@ final class ChatSearchNavigationContentNode: NavigationBarContentNode { self.chatLocation = chatLocation self.interaction = interaction - self.searchBar = SearchBarNode(theme: SearchBarNodeTheme(theme: theme, hasBackground: false, hasSeparator: false), strings: strings, fieldStyle: .modern) + self.searchBar = SearchBarNode(theme: SearchBarNodeTheme(theme: theme, hasBackground: false, hasSeparator: false), presentationTheme: theme, strings: strings, fieldStyle: .modern) let placeholderText: String switch chatLocation { case .peer, .replyThread, .customChatContents: @@ -90,10 +90,11 @@ final class ChatSearchNavigationContentNode: NavigationBarContentNode { return 54.0 } - override func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) { + override func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGSize { let searchBarFrame = CGRect(origin: CGPoint(x: 0.0, y: size.height - self.nominalHeight), size: CGSize(width: size.width, height: 54.0)) self.searchBar.frame = searchBarFrame self.searchBar.updateLayout(boundingSize: searchBarFrame.size, leftInset: leftInset, rightInset: rightInset, transition: transition) + return size } func activate() { @@ -106,7 +107,7 @@ final class ChatSearchNavigationContentNode: NavigationBarContentNode { func update(presentationInterfaceState: ChatPresentationInterfaceState) { if let search = presentationInterfaceState.search { - self.searchBar.updateThemeAndStrings(theme: SearchBarNodeTheme(theme: presentationInterfaceState.theme, hasBackground: false, hasSeparator: false), strings: presentationInterfaceState.strings) + self.searchBar.updateThemeAndStrings(theme: SearchBarNodeTheme(theme: presentationInterfaceState.theme, hasBackground: false, hasSeparator: false), presentationTheme: presentationInterfaceState.theme, strings: presentationInterfaceState.strings) switch search.domain { case .everything, .tag: diff --git a/submodules/TelegramUI/Sources/ChatTitleAccessoryPanelNode.swift b/submodules/TelegramUI/Sources/ChatTitleAccessoryPanelNode.swift index 8fd917a6..95c36d69 100644 --- a/submodules/TelegramUI/Sources/ChatTitleAccessoryPanelNode.swift +++ b/submodules/TelegramUI/Sources/ChatTitleAccessoryPanelNode.swift @@ -1,16 +1,4 @@ -import Foundation -import UIKit -import Display -import AsyncDisplayKit -import ChatPresentationInterfaceState -import AccountContext +import class LegacyChatHeaderPanelComponent.LegacyChatTitleAccessoryPanelNode -class ChatTitleAccessoryPanelNode: ASDisplayNode { - typealias LayoutResult = ChatControllerCustomNavigationPanelNode.LayoutResult - - var interfaceInteraction: ChatPanelInterfaceInteraction? - - func updateLayout(width: CGFloat, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition, interfaceState: ChatPresentationInterfaceState) -> LayoutResult { - preconditionFailure() - } +class ChatTitleAccessoryPanelNode: LegacyChatTitleAccessoryPanelNode { } diff --git a/third-party/dav1d/BUILD b/third-party/dav1d/BUILD index ba022d04..05947ebf 100644 --- a/third-party/dav1d/BUILD +++ b/third-party/dav1d/BUILD @@ -49,6 +49,8 @@ genrule( BUILD_ARCH="arm64" elif [ "$(TARGET_CPU)" == "ios_sim_arm64" ]; then BUILD_ARCH="sim_arm64" + elif [ "$(TARGET_CPU)" == "ios_x86_64" ]; then + BUILD_ARCH="sim_x86_64" else echo "Unsupported architecture $(TARGET_CPU)" fi @@ -119,4 +121,3 @@ objc_library( "//visibility:public", ], ) - diff --git a/third-party/dav1d/build-dav1d-bazel.sh b/third-party/dav1d/build-dav1d-bazel.sh index 6df4bd50..b54a38ea 100644 --- a/third-party/dav1d/build-dav1d-bazel.sh +++ b/third-party/dav1d/build-dav1d-bazel.sh @@ -18,6 +18,13 @@ elif [ "$ARCH" = "sim_arm64" ]; then custom_xcode_path="$(xcode-select -p)/" sed -i '' "s|/Applications/Xcode.app/Contents/Developer/|$custom_xcode_path|g" "$TARGET_CROSSFILE" CROSSFILE="../package/crossfiles/arm64-iPhoneSimulator-custom.meson" +elif [ "$ARCH" = "sim_x86_64" ]; then + TARGET_CROSSFILE="$BUILD_DIR/dav1d/package/crossfiles/x86_64-iPhoneSimulator-custom.meson" + cp "$BUILD_DIR/dav1d/package/crossfiles/x86_64-iPhoneSimulator.meson" "$TARGET_CROSSFILE" + custom_xcode_path="$(xcode-select -p)/" + sed -i '' "s|/Applications/Xcode.app/Contents/Developer/|$custom_xcode_path|g" "$TARGET_CROSSFILE" + CROSSFILE="../package/crossfiles/x86_64-iPhoneSimulator-custom.meson" + MESON_OPTIONS="$MESON_OPTIONS -Denable_asm=false" else echo "Unsupported architecture $ARCH" exit 1 @@ -33,4 +40,3 @@ ninja popd popd - diff --git a/third-party/mozjpeg/build-mozjpeg-bazel.sh b/third-party/mozjpeg/build-mozjpeg-bazel.sh index c115e26c..b4e5148c 100755 --- a/third-party/mozjpeg/build-mozjpeg-bazel.sh +++ b/third-party/mozjpeg/build-mozjpeg-bazel.sh @@ -37,6 +37,22 @@ elif [ "$ARCH" = "sim_arm64" ]; then echo "set(CMAKE_SYSTEM_PROCESSOR aarch64)" >> toolchain.cmake echo "set(CMAKE_C_COMPILER $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang)" >> toolchain.cmake + cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} -DPNG_SUPPORTED=FALSE -DENABLE_SHARED=FALSE -DWITH_JPEG8=1 -DBUILD=10000 -DCMAKE_POLICY_VERSION_MINIMUM=3.5 ../mozjpeg + make +elif [ "$ARCH" = "x86_64" ]; then + IOS_PLATFORMDIR="$(xcode-select -p)/Platforms/iPhoneSimulator.platform" + IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneSimulator*.sdk) + export CFLAGS="-Wall -arch x86_64 --target=x86_64-apple-ios13.0-simulator -miphonesimulator-version-min=13.0 -funwind-tables" + + cd "$BUILD_DIR" + mkdir build + cd build + + touch toolchain.cmake + echo "set(CMAKE_SYSTEM_NAME Darwin)" >> toolchain.cmake + echo "set(CMAKE_SYSTEM_PROCESSOR x86_64)" >> toolchain.cmake + echo "set(CMAKE_C_COMPILER $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang)" >> toolchain.cmake + cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} -DPNG_SUPPORTED=FALSE -DENABLE_SHARED=FALSE -DWITH_JPEG8=1 -DBUILD=10000 -DCMAKE_POLICY_VERSION_MINIMUM=3.5 ../mozjpeg make else diff --git a/third-party/td/BUILD b/third-party/td/BUILD index 365f56ee..82204ac8 100644 --- a/third-party/td/BUILD +++ b/third-party/td/BUILD @@ -38,8 +38,15 @@ genrule( BUILD_ARCH="arm64" elif [ "$(TARGET_CPU)" == "ios_sim_arm64" ]; then BUILD_ARCH="sim_arm64" + elif [ "$(TARGET_CPU)" == "ios_x86_64" ]; then + BUILD_ARCH="sim_x86_64" + elif [ "$(TARGET_CPU)" == "darwin_arm64" ]; then + BUILD_ARCH="sim_arm64" + elif [ "$(TARGET_CPU)" == "darwin_x86_64" ]; then + BUILD_ARCH="sim_x86_64" else - echo "Unsupported architecture $(TARGET_CPU)" + echo "Unsupported architecture $(TARGET_CPU)" >&2 + exit 1 fi BUILD_DIR="$(RULEDIR)/build_$${BUILD_ARCH}" diff --git a/third-party/td/build-td-bazel.sh b/third-party/td/build-td-bazel.sh index a977bbb1..9d910cb4 100755 --- a/third-party/td/build-td-bazel.sh +++ b/third-party/td/build-td-bazel.sh @@ -17,36 +17,91 @@ options="$options -DOPENSSL_INCLUDE_DIR=${OPENSSL_DIR}/src/include" options="$options -DCMAKE_BUILD_TYPE=Release" options="$options -DIOS_DEPLOYMENT_TARGET=13.0" +# Bazel genrule runs with PATH=/bin:/usr/bin, so resolve CPU count without +# relying on /usr/sbin being in PATH. +if [ -n "${TD_BUILD_JOBS:-}" ]; then + BUILD_JOBS="$TD_BUILD_JOBS" +elif [ -x /usr/sbin/sysctl ]; then + BUILD_JOBS="$(/usr/sbin/sysctl -n hw.ncpu)" +elif command -v getconf >/dev/null 2>&1; then + BUILD_JOBS="$(getconf _NPROCESSORS_ONLN 2>/dev/null || true)" +fi +case "$BUILD_JOBS" in + ''|*[!0-9]*) + BUILD_JOBS=8 + ;; +esac +if [ "$BUILD_JOBS" -lt 1 ]; then + BUILD_JOBS=1 +fi + +MAX_BUILD_JOBS="${TD_MAX_BUILD_JOBS:-8}" +case "$MAX_BUILD_JOBS" in + ''|*[!0-9]*) + MAX_BUILD_JOBS=8 + ;; +esac +if [ "$MAX_BUILD_JOBS" -lt 1 ]; then + MAX_BUILD_JOBS=8 +fi +if [ "$BUILD_JOBS" -gt "$MAX_BUILD_JOBS" ]; then + BUILD_JOBS="$MAX_BUILD_JOBS" +fi +if [ -z "$BUILD_JOBS" ]; then + BUILD_JOBS=8 +fi + cd "$BUILD_DIR" # Generate source files mkdir native-build cd native-build cmake -DTD_GENERATE_SOURCE_FILES=ON ../td -cmake --build . -- -j$(sysctl -n hw.ncpu) +cmake --build . -- -j"$BUILD_JOBS" cd .. if [ "$ARCH" = "arm64" ]; then IOS_PLATFORMDIR="$(xcode-select -p)/Platforms/iPhoneOS.platform" IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk) - export CFLAGS="-arch arm64 --target=arm64-apple-ios13.0 -miphoneos-version-min=13.0" + cmake_arch="arm64" + clang_target="arm64-apple-ios13.0" + minimum_target_flag="-miphoneos-version-min=13.0" + cmake_processor="aarch64" elif [ "$ARCH" = "sim_arm64" ]; then IOS_PLATFORMDIR="$(xcode-select -p)/Platforms/iPhoneSimulator.platform" IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneSimulator*.sdk) - export CFLAGS="-arch arm64 --target=arm64-apple-ios13.0-simulator -miphonesimulator-version-min=13.0" + cmake_arch="arm64" + clang_target="arm64-apple-ios13.0-simulator" + minimum_target_flag="-miphonesimulator-version-min=13.0" + cmake_processor="aarch64" +elif [ "$ARCH" = "sim_x86_64" ]; then + IOS_PLATFORMDIR="$(xcode-select -p)/Platforms/iPhoneSimulator.platform" + IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneSimulator*.sdk) + cmake_arch="x86_64" + clang_target="x86_64-apple-ios13.0-simulator" + minimum_target_flag="-miphonesimulator-version-min=13.0" + cmake_processor="x86_64" else echo "Unsupported architecture $ARCH" exit 1 fi +export CFLAGS="-arch ${cmake_arch} --target=${clang_target} ${minimum_target_flag}" +export CXXFLAGS="$CFLAGS" +export LDFLAGS="$CFLAGS" + # Common build steps mkdir build cd build touch toolchain.cmake echo "set(CMAKE_SYSTEM_NAME Darwin)" >> toolchain.cmake -echo "set(CMAKE_SYSTEM_PROCESSOR aarch64)" >> toolchain.cmake +echo "set(CMAKE_SYSTEM_PROCESSOR ${cmake_processor})" >> toolchain.cmake +echo "set(CMAKE_OSX_ARCHITECTURES ${cmake_arch})" >> toolchain.cmake echo "set(CMAKE_C_COMPILER $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang)" >> toolchain.cmake +echo "set(CMAKE_CXX_COMPILER $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++)" >> toolchain.cmake +echo "set(CMAKE_C_COMPILER_TARGET ${clang_target})" >> toolchain.cmake +echo "set(CMAKE_CXX_COMPILER_TARGET ${clang_target})" >> toolchain.cmake cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} ../td $options -make tde2e -j$(sysctl -n hw.ncpu) +make tde2e -j"$BUILD_JOBS"